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.
This commit is contained in:
alessandro
2019-08-23 19:12:20 -04:00
committed by Daniel Agar
parent 0262a699c1
commit 2cb26dd5f5
+9 -1
View File
@@ -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()
++_last_rate_rtcm_injection_count;
}
} while (updated);
} while (updated && num_injections < max_num_injections);
}
bool GPS::injectData(uint8_t *data, size_t len)