ParseN2kPGN129038 missing tN2kAISTransceiverInformation
lsoltero opened this issue · 1 comments
lsoltero commented
ParseN2kPGN129038 is missing tN2kAISTransceiverInformation transceiver parameter. This is required to determine if the AIS broadcast on the N2k Network is originating from Own.
@@ -3314,13 +3459,15 @@ inline void SetN2kAISClassAPosition(tN2kMsg &N2kMsg, uint8_t MessageID, tN2kAISR
* \param Heading heading
* \param ROT Rate of turn
* \param NavStatus Navigational status, see \ref tN2kAISNavStatus
+ * \param AISTransceiverInformation AIS transeiver info, see \ref tN2kAISTransceiverInformation
*
* \return true Parsing of PGN Message successful
* \return false Parsing of PGN Message aborted
*
*/
bool ParseN2kPGN129038(const tN2kMsg &N2kMsg, uint8_t &MessageID, tN2kAISRepeat &Repeat, uint32_t &UserID, double &Latitude, double &Longitude,
- bool &Accuracy, bool &RAIM, uint8_t &Seconds, double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus &NavStatus);
+ bool &Accuracy, bool &RAIM, uint8_t &Seconds, double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus &NavStatus,
+ tN2kAISTransceiverInformation &AISTransceiverInformation);
/************************************************************************//**
* \brief Parsing the content of a "AIS position reports for Class A"
@@ -3331,8 +3478,9 @@ bool ParseN2kPGN129038(const tN2kMsg &N2kMsg, uint8_t &MessageID, tN2kAISRepeat
* of the source code. See parameter details on \ref ParseN2kPGN129038
*/
inline bool ParseN2kAISClassAPosition(const tN2kMsg &N2kMsg, uint8_t &MessageID, tN2kAISRepeat &Repeat, uint32_t &UserID, double &Latitude, double &Longitude,
- bool &Accuracy, bool &RAIM, uint8_t &Seconds, double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus & NavStatus) {
- return ParseN2kPGN129038(N2kMsg, MessageID, Repeat, UserID, Latitude, Longitude, Accuracy, RAIM, Seconds, COG, SOG, Heading, ROT, NavStatus);
+ bool &Accuracy, bool &RAIM, uint8_t &Seconds, double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus & NavStatus,
+ tN2kAISTransceiverInformation &AISTransceiverInformation) {
+ return ParseN2kPGN129038(N2kMsg, MessageID, Repeat, UserID, Latitude, Longitude, Accuracy, RAIM, Seconds, COG, SOG, Heading, ROT, NavStatus, AISTransceiverInformation);
}
/************************************************************************//**
@@ -1352,7 +1427,7 @@ void SetN2kPGN129038(tN2kMsg &N2kMsg, uint8_t MessageID, tN2kAISRepeat Repeat, u
bool ParseN2kPGN129038(const tN2kMsg &N2kMsg, uint8_t &MessageID, tN2kAISRepeat &Repeat, uint32_t &UserID,
double &Latitude, double &Longitude, bool &Accuracy, bool &RAIM, uint8_t &Seconds,
- double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus &NavStatus)
+ double &COG, double &SOG, double &Heading, double &ROT, tN2kAISNavStatus &NavStatus, tN2kAISTransceiverInformation &AISTransceiverInformation)
{
if (N2kMsg.PGN!=129038L) return false;
@@ -1369,6 +1444,7 @@ bool ParseN2kPGN129038(const tN2kMsg &N2kMsg, uint8_t &MessageID, tN2kAISRepeat
vb=N2kMsg.GetByte(Index); // Communication State (19 bits)
vb=N2kMsg.GetByte(Index);
vb=N2kMsg.GetByte(Index); // AIS transceiver information (5 bits)
+ AISTransceiverInformation = (tN2kAISTransceiverInformation) ((vb>>3) & 0x1f);
Heading=N2kMsg.Get2ByteUDouble(1e-04, Index);
ROT=N2kMsg.Get2ByteDouble(3.125E-05, Index); // 1e-3/32.0
vb=N2kMsg.GetByte(Index); NavStatus=(tN2kAISNavStatus)(vb & 0x0f);
lsoltero commented
actually.. we also need the sequence ID so that static Data in 129794 can be bound to the PGN.
and this also goes for 129809 and 129810