79 lines
2.5 KiB
C++
79 lines
2.5 KiB
C++
#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<NMEA0183DataToN2KFunctions, tNMEA0183Msg> 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);
|
|
|
|
}
|