event_record.c 997 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <stdbool.h>
  2. #include <string.h>
  3. #include "event_record.h"
  4. #include "libs/shark_task.h"
  5. #define MAX_EVENT_SIZE 120
  6. static event_record_t _event[MAX_EVENT_SIZE];
  7. static int event_w_idx = 0;
  8. static bool _event_full = false;
  9. void push_event(event_id_t id, s32 data) {
  10. event_record_t *pevent = &_event[event_w_idx];
  11. event_w_idx = (event_w_idx + 1) % MAX_EVENT_SIZE;
  12. if (event_w_idx == 0) {
  13. _event_full = true;
  14. }
  15. pevent->id = id;
  16. pevent->timestamp = shark_get_seconds();
  17. pevent->data = data;
  18. }
  19. static int _event_size(void) {
  20. if (_event_full) {
  21. return MAX_EVENT_SIZE;
  22. }
  23. return event_w_idx;
  24. }
  25. int get_event(int num, int offset, u8 *recoder) {
  26. if (offset >= _event_size()) {
  27. return 0;
  28. }
  29. num = MIN(num, _event_size()-offset);
  30. int rtn = 0;
  31. if (_event_full) {
  32. offset += event_w_idx;
  33. }
  34. while(num > 0) {
  35. memcpy(recoder, _event + offset % MAX_EVENT_SIZE, sizeof(event_record_t));
  36. num --;
  37. offset ++;
  38. recoder += sizeof(event_record_t);
  39. rtn ++;
  40. }
  41. return rtn;
  42. }