diff options
author | Holger Steinhaus <holger@steinhaus-home.de> | 2014-08-26 14:34:14 +0200 |
---|---|---|
committer | Holger Steinhaus <holger@steinhaus-home.de> | 2014-08-26 14:38:32 +0200 |
commit | 87b2375be436aa92d361e0131be9ff63ae43fe36 (patch) | |
tree | 50821db5dfc64636a2b2916a7b1c6e667c7b8ab4 | |
parent | 19fa79dcb1b3b34176341b3edb7187b6bb117aff (diff) | |
download | px4-firmware-87b2375be436aa92d361e0131be9ff63ae43fe36.tar.gz px4-firmware-87b2375be436aa92d361e0131be9ff63ae43fe36.tar.bz2 px4-firmware-87b2375be436aa92d361e0131be9ff63ae43fe36.zip |
Ignore single channels during PWM output
-rw-r--r-- | src/drivers/drv_pwm_output.h | 5 | ||||
-rw-r--r-- | src/drivers/px4fmu/fmu.cpp | 4 | ||||
-rw-r--r-- | src/modules/px4iofirmware/registers.c | 4 |
3 files changed, 11 insertions, 2 deletions
diff --git a/src/drivers/drv_pwm_output.h b/src/drivers/drv_pwm_output.h index 84815fdfb..5aff6825b 100644 --- a/src/drivers/drv_pwm_output.h +++ b/src/drivers/drv_pwm_output.h @@ -95,6 +95,11 @@ __BEGIN_DECLS #define PWM_LOWEST_MAX 1700 /** + * Do not output a channel with this value + */ +#define PWM_IGNORE_THIS_CHANNEL UINT16_MAX + +/** * Servo output signal type, value is actual servo output pulse * width in microseconds. */ diff --git a/src/drivers/px4fmu/fmu.cpp b/src/drivers/px4fmu/fmu.cpp index 82977a032..122a3cd17 100644 --- a/src/drivers/px4fmu/fmu.cpp +++ b/src/drivers/px4fmu/fmu.cpp @@ -1272,7 +1272,9 @@ PX4FMU::write(file *filp, const char *buffer, size_t len) memcpy(values, buffer, count * 2); for (uint8_t i = 0; i < count; i++) { - up_pwm_servo_set(i, values[i]); + if (values[i] != PWM_IGNORE_THIS_CHANNEL) { + up_pwm_servo_set(i, values[i]); + } } return count * 2; diff --git a/src/modules/px4iofirmware/registers.c b/src/modules/px4iofirmware/registers.c index 43161aa70..0da778b6f 100644 --- a/src/modules/px4iofirmware/registers.c +++ b/src/modules/px4iofirmware/registers.c @@ -285,7 +285,9 @@ registers_set(uint8_t page, uint8_t offset, const uint16_t *values, unsigned num while ((offset < PX4IO_CONTROL_CHANNELS) && (num_values > 0)) { /* XXX range-check value? */ - r_page_servos[offset] = *values; + if (*values != PWM_IGNORE_THIS_CHANNEL) { + r_page_servos[offset] = *values; + } offset++; num_values--; |