#include "NMEA0183DataToN2K.h" #include "NMEA0183Messages.h" #include "ConverterList.h" NMEA0183DataToN2K::NMEA0183DataToN2K(GwLog *logger, GwBoatData *boatData,N2kSender callback) { this->sender = callback; this->logger = logger; this->boatData=boatData; LOG_DEBUG(GwLog::LOG,"NMEA0183DataToN2K created %p",this); } bool NMEA0183DataToN2K::parseAndSend(const char *buffer, int sourceId) { LOG_DEBUG(GwLog::DEBUG,"NMEA0183DataToN2K[%d] parsing %s",sourceId,buffer) return false; } class NMEA0183DataToN2KFunctions : public NMEA0183DataToN2K { private: double dummy = 0; ConverterList converters; void createBoatData() { } void convertRMB(const tNMEA0183Msg &msg) { LOG_DEBUG(GwLog::DEBUG + 1, "convert RMB"); } //shortcut for lambda converters #define CVL [](const tNMEA0183Msg &msg, NMEA0183DataToN2KFunctions *p) -> void void registerConverters() { converters.registerConverter(129283UL, String(F("RMB")), &NMEA0183DataToN2KFunctions::convertRMB); converters.registerConverter( 123UL, String(F("RMC")), CVL { p->dummy++; p->logger->logDebug(GwLog::DEBUG, "RMC converter"); }); } public: virtual bool parseAndSend(const char *buffer, int sourceId) { LOG_DEBUG(GwLog::DEBUG + 1, "NMEA0183DataToN2K[%d] parsing %s", sourceId, buffer) tNMEA0183Msg msg; if (!msg.SetMessage(buffer)) { LOG_DEBUG(GwLog::DEBUG, "NMEA0183DataToN2K[%d] invalid message %s", sourceId, buffer) return false; } String code = msg.MessageCode(); bool rt = converters.handleMessage(code, msg, this); if (!rt) { LOG_DEBUG(GwLog::DEBUG, "NMEA0183DataToN2K[%d] no handler for %s", sourceId, buffer); } return rt; } virtual unsigned long *handledPgns() { return converters.handledPgns(); } NMEA0183DataToN2KFunctions(GwLog *logger, GwBoatData *boatData, N2kSender callback) : NMEA0183DataToN2K(logger, boatData, callback) { createBoatData(); registerConverters(); LOG_DEBUG(GwLog::LOG, "NMEA0183DataToN2KFunctions: registered %d converters", converters.numConverters()); } }; NMEA0183DataToN2K* NMEA0183DataToN2K::create(GwLog *logger,GwBoatData *boatData,N2kSender callback){ return new NMEA0183DataToN2KFunctions(logger, boatData,callback); }