settings_api.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 <stdbool.h>
  9. // Изменить версию если поменялась структура настроек
  10. #define SETTINGS_VERSION 0x01
  11. // ------------------------------------------------------------------- //
  12. // Draft
  13. // ------------------------------------------------------------------- //
  14. /*
  15. 1. Uptime (uint32_t) // +
  16. 2. Realtime (unix timestamp, uint32_t) // +
  17. 3. Версия прошивки // +
  18. 4. Модель (char 16 байт) // +
  19. */
  20. // ------------------------------------------------------------------- //
  21. // Modbus
  22. // ------------------------------------------------------------------- //
  23. // Modbus
  24. typedef struct
  25. {
  26. rate_t baud; // Скорость порта
  27. parity_t parity; // Четность
  28. databits_t databits; // Число бит данных
  29. stopbits_t stopbits; // Число стоп-бит
  30. } modbus_t;
  31. // Общая структура настроек для IAP и FW
  32. typedef struct
  33. {
  34. uint16_t mb_port; // Настройки порта для modbus
  35. char model[MODEL_LEN]; // Модель
  36. } com_settings_t;
  37. #if 0
  38. // Дискретные входы
  39. typedef struct
  40. {
  41. uint16_t debounce_time; // период антидребезга в мс (0 - 10 сек)
  42. } dinput_t;
  43. #endif
  44. // Полная структура настроек
  45. typedef struct
  46. {
  47. com_settings_t com_settings;
  48. uint32_t critical_section_crc;
  49. /* WARNING! До поля CritSecCRC включительно структура настроек должна быть
  50. * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО.
  51. * Контроль целостности настроек внутри IAP выполняется только для критической секции,
  52. * т.к. контроль целостности всей структуры не имеет смысла
  53. * (структура настроек всегда будет отличаться внутри основного ПО).
  54. * В случае повреждения критического сектора, загружаются параметры по умолчанию. */
  55. uint16_t settings_version; // Версия структуры настроек
  56. uint32_t control_word; // Слово для контроля целостности структуры настроек
  57. uint16_t di_mode_bits; // режим работы, 0 - вход, 1 - счетчик импульсов
  58. uint16_t di_norm_state_bits; // нормальное состояние (0 - разомкнут, 1 - замкнут)
  59. uint16_t di_debounce[DI_NUMBER]; // Дискретные входы
  60. uint16_t do_mode_bits; // режим работы выхода 0 - выход, 1 - ШИМ
  61. uint16_t do_bits; // последнее сохраненное значение на выходах
  62. uint16_t do_save_bits; // значение на выходах в бесопасном режиме работы
  63. uint16_t do_pwm[DO_NUMBER]; // значение заполнения ШИМ
  64. uint16_t do_pwm_save[DO_NUMBER]; // значение заполнения ШИМ в безопасном режиме
  65. uint16_t do_pwm_period[DO_NUMBER]; // период ШИМ в [0.1с (10..1000)]
  66. uint16_t do_pwm_period_save[DO_NUMBER]; // период ШИМ в безопасном режиме [0.1с (10..1000)]
  67. bool save_mode; // безопасный режим, 0 - выкл, 1 - вкл
  68. uint16_t save_delay; // время ожидания опроса (сек.)
  69. } settings_t;
  70. // Загрузка структуры настроек из flesh
  71. void settings_load(settings_t *settings);
  72. //
  73. void init_settings(void);
  74. //
  75. void settings_read_from_flash(uint8_t *data, uint32_t size);
  76. //
  77. uint32_t settings_get_crc(settings_t *settings);
  78. //
  79. uint32_t settings_get_crit_sec_crc(settings_t *settings);
  80. // Сброс всех настроек в значения по умолчанию
  81. void settings_set_all_default(void);
  82. // -------------------------------------------------------------------------- //
  83. // Настройки по умолчанию
  84. //
  85. void settings_set_modbus_def(uint16_t *mb_port);
  86. //
  87. void settings_conv_modbus_def(modbus_t *mb_settings, uint16_t *mb_port);
  88. // Установить параметры дискретных входов по умолчанию
  89. void settings_din_def(settings_t *settings);
  90. // Выходы
  91. void settings_do_def(settings_t *settings);
  92. // -------------------------------------------------------------------------- //
  93. // Запись структуры настроек во flash
  94. void settings_save(settings_t *settings);
  95. //
  96. void settings_write_to_flash(uint8_t *data, uint32_t size);
  97. // Очистка сектора настроек
  98. void settings_erase_flash_sector(void);
  99. // Системные настройки
  100. extern sys_settings_t sys_settings;
  101. // Общая структура настроек
  102. extern settings_t settings;
  103. #endif /* #ifndef SETTINGS_API_H */