log.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 260
  13. #define ARCHIVE_FLASH_SECTOR_COUNT 38
  14. #define SECTOR_COUNT (spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET)
  15. #define MB_ARCHIVE_ENTRY 0x06
  16. #define MB_LOG_ENTRY 0x07
  17. //
  18. typedef enum
  19. {
  20. LOG_SYSTEM_BOOT = 1, // включение питания/перезагрузка
  21. LOG_CLOCK_CHANGE, // перевод времени
  22. LOG_UPDATE_FW, // обновление FW
  23. LOG_SYSTEM_ERR, // самодиагностика/системная ошибка
  24. LOG_CHANGE_CONFIG, // изменение конфигурации
  25. LOG_OUPUTS, // диагностика выходов
  26. LOG_SETPOINT, // срабатывание уставок
  27. LOG_SAVE_MODE, // переход в безопасный режим
  28. LOG_CLEAR, // очистка журнала/архива
  29. LOG_NONE,
  30. } log_event_type_t;
  31. typedef enum
  32. {
  33. LOG_EVENT_STATE_ERR = 0,
  34. LOG_EVENT_STATE_OK,
  35. } log_event_state_t;
  36. typedef enum
  37. {
  38. LOG_ENTRY = 0,
  39. ARCHIVE_ENTRY,
  40. } entry_type_t;
  41. //
  42. typedef __packed struct
  43. {
  44. uint64_t timestamp;
  45. } common_entry_t;
  46. // Структура записи журанала
  47. typedef __packed struct
  48. {
  49. uint64_t timestamp;
  50. uint8_t code_type; // код типа события
  51. uint8_t code_state; // код состояния
  52. uint8_t channel_number; // номер канала
  53. float value; // значение
  54. uint8_t crc;
  55. } log_entry_t;
  56. // Структура архивной записи
  57. typedef __packed struct
  58. {
  59. uint64_t timestamp;
  60. uint8_t input_value;
  61. uint8_t crc;
  62. } archive_entry_t;
  63. //
  64. void log_init(bool format);
  65. //
  66. int log_fetch(void *entry, entry_type_t entry_type, uint32_t timeout);
  67. //
  68. int log_discard(void *entry, entry_type_t entry_type, uint32_t timeout);
  69. //
  70. int log_append(void *entry, entry_type_t entry_type);
  71. //
  72. uint16_t log_capacity(void);
  73. //
  74. uint16_t log_arch_capacity(void);
  75. // -------------------------------------------------------------------------- //
  76. // misc
  77. uint8_t crc_8(uint8_t *data, int length);
  78. // -------------------------------------------------------------------------- //
  79. // Tests
  80. //
  81. void log_info(uint8_t val);
  82. //
  83. void log_format(uint8_t val);
  84. //
  85. int log_add_random_entry(uint8_t val, uint32_t cnt_entry);
  86. //
  87. int log_add_entry(log_event_type_t type, log_event_state_t state,
  88. uint8_t channel_number, float value);
  89. //
  90. void test_fetch(void);
  91. //
  92. void log_archive_state(bool state);
  93. //
  94. void log_log_state(bool state);
  95. //
  96. void test_archive_format(void);
  97. // -------------------------------------------------------------------------- //
  98. extern uint16_t log_entries_capacity;
  99. extern uint16_t archive_entries_capacity;
  100. #ifdef __cplusplus
  101. }
  102. #endif
  103. #endif /* __LOG_H */