settings_api.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. #ifndef SETTINGS_API_H
  2. #define SETTINGS_API_H
  3. #include "at32f403a_407.h"
  4. #include "model_cfg.h"
  5. #include "usart.h"
  6. #include "sys_api.h"
  7. #include "io.h"
  8. #include "mb.h"
  9. #include "mbport.h"
  10. #include <stdbool.h>
  11. // Изменить версию если поменялась структура настроек
  12. #define SETTINGS_VERSION 0x01
  13. // ------------------------------------------------------------------- //
  14. // Граничные значения
  15. // ------------------------------------------------------------------- //
  16. #define MAX_ARCHIVE_PERIOD 43200
  17. // ------------------------------------------------------------------- //
  18. // Draft
  19. // ------------------------------------------------------------------- //
  20. /*
  21. 1. Uptime (uint32_t) // +
  22. 2. Realtime (unix timestamp, uint32_t) // +
  23. 3. Версия прошивки // +
  24. 4. Модель (char 16 байт) // +
  25. */
  26. // ------------------------------------------------------------------- //
  27. // Modbus
  28. // ------------------------------------------------------------------- //
  29. #define MB_STOP_BIT_MASK 0x03
  30. #define MB_STOP_BIT_1 0x00
  31. #define MB_STOP_BIT_2 0x02
  32. #define MB_PARITY_MASK (0x03 << 3)
  33. #define MB_NO_PAR (0x00 << 3)
  34. #define MB_EVEN_PAR (0x02 << 3)
  35. #define MB_ODD_PAR (0x03 << 3)
  36. #define MB_BRD_MASK (0x07 << 5)
  37. #define MB_BRD_2400 (0x00 << 5)
  38. #define MB_BRD_4800 (0x01 << 5)
  39. #define MB_BRD_9600 (0x02 << 5)
  40. #define MB_BRD_19200 (0x03 << 5)
  41. #define MB_BRD_38400 (0x04 << 5)
  42. #define MB_BRD_57600 (0x05 << 5)
  43. #define MB_BRD_115200 (0x06 << 5)
  44. // Modbus
  45. typedef struct
  46. {
  47. rate_t baud; // Скорость порта
  48. parity_t parity; // Четность
  49. databits_t databits; // Число бит данных
  50. stopbits_t stopbits; // Число стоп-бит
  51. } modbus_t;
  52. // Общая структура настроек для IAP и FW
  53. typedef struct
  54. {
  55. uint16_t mb_port; // Настройки порта для modbus
  56. char model[MODEL_LEN]; // Модель
  57. } com_settings_t;
  58. #if 0
  59. // Дискретные входы
  60. typedef struct
  61. {
  62. uint16_t debounce_time; // период антидребезга в мс (0 - 10 сек)
  63. } dinput_t;
  64. #endif
  65. // Полная структура настроек
  66. typedef struct
  67. {
  68. com_settings_t com_settings;
  69. uint32_t critical_section_crc;
  70. /* WARNING! До поля CritSecCRC включительно структура настроек должна быть
  71. * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО.
  72. * Контроль целостности настроек внутри IAP выполняется только для критической секции,
  73. * т.к. контроль целостности всей структуры не имеет смысла
  74. * (структура настроек всегда будет отличаться внутри основного ПО).
  75. * В случае повреждения критического сектора, загружаются параметры по умолчанию. */
  76. uint16_t settings_version; // Версия структуры настроек
  77. uint32_t control_word; // Слово для контроля целостности структуры настроек
  78. uint16_t di_mode_bits; // режим работы, 0 - вход, 1 - счетчик импульсов
  79. uint16_t di_norm_state_bits; // нормальное состояние (0 - разомкнут, 1 - замкнут)
  80. uint16_t di_debounce[DI_NUMBER]; // Дискретные входы
  81. uint16_t do_mode_bits; // режим работы выхода 0 - выход, 1 - ШИМ
  82. uint16_t do_bits; // последнее сохраненное значение на выходах
  83. uint16_t do_save_bits; // значение на выходах в бесопасном режиме работы
  84. uint16_t do_pwm[DO_NUMBER]; // значение заполнения ШИМ
  85. uint16_t do_pwm_save[DO_NUMBER]; // значение заполнения ШИМ в безопасном режиме
  86. uint16_t do_pwm_period[DO_NUMBER]; // период ШИМ в [0.1с (10..1000)]
  87. uint16_t do_pwm_period_save[DO_NUMBER]; // период ШИМ в безопасном режиме [0.1с (10..1000)]
  88. bool save_mode; // безопасный режим, 0 - выкл, 1 - вкл
  89. uint16_t save_delay; // время ожидания опроса (сек.)
  90. uint16_t period_archive; // период архивирования
  91. } settings_t;
  92. // Загрузка структуры настроек из flesh
  93. void settings_load(settings_t *settings);
  94. //
  95. void init_settings(void);
  96. //
  97. void settings_read_from_flash(uint8_t *data, uint32_t size);
  98. //
  99. uint32_t settings_get_crc(settings_t *settings);
  100. //
  101. uint32_t settings_get_crit_sec_crc(settings_t *settings);
  102. // Сброс всех настроек в значения по умолчанию
  103. void settings_set_all_default(void);
  104. // -------------------------------------------------------------------------- //
  105. // Настройки по умолчанию
  106. //
  107. void settings_set_modbus_def(uint16_t *mb_port);
  108. //
  109. void settings_conv_modbus_def(modbus_t *mb_settings, uint16_t *mb_port);
  110. // Установка параметров Modbus
  111. void settings_set_modbus_params(uint16_t mb_port);
  112. //
  113. uint32_t settings_get_mb_baud(modbus_t *mb_settings);
  114. //
  115. eMBParity settings_get_mb_par(modbus_t *mb_settings);
  116. //
  117. void settings_init_mb_port(uint8_t mb_addr);
  118. // Установить параметры дискретных входов по умолчанию
  119. void settings_din_def(settings_t *settings);
  120. // Выходы
  121. void settings_do_def(settings_t *settings);
  122. // -------------------------------------------------------------------------- //
  123. // Запись структуры настроек во flash
  124. void settings_save(settings_t *settings);
  125. //
  126. void settings_write_to_flash(uint8_t *data, uint32_t size);
  127. // Очистка сектора настроек
  128. void settings_erase_flash_sector(void);
  129. //
  130. void settings_print(void);
  131. // Системные настройки
  132. extern sys_settings_t sys_settings;
  133. // Копия системных настроек
  134. extern sys_settings_t temp_sys_settings;
  135. // Общая структура настроек
  136. extern settings_t settings;
  137. #endif /* #ifndef SETTINGS_API_H */