From e1e2998a9a24d8a8745e19d6c5a8f62bc1294f0c Mon Sep 17 00:00:00 2001 From: andreas Date: Wed, 10 Nov 2021 18:25:08 +0100 Subject: [PATCH] convert VHW,VTG --- lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 39 ++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index d96c65b..84d5221 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -520,6 +520,37 @@ private: } } + void convertVHW(const SNMEA0183Msg &msg){ + double TrueHeading=NMEA0183DoubleNA; + double MagneticHeading=NMEA0183DoubleNA; + double STW=NMEA0183DoubleNA; + if (! NMEA0183ParseVHW_nc(msg,TrueHeading,MagneticHeading,STW)){ + logger->logDebug(GwLog::DEBUG, "failed to parse VHW %s", msg.line); + return; + } + if (! updateDouble(boatData->STW,STW,msg.sourceId)) return; + if (! updateDouble(boatData->Heading,TrueHeading,msg.sourceId)) return; + if (MagneticHeading == NMEA0183DoubleNA) MagneticHeading=N2kDoubleNA; + tN2kMsg n2kMsg; + SetN2kBoatSpeed(n2kMsg,1,STW); + send(n2kMsg); + + } + void convertVTG(const SNMEA0183Msg &msg){ + double COG=NMEA0183DoubleNA; + double SOG=NMEA0183DoubleNA; + double MCOG=NMEA0183DoubleNA; + if (! NMEA0183ParseVTG_nc(msg,COG,MCOG,SOG)){ + logger->logDebug(GwLog::DEBUG, "failed to parse VTG %s", msg.line); + return; + } + if (! UD(COG)) return; + if (! UD(SOG)) return; + tN2kMsg n2kMsg; + //TODO: maybe use MCOG if no COG? + SetN2kCOGSOGRapid(n2kMsg,1,N2khr_true,COG,SOG); + send(n2kMsg); + } //shortcut for lambda converters #define CVL [](const SNMEA0183Msg &msg, NMEA0183DataToN2KFunctions *p) -> void @@ -562,7 +593,13 @@ private: String(F("DBT")), &NMEA0183DataToN2KFunctions::convertDBT); converters.registerConverter( 127245UL, - String(F("RSA")), &NMEA0183DataToN2KFunctions::convertRSA); + String(F("RSA")), &NMEA0183DataToN2KFunctions::convertRSA); + converters.registerConverter( + 128259UL, + String(F("VHW")), &NMEA0183DataToN2KFunctions::convertVHW); + converters.registerConverter( + 129026UL, + String(F("VTG")), &NMEA0183DataToN2KFunctions::convertVTG); unsigned long *aispgns=new unsigned long[7]{129810UL,129809UL,129040UL,129039UL,129802UL,129794UL,129038UL}; converters.registerConverter(7,&aispgns[0], String(F("AIVDM")),&NMEA0183DataToN2KFunctions::convertAIVDX);