Skip to content

Commit fa816d0

Browse files
Andrew TridgellLorenzMeier
authored andcommitted
arming: added PWM_SERVO_SET_ARM_OK and PWM_SERVO_CLEAR_ARM_OK
these new ioctls allow for the flight code to tell the IO board that arming can proceed
1 parent d02f5c5 commit fa816d0

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/drivers/drv_pwm_output.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ ORB_DECLARE(output_pwm);
109109
/** selects servo update rates, one bit per servo. 0 = default (50Hz), 1 = alternate */
110110
#define PWM_SERVO_SELECT_UPDATE_RATE _IOC(_PWM_SERVO_BASE, 4)
111111

112+
/** set the 'ARM ok' bit, which activates the safety switch */
113+
#define PWM_SERVO_SET_ARM_OK _IOC(_PWM_SERVO_BASE, 5)
114+
115+
/** clear the 'ARM ok' bit, which deactivates the safety switch */
116+
#define PWM_SERVO_CLEAR_ARM_OK _IOC(_PWM_SERVO_BASE, 6)
117+
112118
/** set a single servo to a specific value */
113119
#define PWM_SERVO_SET(_servo) _IOC(_PWM_SERVO_BASE, 0x20 + _servo)
114120

src/drivers/px4fmu/fmu.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,11 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
606606
up_pwm_servo_arm(true);
607607
break;
608608

609+
case PWM_SERVO_SET_ARM_OK:
610+
case PWM_SERVO_CLEAR_ARM_OK:
611+
// these are no-ops, as no safety switch
612+
break;
613+
609614
case PWM_SERVO_DISARM:
610615
up_pwm_servo_arm(false);
611616
break;

src/drivers/px4io/px4io.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,16 @@ PX4IO::ioctl(file *filep, int cmd, unsigned long arg)
13581358
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, 0, PX4IO_P_SETUP_ARMING_FMU_ARMED);
13591359
break;
13601360

1361+
case PWM_SERVO_SET_ARM_OK:
1362+
/* set the 'OK to arm' bit */
1363+
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, 0, PX4IO_P_SETUP_ARMING_IO_ARM_OK);
1364+
break;
1365+
1366+
case PWM_SERVO_CLEAR_ARM_OK:
1367+
/* clear the 'OK to arm' bit */
1368+
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_IO_ARM_OK, 0);
1369+
break;
1370+
13611371
case PWM_SERVO_DISARM:
13621372
/* clear the 'armed' bit */
13631373
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_FMU_ARMED, 0);

0 commit comments

Comments
 (0)