From 4d871bc121bfe4fc7dfcaeee13778c8b0bafa97f Mon Sep 17 00:00:00 2001
From: wellenvogel <andreas@wellenvogel.de>
Date: Sat, 20 Nov 2021 22:32:25 +0100
Subject: [PATCH] better logging

---
 lib/nmea2kto0183/N2kDataToNMEA0183.cpp |  2 +-
 lib/xdrmappings/GwXDRMappings.cpp      | 19 ++++++++++++-------
 lib/xdrmappings/GwXDRMappings.h        |  2 +-
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp
index 627a4a1..c911dd8 100644
--- a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp
+++ b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp
@@ -86,7 +86,7 @@ private:
             mapping.type->xdrtype.c_str(),
             value,
             mapping.type->xdrunit.c_str(),
-            name);
+            name.c_str());
         buffer[39]=0;    
         return String(buffer);
     }
diff --git a/lib/xdrmappings/GwXDRMappings.cpp b/lib/xdrmappings/GwXDRMappings.cpp
index 8607792..b7f88e7 100644
--- a/lib/xdrmappings/GwXDRMappings.cpp
+++ b/lib/xdrmappings/GwXDRMappings.cpp
@@ -288,7 +288,7 @@ void GwXDRMappings::begin()
  * select the best matching mapping
  * depending on the instance id
  */
-GwXDRFoundMapping GwXDRMappings::selectMapping(GwXDRMapping::MappingList *list,int instance,unsigned long key){
+GwXDRFoundMapping GwXDRMappings::selectMapping(GwXDRMapping::MappingList *list,int instance,const char * key){
     GwXDRMapping *candidate=NULL;
     for (auto mit=list->begin();mit != list->end();mit++){
         GwXDRMappingDef *def=(*mit)->definition;
@@ -296,14 +296,15 @@ GwXDRFoundMapping GwXDRMappings::selectMapping(GwXDRMapping::MappingList *list,i
         //otherwise we prefer a matching instance before we use auto/ignore
         if (instance < 0){
             if (def->instanceMode != GwXDRMappingDef::IS_IGNORE) continue;
-            LOG_DEBUG(GwLog::DEBUG,"found mapping %s",def->toString().c_str());
+            LOG_DEBUG(GwLog::DEBUG,"selected mapping %s for %s",def->toString().c_str(),key);
             return GwXDRFoundMapping(*mit);
         }
         else{
             switch(def->instanceMode){
                 case GwXDRMappingDef::IS_SINGLE:
                     if (def->instanceId == instance){
-                        LOG_DEBUG(GwLog::DEBUG,"found mapping %s",def->toString().c_str());
+                        LOG_DEBUG(GwLog::DEBUG,"selected mapping %s for %s, i=%d",
+                            def->toString().c_str(),key,instance);
                         return GwXDRFoundMapping(*mit,instance); 
                     }
                 case GwXDRMappingDef::IS_AUTO:
@@ -319,10 +320,11 @@ GwXDRFoundMapping GwXDRMappings::selectMapping(GwXDRMapping::MappingList *list,i
         }
     }
     if (candidate != NULL){
-        LOG_DEBUG(GwLog::DEBUG,"found mapping %s",candidate->definition->toString().c_str());
+        LOG_DEBUG(GwLog::DEBUG,"selected mapping %s for %s, i=%d",
+            candidate->definition->toString().c_str(),key,instance);
         return GwXDRFoundMapping(candidate,instance);
     }
-    LOG_DEBUG(GwLog::DEBUG,"no instance mapping found for key=%lu, i=%d",key,instance);
+    LOG_DEBUG(GwLog::DEBUG,"no instance mapping found for key=%s, i=%d",key,instance);
     return GwXDRFoundMapping();
 }
 GwXDRFoundMapping GwXDRMappings::getMapping(String xName,String xType,String xUnit){
@@ -341,7 +343,7 @@ GwXDRFoundMapping GwXDRMappings::getMapping(String xName,String xType,String xUn
         LOG_DEBUG(GwLog::DEBUG,"find n183mapping for %s,i=%d - nothing found",n183Key.c_str(),instance);
         return GwXDRFoundMapping();
     }
-    return selectMapping(&(it->second),instance);
+    return selectMapping(&(it->second),instance,n183Key.c_str());
 }
 GwXDRFoundMapping GwXDRMappings::getMapping(GwXDRCategory category,int selector,int field,int instance){
     unsigned long n2kKey=GwXDRMappingDef::n2kKey(category,selector,field);
@@ -352,7 +354,10 @@ GwXDRFoundMapping GwXDRMappings::getMapping(GwXDRCategory category,int selector,
         addUnknown(category,selector,field,instance);    
         return GwXDRFoundMapping();
     }
-    GwXDRFoundMapping rt=selectMapping(&(it->second),instance);
+    char kbuf[20];
+    snprintf(kbuf,19,"%lu",n2kKey);
+    kbuf[19]=0;
+    GwXDRFoundMapping rt=selectMapping(&(it->second),instance,kbuf);
     if (rt.empty){
         addUnknown(category,selector,field,instance);    
     }
diff --git a/lib/xdrmappings/GwXDRMappings.h b/lib/xdrmappings/GwXDRMappings.h
index cf66b10..66328c0 100644
--- a/lib/xdrmappings/GwXDRMappings.h
+++ b/lib/xdrmappings/GwXDRMappings.h
@@ -166,7 +166,7 @@ class GwXDRMappings{
      GwXDRMapping::N138Map n183Map;
      GwXDRMapping::N2KMap n2kMap;
      std::vector<unsigned long> unknown;
-     GwXDRFoundMapping selectMapping(GwXDRMapping::MappingList *list,int instance);
+     GwXDRFoundMapping selectMapping(GwXDRMapping::MappingList *list,int instance,const char * key);
      bool addUnknown(GwXDRCategory category,int selector,int field=0,int instance=-1);
     public:
         GwXDRMappings(GwLog *logger,GwConfigHandler *config);