Skip to content

Commit

Permalink
AP_AIS: fix multi part message decoding
Browse files Browse the repository at this point in the history
  • Loading branch information
IamPete1 committed Jan 30, 2025
1 parent d529601 commit d728830
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions libraries/AP_AIS/AP_AIS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,21 +145,25 @@ void AP_AIS::update()
} else if (_incoming.num == _incoming.total) {
// last part of a multi part message
uint8_t index = 0;
uint8_t msg_parts[_incoming.num - 1];

// We have the last part, need to find preceding fragments
const uint8_t parts = _incoming.num - 1;

uint8_t msg_parts[parts];
for (uint8_t i = 0; i < AIVDM_BUFFER_SIZE; i++) {
// look for the rest of the message from the start of the buffer
// we assume the message has be received in the correct order
if (_AIVDM_buffer[i].num == (index + 1) && _AIVDM_buffer[i].total == _incoming.total && _AIVDM_buffer[i].ID == _incoming.ID) {
msg_parts[index] = i;
index++;
if (index >= _incoming.num) {
if (index >= parts) {
break;
}
}
}

// did we find the right number?
if (_incoming.num != index) {
if (parts != index) {
// could not find all of the message, save messages
#if HAL_LOGGING_ENABLED
if (log_unsupported) {
Expand Down

0 comments on commit d728830

Please sign in to comment.