omit #nnn on instance mode single, prepare listing unmapped

This commit is contained in:
wellenvogel 2021-11-21 22:34:05 +01:00
parent 03740a9034
commit 1d24fd3732
3 changed files with 35 additions and 9 deletions

View File

@ -72,13 +72,7 @@ private:
String buildXdrEntry(GwXDRFoundMapping &mapping,double value){
char buffer[40];
String name=mapping.definition->xdrName;
if (mapping.definition->instanceMode == GwXDRMappingDef::IS_AUTO ||
mapping.definition->instanceMode == GwXDRMappingDef::IS_SINGLE
){
name+="#";
name+=String(mapping.instanceId);
}
String name=mapping.getTransducerName();
if (mapping.type->tonmea){
value=(* (mapping.type->tonmea))(value);
}

View File

@ -1,5 +1,6 @@
#include "GwXDRMappings.h"
#include "N2kMessages.h"
double PtoBar(double v)
{
if (N2kIsNA(v))
@ -189,6 +190,16 @@ GwXDRMappingDef *GwXDRMappingDef::fromString(String s)
}
return rt;
}
String GwXDRMappingDef::getTransducerName(int instance)
{
String name = xdrName;
if (instanceMode == GwXDRMappingDef::IS_AUTO)
{
name += "#";
name += String(instance);
}
return name;
}
GwXDRMappings::GwXDRMappings(GwLog *logger, GwConfigHandler *config)
{
@ -373,6 +384,20 @@ bool GwXDRMappings::addUnknown(GwXDRCategory category,int selector,int field,int
uk=(uk<<7) + (field & 0x7f);
if (instance < 0 || instance > 255) instance=256; //unknown
uk=(uk << 9) + (instance & 0x1ff);
unknown.push_back(uk);
unknown.insert(uk);
return true;
}
char * GwXDRMappings::getUnMapped(){
const int ESIZE=13;
int sz=(unknown.size()+1)*ESIZE;
char *rt=new char[sz];
*rt=0;
char *ptr=rt;
for (auto it=unknown.begin();it!=unknown.end();it++){
snprintf(ptr,ESIZE-1,"%lu,",*it);
*(ptr+ESIZE-1)=0;
while (*ptr != 0) ptr++;
}
return rt;
}

View File

@ -5,6 +5,7 @@
#include <WString.h>
#include <vector>
#include <map>
#include <unordered_set>
//enum must match the defines in xdrconfig.json
typedef enum {
XDRTEMP=0,
@ -124,6 +125,7 @@ class GwXDRMappingDef{
rt += xdrUnit;
return rt;
}
String getTransducerName(int instance);
private:
static bool handleToken(String tok,int index,GwXDRMappingDef *def);
};
@ -157,6 +159,9 @@ class GwXDRFoundMapping{
empty=false;
}
GwXDRFoundMapping(){}
String getTransducerName(){
return definition->getTransducerName(instanceId);
}
};
class GwXDRMappings{
@ -165,7 +170,7 @@ class GwXDRMappings{
GwConfigHandler *config;
GwXDRMapping::N138Map n183Map;
GwXDRMapping::N2KMap n2kMap;
std::vector<unsigned long> unknown;
std::unordered_set<unsigned long> unknown;
GwXDRFoundMapping selectMapping(GwXDRMapping::MappingList *list,int instance,const char * key);
bool addUnknown(GwXDRCategory category,int selector,int field=0,int instance=-1);
public:
@ -175,6 +180,8 @@ class GwXDRMappings{
//the returned mapping will exactly contain one mapping def
GwXDRFoundMapping getMapping(String xName,String xType,String xUnit);
GwXDRFoundMapping getMapping(GwXDRCategory category,int selector,int field=0,int instance=-1);
//returns a newly created buffer - user must destroy!
char * getUnMapped();
};