Browse Source

GPS: Prevent injection from choking the driver (#12710)

Sending a continuous stream of injection messages can cause the
GPS driver to get stuck indefinitely in the handling loop.
sbg
alessandro 6 years ago committed by Daniel Agar
parent
commit
2cb26dd5f5
  1. 10
      src/drivers/gps/gps.cpp

10
src/drivers/gps/gps.cpp

@ -416,7 +416,15 @@ void GPS::handleInjectDataTopic() @@ -416,7 +416,15 @@ void GPS::handleInjectDataTopic()
{
bool updated = false;
// Limit maximum number of GPS injections to 6 since usually
// GPS injections should consist of 1-4 packets (GPS, Glonass, Baidu, Galileo).
// Looking at 6 packets thus guarantees, that at least a full injection
// data set is evaluated.
const size_t max_num_injections = 6;
size_t num_injections = 0;
do {
num_injections++;
updated = _orb_inject_data_sub.updated();
if (updated) {
@ -431,7 +439,7 @@ void GPS::handleInjectDataTopic() @@ -431,7 +439,7 @@ void GPS::handleInjectDataTopic()
++_last_rate_rtcm_injection_count;
}
} while (updated);
} while (updated && num_injections < max_num_injections);
}
bool GPS::injectData(uint8_t *data, size_t len)

Loading…
Cancel
Save