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()
{ {
bool updated = false; 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 { do {
num_injections++;
updated = _orb_inject_data_sub.updated(); updated = _orb_inject_data_sub.updated();
if (updated) { if (updated) {
@ -431,7 +439,7 @@ void GPS::handleInjectDataTopic()
++_last_rate_rtcm_injection_count; ++_last_rate_rtcm_injection_count;
} }
} while (updated); } while (updated && num_injections < max_num_injections);
} }
bool GPS::injectData(uint8_t *data, size_t len) bool GPS::injectData(uint8_t *data, size_t len)

Loading…
Cancel
Save