mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-19 09:54:15 +01:00
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
This commit is contained in:
parent
aae4d113f5
commit
bbbd9a10e3
@ -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]);
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -5,8 +5,10 @@
|
||||
<field name="fsm_errors" units="" type="uint16" elements="1"/>
|
||||
<field name="irq_errors" units="" type="uint16" elements="1"/>
|
||||
<field name="last_error_type" units="" type="enum" elements="1" options="EVENT,FSM,INTERRUPT"/>
|
||||
<field name="event_log" units="" type="uint32" elements="5"/>
|
||||
<field name="state_log" units="" type="uint32" elements="5"/>
|
||||
<field name="evirq_log" units="" type="uint32" elements="5"/>
|
||||
<field name="erirq_log" units="" type="uint32" elements="5"/>
|
||||
<field name="event_log" units="" type="enum" elements="5" options="I2C_EVENT_BUS_ERROR, I2C_EVENT_START, I2C_EVENT_STARTED_MORE_TXN_READ, I2C_EVENT_STARTED_MORE_TXN_WRITE, I2C_EVENT_STARTED_LAST_TXN_READ, I2C_EVENT_STARTED_LAST_TXN_WRITE, I2C_EVENT_ADDR_SENT_LEN_EQ_0, I2C_EVENT_ADDR_SENT_LEN_EQ_1, I2C_EVENT_ADDR_SENT_LEN_EQ_2, I2C_EVENT_ADDR_SENT_LEN_GT_2, I2C_EVENT_TRANSFER_DONE_LEN_EQ_0, I2C_EVENT_TRANSFER_DONE_LEN_EQ_1, I2C_EVENT_TRANSFER_DONE_LEN_EQ_2, I2C_EVENT_TRANSFER_DONE_LEN_GT_2, I2C_EVENT_NACK, I2C_EVENT_STOPPED, I2C_EVENT_AUTO"/>
|
||||
<field name="state_log" units="" type="enum" elements="5" options="I2C_STATE_FSM_FAULT,I2C_STATE_BUS_ERROR,I2C_STATE_STOPPED,I2C_STATE_STOPPING,I2C_STATE_STARTING,I2C_STATE_R_MORE_TXN_ADDR,I2C_STATE_R_MORE_TXN_PRE_ONE,I2C_STATE_R_MORE_TXN_PRE_FIRST,I2C_STATE_R_MORE_TXN_PRE_MIDDLE,I2C_STATE_R_MORE_TXN_LAST,I2C_STATE_R_MORE_TXN_POST_LAST,R_LAST_TXN_ADDR,I2C_STATE_R_LAST_TXN_PRE_ONE,I2C_STATE_R_LAST_TXN_PRE_FIRST,I2C_STATE_R_LAST_TXN_PRE_MIDDLE,I2C_STATE_R_LAST_TXN_PRE_LAST,I2C_STATE_R_LAST_TXN_POST_LAST,I2C_STATE_W_MORE_TXN_ADDR,I2C_STATE_W_MORE_TXN_MIDDLE,I2C_STATE_W_MORE_TXN_LAST,I2C_STATE_W_LAST_TXN_ADDR,I2C_STATE_W_LAST_TXN_MIDDLE,I2C_STATE_W_LAST_TXN_LAST,I2C_STATE_NACK"/>
|
||||
<access gcs="readwrite" flight="readwrite"/>
|
||||
<telemetrygcs acked="false" updatemode="manual" period="0"/>
|
||||
<telemetryflight acked="false" updatemode="periodic" period="10000"/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user