aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2012-12-01 10:49:52 +0100
committerLorenz Meier <lm@inf.ethz.ch>2012-12-01 10:49:52 +0100
commitde88732e8ecdf1f8451c8c037594f4edb1e2bdc0 (patch)
treeaf6d877598c23ce8f64be56362a8e7964477a9ce /apps
parentea8872f5456dbba566fb4167ec66b4afa183b3e1 (diff)
downloadpx4-firmware-de88732e8ecdf1f8451c8c037594f4edb1e2bdc0.tar.gz
px4-firmware-de88732e8ecdf1f8451c8c037594f4edb1e2bdc0.tar.bz2
px4-firmware-de88732e8ecdf1f8451c8c037594f4edb1e2bdc0.zip
Prevented unhealthy RC input from propagating through the system
Diffstat (limited to 'apps')
-rw-r--r--apps/drivers/px4io/px4io.cpp18
-rw-r--r--apps/px4io/comms.c8
2 files changed, 17 insertions, 9 deletions
diff --git a/apps/drivers/px4io/px4io.cpp b/apps/drivers/px4io/px4io.cpp
index 49ad80943..296c541c9 100644
--- a/apps/drivers/px4io/px4io.cpp
+++ b/apps/drivers/px4io/px4io.cpp
@@ -461,15 +461,17 @@ PX4IO::rx_callback(const uint8_t *buffer, size_t bytes_received)
}
_connected = true;
- /* publish raw rc channel values from IO */
- _input_rc.timestamp = hrt_absolute_time();
- _input_rc.channel_count = rep->channel_count;
- for (int i = 0; i < rep->channel_count; i++)
- {
- _input_rc.values[i] = rep->rc_channel[i];
- }
+ /* publish raw rc channel values from IO if valid channels are present */
+ if (rep->channel_count > 0) {
+ _input_rc.timestamp = hrt_absolute_time();
+ _input_rc.channel_count = rep->channel_count;
+ for (int i = 0; i < rep->channel_count; i++)
+ {
+ _input_rc.values[i] = rep->rc_channel[i];
+ }
- orb_publish(ORB_ID(input_rc), _to_input_rc, &_input_rc);
+ orb_publish(ORB_ID(input_rc), _to_input_rc, &_input_rc);
+ }
/* remember the latched arming switch state */
_switch_armed = rep->armed;
diff --git a/apps/px4io/comms.c b/apps/px4io/comms.c
index 375336730..40ea38cf7 100644
--- a/apps/px4io/comms.c
+++ b/apps/px4io/comms.c
@@ -132,7 +132,13 @@ comms_main(void)
/* populate the report */
for (int i = 0; i < system_state.rc_channels; i++)
report.rc_channel[i] = system_state.rc_channel_data[i];
- report.channel_count = system_state.rc_channels;
+
+ if (system_state.sbus_input_ok || system_state.dsm_input_ok || system_state.ppm_input_ok) {
+ report.channel_count = system_state.rc_channels;
+ } else {
+ report.channel_count = 0;
+ }
+
report.armed = system_state.armed;
/* and send it */