sensors: lost signal detection rewritten to be more clear

This commit is contained in:
Anton Babushkin
2014-04-07 14:32:37 +04:00
parent 9a579fa870
commit eb5cd54023
+17 -8
View File
@@ -1307,17 +1307,26 @@ Sensors::rc_poll()
orb_copy(ORB_ID(input_rc), _rc_sub, &rc_input); orb_copy(ORB_ID(input_rc), _rc_sub, &rc_input);
/* detect RC signal loss */ /* detect RC signal loss */
bool signal_lost = true; bool signal_lost;
/* check flags and require at least four channels to consider the signal valid */ /* check flags and require at least four channels to consider the signal valid */
if (!(rc_input.rc_lost || rc_input.rc_failsafe || rc_input.channel_count < 4)) { if (rc_input.rc_lost || rc_input.rc_failsafe || rc_input.channel_count < 4) {
/* signal looks good, but check for throttle failsafe */ /* signal is lost or no enough channels */
signal_lost = true;
} else {
/* signal looks good */
signal_lost = false;
/* check throttle failsafe */
int8_t thr_ch = _rc.function[THROTTLE]; int8_t thr_ch = _rc.function[THROTTLE];
if (_parameters.rc_fs_thr == 0 || thr_ch < 0 || if (_parameters.rc_fs_thr > 0 && thr_ch >= 0) {
!((_parameters.rc_fs_thr < _parameters.min[thr_ch] && rc_input.values[thr_ch] < _parameters.rc_fs_thr) || /* throttle failsafe configured */
(_parameters.rc_fs_thr > _parameters.max[thr_ch] && rc_input.values[thr_ch] > _parameters.rc_fs_thr))) { if ((_parameters.rc_fs_thr < _parameters.min[thr_ch] && rc_input.values[thr_ch] < _parameters.rc_fs_thr) ||
/* valid signal, throttle failsafe not configured or not triggered */ (_parameters.rc_fs_thr > _parameters.max[thr_ch] && rc_input.values[thr_ch] > _parameters.rc_fs_thr)) {
signal_lost = false; /* throttle failsafe triggered, signal is lost by receiver */
signal_lost = true;
}
} }
} }