log.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 252
  12. #define ARCHIVE_FLASH_SECTOR_OFFSET 260
  13. #define ARCHIVE_FLASH_SECTOR_COUNT 252
  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 = 0, // device booted
  21. LOG_SYSTEM_DEFCONFIG, // default config applied
  22. LOG_UPDATE_SOFT,
  23. LOG_TURN_ON, //
  24. LOG_PSW_CHANGE, //
  25. LOG_SETTING_SAVE, //
  26. LOG_LOGIN_TELNET, //
  27. LOG_LOGIN_SSH,
  28. LOG_LOGIN, //
  29. LOG_TEST_UPS, //
  30. LOG_SHUTDOWN_UPS,
  31. LOG_ALARM_VAC_LOW_OUTPUT,
  32. LOG_ALARM_VAC_HIGH_OUTPUT,
  33. LOG_ALARM_HIGH_TEMP,
  34. LOG_ALARM_LOW_TEMP,
  35. LOG_ALARM_LINE,
  36. LOG_ALARM_LOW_BAT,
  37. LOG_ALARM_POWER,
  38. LOG_ALARM_UPS,
  39. LOG_ALARM_AKB,
  40. LOG_ALARM_CHANGE_AKB,
  41. LOG_PHASE_FAIL,
  42. LOG_EPO_FAIL,
  43. LOG_VALUE,
  44. LOG_NONE,
  45. } log_type_t;
  46. typedef enum
  47. {
  48. LOG_ENTRY = 0,
  49. ARCHIVE_ENTRY,
  50. } entry_type_t;
  51. //
  52. typedef __packed struct
  53. {
  54. uint64_t timestamp;
  55. } common_entry_t;
  56. // Структура записи журанала
  57. typedef __packed struct
  58. {
  59. uint64_t timestamp;
  60. uint8_t code_type; // код типа события
  61. uint8_t code_state; // код состояния
  62. uint8_t channel_number; // номер канала
  63. float value; // значение
  64. uint8_t crc;
  65. } log_entry_t;
  66. // Структура архивной записи
  67. typedef __packed struct
  68. {
  69. uint64_t timestamp;
  70. uint8_t input_value;
  71. uint8_t crc;
  72. } archive_entry_t;
  73. //
  74. void log_init(bool format);
  75. //
  76. int log_fetch(void *entry, entry_type_t entry_type, uint32_t timeout);
  77. //
  78. int log_discard(void *entry, entry_type_t entry_type, uint32_t timeout);
  79. //
  80. int log_append(void *entry, entry_type_t entry_type);
  81. //
  82. uint16_t log_capacity(void);
  83. //
  84. uint16_t log_arch_capacity(void);
  85. // -------------------------------------------------------------------------- //
  86. // misc
  87. uint8_t crc_8(uint8_t *data, int length);
  88. // -------------------------------------------------------------------------- //
  89. // Tests
  90. //
  91. void log_info(uint8_t val);
  92. //
  93. void log_format(uint8_t val);
  94. //
  95. int log_add_random_entry(uint8_t val, uint32_t cnt_entry);
  96. //
  97. void test_fetch(void);
  98. //
  99. void test_archive_format(void);
  100. // -------------------------------------------------------------------------- //
  101. extern uint16_t log_entries_capacity;
  102. extern uint16_t archive_entries_capacity;
  103. #ifdef __cplusplus
  104. }
  105. #endif
  106. #if 0
  107. #include "main.h"
  108. #include "common_config.h"
  109. #define FILE_BUF_MAX_LEN 10*STRING_SIZE_HISTORY // Размер временного буфера для отправки/копирования Лог файла
  110. #define FILE_BUF_MAX_LEN_LOG 10*STRING_SIZE // Размер временного буфера для отправки/копирования Лог файла
  111. #define STRING_SIZE 64
  112. #define STRING_SIZE_HISTORY 100
  113. #define UPS_DATA_STRING_SIZE 47
  114. extern char logFileBuf[FILE_BUF_MAX_LEN];
  115. extern char name_login[50];
  116. #define LOG_ENTRY_VERSION 1
  117. extern void log_init(bool format);
  118. extern int log_test(void);
  119. extern int log_append(log_entry_t *entry);
  120. extern int log_fetch(log_entry_t *entry, uint32_t timeout);
  121. extern int log_rewind(log_entry_t *entry, uint32_t timeout);
  122. extern int log_discard(log_entry_t *entry, uint32_t timeout);
  123. void log_add(char *log_data);
  124. void log_event_data(log_type_t type, char *data);
  125. /**
  126. * @brief Возвращает true если журнал проинициализирован
  127. */
  128. bool LOG_IsInit();
  129. /**
  130. * @brief Отключает журнал для безопасной перезагрузки
  131. */
  132. bool LOG_Disable(void);
  133. /**
  134. * @brief Возвращает общее количество страниц
  135. */
  136. uint32_t LOG_GetPageCount(void);
  137. uint32_t LOG_GetTotalSTRCount(void);
  138. void LOG_GetPage(char *str, uint32_t page);
  139. void LOG_GetPage_tabs(char *str, uint32_t page);
  140. uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start);
  141. uint32_t History_GetPageCount(void);
  142. uint32_t History_GetTotalSTRCount(void);
  143. void History_GetPage(char *str, uint32_t page);
  144. uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start);
  145. void History_GetPage_tabs(char *str, uint32_t page);
  146. #endif
  147. #endif /* __LOG_H */