/********************************* (C) РОТЕК *********************************** * @module settings_api * @file settings_api.h * @version 1.0.0 * @date XX.XX.XXXX * $brief settings_api ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ /* Define to prevent recursive ----------------------------------------------*/ #ifndef SETTINGS_API_H #define SETTINGS_API_H #include "stm32f4xx.h" #include #include "d_inouts.h" /* Максимальная длинна логина и пароля для входа в Web */ #define MAX_WEB_LOGIN_LEN 11 #define MAX_WEB_PASSWD_LEN 11 #define MAX_WEB_COOKIE_LEN 16 /* Максимальная длинна строки параметра, передаваемого в Web */ #define MAX_WEB_PARAM_LEN 64 /* Max WEB users in the system/ * First users are always ADMIN. * Others are USER */ #define MAX_WEB_USERS 2 /** * @brief Параметры обновления ПО */ typedef struct { uint8_t loadMode; // 0 - основная прошивка, 1 - режим обновления ПО uint8_t bootTry; // Признак } BOOT_PARAMS_t; /** * @brief Параметры сетевого подключения */ typedef struct { char ip[16]; char gate[16]; char mask[16]; uint8_t dhcpEnable; // 0 - DHCP отключен, 1 - включен } WEB_PARAMS_t; /** * @brief Параметры SNMP */ typedef struct { char sysDescr[160]; char readCommunity[20]; char writeCommunity[20]; char sysContact[50]; char sysName[20]; char sysLocation[110]; char managerIP[20]; char managerIP2[20]; char managerIP3[20]; char managerIP4[20]; char managerIP5[20]; } SNMP_t; /** * @brief Информация об устройстве */ typedef struct { char productionData[40]; // Дата производства char mac[18]; // MAC адрес char serialNumber[16]; // Серийный номер char comments[110]; // Комментарии } DEVICE_INFO_t; /** * @brief Флаги, ключи и т.д. */ typedef struct { bool netsettingsChanged; // Признак изменения сетевых настроек пользователем char testState[16]; // Статус производственного тестирования } FLAGS_t; /** * @brief Уровни пользователей Web. */ typedef enum { ADMIN = 0, USER, MAX_USER_LEVELS } user_level_t; /** * @brief Настройки аутентификации. */ typedef struct { user_level_t level; char login[MAX_WEB_LOGIN_LEN]; char password[MAX_WEB_PASSWD_LEN]; } AUTH_t; /** * @brief Параметры SNTP */ typedef struct { bool sntpEnable; // Вкл/выкл char ip[16]; // Адрес SNTP сервера char data[30]; // Дата последней синхронизации float timeZone; // Часовой пояс } SNTP_t; /** * @brief Типы источников срабатывания реле */ typedef enum { CRITICAL = 1, NON_CRITICAL, SNMP_SET, RO_MAX_SOURCE } ro_type_source_t; /** * @brief Типы источников срабатывания реле */ typedef enum { UPS_ON = 1, SNMP_TRAP, DI_MAX_ACT } din_type_act_t; /** * @brief Настройки входов/выходов. */ typedef struct { ro_type_source_t ro_type_source[OUTPUTS_TOTAL_COUNT]; din_type_act_t din_type_act[INPUTS_TOTAL_COUNT]; } INOUTS_t; /** * @brief Параметры RADIUS */ typedef struct { bool Auth_enable; char ServerIP[16]; char rds_password[17]; bool RDSEnable; // 0 - DHCP отключен, 1 - включен uint32_t port; uint32_t key_access; } RADIUS_t; /** * @brief Общая структура настроек */ typedef struct { BOOT_PARAMS_t bootParams; WEB_PARAMS_t sWebParams; WEB_PARAMS_t sWebTempParams; DEVICE_INFO_t sInfo; uint32_t CritSecCRC; /* WARNING! До поля CritSecCRC включительно структура настроек должна быть * идентичной между бутлоадером и основным ПО и не должна изменяться при обновлении ПО. * Контроль целостности настроек внутри IAP выполняется только для критической секции, * т.к. контроль целостности всей структуры не имеет смысла * (структура настроек всегда будет отличаться внутри основного ПО). * В случае повреждения критического сектора, загружаются параметры по умолчанию. */ FLAGS_t sFlags; SNMP_t sSnmp; AUTH_t sAuth[MAX_WEB_USERS]; SNTP_t sSNTP; INOUTS_t sInOuts; RADIUS_t sRADIUS; uint32_t controlWorld; // Слово для контроля целостности структуры настроек } SETTINGS_t; /** * @brief * @retval */ uint32_t SETTINGS_GetCritSecCRC(void); /** * @brief Установить параметры обновления ПО по умолчанию */ void SETTINGS_SetBootParamsDef(void); /** * @brief Установить параметры сетевого подключения по умолчанию */ void SETTINGS_SetWebParamsDef(void); /** * @brief Установить временные параметры сетевого подключения по умолчанию */ void SETTINGS_SetTempWebParamsDef(void); /** * @brief Установить параметры SNMP по умолчанию */ void SETTINGS_SetSnmpDef(void); /** * @brief Установить Информацию об устройстве по умолчанию */ void SETTINGS_SetInfoDef(void); /** * @brief Установить флаги по умолчанию */ void SETTINGS_SetFlagsDef(void); /** * @brief Установить параметры SNTP по умолчанию */ void SETTINGS_SetSntpDef(void); /** * @brief Установить параметры настроек сухих контактов / реле по умолчанию */ void SETTINGS_SetINOUTSDef(void); /** * @brief Установить параметры RADIUS по умолчанию */ void SETTINGS_SetRADIUSDef(void); /** * @brief Установить значение сервисных настроек по умолчанию */ void SETTINGS_SetServiceDef(void); /** * @brief Очистка сектора настроек */ void SETTINGS_EraseFlashSector(void); /** * @brief Сброс настроек в значения по умолчанию */ void SETTINGS_SetDefault(void); /** * @brief Сброс всех настроек в значения по умолчанию кроме сетевых настроек */ void SETTINGS_SetPartDefault(void); /** * @brief Сброс всех настроек в значения по умолчанию */ void SETTINGS_SetAllDefault(void); /** * @brief Установка настроек для отладки */ void SETTINGS_SetDefaultDebug(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 Установить статус тестирования "T2OK" */ void SETTINGS_SetT2OK(void); /** * @brief Включить DHCP */ void SETTINGS_SetDHCPOn(void); #endif /* #ifndef SETTINGS_API_H */ /********************************* (C) РОТЕК **********************************/