#include #include #include "event_record.h" #include "libs/shark_task.h" #define MAX_EVENT_SIZE 120 static event_record_t _event[MAX_EVENT_SIZE]; static int event_w_idx = 0; static bool _event_full = false; void push_event(event_id_t id, s32 data) { if (id == Aux_Current_Short) {//when multi aux short, only recode the old for (int i = 0; i < MAX_EVENT_SIZE; i++) { if (_event[i].id == Aux_Current_Short) { if (shark_get_seconds() - _event[i].timestamp <= 1) { return; } } } } event_record_t *pevent = &_event[event_w_idx]; event_w_idx = (event_w_idx + 1) % MAX_EVENT_SIZE; if (event_w_idx == 0) { _event_full = true; } pevent->id = id; pevent->timestamp = shark_get_seconds(); pevent->data = data; } void push_event_persit(event_id_t id, s32 data) { if (id == Discharger_Operate_Off || id == Discharger_Operate_On) { for (int i = 0; i < MAX_EVENT_SIZE; i++) { if (_event[i].id == id) { _event[i].timestamp = shark_get_seconds(); _event[i].data = data; return; } } } push_event(id, data); } static int _event_size(void) { if (_event_full) { return MAX_EVENT_SIZE; } return event_w_idx; } int get_event(int num, int offset, u8 *recoder) { if (offset >= _event_size()) { return 0; } num = MIN(num, _event_size()-offset); int rtn = 0; if (_event_full) { offset += event_w_idx; } while(num > 0) { memcpy(recoder, _event + offset % MAX_EVENT_SIZE, sizeof(event_record_t)); num --; offset ++; recoder += sizeof(event_record_t); rtn ++; } return rtn; }