mirror of https://github.com/ArduPilot/ardupilot
Copter: support logging while disarmed
This commit is contained in:
parent
874efe95a1
commit
c3d839456b
|
@ -206,6 +206,9 @@ static AP_Notify notify;
|
|||
// used to detect MAVLink acks from GCS to stop compassmot
|
||||
static uint8_t command_ack_counter;
|
||||
|
||||
// has a log download started?
|
||||
static bool in_log_download;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// prototypes
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -951,7 +954,7 @@ static void barometer_accumulate(void)
|
|||
|
||||
static void perf_update(void)
|
||||
{
|
||||
if (g.log_bitmask & MASK_LOG_PM)
|
||||
if (should_log(MASK_LOG_PM))
|
||||
Log_Write_Performance();
|
||||
if (scheduler.debug()) {
|
||||
cliSerial->printf_P(PSTR("PERF: %u/%u %lu\n"),
|
||||
|
@ -1089,7 +1092,7 @@ static void update_batt_compass(void)
|
|||
compass.set_throttle((float)g.rc_3.servo_out/1000.0f);
|
||||
compass.read();
|
||||
// log compass information
|
||||
if (g.log_bitmask & MASK_LOG_COMPASS) {
|
||||
if (should_log(MASK_LOG_COMPASS)) {
|
||||
Log_Write_Compass();
|
||||
}
|
||||
}
|
||||
|
@ -1102,16 +1105,16 @@ static void update_batt_compass(void)
|
|||
// should be run at 10hz
|
||||
static void ten_hz_logging_loop()
|
||||
{
|
||||
if (g.log_bitmask & MASK_LOG_ATTITUDE_MED) {
|
||||
if (should_log(MASK_LOG_ATTITUDE_MED)) {
|
||||
Log_Write_Attitude();
|
||||
}
|
||||
if (g.log_bitmask & MASK_LOG_RCIN) {
|
||||
if (should_log(MASK_LOG_RCIN)) {
|
||||
DataFlash.Log_Write_RCIN();
|
||||
}
|
||||
if (g.log_bitmask & MASK_LOG_RCOUT) {
|
||||
if (should_log(MASK_LOG_RCOUT)) {
|
||||
DataFlash.Log_Write_RCOUT();
|
||||
}
|
||||
if ((g.log_bitmask & MASK_LOG_NTUN) && (mode_requires_GPS(control_mode) || landing_with_GPS())) {
|
||||
if (should_log(MASK_LOG_NTUN) && (mode_requires_GPS(control_mode) || landing_with_GPS())) {
|
||||
Log_Write_Nav_Tuning();
|
||||
}
|
||||
}
|
||||
|
@ -1126,11 +1129,11 @@ static void fifty_hz_logging_loop()
|
|||
#endif
|
||||
|
||||
#if HIL_MODE == HIL_MODE_DISABLED
|
||||
if (g.log_bitmask & MASK_LOG_ATTITUDE_FAST) {
|
||||
if (should_log(MASK_LOG_ATTITUDE_FAST)) {
|
||||
Log_Write_Attitude();
|
||||
}
|
||||
|
||||
if (g.log_bitmask & MASK_LOG_IMU) {
|
||||
if (should_log(MASK_LOG_IMU)) {
|
||||
DataFlash.Log_Write_IMU(ins);
|
||||
}
|
||||
#endif
|
||||
|
@ -1160,7 +1163,7 @@ static void three_hz_loop()
|
|||
// one_hz_loop - runs at 1Hz
|
||||
static void one_hz_loop()
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
Log_Write_Data(DATA_AP_STATE, ap.value);
|
||||
}
|
||||
|
||||
|
@ -1219,7 +1222,7 @@ static void update_GPS(void)
|
|||
last_gps_reading[i] = gps.last_message_time_ms(i);
|
||||
|
||||
// log GPS message
|
||||
if (g.log_bitmask & MASK_LOG_GPS) {
|
||||
if (should_log(MASK_LOG_GPS)) {
|
||||
DataFlash.Log_Write_GPS(gps, i, current_loc.alt);
|
||||
}
|
||||
|
||||
|
@ -1305,7 +1308,7 @@ init_simple_bearing()
|
|||
super_simple_sin_yaw = simple_sin_yaw;
|
||||
|
||||
// log the simple bearing to dataflash
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
Log_Write_Data(DATA_INIT_SIMPLE_BEARING, ahrs.yaw_sensor);
|
||||
}
|
||||
}
|
||||
|
@ -1376,7 +1379,7 @@ static void update_altitude()
|
|||
sonar_alt = read_sonar();
|
||||
|
||||
// write altitude info to dataflash logs
|
||||
if (g.log_bitmask & MASK_LOG_CTUN) {
|
||||
if (should_log(MASK_LOG_CTUN)) {
|
||||
Log_Write_Control_Tuning();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1376,11 +1376,21 @@ void GCS_MAVLINK::handleMessage(mavlink_message_t* msg)
|
|||
case MAVLINK_MSG_ID_RADIO:
|
||||
case MAVLINK_MSG_ID_RADIO_STATUS: // MAV ID: 109
|
||||
{
|
||||
handle_radio_status(msg, DataFlash, (g.log_bitmask & MASK_LOG_PM) != 0);
|
||||
handle_radio_status(msg, DataFlash, should_log(MASK_LOG_PM));
|
||||
break;
|
||||
}
|
||||
|
||||
case MAVLINK_MSG_ID_LOG_REQUEST_LIST ... MAVLINK_MSG_ID_LOG_REQUEST_END: // MAV ID: 117 ... 122
|
||||
case MAVLINK_MSG_ID_LOG_REQUEST_DATA:
|
||||
case MAVLINK_MSG_ID_LOG_ERASE:
|
||||
in_log_download = true;
|
||||
// fallthru
|
||||
case MAVLINK_MSG_ID_LOG_REQUEST_LIST:
|
||||
if (!in_mavlink_delay && !motors.armed()) {
|
||||
handle_log_message(msg, DataFlash);
|
||||
}
|
||||
break;
|
||||
case MAVLINK_MSG_ID_LOG_REQUEST_END:
|
||||
in_log_download = false;
|
||||
if (!in_mavlink_delay && !motors.armed()) {
|
||||
handle_log_message(msg, DataFlash);
|
||||
}
|
||||
|
|
|
@ -535,7 +535,7 @@ struct PACKED log_Event {
|
|||
// Wrote an event packet
|
||||
static void Log_Write_Event(uint8_t id)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Event pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_EVENT_MSG),
|
||||
id : id
|
||||
|
@ -553,7 +553,7 @@ struct PACKED log_Data_Int16t {
|
|||
// Write an int16_t data packet
|
||||
static void Log_Write_Data(uint8_t id, int16_t value)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Data_Int16t pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_DATA_INT16_MSG),
|
||||
id : id,
|
||||
|
@ -572,7 +572,7 @@ struct PACKED log_Data_UInt16t {
|
|||
// Write an uint16_t data packet
|
||||
static void Log_Write_Data(uint8_t id, uint16_t value)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Data_UInt16t pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_DATA_UINT16_MSG),
|
||||
id : id,
|
||||
|
@ -591,7 +591,7 @@ struct PACKED log_Data_Int32t {
|
|||
// Write an int32_t data packet
|
||||
static void Log_Write_Data(uint8_t id, int32_t value)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Data_Int32t pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_DATA_INT32_MSG),
|
||||
id : id,
|
||||
|
@ -610,7 +610,7 @@ struct PACKED log_Data_UInt32t {
|
|||
// Write a uint32_t data packet
|
||||
static void Log_Write_Data(uint8_t id, uint32_t value)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Data_UInt32t pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_DATA_UINT32_MSG),
|
||||
id : id,
|
||||
|
@ -629,7 +629,7 @@ struct PACKED log_Data_Float {
|
|||
// Write a float data packet
|
||||
static void Log_Write_Data(uint8_t id, float value)
|
||||
{
|
||||
if (g.log_bitmask != 0) {
|
||||
if (should_log(MASK_LOG_ANY)) {
|
||||
struct log_Data_Float pkt = {
|
||||
LOG_PACKET_HEADER_INIT(LOG_DATA_FLOAT_MSG),
|
||||
id : id,
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
|
||||
// Misc
|
||||
//
|
||||
k_param_log_bitmask = 20,
|
||||
k_param_log_bitmask_old = 20, // Deprecated
|
||||
k_param_log_last_filenumber, // *** Deprecated - remove
|
||||
// with next eeprom number
|
||||
// change
|
||||
|
@ -123,6 +123,7 @@ public:
|
|||
k_param_throttle_deadzone,
|
||||
k_param_optflow,
|
||||
k_param_dcmcheck_thresh, // 59
|
||||
k_param_log_bitmask,
|
||||
|
||||
// 65: AP_Limits Library
|
||||
k_param_limits = 65, // deprecated - remove
|
||||
|
@ -381,7 +382,7 @@ public:
|
|||
|
||||
// Misc
|
||||
//
|
||||
AP_Int16 log_bitmask;
|
||||
AP_Int32 log_bitmask;
|
||||
AP_Int8 esc_calibrate;
|
||||
AP_Int8 radio_tuning;
|
||||
AP_Int16 radio_tuning_high;
|
||||
|
|
|
@ -348,8 +348,8 @@ const AP_Param::Info var_info[] PROGMEM = {
|
|||
|
||||
// @Param: LOG_BITMASK
|
||||
// @DisplayName: Log bitmask
|
||||
// @Description: 2 byte bitmap of log types to enable
|
||||
// @Values: 830:Default,894:Default+RCIN,958:Default+IMU,1854:Default+Motors,-6146:NearlyAll,-22530:All,0:Disabled
|
||||
// @Description: 4 byte bitmap of log types to enable
|
||||
// @Values: 830:Default,894:Default+RCIN,958:Default+IMU,1854:Default+Motors,59390:NearlyAll,131071:All+DisarmedLogging,0:Disabled
|
||||
// @User: Standard
|
||||
GSCALAR(log_bitmask, "LOG_BITMASK", DEFAULT_LOG_BITMASK),
|
||||
|
||||
|
@ -1144,6 +1144,7 @@ const AP_Param::ConversionInfo conversion_table[] PROGMEM = {
|
|||
{ Parameters::k_param_volt_div_ratio, 0, AP_PARAM_FLOAT, "BATT_VOLT_MULT" },
|
||||
{ Parameters::k_param_curr_amp_per_volt, 0, AP_PARAM_FLOAT, "BATT_AMP_PERVOLT" },
|
||||
{ Parameters::k_param_pack_capacity, 0, AP_PARAM_INT32, "BATT_CAPACITY" },
|
||||
{ Parameters::k_param_log_bitmask_old, 0, AP_PARAM_INT16, "LOG_BITMASK" },
|
||||
};
|
||||
|
||||
static void load_parameters(void)
|
||||
|
|
|
@ -14,7 +14,7 @@ static void init_home()
|
|||
inertial_nav.setup_home_position();
|
||||
|
||||
// log new home position which mission library will pull from ahrs
|
||||
if (g.log_bitmask & MASK_LOG_CMD) {
|
||||
if (should_log(MASK_LOG_CMD)) {
|
||||
AP_Mission::Mission_Command temp_cmd;
|
||||
if (mission.read_cmd_from_storage(0, temp_cmd)) {
|
||||
Log_Write_Cmd(temp_cmd);
|
||||
|
|
|
@ -37,7 +37,7 @@ static void auto_spline_start(const Vector3f& destination, bool stopped_at_start
|
|||
static bool start_command(const AP_Mission::Mission_Command& cmd)
|
||||
{
|
||||
// To-Do: logging when new commands start/end
|
||||
if (g.log_bitmask & MASK_LOG_CMD) {
|
||||
if (should_log(MASK_LOG_CMD)) {
|
||||
Log_Write_Cmd(cmd);
|
||||
}
|
||||
|
||||
|
@ -925,7 +925,7 @@ static void do_take_picture()
|
|||
{
|
||||
#if CAMERA == ENABLED
|
||||
camera.trigger_pic();
|
||||
if (g.log_bitmask & MASK_LOG_CAMERA) {
|
||||
if (should_log(MASK_LOG_CAMERA)) {
|
||||
DataFlash.Log_Write_Camera(ahrs, gps, current_loc);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -255,6 +255,8 @@ enum FlipState {
|
|||
#define MASK_LOG_COMPASS (1<<13)
|
||||
#define MASK_LOG_INAV (1<<14) // deprecated
|
||||
#define MASK_LOG_CAMERA (1<<15)
|
||||
#define MASK_LOG_WHEN_DISARMED (1UL<<16)
|
||||
#define MASK_LOG_ANY 0xFFFF
|
||||
|
||||
// DATA - event logging
|
||||
#define DATA_MAVLINK_FLOAT 1
|
||||
|
|
|
@ -22,7 +22,7 @@ static void init_barometer(bool full_calibration)
|
|||
static int32_t read_barometer(void)
|
||||
{
|
||||
barometer.read();
|
||||
if (g.log_bitmask & MASK_LOG_IMU) {
|
||||
if (should_log(MASK_LOG_IMU)) {
|
||||
Log_Write_Baro();
|
||||
}
|
||||
int32_t balt = barometer.get_altitude() * 100.0f;
|
||||
|
@ -124,7 +124,7 @@ static void update_optflow(void)
|
|||
// write to log if new data has arrived
|
||||
if (optflow.last_update() != last_of_update) {
|
||||
last_of_update = optflow.last_update();
|
||||
if (g.log_bitmask & MASK_LOG_OPTFLOW) {
|
||||
if (should_log(MASK_LOG_OPTFLOW)) {
|
||||
Log_Write_Optflow();
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ static void read_battery(void)
|
|||
}
|
||||
|
||||
// log battery info to the dataflash
|
||||
if (g.log_bitmask & MASK_LOG_CURRENT) {
|
||||
if (should_log(MASK_LOG_CURRENT)) {
|
||||
Log_Write_Current();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -403,3 +403,22 @@ static void telemetry_send(void)
|
|||
(AP_Frsky_Telem::FrSkyProtocol)g.serial2_protocol.get());
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
should we log a message type now?
|
||||
*/
|
||||
static bool should_log(uint32_t mask)
|
||||
{
|
||||
if (!(mask & g.log_bitmask) || in_mavlink_delay) {
|
||||
return false;
|
||||
}
|
||||
bool ret = motors.armed() || (g.log_bitmask & MASK_LOG_WHEN_DISARMED) != 0;
|
||||
if (ret && !DataFlash.logging_started() && !in_log_download) {
|
||||
// we have to set in_mavlink_delay to prevent logging while
|
||||
// writing headers
|
||||
in_mavlink_delay = true;
|
||||
start_logging();
|
||||
in_mavlink_delay = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue