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 @@
-
-
+
+
+
+