Browse Source

IO firmware: Support pwm reversal

sbg
Lorenz Meier 10 years ago
parent
commit
613b50b14f
  1. 5
      src/modules/px4iofirmware/mixer.cpp
  2. 2
      src/modules/px4iofirmware/protocol.h
  3. 2
      src/modules/px4iofirmware/px4io.h
  4. 5
      src/modules/px4iofirmware/registers.c

5
src/modules/px4iofirmware/mixer.cpp

@ -234,7 +234,7 @@ mixer_tick(void) @@ -234,7 +234,7 @@ mixer_tick(void)
in_mixer = false;
/* the pwm limit call takes care of out of band errors */
pwm_limit_calc(should_arm, mixed, r_page_servo_disarmed, r_page_servo_control_min, r_page_servo_control_max, outputs, r_page_servos, &pwm_limit);
pwm_limit_calc(should_arm, mixed, r_setup_pwm_reverse, r_page_servo_disarmed, r_page_servo_control_min, r_page_servo_control_max, outputs, r_page_servos, &pwm_limit);
for (unsigned i = mixed; i < PX4IO_SERVO_COUNT; i++)
r_page_servos[i] = 0;
@ -272,8 +272,9 @@ mixer_tick(void) @@ -272,8 +272,9 @@ mixer_tick(void)
if (mixer_servos_armed && should_arm) {
/* update the servo outputs. */
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++)
for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
up_pwm_servo_set(i, r_page_servos[i]);
}
/* set S.BUS1 or S.BUS2 outputs */

2
src/modules/px4iofirmware/protocol.h

@ -233,6 +233,8 @@ enum { /* DSM bind states */ @@ -233,6 +233,8 @@ enum { /* DSM bind states */
#define PX4IO_P_SETUP_FORCE_SAFETY_ON 14 /* force safety switch into 'disarmed' (PWM disabled state) */
#define PX4IO_FORCE_SAFETY_MAGIC 22027 /* required argument for force safety (random) */
#define PX4IO_P_SETUP_PWM_REVERSE 15 /**< Bitmask to reverse PWM channels 1-8 */
/* autopilot control values, -10000..10000 */
#define PX4IO_PAGE_CONTROLS 51 /**< actuator control groups, one after the other, 8 wide */
#define PX4IO_P_CONTROLS_GROUP_0 (PX4IO_PROTOCOL_MAX_CONTROL_COUNT * 0) /**< 0..PX4IO_PROTOCOL_MAX_CONTROL_COUNT - 1 */

2
src/modules/px4iofirmware/px4io.h

@ -111,6 +111,8 @@ extern uint16_t r_page_servo_disarmed[]; /* PX4IO_PAGE_DISARMED_PWM */ @@ -111,6 +111,8 @@ extern uint16_t r_page_servo_disarmed[]; /* PX4IO_PAGE_DISARMED_PWM */
#endif
#define r_setup_rc_thr_failsafe r_page_setup[PX4IO_P_SETUP_RC_THR_FAILSAFE_US]
#define r_setup_pwm_reverse r_page_setup[PX4IO_P_SETUP_PWM_REVERSE]
#define r_control_values (&r_page_controls[0])
/*

5
src/modules/px4iofirmware/registers.c

@ -173,6 +173,7 @@ volatile uint16_t r_page_setup[] = @@ -173,6 +173,7 @@ volatile uint16_t r_page_setup[] =
[PX4IO_P_SETUP_REBOOT_BL] = 0,
[PX4IO_P_SETUP_CRC ... (PX4IO_P_SETUP_CRC+1)] = 0,
[PX4IO_P_SETUP_RC_THR_FAILSAFE_US] = 0,
[PX4IO_P_SETUP_PWM_REVERSE] = 0,
};
#ifdef CONFIG_ARCH_BOARD_PX4IO_V2
@ -622,6 +623,10 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value) @@ -622,6 +623,10 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value)
}
break;
case PX4IO_P_SETUP_PWM_REVERSE:
r_page_setup[PX4IO_P_SETUP_PWM_REVERSE] = value;
break;
default:
return -1;
}

Loading…
Cancel
Save