fix a crash in ParseN2kGNSS, initialize double values for all n2k to 0183 conversions

This commit is contained in:
andreas 2022-03-09 19:57:21 +01:00
parent 724733c306
commit db7647aa78
1 changed files with 39 additions and 38 deletions

View File

@ -366,16 +366,16 @@ private:
tN2kGNSStype GNSStype; tN2kGNSStype GNSStype;
tN2kGNSSmethod GNSSmethod; tN2kGNSSmethod GNSSmethod;
unsigned char nSatellites; unsigned char nSatellites;
double HDOP; double HDOP=N2kDoubleNA;
double PDOP; double PDOP=N2kDoubleNA;
double GeoidalSeparation; double GeoidalSeparation=N2kDoubleNA;
unsigned char nReferenceStations; unsigned char nReferenceStations;
tN2kGNSStype ReferenceStationType; tN2kGNSStype ReferenceStationType;
uint16_t ReferenceSationID; uint16_t ReferenceSationID;
double AgeOfCorrection; double AgeOfCorrection=N2kDoubleNA;
double Latitude; double Latitude=N2kDoubleNA;
double Longitude; double Longitude=N2kDoubleNA;
double Altitude; double Altitude=N2kDoubleNA;
uint16_t DaysSince1970; uint16_t DaysSince1970;
double GpsTime; double GpsTime;
if (ParseN2kGNSS(N2kMsg, SID, DaysSince1970, GpsTime, Latitude, Longitude, Altitude, GNSStype, GNSSmethod, if (ParseN2kGNSS(N2kMsg, SID, DaysSince1970, GpsTime, Latitude, Longitude, Altitude, GNSStype, GNSSmethod,
@ -403,7 +403,7 @@ private:
void HandleDop(const tN2kMsg &msg){ void HandleDop(const tN2kMsg &msg){
double HDOP=N2kDoubleNA; double HDOP=N2kDoubleNA;
double VDOP=N2kDoubleNA; double VDOP=N2kDoubleNA;
double TDOP; double TDOP=N2kDoubleNA;
tN2kGNSSDOPmode DesiredMode; tN2kGNSSDOPmode DesiredMode;
tN2kGNSSDOPmode ActualMode; tN2kGNSSDOPmode ActualMode;
unsigned char SID; unsigned char SID;
@ -477,7 +477,7 @@ private:
tNMEA0183WindReference NMEA0183Reference = NMEA0183Wind_True; tNMEA0183WindReference NMEA0183Reference = NMEA0183Wind_True;
double x, y; double x, y;
double WindAngle, WindSpeed; double WindAngle=N2kDoubleNA, WindSpeed=N2kDoubleNA;
if (ParseN2kWindSpeed(N2kMsg, SID, WindSpeed, WindAngle, WindReference)) if (ParseN2kWindSpeed(N2kMsg, SID, WindSpeed, WindAngle, WindReference))
{ {
@ -574,7 +574,7 @@ private:
void HandleLog(const tN2kMsg &N2kMsg) void HandleLog(const tN2kMsg &N2kMsg)
{ {
uint16_t DaysSince1970; uint16_t DaysSince1970;
double GpsTime; double GpsTime=N2kDoubleNA;
uint32_t Log, TripLog; uint32_t Log, TripLog;
if (ParseN2kDistanceLog(N2kMsg, DaysSince1970, GpsTime, Log, TripLog)) if (ParseN2kDistanceLog(N2kMsg, DaysSince1970, GpsTime, Log, TripLog))
{ {
@ -607,8 +607,8 @@ private:
unsigned char Instance; unsigned char Instance;
tN2kRudderDirectionOrder RudderDirectionOrder; tN2kRudderDirectionOrder RudderDirectionOrder;
double AngleOrder; double AngleOrder=N2kDoubleNA;
double RudderPosition; double RudderPosition=N2kDoubleNA;
if (ParseN2kRudder(N2kMsg, RudderPosition, Instance, RudderDirectionOrder, AngleOrder)) if (ParseN2kRudder(N2kMsg, RudderPosition, Instance, RudderDirectionOrder, AngleOrder))
{ {
@ -642,15 +642,15 @@ private:
unsigned char SID; unsigned char SID;
tN2kAISRepeat _Repeat; tN2kAISRepeat _Repeat;
uint32_t _UserID; // MMSI uint32_t _UserID; // MMSI
double _Latitude; double _Latitude =N2kDoubleNA;
double _Longitude; double _Longitude=N2kDoubleNA;
bool _Accuracy; bool _Accuracy;
bool _RAIM; bool _RAIM;
uint8_t _Seconds; uint8_t _Seconds;
double _COG; double _COG=N2kDoubleNA;
double _SOG; double _SOG=N2kDoubleNA;
double _Heading; double _Heading=N2kDoubleNA;
double _ROT; double _ROT=N2kDoubleNA;
tN2kAISNavStatus _NavStatus; tN2kAISNavStatus _NavStatus;
uint8_t _MessageType = 1; uint8_t _MessageType = 1;
@ -729,13 +729,13 @@ private:
char _Callsign[8]; char _Callsign[8];
char _Name[21]; char _Name[21];
uint8_t _VesselType; uint8_t _VesselType;
double _Length; double _Length=N2kDoubleNA;
double _Beam; double _Beam=N2kDoubleNA;
double _PosRefStbd; double _PosRefStbd=N2kDoubleNA;
double _PosRefBow; double _PosRefBow=N2kDoubleNA;
uint16_t _ETAdate; uint16_t _ETAdate;
double _ETAtime; double _ETAtime=N2kDoubleNA;
double _Draught; double _Draught=N2kDoubleNA;
char _Destination[21]; char _Destination[21];
tN2kAISVersion _AISversion; tN2kAISVersion _AISversion;
tN2kGNSStype _GNSStype; tN2kGNSStype _GNSStype;
@ -838,14 +838,14 @@ private:
uint8_t _MessageID; uint8_t _MessageID;
tN2kAISRepeat _Repeat; tN2kAISRepeat _Repeat;
uint32_t _UserID; // MMSI uint32_t _UserID; // MMSI
double _Latitude; double _Latitude=N2kDoubleNA;
double _Longitude; double _Longitude=N2kDoubleNA;
bool _Accuracy; bool _Accuracy;
bool _RAIM; bool _RAIM;
uint8_t _Seconds; uint8_t _Seconds;
double _COG; double _COG=N2kDoubleNA;
double _SOG; double _SOG=N2kDoubleNA;
double _Heading; double _Heading=N2kDoubleNA;
tN2kAISUnit _Unit; tN2kAISUnit _Unit;
bool _Display, _DSC, _Band, _Msg22, _State; bool _Display, _DSC, _Band, _Msg22, _State;
tN2kAISMode _Mode; tN2kAISMode _Mode;
@ -913,10 +913,10 @@ private:
char _Callsign[8]; char _Callsign[8];
char _Vendor[4]; char _Vendor[4];
uint8_t _VesselType; uint8_t _VesselType;
double _Length; double _Length=N2kDoubleNA;
double _Beam; double _Beam=N2kDoubleNA;
double _PosRefStbd; double _PosRefStbd=N2kDoubleNA;
double _PosRefBow; double _PosRefBow=N2kDoubleNA;
if (ParseN2kPGN129810(N2kMsg, _MessageID, _Repeat, _UserID, _VesselType, _Vendor, _Callsign, if (ParseN2kPGN129810(N2kMsg, _MessageID, _Repeat, _UserID, _VesselType, _Vendor, _Callsign,
_Length, _Beam, _PosRefStbd, _PosRefBow, _MothershipID)) _Length, _Beam, _PosRefStbd, _PosRefBow, _MothershipID))
@ -1237,9 +1237,9 @@ private:
{ {
unsigned char SID=-1; unsigned char SID=-1;
double OutsideAmbientAirTemperature; double OutsideAmbientAirTemperature=N2kDoubleNA;
double AtmosphericPressure; double AtmosphericPressure=N2kDoubleNA;
double WaterTemperature; double WaterTemperature=N2kDoubleNA;
if (ParseN2kPGN130310(N2kMsg, SID, WaterTemperature, OutsideAmbientAirTemperature, AtmosphericPressure)) if (ParseN2kPGN130310(N2kMsg, SID, WaterTemperature, OutsideAmbientAirTemperature, AtmosphericPressure))
{ {
updateDouble(boatData->WTemp, WaterTemperature); updateDouble(boatData->WTemp, WaterTemperature);
@ -1354,7 +1354,7 @@ private:
unsigned char SID=-1; unsigned char SID=-1;
unsigned char PressureInstance=0; unsigned char PressureInstance=0;
tN2kPressureSource PressureSource; tN2kPressureSource PressureSource;
double ActualPressure; double ActualPressure=N2kDoubleNA;
if (! ParseN2kPGN130314(msg,SID, PressureInstance, if (! ParseN2kPGN130314(msg,SID, PressureInstance,
PressureSource, ActualPressure)){ PressureSource, ActualPressure)){
LOG_DEBUG(GwLog::DEBUG,"unable to parse PGN %d",msg.PGN); LOG_DEBUG(GwLog::DEBUG,"unable to parse PGN %d",msg.PGN);
@ -1369,6 +1369,7 @@ private:
void Handle127489(const tN2kMsg &msg){ void Handle127489(const tN2kMsg &msg){
unsigned char instance=-1; unsigned char instance=-1;
double values[8]; double values[8];
for (int i=0;i<8;i++) values[i]=N2kDoubleNA;
int8_t ivalues[2]; int8_t ivalues[2];
if (! ParseN2kPGN127489(msg,instance, if (! ParseN2kPGN127489(msg,instance,
values[0],values[1],values[2],values[3],values[4],values[5], values[0],values[1],values[2],values[3],values[4],values[5],
@ -1390,7 +1391,7 @@ private:
} }
void Handle127488(const tN2kMsg &msg){ void Handle127488(const tN2kMsg &msg){
unsigned char instance=-1; unsigned char instance=-1;
double speed,pressure; double speed=N2kDoubleNA,pressure=N2kDoubleNA;
int8_t tilt; int8_t tilt;
if (! ParseN2kPGN127488(msg,instance, if (! ParseN2kPGN127488(msg,instance,
speed,pressure,tilt)){ speed,pressure,tilt)){