diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index 7b04516cc1..402a3d83ae 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -1031,6 +1031,8 @@ PX4IO::task_main() /* Check if the flight termination circuit breaker has been updated */ _cb_flighttermination = circuit_breaker_enabled("CBRK_FLIGHTTERM", CBRK_FLIGHTTERM_KEY); + /* Tell IO that it can terminate the flight if FMU is not responding */ + (void)io_reg_set(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ENABLE_FLIGHTTERM, !_cb_flighttermination); param_get(param_find("RC_RSSI_PWM_CHAN"), &_rssi_pwm_chan); param_get(param_find("RC_RSSI_PWM_MAX"), &_rssi_pwm_max); diff --git a/src/modules/px4iofirmware/protocol.h b/src/modules/px4iofirmware/protocol.h index 13d30571a5..7fe2d0d369 100644 --- a/src/modules/px4iofirmware/protocol.h +++ b/src/modules/px4iofirmware/protocol.h @@ -240,6 +240,8 @@ enum { /* DSM bind states */ #define PX4IO_P_SETUP_AIRMODE 27 /* air-mode */ +#define PX4IO_P_SETUP_ENABLE_FLIGHTTERM 28 /* flight termination circuit breaker */ + #define PX4IO_THERMAL_IGNORE UINT16_MAX #define PX4IO_THERMAL_OFF 0 #define PX4IO_THERMAL_FULL 10000 diff --git a/src/modules/px4iofirmware/px4io.h b/src/modules/px4iofirmware/px4io.h index 032c3b51a8..8f021f847f 100644 --- a/src/modules/px4iofirmware/px4io.h +++ b/src/modules/px4iofirmware/px4io.h @@ -133,6 +133,7 @@ extern uint16_t r_page_servo_disarmed[]; /* PX4IO_PAGE_DISARMED_PWM */ #define r_setup_thr_fac r_page_setup[PX4IO_P_SETUP_THR_MDL_FAC] #define r_setup_slew_max r_page_setup[PX4IO_P_SETUP_MOTOR_SLEW_MAX] #define r_setup_airmode r_page_setup[PX4IO_P_SETUP_AIRMODE] +#define r_setup_flightterm r_page_setup[PX4IO_P_SETUP_ENABLE_FLIGHTTERM] #define r_control_values (&r_page_controls[0]) diff --git a/src/modules/px4iofirmware/registers.c b/src/modules/px4iofirmware/registers.c index 2e029eefde..2e0f19eb9d 100644 --- a/src/modules/px4iofirmware/registers.c +++ b/src/modules/px4iofirmware/registers.c @@ -181,7 +181,8 @@ volatile uint16_t r_page_setup[] = { [PX4IO_P_SETUP_MOTOR_SLEW_MAX] = 0, [PX4IO_P_SETUP_AIRMODE] = 0, [PX4IO_P_SETUP_THR_MDL_FAC] = 0, - [PX4IO_P_SETUP_THERMAL] = PX4IO_THERMAL_IGNORE + [PX4IO_P_SETUP_THERMAL] = PX4IO_THERMAL_IGNORE, + [PX4IO_P_SETUP_ENABLE_FLIGHTTERM] = 0 }; #define PX4IO_P_SETUP_FEATURES_VALID (PX4IO_P_SETUP_FEATURES_SBUS1_OUT | \ @@ -712,6 +713,7 @@ registers_set_one(uint8_t page, uint8_t offset, uint16_t value) case PX4IO_P_SETUP_MOTOR_SLEW_MAX: case PX4IO_P_SETUP_AIRMODE: case PX4IO_P_SETUP_THERMAL: + case PX4IO_P_SETUP_ENABLE_FLIGHTTERM: r_page_setup[offset] = value; break;