From bbbd9a10e375e1694611068b987266ae5fd8f737 Mon Sep 17 00:00:00 2001 From: peabody124 Date: Mon, 10 Jan 2011 05:42:53 +0000 Subject: [PATCH] OP-14 I2C Diagnostics: Improve the logging so that the events going into FSM are logged, and separately the erirq and evirq logs are exported git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2368 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/OpenPilot/Modules/Actuator/actuator.c | 2 +- flight/OpenPilot/Modules/System/systemmod.c | 2 + flight/OpenPilot/UAVObjects/inc/i2cstats.h | 18 ++++- flight/PiOS/STM32F10x/pios_i2c.c | 37 ++++++--- flight/PiOS/inc/pios_i2c.h | 6 +- ground/src/plugins/uavobjects/OPLogConvert.m | 10 ++- ground/src/plugins/uavobjects/i2cstats.cpp | 61 ++++++++++++++- ground/src/plugins/uavobjects/i2cstats.h | 18 ++++- ground/src/plugins/uavobjects/i2cstats.py | 75 ++++++++++++++++++- .../shared/uavobjectdefinition/i2cstats.xml | 6 +- 10 files changed, 205 insertions(+), 30 deletions(-) diff --git a/flight/OpenPilot/Modules/Actuator/actuator.c b/flight/OpenPilot/Modules/Actuator/actuator.c index 08c417078..f8c30a796 100644 --- a/flight/OpenPilot/Modules/Actuator/actuator.c +++ b/flight/OpenPilot/Modules/Actuator/actuator.c @@ -34,7 +34,6 @@ #include "openpilot.h" #include "actuator.h" #include "actuatorsettings.h" -//#include "vtolsettings.h" #include "systemsettings.h" #include "actuatordesired.h" #include "actuatorcommand.h" @@ -227,6 +226,7 @@ static void actuatorTask(void* parameters) // Update servo outputs bool success = true; + for (int n = 0; n < ACTUATORCOMMAND_CHANNEL_NUMELEM; ++n) { success &= set_channel(n, command.Channel[n]); diff --git a/flight/OpenPilot/Modules/System/systemmod.c b/flight/OpenPilot/Modules/System/systemmod.c index a381756dd..a8fbbd4b4 100644 --- a/flight/OpenPilot/Modules/System/systemmod.c +++ b/flight/OpenPilot/Modules/System/systemmod.c @@ -227,6 +227,8 @@ static void updateI2Cstats() PIOS_I2C_GetDiagnostics(&history, &i2cStats.event_errors); for(uint8_t i = 0; (i < I2C_LOG_DEPTH) && (i < I2CSTATS_EVENT_LOG_NUMELEM); i++) { + i2cStats.evirq_log[i] = history.evirq[i]; + i2cStats.erirq_log[i] = history.erirq[i]; i2cStats.event_log[i] = history.event[i]; i2cStats.state_log[i] = history.state[i]; } diff --git a/flight/OpenPilot/UAVObjects/inc/i2cstats.h b/flight/OpenPilot/UAVObjects/inc/i2cstats.h index 918294b84..11bc1eb00 100644 --- a/flight/OpenPilot/UAVObjects/inc/i2cstats.h +++ b/flight/OpenPilot/UAVObjects/inc/i2cstats.h @@ -41,7 +41,7 @@ #define I2CSTATS_H // Object constants -#define I2CSTATS_OBJID 1063893720U +#define I2CSTATS_OBJID 122889918U #define I2CSTATS_NAME "I2CStats" #define I2CSTATS_METANAME "I2CStatsMeta" #define I2CSTATS_ISSINGLEINST 1 @@ -75,8 +75,10 @@ typedef struct { uint16_t fsm_errors; uint16_t irq_errors; uint8_t last_error_type; - uint32_t event_log[5]; - uint32_t state_log[5]; + uint32_t evirq_log[5]; + uint32_t erirq_log[5]; + uint8_t event_log[5]; + uint8_t state_log[5]; } __attribute__((packed)) I2CStatsData; @@ -87,10 +89,20 @@ typedef struct { // Field last_error_type information /* Enumeration options for field last_error_type */ typedef enum { I2CSTATS_LAST_ERROR_TYPE_EVENT=0, I2CSTATS_LAST_ERROR_TYPE_FSM=1, I2CSTATS_LAST_ERROR_TYPE_INTERRUPT=2 } I2CStatslast_error_typeOptions; +// Field evirq_log information +/* Number of elements for field evirq_log */ +#define I2CSTATS_EVIRQ_LOG_NUMELEM 5 +// Field erirq_log information +/* Number of elements for field erirq_log */ +#define I2CSTATS_ERIRQ_LOG_NUMELEM 5 // Field event_log information +/* Enumeration options for field event_log */ +typedef enum { I2CSTATS_EVENT_LOG_I2C_EVENT_BUS_ERROR=0, I2CSTATS_EVENT_LOG_I2C_EVENT_START=1, I2CSTATS_EVENT_LOG_I2C_EVENT_STARTED_MORE_TXN_READ=2, I2CSTATS_EVENT_LOG_I2C_EVENT_STARTED_MORE_TXN_WRITE=3, I2CSTATS_EVENT_LOG_I2C_EVENT_STARTED_LAST_TXN_READ=4, I2CSTATS_EVENT_LOG_I2C_EVENT_STARTED_LAST_TXN_WRITE=5, I2CSTATS_EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_0=6, I2CSTATS_EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_1=7, I2CSTATS_EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_2=8, I2CSTATS_EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_GT_2=9, I2CSTATS_EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_0=10, I2CSTATS_EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_1=11, I2CSTATS_EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_2=12, I2CSTATS_EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_GT_2=13, I2CSTATS_EVENT_LOG_I2C_EVENT_NACK=14, I2CSTATS_EVENT_LOG_I2C_EVENT_STOPPED=15, I2CSTATS_EVENT_LOG_I2C_EVENT_AUTO=16 } I2CStatsevent_logOptions; /* Number of elements for field event_log */ #define I2CSTATS_EVENT_LOG_NUMELEM 5 // Field state_log information +/* Enumeration options for field state_log */ +typedef enum { I2CSTATS_STATE_LOG_I2C_STATE_FSM_FAULT=0, I2CSTATS_STATE_LOG_I2C_STATE_BUS_ERROR=1, I2CSTATS_STATE_LOG_I2C_STATE_STOPPED=2, I2CSTATS_STATE_LOG_I2C_STATE_STOPPING=3, I2CSTATS_STATE_LOG_I2C_STATE_STARTING=4, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_ADDR=5, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_ONE=6, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_FIRST=7, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_MIDDLE=8, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_LAST=9, I2CSTATS_STATE_LOG_I2C_STATE_R_MORE_TXN_POST_LAST=10, I2CSTATS_STATE_LOG_R_LAST_TXN_ADDR=11, I2CSTATS_STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_ONE=12, I2CSTATS_STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_FIRST=13, I2CSTATS_STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_MIDDLE=14, I2CSTATS_STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_LAST=15, I2CSTATS_STATE_LOG_I2C_STATE_R_LAST_TXN_POST_LAST=16, I2CSTATS_STATE_LOG_I2C_STATE_W_MORE_TXN_ADDR=17, I2CSTATS_STATE_LOG_I2C_STATE_W_MORE_TXN_MIDDLE=18, I2CSTATS_STATE_LOG_I2C_STATE_W_MORE_TXN_LAST=19, I2CSTATS_STATE_LOG_I2C_STATE_W_LAST_TXN_ADDR=20, I2CSTATS_STATE_LOG_I2C_STATE_W_LAST_TXN_MIDDLE=21, I2CSTATS_STATE_LOG_I2C_STATE_W_LAST_TXN_LAST=22, I2CSTATS_STATE_LOG_I2C_STATE_NACK=23 } I2CStatsstate_logOptions; /* Number of elements for field state_log */ #define I2CSTATS_STATE_LOG_NUMELEM 5 diff --git a/flight/PiOS/STM32F10x/pios_i2c.c b/flight/PiOS/STM32F10x/pios_i2c.c index 10c8e91c8..e7bc6feb4 100644 --- a/flight/PiOS/STM32F10x/pios_i2c.c +++ b/flight/PiOS/STM32F10x/pios_i2c.c @@ -66,10 +66,19 @@ enum i2c_adapter_event { #if defined(PIOS_I2C_DIAGNOSTICS) static struct pios_i2c_fault_history i2c_adapter_fault_history; -static uint32_t i2c_event_history[I2C_LOG_DEPTH]; -static uint8_t i2c_event_history_pointer = 0; -static enum i2c_adapter_state i2c_state_history[I2C_LOG_DEPTH]; -static uint8_t i2c_state_history_pointer = 0; + +volatile uint32_t i2c_evirq_history[I2C_LOG_DEPTH]; +volatile uint8_t i2c_evirq_history_pointer = 0; + +volatile uint32_t i2c_erirq_history[I2C_LOG_DEPTH]; +volatile uint8_t i2c_erirq_history_pointer = 0; + +volatile enum i2c_adapter_state i2c_state_history[I2C_LOG_DEPTH]; +volatile uint8_t i2c_state_history_pointer = 0; + +volatile enum i2c_adapter_event i2c_state_event_history[I2C_LOG_DEPTH]; +volatile uint8_t i2c_state_event_history_pointer; + static uint16_t i2c_fsm_fault_count = 0; static uint16_t i2c_bad_event_counter = 0; static uint16_t i2c_error_interrupt_counter = 0; @@ -575,8 +584,12 @@ static void i2c_adapter_inject_event(struct pios_i2c_adapter *i2c_adapter, enum PIOS_IRQ_Disable(); #if defined(PIOS_I2C_DIAGNOSTICS) + i2c_state_event_history[i2c_state_event_history_pointer] = event; + i2c_state_event_history_pointer = (i2c_state_event_history_pointer + 1) % I2C_LOG_DEPTH; + i2c_state_history[i2c_state_history_pointer] = i2c_adapter->curr_state; i2c_state_history_pointer = (i2c_state_history_pointer + 1) % I2C_LOG_DEPTH; + if(i2c_adapter_transitions[i2c_adapter->curr_state].next_state[event] == I2C_STATE_FSM_FAULT) i2c_adapter_log_fault(PIOS_I2C_ERROR_FSM); #endif @@ -758,8 +771,12 @@ void i2c_adapter_log_fault(enum pios_i2c_error_type type) #if defined(PIOS_I2C_DIAGNOSTICS) i2c_adapter_fault_history.type = type; for(uint8_t i = 0; i < I2C_LOG_DEPTH; i++) { + i2c_adapter_fault_history.evirq[i] = + i2c_evirq_history[(I2C_LOG_DEPTH + i2c_evirq_history_pointer - 1 - i) % I2C_LOG_DEPTH]; + i2c_adapter_fault_history.erirq[i] = + i2c_erirq_history[(I2C_LOG_DEPTH + i2c_erirq_history_pointer - 1 - i) % I2C_LOG_DEPTH]; i2c_adapter_fault_history.event[i] = - i2c_event_history[(I2C_LOG_DEPTH + i2c_event_history_pointer - 1 - i) % I2C_LOG_DEPTH]; + i2c_state_event_history[(I2C_LOG_DEPTH + i2c_state_event_history_pointer - 1 - i) % I2C_LOG_DEPTH]; i2c_adapter_fault_history.state[i] = i2c_state_history[(I2C_LOG_DEPTH + i2c_state_history_pointer - 1 - i) % I2C_LOG_DEPTH]; } @@ -916,8 +933,8 @@ void PIOS_I2C_EV_IRQ_Handler(uint8_t i2c) #if defined(PIOS_I2C_DIAGNOSTICS) /* Store event for diagnostics */ - i2c_event_history[i2c_event_history_pointer] = event; - i2c_event_history_pointer = (i2c_event_history_pointer + 1) % I2C_LOG_DEPTH; + i2c_evirq_history[i2c_evirq_history_pointer] = event; + i2c_evirq_history_pointer = (i2c_evirq_history_pointer + 1) % I2C_LOG_DEPTH; #endif event &= 0x000700FF; @@ -1025,8 +1042,6 @@ skip_event: ; } -uint32_t i2c_interrupt_history[5]; -uint8_t i2c_interrupt_history_pointer = 0; void PIOS_I2C_ER_IRQ_Handler(uint8_t i2c) { @@ -1041,8 +1056,8 @@ void PIOS_I2C_ER_IRQ_Handler(uint8_t i2c) #if defined(PIOS_I2C_DIAGNOSTICS) uint32_t event = I2C_GetLastEvent(i2c_adapter->cfg->regs); - i2c_interrupt_history[i2c_interrupt_history_pointer] = event; - i2c_interrupt_history_pointer = (i2c_interrupt_history_pointer + 1) % 5; + i2c_erirq_history[i2c_erirq_history_pointer] = event; + i2c_erirq_history_pointer = (i2c_erirq_history_pointer + 1) % 5; #endif diff --git a/flight/PiOS/inc/pios_i2c.h b/flight/PiOS/inc/pios_i2c.h index 800bdfd5b..d38f5b18b 100644 --- a/flight/PiOS/inc/pios_i2c.h +++ b/flight/PiOS/inc/pios_i2c.h @@ -58,8 +58,10 @@ enum pios_i2c_error_type { struct pios_i2c_fault_history { enum pios_i2c_error_type type; - uint32_t event[I2C_LOG_DEPTH]; - uint32_t state[I2C_LOG_DEPTH]; + uint32_t evirq[I2C_LOG_DEPTH]; + uint32_t erirq[I2C_LOG_DEPTH]; + uint8_t event[I2C_LOG_DEPTH]; + uint8_t state[I2C_LOG_DEPTH]; }; /* Public Functions */ diff --git a/ground/src/plugins/uavobjects/OPLogConvert.m b/ground/src/plugins/uavobjects/OPLogConvert.m index 971494b3e..c9795be8f 100644 --- a/ground/src/plugins/uavobjects/OPLogConvert.m +++ b/ground/src/plugins/uavobjects/OPLogConvert.m @@ -239,6 +239,8 @@ function [] = OPLogConvert() I2CStats(1).fsm_errors = 0; I2CStats(1).irq_errors = 0; I2CStats(1).last_error_type = 0; + I2CStats(1).evirq_log = zeros(1,5); + I2CStats(1).erirq_log = zeros(1,5); I2CStats(1).event_log = zeros(1,5); I2CStats(1).state_log = zeros(1,5); @@ -527,7 +529,7 @@ function [] = OPLogConvert() case 3590360786 HomeLocation(homelocationIdx) = ReadHomeLocationObject(fid, timestamp); homelocationIdx = homelocationIdx + 1; - case 1063893720 + case 122889918 I2CStats(i2cstatsIdx) = ReadI2CStatsObject(fid, timestamp); i2cstatsIdx = i2cstatsIdx + 1; case 2841592332 @@ -1081,8 +1083,10 @@ function [I2CStats] = ReadI2CStatsObject(fid, timestamp) I2CStats.fsm_errors = double(fread(fid, 1, 'uint16')); I2CStats.irq_errors = double(fread(fid, 1, 'uint16')); I2CStats.last_error_type = double(fread(fid, 1, 'uint8')); - I2CStats.event_log = double(fread(fid, 5, 'uint32')); - I2CStats.state_log = double(fread(fid, 5, 'uint32')); + I2CStats.evirq_log = double(fread(fid, 5, 'uint32')); + I2CStats.erirq_log = double(fread(fid, 5, 'uint32')); + I2CStats.event_log = double(fread(fid, 5, 'uint8')); + I2CStats.state_log = double(fread(fid, 5, 'uint8')); % read CRC fread(fid, 1, 'uint8'); end diff --git a/ground/src/plugins/uavobjects/i2cstats.cpp b/ground/src/plugins/uavobjects/i2cstats.cpp index 837bee602..9caf00299 100644 --- a/ground/src/plugins/uavobjects/i2cstats.cpp +++ b/ground/src/plugins/uavobjects/i2cstats.cpp @@ -59,20 +59,77 @@ I2CStats::I2CStats(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME) last_error_typeEnumOptions.append("FSM"); last_error_typeEnumOptions.append("INTERRUPT"); fields.append( new UAVObjectField(QString("last_error_type"), QString(""), UAVObjectField::ENUM, last_error_typeElemNames, last_error_typeEnumOptions) ); + QStringList evirq_logElemNames; + evirq_logElemNames.append("0"); + evirq_logElemNames.append("1"); + evirq_logElemNames.append("2"); + evirq_logElemNames.append("3"); + evirq_logElemNames.append("4"); + fields.append( new UAVObjectField(QString("evirq_log"), QString(""), UAVObjectField::UINT32, evirq_logElemNames, QStringList()) ); + QStringList erirq_logElemNames; + erirq_logElemNames.append("0"); + erirq_logElemNames.append("1"); + erirq_logElemNames.append("2"); + erirq_logElemNames.append("3"); + erirq_logElemNames.append("4"); + fields.append( new UAVObjectField(QString("erirq_log"), QString(""), UAVObjectField::UINT32, erirq_logElemNames, QStringList()) ); QStringList event_logElemNames; event_logElemNames.append("0"); event_logElemNames.append("1"); event_logElemNames.append("2"); event_logElemNames.append("3"); event_logElemNames.append("4"); - fields.append( new UAVObjectField(QString("event_log"), QString(""), UAVObjectField::UINT32, event_logElemNames, QStringList()) ); + QStringList event_logEnumOptions; + event_logEnumOptions.append("I2C_EVENT_BUS_ERROR"); + event_logEnumOptions.append("I2C_EVENT_START"); + event_logEnumOptions.append("I2C_EVENT_STARTED_MORE_TXN_READ"); + event_logEnumOptions.append("I2C_EVENT_STARTED_MORE_TXN_WRITE"); + event_logEnumOptions.append("I2C_EVENT_STARTED_LAST_TXN_READ"); + event_logEnumOptions.append("I2C_EVENT_STARTED_LAST_TXN_WRITE"); + event_logEnumOptions.append("I2C_EVENT_ADDR_SENT_LEN_EQ_0"); + event_logEnumOptions.append("I2C_EVENT_ADDR_SENT_LEN_EQ_1"); + event_logEnumOptions.append("I2C_EVENT_ADDR_SENT_LEN_EQ_2"); + event_logEnumOptions.append("I2C_EVENT_ADDR_SENT_LEN_GT_2"); + event_logEnumOptions.append("I2C_EVENT_TRANSFER_DONE_LEN_EQ_0"); + event_logEnumOptions.append("I2C_EVENT_TRANSFER_DONE_LEN_EQ_1"); + event_logEnumOptions.append("I2C_EVENT_TRANSFER_DONE_LEN_EQ_2"); + event_logEnumOptions.append("I2C_EVENT_TRANSFER_DONE_LEN_GT_2"); + event_logEnumOptions.append("I2C_EVENT_NACK"); + event_logEnumOptions.append("I2C_EVENT_STOPPED"); + event_logEnumOptions.append("I2C_EVENT_AUTO"); + fields.append( new UAVObjectField(QString("event_log"), QString(""), UAVObjectField::ENUM, event_logElemNames, event_logEnumOptions) ); QStringList state_logElemNames; state_logElemNames.append("0"); state_logElemNames.append("1"); state_logElemNames.append("2"); state_logElemNames.append("3"); state_logElemNames.append("4"); - fields.append( new UAVObjectField(QString("state_log"), QString(""), UAVObjectField::UINT32, state_logElemNames, QStringList()) ); + QStringList state_logEnumOptions; + state_logEnumOptions.append("I2C_STATE_FSM_FAULT"); + state_logEnumOptions.append("I2C_STATE_BUS_ERROR"); + state_logEnumOptions.append("I2C_STATE_STOPPED"); + state_logEnumOptions.append("I2C_STATE_STOPPING"); + state_logEnumOptions.append("I2C_STATE_STARTING"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_ADDR"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_PRE_ONE"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_PRE_FIRST"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_PRE_MIDDLE"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_LAST"); + state_logEnumOptions.append("I2C_STATE_R_MORE_TXN_POST_LAST"); + state_logEnumOptions.append("R_LAST_TXN_ADDR"); + state_logEnumOptions.append("I2C_STATE_R_LAST_TXN_PRE_ONE"); + state_logEnumOptions.append("I2C_STATE_R_LAST_TXN_PRE_FIRST"); + state_logEnumOptions.append("I2C_STATE_R_LAST_TXN_PRE_MIDDLE"); + state_logEnumOptions.append("I2C_STATE_R_LAST_TXN_PRE_LAST"); + state_logEnumOptions.append("I2C_STATE_R_LAST_TXN_POST_LAST"); + state_logEnumOptions.append("I2C_STATE_W_MORE_TXN_ADDR"); + state_logEnumOptions.append("I2C_STATE_W_MORE_TXN_MIDDLE"); + state_logEnumOptions.append("I2C_STATE_W_MORE_TXN_LAST"); + state_logEnumOptions.append("I2C_STATE_W_LAST_TXN_ADDR"); + state_logEnumOptions.append("I2C_STATE_W_LAST_TXN_MIDDLE"); + state_logEnumOptions.append("I2C_STATE_W_LAST_TXN_LAST"); + state_logEnumOptions.append("I2C_STATE_NACK"); + fields.append( new UAVObjectField(QString("state_log"), QString(""), UAVObjectField::ENUM, state_logElemNames, state_logEnumOptions) ); // Initialize object initializeFields(fields, (quint8*)&data, NUMBYTES); diff --git a/ground/src/plugins/uavobjects/i2cstats.h b/ground/src/plugins/uavobjects/i2cstats.h index f5ebcca49..f312b7052 100644 --- a/ground/src/plugins/uavobjects/i2cstats.h +++ b/ground/src/plugins/uavobjects/i2cstats.h @@ -47,8 +47,10 @@ public: quint16 fsm_errors; quint16 irq_errors; quint8 last_error_type; - quint32 event_log[5]; - quint32 state_log[5]; + quint32 evirq_log[5]; + quint32 erirq_log[5]; + quint8 event_log[5]; + quint8 state_log[5]; } __attribute__((packed)) DataFields; @@ -59,16 +61,26 @@ public: // Field last_error_type information /* Enumeration options for field last_error_type */ typedef enum { LAST_ERROR_TYPE_EVENT=0, LAST_ERROR_TYPE_FSM=1, LAST_ERROR_TYPE_INTERRUPT=2 } last_error_typeOptions; + // Field evirq_log information + /* Number of elements for field evirq_log */ + static const quint32 EVIRQ_LOG_NUMELEM = 5; + // Field erirq_log information + /* Number of elements for field erirq_log */ + static const quint32 ERIRQ_LOG_NUMELEM = 5; // Field event_log information + /* Enumeration options for field event_log */ + typedef enum { EVENT_LOG_I2C_EVENT_BUS_ERROR=0, EVENT_LOG_I2C_EVENT_START=1, EVENT_LOG_I2C_EVENT_STARTED_MORE_TXN_READ=2, EVENT_LOG_I2C_EVENT_STARTED_MORE_TXN_WRITE=3, EVENT_LOG_I2C_EVENT_STARTED_LAST_TXN_READ=4, EVENT_LOG_I2C_EVENT_STARTED_LAST_TXN_WRITE=5, EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_0=6, EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_1=7, EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_EQ_2=8, EVENT_LOG_I2C_EVENT_ADDR_SENT_LEN_GT_2=9, EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_0=10, EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_1=11, EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_EQ_2=12, EVENT_LOG_I2C_EVENT_TRANSFER_DONE_LEN_GT_2=13, EVENT_LOG_I2C_EVENT_NACK=14, EVENT_LOG_I2C_EVENT_STOPPED=15, EVENT_LOG_I2C_EVENT_AUTO=16 } event_logOptions; /* Number of elements for field event_log */ static const quint32 EVENT_LOG_NUMELEM = 5; // Field state_log information + /* Enumeration options for field state_log */ + typedef enum { STATE_LOG_I2C_STATE_FSM_FAULT=0, STATE_LOG_I2C_STATE_BUS_ERROR=1, STATE_LOG_I2C_STATE_STOPPED=2, STATE_LOG_I2C_STATE_STOPPING=3, STATE_LOG_I2C_STATE_STARTING=4, STATE_LOG_I2C_STATE_R_MORE_TXN_ADDR=5, STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_ONE=6, STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_FIRST=7, STATE_LOG_I2C_STATE_R_MORE_TXN_PRE_MIDDLE=8, STATE_LOG_I2C_STATE_R_MORE_TXN_LAST=9, STATE_LOG_I2C_STATE_R_MORE_TXN_POST_LAST=10, STATE_LOG_R_LAST_TXN_ADDR=11, STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_ONE=12, STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_FIRST=13, STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_MIDDLE=14, STATE_LOG_I2C_STATE_R_LAST_TXN_PRE_LAST=15, STATE_LOG_I2C_STATE_R_LAST_TXN_POST_LAST=16, STATE_LOG_I2C_STATE_W_MORE_TXN_ADDR=17, STATE_LOG_I2C_STATE_W_MORE_TXN_MIDDLE=18, STATE_LOG_I2C_STATE_W_MORE_TXN_LAST=19, STATE_LOG_I2C_STATE_W_LAST_TXN_ADDR=20, STATE_LOG_I2C_STATE_W_LAST_TXN_MIDDLE=21, STATE_LOG_I2C_STATE_W_LAST_TXN_LAST=22, STATE_LOG_I2C_STATE_NACK=23 } state_logOptions; /* Number of elements for field state_log */ static const quint32 STATE_LOG_NUMELEM = 5; // Constants - static const quint32 OBJID = 1063893720U; + static const quint32 OBJID = 122889918U; static const QString NAME; static const QString DESCRIPTION; static const bool ISSINGLEINST = 1; diff --git a/ground/src/plugins/uavobjects/i2cstats.py b/ground/src/plugins/uavobjects/i2cstats.py index 6bdba27eb..9cf7238f2 100644 --- a/ground/src/plugins/uavobjects/i2cstats.py +++ b/ground/src/plugins/uavobjects/i2cstats.py @@ -81,7 +81,7 @@ _fields = [ \ } ), uavobject.UAVObjectField( - 'event_log', + 'evirq_log', 'I', 5, [ @@ -95,7 +95,7 @@ _fields = [ \ } ), uavobject.UAVObjectField( - 'state_log', + 'erirq_log', 'I', 5, [ @@ -108,12 +108,81 @@ _fields = [ \ { } ), + uavobject.UAVObjectField( + 'event_log', + 'b', + 5, + [ + '0', + '1', + '2', + '3', + '4', + ], + { + '0' : 'I2C_EVENT_BUS_ERROR', + '1' : 'I2C_EVENT_START', + '2' : 'I2C_EVENT_STARTED_MORE_TXN_READ', + '3' : 'I2C_EVENT_STARTED_MORE_TXN_WRITE', + '4' : 'I2C_EVENT_STARTED_LAST_TXN_READ', + '5' : 'I2C_EVENT_STARTED_LAST_TXN_WRITE', + '6' : 'I2C_EVENT_ADDR_SENT_LEN_EQ_0', + '7' : 'I2C_EVENT_ADDR_SENT_LEN_EQ_1', + '8' : 'I2C_EVENT_ADDR_SENT_LEN_EQ_2', + '9' : 'I2C_EVENT_ADDR_SENT_LEN_GT_2', + '10' : 'I2C_EVENT_TRANSFER_DONE_LEN_EQ_0', + '11' : 'I2C_EVENT_TRANSFER_DONE_LEN_EQ_1', + '12' : 'I2C_EVENT_TRANSFER_DONE_LEN_EQ_2', + '13' : 'I2C_EVENT_TRANSFER_DONE_LEN_GT_2', + '14' : 'I2C_EVENT_NACK', + '15' : 'I2C_EVENT_STOPPED', + '16' : 'I2C_EVENT_AUTO', + } + ), + uavobject.UAVObjectField( + 'state_log', + 'b', + 5, + [ + '0', + '1', + '2', + '3', + '4', + ], + { + '0' : 'I2C_STATE_FSM_FAULT', + '1' : 'I2C_STATE_BUS_ERROR', + '2' : 'I2C_STATE_STOPPED', + '3' : 'I2C_STATE_STOPPING', + '4' : 'I2C_STATE_STARTING', + '5' : 'I2C_STATE_R_MORE_TXN_ADDR', + '6' : 'I2C_STATE_R_MORE_TXN_PRE_ONE', + '7' : 'I2C_STATE_R_MORE_TXN_PRE_FIRST', + '8' : 'I2C_STATE_R_MORE_TXN_PRE_MIDDLE', + '9' : 'I2C_STATE_R_MORE_TXN_LAST', + '10' : 'I2C_STATE_R_MORE_TXN_POST_LAST', + '11' : 'R_LAST_TXN_ADDR', + '12' : 'I2C_STATE_R_LAST_TXN_PRE_ONE', + '13' : 'I2C_STATE_R_LAST_TXN_PRE_FIRST', + '14' : 'I2C_STATE_R_LAST_TXN_PRE_MIDDLE', + '15' : 'I2C_STATE_R_LAST_TXN_PRE_LAST', + '16' : 'I2C_STATE_R_LAST_TXN_POST_LAST', + '17' : 'I2C_STATE_W_MORE_TXN_ADDR', + '18' : 'I2C_STATE_W_MORE_TXN_MIDDLE', + '19' : 'I2C_STATE_W_MORE_TXN_LAST', + '20' : 'I2C_STATE_W_LAST_TXN_ADDR', + '21' : 'I2C_STATE_W_LAST_TXN_MIDDLE', + '22' : 'I2C_STATE_W_LAST_TXN_LAST', + '23' : 'I2C_STATE_NACK', + } + ), ] class I2CStats(uavobject.UAVObject): ## Object constants - OBJID = 1063893720 + OBJID = 122889918 NAME = "I2CStats" METANAME = "I2CStatsMeta" ISSINGLEINST = 1 diff --git a/ground/src/shared/uavobjectdefinition/i2cstats.xml b/ground/src/shared/uavobjectdefinition/i2cstats.xml index 9fe45c919..f2175fc5c 100644 --- a/ground/src/shared/uavobjectdefinition/i2cstats.xml +++ b/ground/src/shared/uavobjectdefinition/i2cstats.xml @@ -5,8 +5,10 @@ - - + + + +