aboutsummaryrefslogtreecommitdiff
path: root/apps/drivers/px4fmu/fmu.cpp
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-02-17 16:43:45 +1100
committerAndrew Tridgell <tridge@samba.org>2013-02-18 08:32:49 +1100
commitb53d34a3f0d6db396da398c42d4884998d4eb488 (patch)
treef01a29acea18e5bca5e8913d0c44991ab2c9b15b /apps/drivers/px4fmu/fmu.cpp
parentd6c108d870034a8dfc328487dc3477738937894d (diff)
downloadpx4-firmware-b53d34a3f0d6db396da398c42d4884998d4eb488.tar.gz
px4-firmware-b53d34a3f0d6db396da398c42d4884998d4eb488.tar.bz2
px4-firmware-b53d34a3f0d6db396da398c42d4884998d4eb488.zip
px4fmu: add support for write() interface for PWM output
this matches the PX4IO interface
Diffstat (limited to 'apps/drivers/px4fmu/fmu.cpp')
-rw-r--r--apps/drivers/px4fmu/fmu.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/apps/drivers/px4fmu/fmu.cpp b/apps/drivers/px4fmu/fmu.cpp
index ed3635fc9..c29fe0ba3 100644
--- a/apps/drivers/px4fmu/fmu.cpp
+++ b/apps/drivers/px4fmu/fmu.cpp
@@ -85,6 +85,7 @@ public:
~PX4FMU();
virtual int ioctl(file *filp, int cmd, unsigned long arg);
+ virtual ssize_t write(file *filp, const char *buffer, size_t len);
virtual int init();
@@ -651,6 +652,30 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
return ret;
}
+/*
+ this implements PWM output via a write() method, for compatibility
+ with px4io
+ */
+ssize_t
+PX4FMU::write(file *filp, const char *buffer, size_t len)
+{
+ unsigned count = len / 2;
+ uint16_t values[4];
+
+ if (count > 4) {
+ // we only have 4 PWM outputs on the FMU
+ count = 4;
+ }
+
+ // allow for misaligned values
+ memcpy(values, buffer, count*2);
+
+ for (uint8_t i=0; i<count; i++) {
+ up_pwm_servo_set(i, values[i]);
+ }
+ return count * 2;
+}
+
void
PX4FMU::gpio_reset(void)
{