log_ai.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include "at32f403a_407.h"
  2. #include "log_ai.h"
  3. #include "settings_api.h"
  4. #include "ringfs.h"
  5. #include "ringfs_api.h"
  6. #if defined (MAI_12)
  7. #undef DBG
  8. #define DBG if(1)
  9. EventGroupHandle_t archive_event;
  10. uint32_t archive_cnt[ARCH_AI_CH_NUMBER] = {0};
  11. struct ringfs fs_ch_arch[ARCH_AI_CH_NUMBER];
  12. static struct ringfs_flash_partition fingfs_flash_ch_arch[ARCH_AI_CH_NUMBER] =
  13. {
  14. {
  15. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET,
  16. .sector_erase = op_sector_erase,
  17. .program = op_program,
  18. .read = op_read,
  19. },
  20. {
  21. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*1,
  22. .sector_erase = op_sector_erase,
  23. .program = op_program,
  24. .read = op_read,
  25. },
  26. {
  27. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*2,
  28. .sector_erase = op_sector_erase,
  29. .program = op_program,
  30. .read = op_read,
  31. },
  32. {
  33. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*3,
  34. .sector_erase = op_sector_erase,
  35. .program = op_program,
  36. .read = op_read,
  37. },
  38. {
  39. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*4,
  40. .sector_erase = op_sector_erase,
  41. .program = op_program,
  42. .read = op_read,
  43. },
  44. {
  45. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*5,
  46. .sector_erase = op_sector_erase,
  47. .program = op_program,
  48. .read = op_read,
  49. },
  50. {
  51. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*6,
  52. .sector_erase = op_sector_erase,
  53. .program = op_program,
  54. .read = op_read,
  55. },
  56. {
  57. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*7,
  58. .sector_erase = op_sector_erase,
  59. .program = op_program,
  60. .read = op_read,
  61. },
  62. {
  63. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*8,
  64. .sector_erase = op_sector_erase,
  65. .program = op_program,
  66. .read = op_read,
  67. },
  68. {
  69. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*9,
  70. .sector_erase = op_sector_erase,
  71. .program = op_program,
  72. .read = op_read,
  73. },
  74. {
  75. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*10,
  76. .sector_erase = op_sector_erase,
  77. .program = op_program,
  78. .read = op_read,
  79. },
  80. {
  81. .sector_offset = ARCHIVE_FLASH_SECTOR_OFFSET + ARCHIVE_CHANNEL_OFFSET*11,
  82. .sector_erase = op_sector_erase,
  83. .program = op_program,
  84. .read = op_read,
  85. }
  86. };
  87. // Архив. 12 буферов на каждый канал.
  88. void log_ai_archive_init(void)
  89. {
  90. for (uint8_t i = 0; i < ARCH_AI_CH_NUMBER; i ++)
  91. {
  92. fingfs_flash_ch_arch[i].sector_size = spi_flash_desc.sector_size;
  93. fingfs_flash_ch_arch[i].sector_count = ARCHIVE_FLASH_SECTOR_COUNT;
  94. ringfs_init(&fs_ch_arch[i], &fingfs_flash_ch_arch[i],
  95. ARCHIV_ENTRY_VERSION + i, sizeof(archive_entry_t));
  96. if (ringfs_scan(&fs_ch_arch[i]) != 0) {
  97. DBG printf("FAT for channel %u is false\r\n", i + 1);
  98. ringfs_format(&fs_ch_arch[i]);
  99. }
  100. DBG printf("FAT for channel %u is true\r\n", i + 1);
  101. }
  102. }
  103. //
  104. uint8_t log_get_arch_channel_number(void)
  105. {
  106. return (uint8_t)ARCH_AI_CH_NUMBER;
  107. }
  108. //
  109. uint8_t log_is_channel_on(uint8_t channel)
  110. {
  111. return settings.ai[channel].state;
  112. }
  113. //
  114. void log_archive_task_device(void)
  115. {
  116. int ret = 0;
  117. EventBits_t bits;
  118. archive_entry_t entry = {0};
  119. bits = xEventGroupWaitBits(archive_event,
  120. ARCH_CH_1 | ARCH_CH_2 | ARCH_CH_3 | ARCH_CH_4 |
  121. ARCH_CH_5 | ARCH_CH_6 | ARCH_CH_7 | ARCH_CH_8 |
  122. ARCH_CH_9 | ARCH_CH_10 | ARCH_CH_11 | ARCH_CH_12,
  123. pdTRUE, pdFALSE, portMAX_DELAY);
  124. for (uint32_t i = 0; i < ARCH_AI_CH_NUMBER; i++)
  125. {
  126. if (bits & (1 << i))
  127. {
  128. DBG printf("Archive event: %u\r\n", (1 << i));
  129. entry.timestamp = 0;
  130. //entry.input_value = di_get(i - 1);
  131. entry.input_value = 1;
  132. DBG printf("Append archive entry...");
  133. ret = log_append((void*)&entry, ARCHIVE_ENTRY, i - 1);
  134. if (ret != 0) {
  135. DBG printf("FAIL\r\n");
  136. }
  137. else {
  138. DBG printf("OK\r\n");
  139. }
  140. }
  141. }
  142. }
  143. #endif