log.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #ifndef __LOG_H
  2. #define __LOG_H
  3. #include "at32f403a_407.h"
  4. #include <stdbool.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #define LOG_ENTRY_VERSION 1
  9. #define ARCHIV_ENTRY_VERSION 1
  10. #define LOG_FLASH_SECTOR_OFFSET 4
  11. #define LOG_FLASH_SECTOR_COUNT 51
  12. #define ARCHIVE_FLASH_SECTOR_OFFSET 60
  13. #define ARCHIVE_FLASH_SECTOR_COUNT 38
  14. #define ARCHIVE_CHANNEL_OFFSET (ARCHIVE_FLASH_SECTOR_COUNT + 4)
  15. #define SECTOR_COUNT (spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET)
  16. #define MB_ARCHIVE_ENTRY 0x06
  17. #define MB_LOG_ENTRY 0x07
  18. // -------------------------------------------------------------------------- //
  19. // События архивов
  20. typedef enum
  21. {
  22. ARCH_CH_1 = 1 << 0,
  23. ARCH_CH_2 = 1 << 1,
  24. ARCH_CH_3 = 1 << 2,
  25. ARCH_CH_4 = 1 << 3,
  26. ARCH_CH_5 = 1 << 4,
  27. ARCH_CH_6 = 1 << 5,
  28. ARCH_CH_7 = 1 << 6,
  29. ARCH_CH_8 = 1 << 7,
  30. } arch_event_t;
  31. //
  32. typedef enum
  33. {
  34. LOG_SYSTEM_BOOT = 1, // включение питания/перезагрузка
  35. LOG_CLOCK_CHANGE, // перевод времени
  36. LOG_UPDATE_FW, // обновление FW
  37. LOG_SYSTEM_ERR, // самодиагностика/системная ошибка
  38. LOG_CHANGE_CONFIG, // изменение конфигурации
  39. LOG_OUPUTS, // диагностика выходов
  40. LOG_SETPOINT, // срабатывание уставок
  41. LOG_SAVE_MODE, // переход в безопасный режим
  42. LOG_CLEAR, // очистка журнала/архива
  43. LOG_NONE,
  44. } log_event_type_t;
  45. typedef enum
  46. {
  47. LOG_EVENT_STATE_ERR = 0,
  48. LOG_EVENT_STATE_OK,
  49. } log_event_state_t;
  50. typedef enum
  51. {
  52. LOG_ENTRY = 0,
  53. ARCHIVE_ENTRY,
  54. } entry_type_t;
  55. //
  56. typedef __packed struct
  57. {
  58. uint64_t timestamp;
  59. } common_entry_t;
  60. // Структура записи журанала
  61. typedef __packed struct
  62. {
  63. uint64_t timestamp;
  64. uint8_t code_type; // код типа события
  65. uint8_t code_state; // код состояния
  66. uint8_t channel_number; // номер канала
  67. float value; // значение
  68. uint8_t crc;
  69. } log_entry_t;
  70. // Структура архивной записи
  71. typedef __packed struct
  72. {
  73. uint64_t timestamp;
  74. uint8_t input_value;
  75. uint8_t crc;
  76. } archive_entry_t;
  77. //
  78. void log_init(bool format);
  79. //
  80. void log_init_archive_tim(void);
  81. //
  82. int log_fetch(void *entry, entry_type_t entry_type, uint8_t ch, uint32_t timeout);
  83. //
  84. int log_discard(void *entry, entry_type_t entry_type, uint8_t ch, uint32_t timeout);
  85. //
  86. int log_append(void *entry, entry_type_t entry_type, uint8_t ch);
  87. //
  88. uint16_t log_capacity(void);
  89. //
  90. uint16_t log_arch_capacity(uint8_t ch);
  91. // -------------------------------------------------------------------------- //
  92. // misc
  93. uint8_t crc_8(uint8_t *data, int length);
  94. // -------------------------------------------------------------------------- //
  95. // Tests
  96. //
  97. void log_info(uint8_t val, uint8_t ch);
  98. //
  99. void log_format(uint8_t val, uint8_t ch);
  100. //
  101. int log_add_random_entry(uint8_t val, uint32_t cnt_entry, uint8_t ch);
  102. //
  103. int log_add_entry(log_event_type_t type, log_event_state_t state,
  104. uint8_t channel_number, float value);
  105. //
  106. void test_fetch(void);
  107. //
  108. void log_archive_state(bool state);
  109. //
  110. void log_log_state(bool state);
  111. //
  112. void test_archive_format(void);
  113. //
  114. void log_check_archive_cnt(void);
  115. // -------------------------------------------------------------------------- //
  116. extern uint16_t log_entries_capacity;
  117. extern uint16_t archive_entries_capacity;
  118. #ifdef __cplusplus
  119. }
  120. #endif
  121. #endif /* __LOG_H */