#ifndef SETTINGS_API_H #define SETTINGS_API_H #include "at32f403a_407.h" #include //#include "units.h" #include "usart.h" #include "sys_api.h" /* Reference SETTINGS_t structure size value */ /* Modify this value every time you change its size and increse SETTINGS_VERSION value */ #define REF_SETTINGS_SIZE 0x56C /* Changing SETTINGS_VERSION causes loading default settings on start. */ #define SETTINGS_VERSION 0 #define NUM_GSM 2 // количество GSM каналов (количество SIM) #define NUM_PORTGW 3 // количество прозрачных портов /* Максимальная длинна логина и пароля для входа в Web */ #define MAX_WEB_LOGIN_LEN 11 #define MAX_WEB_COOKIE_LEN 16 /* Максимальная длинна строки параметра, передаваемого в Web */ #define MAX_WEB_PARAM_LEN 102//64 /* Max WEB users in the system/ * **/ #define MAX_WEB_USERS 1 /** * @brief Параметры сетевого подключения */ typedef struct { char ip[16]; char gate[16]; char mask[16]; char dns1[16]; char dns2[16]; uint8_t dhcpEnable; // 0 - DHCP отключен, 1 - включен } WEB_PARAMS_t; /** * @brief Настройки Ethernet подключения */ typedef struct { bool Enabled; // Вкл/Выкл Ethernet uint8_t prior; // Приоритет (1/2/3) char ip_test[32]; // IP-адрес проверки связи }ETHERNET_t; /** * @brief Типы профиля GSM */ typedef enum { BEELINE = 0, MTS, MEGAFON, TELE2, USER, MAX_GSM_TYPES_PROFILE } type_profile_gsm_t; /** * @brief Типы GSM модема */ typedef enum { SIM800 = 0, SIM7500, } MODEM_TYPE_t; /** * @brief Режим работы GSM модема */ typedef enum { AUTOMATIC = 2, GSM_3G = 48, LTE = 38, WCDMA = 14, GSM = 13, } MODEM_MODE_t; /** * @brief Настройки GSM модуля */ typedef struct { bool Enabled; // Вкл/Выкл GSM модуля uint8_t prior; // Приоритет (1/2/3) type_profile_gsm_t type_profile; // Тип профиля char APNaddr[64]; // Адрес точки доступа APN char APNlogin[32]; // Логин APN char APNpass[32]; // Пароль APN char ip_test[32]; // IP-адрес проверки связи char msisdn[14]; // Номер SIM-карты (MSISDN) uint32_t timeout; // Таймаут ожидания ответа, сек uint32_t period_test; // Время между проверками доступности канала связи uint8_t num_bad_connect; // Количество неудачных попыток до переключения канала MODEM_MODE_t modem_mode; // Режим работы GSM модема } GSM_t; /** * @brief Параметры SNTP */ typedef struct { bool sntpEnable; // Вкл/выкл char ip1[16]; // Адрес SNTP сервера 1 char ip2[16]; // Адрес SNTP сервера 2 char data[30]; // Дата последней синхронизации float timeZone; // Часовой пояс } SNTP_t; /** * @brief Параметры сервера */ typedef struct { bool serverEnable; // Вкл/выкл char ip[16]; // Адрес сервера uint16_t port; // Номер порта bool controlConnect; // Контроль соединения (1 - да; 0 - нет) } SERVER_t; /** * @brief Параметры PROXY PROXY */ typedef struct { char ip[16]; // IP-адрес подключения uint16_t port; // Порт подключения uint8_t local_port; // Локальный порт } PROXY_t; /** * @brief Информация об устройстве */ typedef struct { uint32_t id; // Цифровой идентификатор char productionData[40]; // Дата производства char mac[18]; // MAC адрес char serialNumber[16]; // Серийный номер char owner[102]; // Владелец char location[102]; // Адрес char comments[102]; // Комментарии char incharge[62]; // Ответсвенное лицо } DEVICE_INFO_t; /** * @brief Уровни пользователей Web. */ typedef enum { FACTORY = 0, ADMIN, MAX_USER_LEVELS } user_level_t; /** * @brief Настройки аутентификации. */ typedef struct { user_level_t level; char login[MAX_WEB_LOGIN_LEN]; uint8_t hash[16]; } AUTH_t; /** * @brief Флаги, ключи и т.д. */ typedef struct { bool netsettingsChanged; // Признак изменения сетевых настроек пользователем char testState[16]; // Статус производственного тестирования } FLAGS_t; /** * @brief Типы транспорта прозрачного порта */ typedef enum { GW_UDP = 0, GW_TCP, MAX_TRANS_TYPES } gwtrans_t; /** * @brief Режим прозрачного порта */ typedef enum { GW_SERVER = 0, GW_CLIENT, MAX_MODE_TYPES } gwmode_t; /** * @brief Режим (RS-232/RS-485) */ typedef enum { RS_232_1 = 0, RS_232_2, RS_232_3, RS_485_1, RS_485_2, MAX_RS_PORTS } rsmode_t; /** * @brief Тип порта (Модем / Прибор учета) */ typedef enum { MODEM = 0, ACCOUNT_METER, MAX_DISPATCH_MODES } dispatchport_t; /** * @brief Настройки прозрачного порта */ typedef struct { bool enableDispatch; // Параллельная диспетчеризация (Вкл./Выкл.) bool enabled; // Вкл/Откл dispatchport_t type_port; // Тип порта (Модем / Прибор учета) uint8_t connect_port; // Связанный порт (#1-#3) char description[30]; // Описание gwtrans_t transtype; // Тип транспорта gwmode_t mode; // Режим: Клиент/Сервер char ip[16]; // IP-адрес сервера (для клиента) uint16_t port; // Порт rsmode_t rs_mode; // Режим (RS-232/RS-485) uart_settings_t uart_set; // Настройки UART прозрачного порта } PORTGW_t; /** * @brief Режимы параллельной диспетчеризации */ typedef enum { PSD_MODE_1 = 0, // RS232#1 <-> RS232#2, USART6 <-> RS232#3 PSD_MODE_2, // RS485#1 <-> RS232#2, USART6 <-> RS232#3 PSD_MODE_3, // RS232#1 <-> RS485#2, USART6 <-> RS232#3 PSD_MODE_4, // RS485#1 <-> RS485#2, USART6 <-> RS232#3 PSD_MODE_5, // RS232#1 <-> RS232#3 PSD_MODE_6, // RS485#1 <-> RS232#3 PSD_MODE_7, // USART1 <-> RS485#1, USART3 <-> RS485#2, USART4 <-> RS232#1, USART5 <-> RS232#2, USART6 <-> RS232#3, MAX_PSD_MODES } PSD_MODE_t; /** * @brief Настройки системы параллельной диспетчеризации */ typedef struct { bool enabled; // Вкл/Откл PSD_MODE_t mux_mode; // Режим (управление мультиплексором) rsmode_t rs_mode; // Режим (RS-232/RS-485) uint8_t web_port; // На каком из прозрачных портов работает PSD uint16_t assd_timeout; // Timeout } PSD_t; /** * @brief Общая структура настроек */ typedef struct { WEB_PARAMS_t sWebParams; WEB_PARAMS_t sWebTempParams; DEVICE_INFO_t sInfo; uint32_t CritSecCRC; /* WARNING! До поля CritSecCRC включительно структура настроек должна быть * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО. * Контроль целостности настроек внутри IAP выполняется только для критической секции, * т.к. контроль целостности всей структуры не имеет смысла * (структура настроек всегда будет отличаться внутри основного ПО). * В случае повреждения критического сектора, загружаются параметры по умолчанию. */ GSM_t sGSM[NUM_GSM]; FLAGS_t sFlags; ETHERNET_t sEthernet; //настройка подключения Ethernet SERVER_t sServer; PROXY_t sProxy; AUTH_t sAuth[MAX_WEB_USERS]; PORTGW_t sPortGw[NUM_PORTGW]; // Настройки прозрачного порта SNTP_t sSNTP; PSD_t sPSD; uint16_t settVer; // Версия структуры настроек uint32_t controlWorld; // Слово для контроля целостности структуры настроек } SETTINGS_t; /** * @brief Общая структура настроек */ extern SETTINGS_t sSettings; /** * @brief * @retval */ uint32_t SETTINGS_GetCritSecCRC(void); /** * @brief Установить параметры сетевого подключения по умолчанию */ void SETTINGS_SetWebParamsDef(void); /** * @brief Установить временные параметры сетевого подключения по умолчанию */ void SETTINGS_SetTempWebParamsDef(void); /** * @brief Установить Информацию об устройстве по умолчанию */ void SETTINGS_SetInfoDef(void); /** * @brief Установить параметры сетевого подключения по умолчанию */ void SETTINGS_SetEthternetSwitchDef(void); /** * @brief Установить параметры GSM подключения по умолчанию */ void SETTINGS_SetGSMDef(void); /** * @brief Установить параметры SNTP по умолчанию */ void SETTINGS_SetSntpDef(void); /** * @brief Установить параметры подключения к серверу по умолчанию */ void SETTINGS_SetServerParamsDef(void); /** * @brief Установить параметры PROXY по умолчанию */ void SETTINGS_SetProxyParamsDef(void); /** * @brief Очистка сектора настроек */ void SETTINGS_EraseFlashSector(void); /** * @brief Установить значение пароля по умолчанию */ void SETTINGS_SetServiceDef(void); /** * @brief Установить значение настроек прозрачного порта по умолчанию */ void SETTINGS_SetPortGwDef(void); /** * @brief Установить значение системы параллельной диспетчеризации по умолчанию */ void SETTINGS_SetPDSDef(void); /** * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек */ void SETTINGS_SetPartDefault(void); /** * @brief Сброс всех настроек в значения по умолчанию */ void SETTINGS_SetAllDefault(void); /** * @brief Запись структуры настроек во flesh */ void SETTINGS_Save(void); /** * @brief Загрузка структуры настроек из flesh */ void SETTINGS_Load(void); /** * @brief */ void SETTINGS_WriteToFlash(uint8_t *data, uint32_t size); /** * @brief */ void SETTINGS_ReadFromFlash(uint8_t *data, uint32_t size); /** * @brief */ uint32_t SETTINGS_GetCRC(void); /** * @brief Сброс флага boottry и сохранение структуры настроек */ void SETTINGS_ResetBootTry(void); /** * @brief Преобразует mac адрес строкового формата в массив uint8_t * @param mac - буфер для вывода mac адреса */ void SETTINGS_GetMac(uint8_t *mac); /** * @brief Установить дату производства */ void SETTINGS_SetProDate(char *proDate, uint8_t len); /** * @brief Установить серийный номер */ void SETTINGS_SetSerialNumber(char *sn, uint8_t len); /** * @brief Установить MAC */ void SysSETTINGS_SetMAC(char *mac, uint8_t len); /** * @brief Установить статус тестирования */ void SETTINGS_StatusTest(char *status, uint8_t len); /** * @brief Установить статус тестирования "T2OK" */ void SETTINGS_SetT2OK(void); /** * @brief Сбросить статус тестирования "T2OK" */ void SETTINGS_ResetT2OK(void); /** * @brief Устанавливает mac адрес исходя из unique id */ void COM_SetTestMAC(void); /** * @brief Включить DHCP */ void SETTINGS_SetDHCPOn(void); // void init_settings(void); // void SETTINGS_Print(void); // bool SETTINGS_Check_9b(void); // void SETTINGS_Replace_9b(void); // Системные настройки extern SYS_t sSys; #endif /* #ifndef SETTINGS_API_H */ /********************************* (C) РОТЕК **********************************/