mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 03:49:12 +08:00
Fixed led patterns to be up to the latest specs
This commit is contained in:
+20
-12
@@ -416,7 +416,7 @@ PX4IO::init()
|
|||||||
* already armed, and has been configured for in-air restart
|
* already armed, and has been configured for in-air restart
|
||||||
*/
|
*/
|
||||||
if ((reg & PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK) &&
|
if ((reg & PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK) &&
|
||||||
(reg & PX4IO_P_SETUP_ARMING_ARM_OK)) {
|
(reg & PX4IO_P_SETUP_ARMING_FMU_ARMED)) {
|
||||||
|
|
||||||
mavlink_log_emergency(_mavlink_fd, "[IO] RECOVERING FROM FMU IN-AIR RESTART");
|
mavlink_log_emergency(_mavlink_fd, "[IO] RECOVERING FROM FMU IN-AIR RESTART");
|
||||||
|
|
||||||
@@ -500,7 +500,7 @@ PX4IO::init()
|
|||||||
|
|
||||||
/* dis-arm IO before touching anything */
|
/* dis-arm IO before touching anything */
|
||||||
io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING,
|
io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING,
|
||||||
PX4IO_P_SETUP_ARMING_ARM_OK |
|
PX4IO_P_SETUP_ARMING_FMU_ARMED |
|
||||||
PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK |
|
PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK |
|
||||||
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK, 0);
|
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK, 0);
|
||||||
|
|
||||||
@@ -701,11 +701,18 @@ PX4IO::io_set_arming_state()
|
|||||||
uint16_t set = 0;
|
uint16_t set = 0;
|
||||||
uint16_t clear = 0;
|
uint16_t clear = 0;
|
||||||
|
|
||||||
if (armed.armed) {
|
if (armed.armed && !armed.lockdown) {
|
||||||
set |= PX4IO_P_SETUP_ARMING_ARM_OK;
|
set |= PX4IO_P_SETUP_ARMING_FMU_ARMED;
|
||||||
} else {
|
} else {
|
||||||
clear |= PX4IO_P_SETUP_ARMING_ARM_OK;
|
clear |= PX4IO_P_SETUP_ARMING_FMU_ARMED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (armed.ready_to_arm) {
|
||||||
|
set |= PX4IO_P_SETUP_ARMING_IO_ARM_OK;
|
||||||
|
} else {
|
||||||
|
clear |= PX4IO_P_SETUP_ARMING_IO_ARM_OK;
|
||||||
|
}
|
||||||
|
|
||||||
if (vstatus.flag_external_manual_override_ok) {
|
if (vstatus.flag_external_manual_override_ok) {
|
||||||
set |= PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK;
|
set |= PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK;
|
||||||
} else {
|
} else {
|
||||||
@@ -1271,9 +1278,9 @@ PX4IO::print_status()
|
|||||||
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_IBATT),
|
io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_IBATT),
|
||||||
io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VBATT_SCALE));
|
io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_VBATT_SCALE));
|
||||||
printf("amp_per_volt %.3f amp_offset %.3f mAhDischarged %.3f\n",
|
printf("amp_per_volt %.3f amp_offset %.3f mAhDischarged %.3f\n",
|
||||||
_battery_amp_per_volt,
|
(double)_battery_amp_per_volt,
|
||||||
_battery_amp_bias,
|
(double)_battery_amp_bias,
|
||||||
_battery_mamphour_total);
|
(double)_battery_mamphour_total);
|
||||||
printf("actuators");
|
printf("actuators");
|
||||||
for (unsigned i = 0; i < _max_actuators; i++)
|
for (unsigned i = 0; i < _max_actuators; i++)
|
||||||
printf(" %u", io_reg_get(PX4IO_PAGE_ACTUATORS, i));
|
printf(" %u", io_reg_get(PX4IO_PAGE_ACTUATORS, i));
|
||||||
@@ -1303,9 +1310,10 @@ PX4IO::print_status()
|
|||||||
/* setup and state */
|
/* setup and state */
|
||||||
printf("features 0x%04x\n", io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FEATURES));
|
printf("features 0x%04x\n", io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_FEATURES));
|
||||||
uint16_t arming = io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING);
|
uint16_t arming = io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING);
|
||||||
printf("arming 0x%04x%s%s%s\n",
|
printf("arming 0x%04x%s%s%s%s\n",
|
||||||
arming,
|
arming,
|
||||||
((arming & PX4IO_P_SETUP_ARMING_ARM_OK) ? " ARM_OK" : ""),
|
((arming & PX4IO_P_SETUP_ARMING_FMU_ARMED) ? " FMU_ARMED" : ""),
|
||||||
|
((arming & PX4IO_P_SETUP_ARMING_IO_ARM_OK) ? " IO_ARM_OK" : ""),
|
||||||
((arming & PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK) ? " MANUAL_OVERRIDE_OK" : ""),
|
((arming & PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK) ? " MANUAL_OVERRIDE_OK" : ""),
|
||||||
((arming & PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK) ? " INAIR_RESTART_OK" : ""));
|
((arming & PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK) ? " INAIR_RESTART_OK" : ""));
|
||||||
printf("rates 0x%04x default %u alt %u relays 0x%04x\n",
|
printf("rates 0x%04x default %u alt %u relays 0x%04x\n",
|
||||||
@@ -1347,12 +1355,12 @@ PX4IO::ioctl(file *filep, int cmd, unsigned long arg)
|
|||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case PWM_SERVO_ARM:
|
case PWM_SERVO_ARM:
|
||||||
/* set the 'armed' bit */
|
/* set the 'armed' bit */
|
||||||
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, 0, PX4IO_P_SETUP_ARMING_ARM_OK);
|
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, 0, PX4IO_P_SETUP_ARMING_FMU_ARMED);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PWM_SERVO_DISARM:
|
case PWM_SERVO_DISARM:
|
||||||
/* clear the 'armed' bit */
|
/* clear the 'armed' bit */
|
||||||
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_ARM_OK, 0);
|
ret = io_reg_modify(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_ARMING, PX4IO_P_SETUP_ARMING_FMU_ARMED, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PWM_SERVO_SET_UPDATE_RATE:
|
case PWM_SERVO_SET_UPDATE_RATE:
|
||||||
|
|||||||
@@ -249,6 +249,11 @@ void publish_armed_status(const struct vehicle_status_s *current_status)
|
|||||||
{
|
{
|
||||||
struct actuator_armed_s armed;
|
struct actuator_armed_s armed;
|
||||||
armed.armed = current_status->flag_system_armed;
|
armed.armed = current_status->flag_system_armed;
|
||||||
|
|
||||||
|
/* XXX allow arming by external components on multicopters only if not yet armed by RC */
|
||||||
|
/* XXX allow arming only if core sensors are ok */
|
||||||
|
armed.ready_to_arm = true;
|
||||||
|
|
||||||
/* lock down actuators if required, only in HIL */
|
/* lock down actuators if required, only in HIL */
|
||||||
armed.lockdown = (current_status->flag_hil_enabled) ? true : false;
|
armed.lockdown = (current_status->flag_hil_enabled) ? true : false;
|
||||||
orb_advert_t armed_pub = orb_advertise(ORB_ID(actuator_armed), &armed);
|
orb_advert_t armed_pub = orb_advertise(ORB_ID(actuator_armed), &armed);
|
||||||
|
|||||||
@@ -145,7 +145,8 @@
|
|||||||
#define PX4IO_P_SETUP_FEATURES 0
|
#define PX4IO_P_SETUP_FEATURES 0
|
||||||
|
|
||||||
#define PX4IO_P_SETUP_ARMING 1 /* arming controls */
|
#define PX4IO_P_SETUP_ARMING 1 /* arming controls */
|
||||||
#define PX4IO_P_SETUP_ARMING_ARM_OK (1 << 0) /* OK to arm */
|
#define PX4IO_P_SETUP_ARMING_IO_ARM_OK (1 << 0) /* OK to arm the IO side */
|
||||||
|
#define PX4IO_P_SETUP_ARMING_FMU_ARMED (1 << 1) /* FMU is already armed */
|
||||||
#define PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK (1 << 2) /* OK to switch to manual override via override RC channel */
|
#define PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK (1 << 2) /* OK to switch to manual override via override RC channel */
|
||||||
#define PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK (1 << 4) /* OK to try in-air restart */
|
#define PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK (1 << 4) /* OK to try in-air restart */
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 PX4 Development Team. All rights reserved.
|
* Copyright (c) 2012, 2013 PX4 Development Team. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@@ -32,7 +32,8 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file Safety button logic.
|
* @file safety.c
|
||||||
|
* Safety button logic.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
@@ -56,10 +57,10 @@ static unsigned counter = 0;
|
|||||||
/*
|
/*
|
||||||
* Define the various LED flash sequences for each system state.
|
* Define the various LED flash sequences for each system state.
|
||||||
*/
|
*/
|
||||||
#define LED_PATTERN_SAFE 0x000f /**< always on */
|
#define LED_PATTERN_FMU_OK_TO_ARM 0x0003 /**< slow blinking */
|
||||||
#define LED_PATTERN_FMU_ARMED 0x5555 /**< slow blinking */
|
#define LED_PATTERN_FMU_REFUSE_TO_ARM 0x5555 /**< fast blinking */
|
||||||
#define LED_PATTERN_IO_ARMED 0x5555 /**< fast blinking */
|
#define LED_PATTERN_IO_ARMED 0x5050 /**< long off, then double blink */
|
||||||
#define LED_PATTERN_IO_FMU_ARMED 0xffff /**< long off then double blink */
|
#define LED_PATTERN_IO_FMU_ARMED 0xffff /**< constantly on */
|
||||||
|
|
||||||
static unsigned blink_counter = 0;
|
static unsigned blink_counter = 0;
|
||||||
|
|
||||||
@@ -108,7 +109,8 @@ safety_check_button(void *arg)
|
|||||||
* state machine, keep ARM_COUNTER_THRESHOLD the same
|
* state machine, keep ARM_COUNTER_THRESHOLD the same
|
||||||
* length in all cases of the if/else struct below.
|
* length in all cases of the if/else struct below.
|
||||||
*/
|
*/
|
||||||
if (safety_button_pressed && !(r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED)) {
|
if (safety_button_pressed && !(r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED) &&
|
||||||
|
(r_setup_arming & PX4IO_P_SETUP_ARMING_IO_ARM_OK)) {
|
||||||
|
|
||||||
if (counter < ARM_COUNTER_THRESHOLD) {
|
if (counter < ARM_COUNTER_THRESHOLD) {
|
||||||
counter++;
|
counter++;
|
||||||
@@ -119,8 +121,6 @@ safety_check_button(void *arg)
|
|||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disarm quickly */
|
|
||||||
|
|
||||||
} else if (safety_button_pressed && (r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED)) {
|
} else if (safety_button_pressed && (r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED)) {
|
||||||
|
|
||||||
if (counter < ARM_COUNTER_THRESHOLD) {
|
if (counter < ARM_COUNTER_THRESHOLD) {
|
||||||
@@ -137,18 +137,18 @@ safety_check_button(void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Select the appropriate LED flash pattern depending on the current IO/FMU arm state */
|
/* Select the appropriate LED flash pattern depending on the current IO/FMU arm state */
|
||||||
uint16_t pattern = LED_PATTERN_SAFE;
|
uint16_t pattern = LED_PATTERN_FMU_REFUSE_TO_ARM;
|
||||||
|
|
||||||
if (r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED) {
|
if (r_status_flags & PX4IO_P_STATUS_FLAGS_ARMED) {
|
||||||
if (r_setup_arming & PX4IO_P_SETUP_ARMING_ARM_OK) {
|
if (r_setup_arming & PX4IO_P_SETUP_ARMING_FMU_ARMED) {
|
||||||
pattern = LED_PATTERN_IO_FMU_ARMED;
|
pattern = LED_PATTERN_IO_FMU_ARMED;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pattern = LED_PATTERN_IO_ARMED;
|
pattern = LED_PATTERN_IO_ARMED;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (r_setup_arming & PX4IO_P_SETUP_ARMING_ARM_OK) {
|
} else if (r_setup_arming & PX4IO_P_SETUP_ARMING_IO_ARM_OK) {
|
||||||
pattern = LED_PATTERN_FMU_ARMED;
|
pattern = LED_PATTERN_FMU_OK_TO_ARM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ ORB_DECLARE(actuator_controls_3);
|
|||||||
/** global 'actuator output is live' control. */
|
/** global 'actuator output is live' control. */
|
||||||
struct actuator_armed_s {
|
struct actuator_armed_s {
|
||||||
bool armed; /**< Set to true if system is armed */
|
bool armed; /**< Set to true if system is armed */
|
||||||
|
bool ready_to_arm; /**< Set to true if system is ready to be armed */
|
||||||
bool lockdown; /**< Set to true if actuators are forced to being disabled (due to emergency or HIL) */
|
bool lockdown; /**< Set to true if actuators are forced to being disabled (due to emergency or HIL) */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user