diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2015-02-21 01:17:47 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2015-02-23 19:50:42 +0100 |
commit | 653b3e71be7059707a0963e15dfb12e5403025aa (patch) | |
tree | 1a60f394c954c53cff932412cfb7c44d24f6d144 /src/systemcmds | |
parent | 4938ff4c295dafac5ba1c221c6290e9e37e0442f (diff) | |
download | px4-firmware-653b3e71be7059707a0963e15dfb12e5403025aa.tar.gz px4-firmware-653b3e71be7059707a0963e15dfb12e5403025aa.tar.bz2 px4-firmware-653b3e71be7059707a0963e15dfb12e5403025aa.zip |
PWM command: Do not modify disarmed PWM values
Diffstat (limited to 'src/systemcmds')
-rw-r--r-- | src/systemcmds/pwm/pwm.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/systemcmds/pwm/pwm.c b/src/systemcmds/pwm/pwm.c index 0c984d69f..f8da686cd 100644 --- a/src/systemcmds/pwm/pwm.c +++ b/src/systemcmds/pwm/pwm.c @@ -337,13 +337,19 @@ pwm_main(int argc, char *argv[]) if (pwm_value == 0) warnx("reading disarmed value of zero, disabling disarmed PWM"); - struct pwm_output_values pwm_values = {.values = {0}, .channel_count = 0}; + struct pwm_output_values pwm_values; + /* first get current state before modifying it */ + ret = ioctl(fd, PWM_SERVO_GET_DISARMED_PWM, (long unsigned int)&pwm_values.values); + if (ret != OK) { + errx(ret, "failed get disarmed values"); + } for (unsigned i = 0; i < servo_count; i++) { if (set_mask & 1<<i) { pwm_values.values[i] = pwm_value; - if (print_verbose) - warnx("channel %d: disarmed PWM: %d", i+1, pwm_value); + if (print_verbose) { + warnx("chan %d: disarmed PWM: %d", i+1, pwm_value); + } } pwm_values.channel_count++; } @@ -353,8 +359,9 @@ pwm_main(int argc, char *argv[]) } else { ret = ioctl(fd, PWM_SERVO_SET_DISARMED_PWM, (long unsigned int)&pwm_values); - if (ret != OK) + if (ret != OK) { errx(ret, "failed setting disarmed values"); + } } exit(0); |