| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #include <stdbool.h>
- #include <string.h>
- #include "event_record.h"
- #include "libs/shark_task.h"
- #define MAX_EVENT_SIZE 100
- static event_record_t _event[MAX_EVENT_SIZE];
- static event_record_t _max_current;
- static int event_w_idx = 0;
- static bool _event_full = false;
- void push_event(event_id_t id, s32 data) {
- 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_max_current(s32 current) {
- _max_current.id = Max_current_persis;
- _max_current.timestamp = shark_get_seconds();
- if (abs(current) > abs(_max_current.data)) {
- _max_current.data = current;
- }
- }
- 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()) {
- if (offset == _event_size()) {
- memcpy(recoder, &_max_current, sizeof(event_record_t));
- return 1;
- }
- 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;
- }
|