1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2025-12-13 05:53:06 +01:00

convert xte 2 way

This commit is contained in:
wellenvogel
2021-11-18 17:27:40 +01:00
parent 292fc006ae
commit aa0d22aab3
6 changed files with 95 additions and 20 deletions

View File

@@ -128,6 +128,21 @@ private:
}
#define UD(item) updateDouble(boatData->item, item, msg.sourceId)
#define UI(item) updateUint32(boatData->item, item, msg.sourceId)
tN2kXTEMode xteMode(const char modeChar){
switch(modeChar){
case 'D':
return N2kxtem_Differential;
case 'E':
return N2kxtem_Estimated;
case 'M':
return N2kxtem_Manual;
case 'S':
return N2kxtem_Simulator;
default:
break;
}
return N2kxtem_Autonomous;
}
void convertRMB(const SNMEA0183Msg &msg)
{
LOG_DEBUG(GwLog::DEBUG + 1, "convert RMB");
@@ -141,23 +156,7 @@ private:
tN2kXTEMode mode=N2kxtem_Autonomous;
if (msg.FieldCount() > 13){
const char *modeChar=msg.Field(13);
switch(*modeChar){
case 'D':
mode=N2kxtem_Differential;
break;
case 'E':
mode=N2kxtem_Estimated;
break;
case 'M':
mode=N2kxtem_Manual;
break;
case 'S':
mode=N2kxtem_Simulator;
break;
default:
break;
}
mode=xteMode(*modeChar);
}
SetN2kXTE(n2kMsg,1,mode,false,rmb.xte);
send(n2kMsg);
@@ -725,6 +724,25 @@ private:
SetN2kRateOfTurn(n2kMsg,1,ROT);
send(n2kMsg);
}
void convertXTE(const SNMEA0183Msg &msg){
if (msg.FieldCount() < 6){
LOG_DEBUG(GwLog::DEBUG,"unable to parse XTE %s",msg.line);
return;
}
if (msg.Field(0)[0] != 'A') return;
if (msg.Field(1)[0] != 'A') return;
if (msg.Field(4)[0] != 'N') return; //nm only
if (msg.FieldLen(2) < 1) return;
const char dir=msg.Field(3)[0];
if (dir != 'L' && dir != 'R') return;
double xte=atof(msg.Field(2)) * nmTom;
if (dir == 'R') xte=-xte;
if (! updateDouble(boatData->XTE,xte,msg.sourceId)) return;
tN2kMsg n2kMsg;
tN2kXTEMode mode=xteMode(msg.Field(5)[0]);
SetN2kXTE(n2kMsg,1,mode,false,xte);
send(n2kMsg);
}
//shortcut for lambda converters
#define CVL [](const SNMEA0183Msg &msg, NMEA0183DataToN2KFunctions *p) -> void
@@ -791,7 +809,10 @@ private:
String(F("GLL")), &NMEA0183DataToN2KFunctions::convertGLL);
converters.registerConverter(
127251UL,
String(F("ROT")), &NMEA0183DataToN2KFunctions::convertROT);
String(F("ROT")), &NMEA0183DataToN2KFunctions::convertROT);
converters.registerConverter(
129283UL,
String(F("XTE")), &NMEA0183DataToN2KFunctions::convertXTE);
unsigned long *aispgns=new unsigned long[7]{129810UL,129809UL,129040UL,129039UL,129802UL,129794UL,129038UL};
converters.registerConverter(7,&aispgns[0],
String(F("AIVDM")),&NMEA0183DataToN2KFunctions::convertAIVDX);