From 32f9badda2c74104378aee5ce57883730d42bc8c Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Thu, 18 Nov 2021 13:36:59 +0100 Subject: [PATCH] convert ROT from/to, add conv doc --- doc/Conversions.odt | Bin 0 -> 19963 bytes lib/boatData/GwBoatData.h | 2 ++ lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 17 ++++++++++++++++- lib/nmea2kto0183/N2kDataToNMEA0183.cpp | 22 ++++++++++++++++++---- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 doc/Conversions.odt diff --git a/doc/Conversions.odt b/doc/Conversions.odt new file mode 100644 index 0000000000000000000000000000000000000000..86e03acdc0ba810a9bd19d0f058b30a2a6bb10fa GIT binary patch literal 19963 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 EfANK%BLDyZ literal 0 HcmV?d00001 diff --git a/lib/boatData/GwBoatData.h b/lib/boatData/GwBoatData.h index 5eabb79..e76bfbe 100644 --- a/lib/boatData/GwBoatData.h +++ b/lib/boatData/GwBoatData.h @@ -21,6 +21,7 @@ class GwBoatItemBase{ GWSC(kelvinToC); GWSC(mtr2nm); GWSC(formatDop); + GWSC(formatRot); typedef std::vector GwBoatItemMap; protected: unsigned long lastSet=0; @@ -224,6 +225,7 @@ class GwBoatData{ GWBOATDATA(double,AWA,4000,formatWind) GWBOATDATA(double,Heading,4000,formatCourse) //true GWBOATDATA(double,MagneticHeading,4000,formatCourse) + GWBOATDATA(double,ROT,4000,formatRot) GWBOATDATA(double,Variation,4000,formatCourse) GWBOATDATA(double,Deviation,4000,formatCourse) GWBOATDATA(double,HDOP,4000,formatDop) diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index bd89c1e..c5e2e58 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -714,6 +714,18 @@ private: send(n2kMsg); } + void convertROT(const SNMEA0183Msg &msg){ + double ROT=NMEA0183DoubleNA; + if (! NMEA0183ParseROT_nc(msg,ROT)){ + LOG_DEBUG(GwLog::DEBUG,"unable to parse ROT %s",msg.line); + return; + } + if (! updateDouble(boatData->ROT,ROT,msg.sourceId)) return; + tN2kMsg n2kMsg; + SetN2kRateOfTurn(n2kMsg,1,ROT); + send(n2kMsg); + } + //shortcut for lambda converters #define CVL [](const SNMEA0183Msg &msg, NMEA0183DataToN2KFunctions *p) -> void void registerConverters() @@ -776,7 +788,10 @@ private: String(F("GSV")), &NMEA0183DataToN2KFunctions::convertGSV); converters.registerConverter( 129025UL, - String(F("GLL")), &NMEA0183DataToN2KFunctions::convertGLL); + String(F("GLL")), &NMEA0183DataToN2KFunctions::convertGLL); + converters.registerConverter( + 127251UL, + String(F("ROT")), &NMEA0183DataToN2KFunctions::convertROT); unsigned long *aispgns=new unsigned long[7]{129810UL,129809UL,129040UL,129039UL,129802UL,129794UL,129038UL}; converters.registerConverter(7,&aispgns[0], String(F("AIVDM")),&NMEA0183DataToN2KFunctions::convertAIVDX); diff --git a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp index af1bad8..94403c7 100644 --- a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp +++ b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp @@ -73,13 +73,13 @@ private: return; maxItem->updateMax(item->getData(),sourceId); } - void updateDouble(GwBoatItem *item, double value) + bool updateDouble(GwBoatItem *item, double value) { if (value == N2kDoubleNA) - return; + return false; if (!item) - return; - item->update(value,sourceId); + return false; + return item->update(value,sourceId); } unsigned long LastPosSend; @@ -1017,6 +1017,19 @@ private: if (DaysSince1970 != N2kUInt16NA) boatData->DaysSince1970->update(DaysSince1970,sourceId); if (LocalOffset != N2kInt16NA) boatData->Timezone->update(LocalOffset,sourceId); } + void HandleROT(const tN2kMsg &msg){ + unsigned char SID=0; + double ROT=N2kDoubleNA; + if (! ParseN2kRateOfTurn(msg,SID,ROT)){ + LOG_DEBUG(GwLog::DEBUG,"unable to parse PGN %d",msg.PGN); + return; + } + if (!updateDouble(boatData->ROT,ROT)) return; + tNMEA0183Msg nmeamsg; + if (NMEA0183SetROT(nmeamsg,ROT,talkerId)){ + SendMessage(nmeamsg); + } + } void registerConverters() @@ -1041,6 +1054,7 @@ private: converters.registerConverter(129033UL, &N2kToNMEA0183Functions::HandleTimeOffset); converters.registerConverter(129539UL, &N2kToNMEA0183Functions::HandleDop); converters.registerConverter(129540UL, &N2kToNMEA0183Functions::HandleSats); + converters.registerConverter(127251UL, &N2kToNMEA0183Functions::HandleROT); #define HANDLE_AIS #ifdef HANDLE_AIS converters.registerConverter(129038UL, &N2kToNMEA0183Functions::HandleAISClassAPosReport); // AIS Class A Position Report, Message Type 1