AP_Logger: log battery and cell information using instance numbers

This commit is contained in:
Peter Barker 2020-01-08 10:58:03 +11:00 committed by Peter Barker
parent 552191925b
commit 2c5e07cb09
3 changed files with 12 additions and 84 deletions

View File

@ -445,10 +445,7 @@ private:
void Write_Compass_instance(uint64_t time_us, void Write_Compass_instance(uint64_t time_us,
uint8_t mag_instance, uint8_t mag_instance,
enum LogMessages type); enum LogMessages type);
void Write_Current_instance(uint64_t time_us, void Write_Current_instance(uint64_t time_us, uint8_t battery_instance);
uint8_t battery_instance,
enum LogMessages type,
enum LogMessages celltype);
void Write_IMUDT_instance(uint64_t time_us, void Write_IMUDT_instance(uint64_t time_us,
uint8_t imu_instance, uint8_t imu_instance,
enum LogMessages type); enum LogMessages type);

View File

@ -641,9 +641,7 @@ void AP_Logger::Write_AttitudeView(AP_AHRS_View &ahrs, const Vector3f &targets)
} }
void AP_Logger::Write_Current_instance(const uint64_t time_us, void AP_Logger::Write_Current_instance(const uint64_t time_us,
const uint8_t battery_instance, const uint8_t battery_instance)
const enum LogMessages type,
const enum LogMessages celltype)
{ {
AP_BattMonitor &battery = AP::battery(); AP_BattMonitor &battery = AP::battery();
float temp; float temp;
@ -660,8 +658,9 @@ void AP_Logger::Write_Current_instance(const uint64_t time_us,
} }
const struct log_Current pkt = { const struct log_Current pkt = {
LOG_PACKET_HEADER_INIT(type), LOG_PACKET_HEADER_INIT(LOG_CURRENT_MSG),
time_us : time_us, time_us : time_us,
instance : battery_instance,
voltage : battery.voltage(battery_instance), voltage : battery.voltage(battery_instance),
voltage_resting : battery.voltage_resting_estimate(battery_instance), voltage_resting : battery.voltage_resting_estimate(battery_instance),
current_amps : current, current_amps : current,
@ -676,8 +675,9 @@ void AP_Logger::Write_Current_instance(const uint64_t time_us,
if (battery.has_cell_voltages(battery_instance)) { if (battery.has_cell_voltages(battery_instance)) {
const AP_BattMonitor::cells &cells = battery.get_cell_voltages(battery_instance); const AP_BattMonitor::cells &cells = battery.get_cell_voltages(battery_instance);
struct log_Current_Cells cell_pkt{ struct log_Current_Cells cell_pkt{
LOG_PACKET_HEADER_INIT(celltype), LOG_PACKET_HEADER_INIT(LOG_CURRENT_CELLS_MSG),
time_us : time_us, time_us : time_us,
instance : battery_instance,
voltage : battery.voltage(battery_instance) voltage : battery.voltage(battery_instance)
}; };
for (uint8_t i = 0; i < ARRAY_SIZE(cells.cells); i++) { for (uint8_t i = 0; i < ARRAY_SIZE(cells.cells); i++) {
@ -694,23 +694,10 @@ void AP_Logger::Write_Current_instance(const uint64_t time_us,
// Write an Current data packet // Write an Current data packet
void AP_Logger::Write_Current() void AP_Logger::Write_Current()
{ {
// Big painful assert to ensure that logging won't produce suprising results when the
// number of battery monitors changes, does have the built in expectation that
// LOG_COMPASS_MSG follows the last LOG_CURRENT_CELLSx_MSG
static_assert(((LOG_CURRENT_MSG + AP_BATT_MONITOR_MAX_INSTANCES) == LOG_CURRENT_CELLS_MSG) &&
((LOG_CURRENT_CELLS_MSG + AP_BATT_MONITOR_MAX_INSTANCES) == LOG_COMPASS_MSG),
"The number of batt monitors has changed without updating the log "
"table entries. Please add new enums for LOG_CURRENT_MSG, LOG_CURRENT_CELLS_MSG "
"directly following the highest indexed fields. Don't forget to update the log "
"description table as well.");
const uint64_t time_us = AP_HAL::micros64(); const uint64_t time_us = AP_HAL::micros64();
const uint8_t num_instances = AP::battery().num_instances(); const uint8_t num_instances = AP::battery().num_instances();
for (uint8_t i = 0; i < num_instances; i++) { for (uint8_t i = 0; i < num_instances; i++) {
Write_Current_instance(time_us, Write_Current_instance(time_us, i);
i,
(LogMessages)((uint8_t)LOG_CURRENT_MSG + i),
(LogMessages)((uint8_t)LOG_CURRENT_CELLS_MSG + i));
} }
} }

View File

@ -767,6 +767,7 @@ struct PACKED log_PID {
struct PACKED log_Current { struct PACKED log_Current {
LOG_PACKET_HEADER; LOG_PACKET_HEADER;
uint64_t time_us; uint64_t time_us;
uint8_t instance;
float voltage; float voltage;
float voltage_resting; float voltage_resting;
float current_amps; float current_amps;
@ -801,6 +802,7 @@ struct PACKED log_ADSB {
struct PACKED log_Current_Cells { struct PACKED log_Current_Cells {
LOG_PACKET_HEADER; LOG_PACKET_HEADER;
uint64_t time_us; uint64_t time_us;
uint8_t instance;
float voltage; float voltage;
uint16_t cell_voltages[10]; uint16_t cell_voltages[10];
}; };
@ -1307,16 +1309,6 @@ struct PACKED log_Arm_Disarm {
#define QUAT_UNITS "s#????" #define QUAT_UNITS "s#????"
#define QUAT_MULTS "F-????" #define QUAT_MULTS "F-????"
#define CURR_LABELS "TimeUS,Volt,VoltR,Curr,CurrTot,EnrgTot,Temp,Res"
#define CURR_FMT "Qfffffcf"
#define CURR_UNITS "svvA?JOw"
#define CURR_MULTS "F000?/?0"
#define CURR_CELL_LABELS "TimeUS,Volt,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10"
#define CURR_CELL_FMT "QfHHHHHHHHHH"
#define CURR_CELL_UNITS "svvvvvvvvvvv"
#define CURR_CELL_MULTS "F00000000000"
#define ARSP_LABELS "TimeUS,Airspeed,DiffPress,Temp,RawPress,Offset,U,Health,Hfp,Pri" #define ARSP_LABELS "TimeUS,Airspeed,DiffPress,Temp,RawPress,Offset,U,Health,Hfp,Pri"
#define ARSP_FMT "QffcffBBfB" #define ARSP_FMT "QffcffBBfB"
#define ARSP_UNITS "snPOPP----" #define ARSP_UNITS "snPOPP----"
@ -1372,42 +1364,10 @@ struct PACKED log_Arm_Disarm {
"TRIG", "QIHLLeeeccC","TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,GPSAlt,Roll,Pitch,Yaw", "s--DUmmmddd", "F--GGBBBBBB" }, \ "TRIG", "QIHLLeeeccC","TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,GPSAlt,Roll,Pitch,Yaw", "s--DUmmmddd", "F--GGBBBBBB" }, \
{ LOG_ARSP_MSG, sizeof(log_AIRSPEED), "ARSP", ARSP_FMT, ARSP_LABELS, ARSP_UNITS, ARSP_MULTS }, \ { LOG_ARSP_MSG, sizeof(log_AIRSPEED), "ARSP", ARSP_FMT, ARSP_LABELS, ARSP_UNITS, ARSP_MULTS }, \
{ LOG_ASP2_MSG, sizeof(log_AIRSPEED), "ASP2", ARSP_FMT, ARSP_LABELS, ARSP_UNITS, ARSP_MULTS }, \ { LOG_ASP2_MSG, sizeof(log_AIRSPEED), "ASP2", ARSP_FMT, ARSP_LABELS, ARSP_UNITS, ARSP_MULTS }, \
{ LOG_CURRENT_MSG, sizeof(log_Current), \ { LOG_CURRENT_MSG, sizeof(log_Current), \
"BAT", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \ "BAT", "QBfffffcf", "TimeUS,Instance,Volt,VoltR,Curr,CurrTot,EnrgTot,Temp,Res", "s#vvA?JOw", "F-000?/?0" }, \
{ LOG_CURRENT2_MSG, sizeof(log_Current), \
"BAT2", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT3_MSG, sizeof(log_Current), \
"BAT3", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT4_MSG, sizeof(log_Current), \
"BAT4", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT5_MSG, sizeof(log_Current), \
"BAT5", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT6_MSG, sizeof(log_Current), \
"BAT6", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT7_MSG, sizeof(log_Current), \
"BAT7", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT8_MSG, sizeof(log_Current), \
"BAT8", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT9_MSG, sizeof(log_Current), \
"BAT9", CURR_FMT,CURR_LABELS,CURR_UNITS,CURR_MULTS }, \
{ LOG_CURRENT_CELLS_MSG, sizeof(log_Current_Cells), \ { LOG_CURRENT_CELLS_MSG, sizeof(log_Current_Cells), \
"BCL", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \ "BCL", "QBfHHHHHHHHHH", "TimeUS,Instance,Volt,V1,V2,V3,V4,V5,V6,V7,V8,V9,V10", "s#vvvvvvvvvvv", "F-00000000000" }, \
{ LOG_CURRENT_CELLS2_MSG, sizeof(log_Current_Cells), \
"BCL2", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS3_MSG, sizeof(log_Current_Cells), \
"BCL3", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS4_MSG, sizeof(log_Current_Cells), \
"BCL4", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS5_MSG, sizeof(log_Current_Cells), \
"BCL5", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS6_MSG, sizeof(log_Current_Cells), \
"BCL6", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS7_MSG, sizeof(log_Current_Cells), \
"BCL7", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS8_MSG, sizeof(log_Current_Cells), \
"BCL8", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_CURRENT_CELLS9_MSG, sizeof(log_Current_Cells), \
"BCL9", CURR_CELL_FMT, CURR_CELL_LABELS, CURR_CELL_UNITS, CURR_CELL_MULTS }, \
{ LOG_ATTITUDE_MSG, sizeof(log_Attitude),\ { LOG_ATTITUDE_MSG, sizeof(log_Attitude),\
"ATT", "QccccCCCC", "TimeUS,DesRoll,Roll,DesPitch,Pitch,DesYaw,Yaw,ErrRP,ErrYaw", "sddddhhdh", "FBBBBBBBB" }, \ "ATT", "QccccCCCC", "TimeUS,DesRoll,Roll,DesPitch,Pitch,DesYaw,Yaw,ErrRP,ErrYaw", "sddddhhdh", "FBBBBBBBB" }, \
{ LOG_COMPASS_MSG, sizeof(log_Compass), \ { LOG_COMPASS_MSG, sizeof(log_Compass), \
@ -1663,23 +1623,7 @@ enum LogMessages : uint8_t {
LOG_ARSP_MSG, LOG_ARSP_MSG,
LOG_ATTITUDE_MSG, LOG_ATTITUDE_MSG,
LOG_CURRENT_MSG, LOG_CURRENT_MSG,
LOG_CURRENT2_MSG,
LOG_CURRENT3_MSG,
LOG_CURRENT4_MSG,
LOG_CURRENT5_MSG,
LOG_CURRENT6_MSG,
LOG_CURRENT7_MSG,
LOG_CURRENT8_MSG,
LOG_CURRENT9_MSG,
LOG_CURRENT_CELLS_MSG, LOG_CURRENT_CELLS_MSG,
LOG_CURRENT_CELLS2_MSG,
LOG_CURRENT_CELLS3_MSG,
LOG_CURRENT_CELLS4_MSG,
LOG_CURRENT_CELLS5_MSG,
LOG_CURRENT_CELLS6_MSG,
LOG_CURRENT_CELLS7_MSG,
LOG_CURRENT_CELLS8_MSG,
LOG_CURRENT_CELLS9_MSG,
LOG_COMPASS_MSG, LOG_COMPASS_MSG,
LOG_COMPASS2_MSG, LOG_COMPASS2_MSG,
LOG_COMPASS3_MSG, LOG_COMPASS3_MSG,