diff --git a/faultlog/Makefile b/faultlog/Makefile new file mode 100644 index 0000000..6739593 --- /dev/null +++ b/faultlog/Makefile @@ -0,0 +1,2 @@ +DEPENDS+=../core + diff --git a/faultlog/include/faultlog/faultlog.h b/faultlog/include/faultlog/faultlog.h new file mode 100644 index 0000000..fe00021 --- /dev/null +++ b/faultlog/include/faultlog/faultlog.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +typedef struct { + uint32_t tcOnPower; + uint32_t tcRun; + union { + uint32_t ui32; + struct { + uint8_t fault_code; + }; + }; + + int32_t parm1; + int32_t parm2; +} fault_entry_t; + + + +void init_faultlog(void); +void faultlog_record(uint8_t faultcode,int32_t parm1,int32_t parm2); +int flog_node_proc(int op,int regno,uint8_t *type,void *buffer); diff --git a/faultlog/src/faultlog.c b/faultlog/src/faultlog.c new file mode 100644 index 0000000..47603be --- /dev/null +++ b/faultlog/src/faultlog.c @@ -0,0 +1,134 @@ +#include + +#include + +#include +#include +#include +#include +#include + +#if !defined(FAULTLOG_EEBASE) + #define FAULTLOG_EEBASE 0x0000 +#endif + +#if !defined(FAULTLOG_WIDTH) + #define FAULTLOG_WIDTH 9 +#endif + +static int32_t flog_base = FAULTLOG_EEBASE; +static int flog_width = FAULTLOG_WIDTH; +static int flog_current = 0; +static int flog_current_rd; + +static fault_entry_t + current_fault_entry; +static fault_entry_t + current_fault_entry_rd; + +void init_faultlog(void) +{ + uint16_t n; + uint32_t lastOnPower = 0; + + for (n=0;n < (1< current_fault_entry.tcOnPower) + ){ + flog_current = n; + break; + }; + }; +}; + + +void faultlog_record(uint8_t faultcode,int32_t parm1,int32_t parm2) +{ + current_fault_entry.tcOnPower = rt_ram.eeprom.secs_powered; + current_fault_entry.tcRun = rt_ram.eeprom.secs_running; + current_fault_entry.fault_code = faultcode; + current_fault_entry.parm1 = parm1; + current_fault_entry.parm2 = parm2; + + i2cee_save( flog_base + (flog_current * sizeof(fault_entry_t)), ¤t_fault_entry, sizeof(fault_entry_t) ); + + flog_current++; + flog_current &= (1<