/********************************* (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" #include "common_config.h" #include "lwip/opt.h" #include "lwip/ip.h" /* Предельные границы настроек */ #define MAX_VOLT_CELL_RANGE 3.0 #define MIN_VOLT_CELL_RANGE 0 #define MAX_VAC_MAX_RANGE 250 #define MAX_VAC_MIN_RANGE 220 #define MIN_VAC_MAX_RANGE 200 #define MIN_VAC_MIN_RANGE 110 #define HIST_VAC_MAX_RANGE 30 #define HIST_VAC_MIN_RANGE 10 #define MAX_TEMP_MAX_RANGE 80 #define MAX_TEMP_MIN_RANGE 40 #define MIN_TEMP_MAX_RANGE 0 #define MIN_TEMP_MIN_RANGE -40 #define HIST_TEMP_MAX_RANGE 2 #define HIST_TEMP_MIN_RANGE 0.5 #define MAX_LOAD_MAX_RANGE 120 #define MAX_LOAD_MIN_RANGE 60 #define HIST_LOAD_MAX_RANGE 2 #define HIST_LOAD_MIN_RANGE 0.5 #define LIFETIME_MIN_RANGE 1 #define LIFETIME_MAX_RANGE 10 #define CAPACITY_MIN_RANGE 1 #define CAPACITY_MAX_RANGE 200 #define AKB_VOLTAGE_MIN_RANGE 12 #define AKB_VOLTAGE_MAX_RANGE 240 #define UPS_POWER_MIN_RANGE 400 #define UPS_POWER_MAX_RANGE 10000 /* Максимальная длинна логина и пароля для входа в 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 #define MAX_WHITE_LIST 5 /** * @brief Уровни пользователей Web. */ typedef enum { ALL_DEFAULT = 0, PART_DEFAULT_1, PART_DEFAULT_2, MAX_RESET_SETTINGS_TYPES } reset_settings_type_t; /** * @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 Параметры сетевого подключения */ typedef struct { char ip_range[19]; uint32_t ip; uint32_t mask; } WHITE_LIST_t; /** * @brief Описание устройства системный параметр SNMP */ typedef struct { char description[160]; uint16_t len; } SNMP_SYS_DESCR_t; /** * @brief Контактная информация системный параметр SNMP */ typedef struct { char contact[50]; uint16_t len; } SNMP_SYS_CONTACT_t; /** * @brief Название устройства системный параметр SNMP */ typedef struct { char name[20]; uint16_t len; } SNMP_SYS_NAME_t; /** * @brief Местоположение устройства системный параметр SNMP */ typedef struct { char location[110]; uint16_t len; } SNMP_SYS_LOCATION_t; /** * @brief Параметры SNMP */ typedef struct { SNMP_SYS_DESCR_t sysDesc; char readCommunity[20]; char writeCommunity[20]; SNMP_SYS_CONTACT_t sysContact; SNMP_SYS_NAME_t sysName; SNMP_SYS_LOCATION_t sysLocation; 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 { #ifdef RELAY_AC_PRESENT AC_PRESENT = 1, #endif #ifdef RELAY_DC_PRESENT DC_PRESENT, #endif #ifdef RELAY_ALARM_AKB ALARM_AKB, #endif #ifdef RELAY_CHARGE_AKB CHARGE_AKB, #endif #ifdef RELAY_OFF_AKB OFF_AKB, #endif #ifdef TYPE_CRITICAL_ALARM_MONITOR CRITICAL = 1, NON_CRITICAL, #endif SNMP_SET, RO_MAX_SOURCE } ro_type_source_t; /** * @brief Типы источников срабатывания реле */ typedef enum { DI_DISCONN = 0, DI_CONN, DI_MAX_ACT } din_type_act_t; /** * @brief Настройки сухих контактов. */ typedef struct { char name[21]; din_type_act_t din_type_act; } DIN_Settings_t; /** * @brief Настройки диапазона уровней Аварий. */ typedef struct { float high; float low; float hyst; } ALARM_LEVEL_RANGE_t; /** * @brief Настройки Аварий. */ typedef struct { ALARM_LEVEL_RANGE_t load_range; #ifdef VAC_IN_MONITOR ALARM_LEVEL_RANGE_t ac_input_range; #endif ALARM_LEVEL_RANGE_t ac_output_range; ALARM_LEVEL_RANGE_t Temprature_range; #ifndef HARDWARE_BT6709 ALARM_LEVEL_RANGE_t Temprature_cabinet_range; #endif } ALARM_MNGR_t; typedef enum{ ups_kestar, ups_voltronic, ups_offline, type_ups_max } typeUPSEnums_t; typedef enum{ ups_1_0_power, ups_1_5_power, ups_2_0_power, ups_3_0_power, ups_6_0_power, ups_10_0_power, ups_power_num_max } upsPowerEnums_t; /** * @brief Настройки ИБП. */ typedef struct { float Ucellmin; float Ucellmax; float Uakb; float ups_power; uint32_t life_time; uint32_t set_data; uint32_t common_capacity; uint8_t type_ups; uint32_t serial; } UPS_Setting_t; typedef struct { ip_addr_t server_ip; u16_t server_port; char remote_path[100]; #define SETTINGS_FIELD_MAX_LEN 100 char user[30]; char pass[30]; } FTP_Update_t; typedef struct { bool enabled; ip_addr_t server_ip; u16_t server_port; } Syslog_Settings_t; /** * @brief Настройки реле. */ typedef struct { ro_type_source_t ro_type_source; } RELAY_Settings_t; /** * @brief Параметры RADIUS */ typedef struct { bool Auth_enable; char ServerIP[16]; char rds_password[17]; bool RDSEnable; // 0 - отключен, 1 - включен uint32_t port; uint32_t key_access; } RADIUS_t; /** * @brief Параметры Telnet */ typedef struct { bool TelnetEnable; // 0 - отключен, 1 - включен uint32_t port; } TELNET_t; /** * @brief Параметры SSH */ typedef struct { bool SSHEnable; // 0 - отключен, 1 - включен uint32_t port; } SSH_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 Четность прозрачного порта */ typedef enum { GW_NO_PAR = 0, GW_ODD_PAR, GW_EVEN_PAR, MAX_PARITY_TYPES } gwparity_t; /** * @brief Настройки прозрачного порта */ typedef struct { bool enabled; /* Вкл/Откл */ gwtrans_t transtype; /* Тип транспорта */ gwmode_t mode; /* Режим: Клиент/Сервер */ char ip[16]; /* IP-адрес сервера (для клиента) */ uint16_t port; /* Порт */ uint32_t baud; /* Скорость порта */ gwparity_t parity; /* Четность */ uint8_t databits; /* Число бит данных */ uint8_t stopbits; /* Число стоп-бит */ uint8_t timeout; /* Таймаут ответа от устройства */ uint16_t quota; /* Максимальное время занятия порта */ } PORTGW_t; /** * @brief Место измерения датчика температуры */ typedef enum { TS_NONE = 0, TS_CABINET, TS_AKB } ts_location_type_t; /** * @brief Параметры контроля температуры */ typedef struct { ts_location_type_t type_sensor; //размещение датчика температуры } TEMP_COTROL_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; #define XSETTING(type, name, setter, type_reset) type name; SETTINGS_TABLE #undef XSETTING uint32_t controlWorld; // Слово для контроля целостности структуры настроек } SETTINGS_t; extern SETTINGS_t sSettings; /** * @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_SetUPSSettingsDef(void); /** * @brief Настройки серийного номера ИБП по умолчанию */ void SETTINGS_SetUPSSerialSettingsDef(void); /** * @brief Установить Информацию об устройстве по умолчанию */ void SETTINGS_SetInfoDef(void); /** * @brief Установить наcтройки менеджера Аварий по умолчанию */ void SETTINGS_SetAlarmManagerDef(void); /** * @brief Установить флаги по умолчанию */ void SETTINGS_SetFlagsDef(void); /** * @brief Установить параметры SNTP по умолчанию */ void SETTINGS_SetSntpDef(void); /** * @brief Установить параметры настроек сухих контактов по умолчанию */ void SETTINGS_SetDINSDef(void); /** * @brief Установить параметры настроек реле по умолчанию */ void SETTINGS_SetRelaysDef(void); /** * @brief Установить значение настроек прозрачного порта по умолчанию */ void SETTINGS_SetPortGwDef(void); /** * @brief Установить параметры RADIUS по умолчанию */ void SETTINGS_SetRADIUSDef(void); /** * @brief Установить параметры сертификата сервера по умолчанию */ void SETTINGS_SetSSLcrtDef(void); /** * @brief Установить параметры Telnet */ void SETTINGS_SetTelnetDef(void); /** * @brief Установить параметры SSH */ void SETTINGS_SetSSHDef(void); /** * @brief Установить параметры списка доверительных хостов */ void SETTINGS_SetWhiteListDef(void); /** * @brief Установить параметры датчиков температуры */ void SETTINGS_SetTempControlDef(void); /** * @brief Установить параметры разрешения уведомлений по умолчанию */ void SETTINGS_SetFlagNotificationDef(void); void SETTINGS_SetFTPUpdateDef(void); void SETTINGS_SetSyslogDef(void); /** * @brief Установить значение сервисных настроек по умолчанию */ void SETTINGS_SetServiceDef(void); /** * @brief Очистка сектора настроек */ void SETTINGS_EraseFlashSector(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); void init_settings(void); #endif /* #ifndef SETTINGS_API_H */ /********************************* (C) РОТЕК **********************************/