diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2015-01-19 14:07:18 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2015-01-21 08:58:47 +0100 |
commit | a9c8f2331b6cca3ca59debe82df82ace502170d8 (patch) | |
tree | c3dd8154c8b9ca1c2dcc1128db45c68032ba437b /src/modules/px4iofirmware | |
parent | 859b34531473c9c78a4fee04de3cbdd147381913 (diff) | |
download | px4-firmware-a9c8f2331b6cca3ca59debe82df82ace502170d8.tar.gz px4-firmware-a9c8f2331b6cca3ca59debe82df82ace502170d8.tar.bz2 px4-firmware-a9c8f2331b6cca3ca59debe82df82ace502170d8.zip |
IO firmware: Make error checking more obvious
Diffstat (limited to 'src/modules/px4iofirmware')
-rw-r--r-- | src/modules/px4iofirmware/controls.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/modules/px4iofirmware/controls.c b/src/modules/px4iofirmware/controls.c index 58c9429b6..d20f776d6 100644 --- a/src/modules/px4iofirmware/controls.c +++ b/src/modules/px4iofirmware/controls.c @@ -454,6 +454,10 @@ ppm_input(uint16_t *values, uint16_t *num_values, uint16_t *frame_len) { bool result = false; + if (!(num_values) || !(values) || !(frame_len)) { + return result; + } + /* avoid racing with PPM updates */ irqstate_t state = irqsave(); @@ -468,7 +472,7 @@ ppm_input(uint16_t *values, uint16_t *num_values, uint16_t *frame_len) if (*num_values > PX4IO_RC_INPUT_CHANNELS) *num_values = PX4IO_RC_INPUT_CHANNELS; - for (unsigned i = 0; i < *num_values; i++) { + for (unsigned i = 0; ((i < *num_values) && (i < PPM_MAX_CHANNELS)); i++) { values[i] = ppm_buffer[i]; } @@ -476,8 +480,7 @@ ppm_input(uint16_t *values, uint16_t *num_values, uint16_t *frame_len) ppm_last_valid_decode = 0; /* store PPM frame length */ - if (num_values) - *frame_len = ppm_frame_length; + *frame_len = ppm_frame_length; /* good if we got any channels */ result = (*num_values > 0); |