aboutsummaryrefslogtreecommitdiff
path: root/apps/drivers/px4io/px4io.cpp
diff options
context:
space:
mode:
authorJulian Oes <joes@student.ethz.ch>2013-02-22 15:53:07 -0800
committerJulian Oes <joes@student.ethz.ch>2013-02-22 15:53:07 -0800
commitf731b6f4e5b009cf12d66c9ff2f5bbed47ca14af (patch)
tree5a74365c3100ec2ac46b2ade64c5a44164f987ec /apps/drivers/px4io/px4io.cpp
parent793b482e00013ea66bb1b0cdc0366bb720648938 (diff)
parentbe408451779dc53220ec94499a7acbe5ff3b8e7f (diff)
downloadpx4-firmware-f731b6f4e5b009cf12d66c9ff2f5bbed47ca14af.tar.gz
px4-firmware-f731b6f4e5b009cf12d66c9ff2f5bbed47ca14af.tar.bz2
px4-firmware-f731b6f4e5b009cf12d66c9ff2f5bbed47ca14af.zip
Merge remote-tracking branch 'upstream/px4io-i2c' into new_state_machine
Diffstat (limited to 'apps/drivers/px4io/px4io.cpp')
-rw-r--r--apps/drivers/px4io/px4io.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/apps/drivers/px4io/px4io.cpp b/apps/drivers/px4io/px4io.cpp
index b2e0c6ee4..adb894371 100644
--- a/apps/drivers/px4io/px4io.cpp
+++ b/apps/drivers/px4io/px4io.cpp
@@ -367,7 +367,12 @@ PX4IO::init()
if (ret != OK)
return ret;
- if (reg & PX4IO_P_SETUP_ARMING_ARM_OK) {
+ /*
+ * in-air restart is only tried if the IO board reports it is
+ * already armed, and has been configured for in-air restart
+ */
+ if ((reg & PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK) &&
+ (reg & PX4IO_P_SETUP_ARMING_ARM_OK)) {
/* WARNING: COMMANDER app/vehicle status must be initialized.
* If this fails (or the app is not started), worst-case IO
@@ -450,6 +455,7 @@ PX4IO::init()
/* dis-arm IO before touching anything */
io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING,
PX4IO_P_SETUP_ARMING_ARM_OK |
+ PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK |
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK |
PX4IO_P_SETUP_ARMING_VECTOR_FLIGHT_OK, 0);
@@ -1164,6 +1170,16 @@ PX4IO::ioctl(file *filep, int cmd, unsigned long arg)
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_ARM_OK, 0);
break;
+ case PWM_SERVO_INAIR_RESTART_ENABLE:
+ /* set the 'in-air restart' bit */
+ ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, 0, PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK);
+ break;
+
+ case PWM_SERVO_INAIR_RESTART_DISABLE:
+ /* unset the 'in-air restart' bit */
+ ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK, 0);
+ break;
+
case PWM_SERVO_SET_UPDATE_RATE:
/* set the requested rate */
if ((arg >= 50) && (arg <= 400)) {