| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- #ifndef SETTINGS_API_H
- #define SETTINGS_API_H
- #include "at32f403a_407.h"
- #include "model_cfg.h"
- #include "usart.h"
- #include "sys_api.h"
- #include "io.h"
- #include "mb.h"
- #include "mbport.h"
- #include "log.h"
- #include "preset_ai.h"
- #include <stdbool.h>
- // Изменить версию если поменялась структура настроек
- #define SETTINGS_VERSION 0x01
- // ------------------------------------------------------------------- //
- // Граничные значения
- // ------------------------------------------------------------------- //
- #define MAX_ARCHIVE_PERIOD 43200
- // ------------------------------------------------------------------- //
- // Настройки лога и архива
- // ------------------------------------------------------------------- //
- #define ARCH_DIO_CH_NUMBER 8
- #define ARCH_AI_CH_NUMBER 12 //12
- // ------------------------------------------------------------------- //
- // Draft
- // ------------------------------------------------------------------- //
- /*
- 1. Uptime (uint32_t) // +
- 2. Realtime (unix timestamp, uint32_t) // +
- 3. Версия прошивки // +
- 4. Модель (char 16 байт) // +
- */
- // ------------------------------------------------------------------- //
- // Modbus
- // ------------------------------------------------------------------- //
- #define MB_STOP_BIT_MASK 0x03
- #define MB_STOP_BIT_1 0x00
- #define MB_STOP_BIT_2 0x02
- #define MB_PARITY_MASK (0x03 << 3)
- #define MB_NO_PAR (0x00 << 3)
- #define MB_EVEN_PAR (0x02 << 3)
- #define MB_ODD_PAR (0x03 << 3)
- #define MB_BRD_MASK (0x07 << 5)
- #define MB_BRD_2400 (0x00 << 5)
- #define MB_BRD_4800 (0x01 << 5)
- #define MB_BRD_9600 (0x02 << 5)
- #define MB_BRD_19200 (0x03 << 5)
- #define MB_BRD_38400 (0x04 << 5)
- #define MB_BRD_57600 (0x05 << 5)
- #define MB_BRD_115200 (0x06 << 5)
- // Modbus
- typedef struct
- {
- rate_t baud; // Скорость порта
- parity_t parity; // Четность
- databits_t databits; // Число бит данных
- stopbits_t stopbits; // Число стоп-бит
-
- } modbus_t;
- // Общая структура настроек для IAP и FW
- typedef struct
- {
- uint16_t mb_port; // Настройки порта для modbus
- //char model[MODEL_LEN]; // Модель
- } com_settings_t;
- //
- typedef enum
- {
- MB_BOOT_ERR_NO = 0x01,
-
- MB_BOOT_ERR_WRONG_CONTENT = 0x02,
- MB_BOOT_ERR_WRONG_FW_SIZE = 0x03,
- MB_BOOT_ERR_WRONG_KEY = 0x04,
- MB_BOOT_FLASH_ERR = 0x05,
- MB_BOOT_WRONG_PACK_INDEX = 0x06,
- MB_BOOT_ERR_WRONG_FW_CRC = 0x07,
- } mb_err_code_t ;
- #if 0
- // Дискретные входы
- typedef struct
- {
- uint16_t debounce_time; // период антидребезга в мс (0 - 10 сек)
- } dinput_t;
- #endif
- // Полная структура настроек
- typedef struct
- {
- com_settings_t com_settings;
- uint32_t critical_section_crc;
- /* WARNING! До поля CritSecCRC включительно структура настроек должна быть
- * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО.
- * Контроль целостности настроек внутри IAP выполняется только для критической секции,
- * т.к. контроль целостности всей структуры не имеет смысла
- * (структура настроек всегда будет отличаться внутри основного ПО).
- * В случае повреждения критического сектора, загружаются параметры по умолчанию. */
-
- uint16_t settings_version; // Версия структуры настроек
- uint32_t control_word; // Слово для контроля целостности структуры настроек
-
-
- di_t di[DI_NUMBER]; //
- uint16_t di_state_bits; //
-
- uint16_t di_mode_bits; // режим работы, 0 - вход, 1 - счетчик импульсов
- uint16_t di_norm_state_bits; // нормальное состояние (0 - разомкнут, 1 - замкнут)
- uint16_t di_debounce[DI_NUMBER]; // дискретные входы
-
- do_t dout[DO_NUMBER]; // параметры выходов в обычном режиме
- do_t dout_save[DO_NUMBER]; // параметры выходов в безопасном режиме
-
- uint16_t period_archive[ARCH_DIO_CH_NUMBER]; // период архивирования
-
- uint16_t save_mode; // безопасный режим, 0 - выкл, 1 - вкл
- uint16_t save_delay; // время ожидания опроса (сек.)
-
- uint8_t info[32]; // Пользовательская информация. Текстовая строка.
-
-
- } settings_t;
- // Загрузка структуры настроек из flesh
- bool settings_load(settings_t *settings);
- //
- void init_settings(void);
- //
- void settings_read_from_flash(uint8_t *data, uint32_t size);
- //
- uint32_t settings_get_crc(settings_t *settings);
- //
- uint32_t settings_get_crit_sec_crc(settings_t *settings);
- // Сброс всех настроек в значения по умолчанию
- void settings_set_all_default(void);
- // -------------------------------------------------------------------------- //
- // Настройки по умолчанию
- //
- void settings_set_modbus_def(uint16_t *mb_port);
- //
- void settings_conv_modbus_def(modbus_t *mb_settings, uint16_t *mb_port);
- // Установка параметров Modbus
- void settings_set_modbus_params(uint16_t mb_port);
- //
- uint32_t settings_get_mb_baud(modbus_t *mb_settings);
- //
- eMBParity settings_get_mb_par(modbus_t *mb_settings);
- //
- void settings_init_mb_port(uint8_t mb_addr);
- // -------------------------------------------------------------------------- //
- //
- bool settings_is_changed(settings_t *new_settings);
- //
- void settings_print(void);
- // Системные настройки
- extern sys_settings_t sys_settings;
- // Копия системных настроек
- extern sys_settings_t temp_sys_settings;
- // Общая структура настроек
- extern settings_t settings;
- //
- extern SemaphoreHandle_t flash_mutex;
- //
- extern modbus_t mb_port_settings;
- #endif /* #ifndef SETTINGS_API_H */
|