aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-08-26 16:43:46 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-08-26 16:43:46 +0200
commitf2683c23e966ff93d8f438beb63bdf6ef676139d (patch)
tree50821db5dfc64636a2b2916a7b1c6e667c7b8ab4
parent19fa79dcb1b3b34176341b3edb7187b6bb117aff (diff)
parent87b2375be436aa92d361e0131be9ff63ae43fe36 (diff)
downloadpx4-firmware-f2683c23e966ff93d8f438beb63bdf6ef676139d.tar.gz
px4-firmware-f2683c23e966ff93d8f438beb63bdf6ef676139d.tar.bz2
px4-firmware-f2683c23e966ff93d8f438beb63bdf6ef676139d.zip
Merge pull request #1323 from hsteinhaus/ignore_channels2
Ignore single channels during PWM output
-rw-r--r--src/drivers/drv_pwm_output.h5
-rw-r--r--src/drivers/px4fmu/fmu.cpp4
-rw-r--r--src/modules/px4iofirmware/registers.c4
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--;