gps handleInjectDataTopic: repeatedly check for new orb messages

Without that there were still lost messages, now it's all fine (tested
under Linux)
This commit is contained in:
Beat Küng
2016-04-25 09:48:24 +02:00
committed by Lorenz Meier
parent c8f2a7ea02
commit 4cf08ba580
+11 -8
View File
@@ -374,17 +374,20 @@ void GPS::handleInjectDataTopic()
}
bool updated = false;
int orb_inject_data_cur_fd = _orb_inject_data_fd[_orb_inject_data_next];
orb_check(orb_inject_data_cur_fd, &updated);
if (updated) {
struct gps_inject_data_s msg;
orb_copy(ORB_ID(gps_inject_data), orb_inject_data_cur_fd, &msg);
injectData(msg.data, msg.len);
do {
int orb_inject_data_cur_fd = _orb_inject_data_fd[_orb_inject_data_next];
orb_check(orb_inject_data_cur_fd, &updated);
_orb_inject_data_next = (_orb_inject_data_next + 1) % _orb_inject_data_fd.size();
if (updated) {
struct gps_inject_data_s msg;
orb_copy(ORB_ID(gps_inject_data), orb_inject_data_cur_fd, &msg);
injectData(msg.data, msg.len);
}
_orb_inject_data_next = (_orb_inject_data_next + 1) % _orb_inject_data_fd.size();
}
} while (updated);
}
bool GPS::injectData(uint8_t *data, size_t len)