HAL_ChibiOS: use blocking semaphore for new_input()
this prevents a race where we continually fail to get new input
This commit is contained in:
parent
05f095f338
commit
c8395bb2c1
@ -73,13 +73,12 @@ bool RCInput::new_input()
|
|||||||
if (!_init) {
|
if (!_init) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!rcin_mutex.take_nonblocking()) {
|
bool valid;
|
||||||
return false;
|
{
|
||||||
}
|
WITH_SEMAPHORE(rcin_mutex);
|
||||||
bool valid = _rcin_timestamp_last_signal != _last_read;
|
valid = _rcin_timestamp_last_signal != _last_read;
|
||||||
|
|
||||||
_last_read = _rcin_timestamp_last_signal;
|
_last_read = _rcin_timestamp_last_signal;
|
||||||
rcin_mutex.give();
|
}
|
||||||
|
|
||||||
#if HAL_RCINPUT_WITH_AP_RADIO
|
#if HAL_RCINPUT_WITH_AP_RADIO
|
||||||
if (!_radio_init) {
|
if (!_radio_init) {
|
||||||
@ -134,7 +133,7 @@ uint8_t RCInput::read(uint16_t* periods, uint8_t len)
|
|||||||
memcpy(periods, _rc_values, len*sizeof(periods[0]));
|
memcpy(periods, _rc_values, len*sizeof(periods[0]));
|
||||||
}
|
}
|
||||||
#if HAL_RCINPUT_WITH_AP_RADIO
|
#if HAL_RCINPUT_WITH_AP_RADIO
|
||||||
if (radio && channel == 0) {
|
if (radio) {
|
||||||
// hook to allow for update of radio on main thread, for mavlink sends
|
// hook to allow for update of radio on main thread, for mavlink sends
|
||||||
radio->update();
|
radio->update();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user