1
0
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:
peabody124 2011-01-10 05:42:53 +00:00 committed by peabody124
parent aae4d113f5
commit bbbd9a10e3
10 changed files with 205 additions and 30 deletions

View File

@ -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]);

View File

@ -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];
}

View File

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

View File

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

View File

@ -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 */

View File

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

View File

@ -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);

View File

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

View File

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

View File

@ -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"/>