/********************************* (C) РОТЕК *********************************** * @module parameters * @file parameters.c * @version 1.0.0 * @date XX.XX.XXXX * $brief Template ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "parameters.h" #include "settings_api.h" #include "rtc.h" #ifndef BT6702_SERVICE #include "snmp_api.h" #include "snmp.h" #include "megatec.h" #if defined HARDWARE_BT6707 || HARDWARE_BT6709 #include "server.h" #endif #endif #include "sntp.h" #include "lwip/snmp.h" #include "lwip/sys.h" #include "common_config.h" //#include "d_inouts.h" #include "gpio.h" #include "round.h" //#if defined HARDWARE_BT6703 #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #include #include #include #ifdef HARDWARE_BT6709 extern const char* name_traps[]; #endif //#endif /** * @brief Структура для хранения состояний дискретных входов */ //extern GPIO_INPUTS_t sGpioInputs; /** * @brief Общая структура настроек */ extern SETTINGS_t sSettings; /** * @brief Структура для хранения временных сетевых настроек */ extern WEB_PARAMS_t sTempWebParams; /** * @brief Флаг подтверждения новых сетевых параметров пользователем */ extern bool fConfirmWebParams; #ifndef BT6702_SERVICE // ************************************************************************** // // Параметры UPS /** * @brief */ void GetInputFreqStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", UPS.Freq_in); *len = strlen(str); } /** * @brief */ void GetOutputFreqStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", UPS.Freq_in); *len = strlen(str); } /** * @brief */ void GetInputVoltageStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", UPS.VAC_in); *len = strlen(str); } /** * @brief */ void GetOutputVoltageStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", UPS.VAC_out); *len = strlen(str); } /** * @brief */ void GetPowerStr(char *str, uint8_t *len) { sprintf(str, "%d", UPS.Load); *len = strlen(str); } /** * @brief */ void GetBatCapacityStr(char *str, uint8_t *len) { sprintf(str, "%d", UPS.SOC); *len = strlen(str); } /** * @brief */ void GetRuntimeStr(char *str, uint8_t *len) { sprintf(str, "%d", UPS.work_time); *len = strlen(str); } /** * @brief */ void GetAKBWorktimeStr(char *str, uint8_t *len) { sprintf(str, "%d", (UPS.akb_work_time / 60)); *len = strlen(str); } /** * @brief */ void GetInternalTempStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", UPS.Temp); *len = strlen(str); } /** * @brief */ void GetAlarmMonitorStr(char *str, uint8_t *len) { sprintf(str, "%d", UPS.Alarm); *len = strlen(str); } /** * @brief */ void GetConnectMonitorStr(char *str, uint8_t *len) { if (UPS.Present) { strcpy(str, "0"); } else { strcpy(str, "1"); } *len = strlen(str); } #ifdef HARDWARE_BT6709 /** * @brief */ void GetInputCurrentStr(char *str, uint8_t *len) { float value; if (UPS.VAC_in != 0) { value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * K_EFFICIENCY * UPS.VAC_in); } else { value = 0; } sprintf(str, "%0.3f", roundto(value, 3)); *len = strlen(str); } /** * @brief */ void GetOutputCurrentStr(char *str, uint8_t *len) { float value; if (UPS.VAC_out != 0) { value = (sSettings.UPS_Setting.ups_power * UPS.Load) / (100 * UPS.VAC_out); } else { value = 0; } sprintf(str, "%0.3f", roundto(value, 3)); *len = strlen(str); } /** * @brief */ void GetVoltageAKBtStr(char *str, uint8_t *len) { float value; if (UPS.Vakb_curr < 7) { value = AKB_NUM_CELL * (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr; } else { value = (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr; } sprintf(str, "%0.1f", roundto(value, 1)); *len = strlen(str); } #endif // ************************************************************************** // // Alarms /** * @brief Индикация аварийных ситуаций */ void GetAlarmStr(char *str, uint8_t *len) { sprintf(str, "%d", UPS.Status); *len = strlen(str); } /** * @brief Индикация аварийных ситуаций */ void GetUPSAlarmStr(char *str, uint8_t *len) { if (((UPS.Status >> 7) & 0x01) || ((UPS.Status >> 4) & 0x01) || (UPS.Alarm & 0x01)) { strcpy(str, "Авария"); } else if (!((UPS.Status >> 7) & 0x01) && !((UPS.Status >> 4) & 0x01) && !(UPS.Alarm & 0x01)) { strcpy(str, "Норма"); } else if (((UPS.Status >> 1) & 0x01)) { strcat(str, "/Отключение нагрузки"); } *len = strlen(str); } /** * @brief Индикация аварийных ситуаций */ void GetAKBAlarmStr(char *str, uint8_t *len) { if (((UPS.Status >> 6) & 0x01) || ((UPS.Alarm >> 1) & 0x01)) { strcpy(str, "Авария"); } else if (!((UPS.Status >> 6) & 0x01) && !((UPS.Alarm >> 1) & 0x01)) { strcpy(str, "Норма"); } else if (((UPS.Status >> 2) & 0x01)) { strcat(str, "/Тестирование"); } *len = strlen(str); } /** * @brief Индикация аварийных ситуаций */ void GetConnectUPSAlarmStr(char *str, uint8_t *len) { if (((UPS.Alarm >> 2) & 0x01)) { strcpy(str, "Авария"); } else if (!((UPS.Alarm >> 2) & 0x01)) { strcpy(str, "Норма"); } *len = strlen(str); } /** * @brief Индикация аварийных ситуаций */ void GetUPSModeStr(char *str, uint8_t *len) { if ((UPS.Status >> 5) & 0x01) { sprintf(str, "Bypass"); } else { sprintf(str, "Boost or Buck"); } *len = strlen(str); } #endif // ************************************************************************** // // Параметры даты и времени /** * @brief Дата (Ready for PRS!) */ void GetDateStr(char *str, uint8_t *len) { TM_RTC_t data; uint16_t sys_year ; TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN); sys_year = 2000 + data.year; sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date); *len = strlen(str); } /** * @brief Время (Ready for PRS!) */ void GetTimeStr(char *str, uint8_t *len) { TM_RTC_t data; TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN); sprintf(str, "%02i:%02i", data.hours, data.minutes); *len = strlen(str); } /** * @brief Время (Ready for PRS!) */ void GetUnixTimeStr(char *str, uint8_t *len) { TM_RTC_t data; TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN); sprintf(str, "%d", data.unix); *len = strlen(str); } // ************************************************************************** // // Параметры SNTP /** * @brief Состояние SNTP (Ready for PRS!) */ void GetSntpStateStr(char *str, uint8_t *len) { if (sSettings.sSNTP.sntpEnable) { sprintf(str, "%s", "1"); //авто *len = strlen(str); } else { sprintf(str, "%s", "0"); //ручной *len = strlen(str); } } /** * @brief Состояние SNTP (Ready for PRS!) */ void GetSntpStateStrRU(char *str, uint8_t *len) { if (sSettings.sSNTP.sntpEnable) { sprintf(str, "%s", "авто"); //авто *len = strlen(str); } else { sprintf(str, "%s", "ручной"); //ручной *len = strlen(str); } } /** * @brief IP адрес SNTP сервера (Ready for PRS!) */ void GetSntpServerIpStr(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSNTP.ip); *len = strlen(str); } /** * @brief Часовой пояс контроллера (Ready for PRS!) */ void GetSntpTimeZoneStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", sSettings.sSNTP.timeZone); *len = strlen(str); } /** * @brief Дата последней синхронизации SNTP (Ready for PRS!) */ void GetSntpLastDataStr(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSNTP.data); *len = strlen(str); } #ifndef HARDWARE_BT6709 // ************************************************************************** // // Параметры реле/сухих контактов /** * @brief Тип действий при срабатывание сухих контактов */ void GetDINTypeActStr(char *str, uint8_t *len, uint8_t num) { sprintf(str, "%d", sSettings.sInOuts.din_type_act[num]); *len = strlen(str); } /** * @brief Состояние сухого контакта */ void GetDINStatusStr(char *str, uint8_t *len, uint8_t num) { sprintf(str, "%d", (get_state_din_outs(DIN1 + num) ^ 1)); *len = strlen(str); } /** * @brief Состояние сухого контакта */ void GetDIN0StatusStr(char *str, uint8_t *len) { sprintf(str, "%d", (get_state_din_outs(DIN1) ^ 1)); *len = strlen(str); } /** * @brief Состояние сухого контакта */ void GetDIN0StatusStrRU(char *str, uint8_t *len) { if (get_state_din_outs(DIN1) ^ 1) { sprintf(str, "Разомкнут" ); } else { sprintf(str, "Замкнут" ); } *len = strlen(str); } /** * @brief Источник срабатывания реле */ void GetROTypeActStr(char *str, uint8_t *len, uint8_t num) { sprintf(str, "%d", sSettings.sInOuts.ro_type_source[num]); *len = strlen(str); } /** * @brief Состояние релейного выхода */ void GetDOUTStatusStr(char *str, uint8_t *len, uint8_t num) { #if defined HARDWARE_BT6707 || HARDWARE_BT6709 sprintf(str, "%d", (get_state_din_outs(DOUT1 + num) ^ 1)); #elif HARDWARE_BT6703 sprintf(str, "%d", get_state_din_outs(DOUT1 + num)); #endif *len = strlen(str); } /** * @brief Состояние релейного выхода */ void GetDOUTStatusStrRU(char *str, uint8_t *len, uint8_t num) { #if defined HARDWARE_BT6707 || HARDWARE_BT6709 if (get_state_din_outs(DOUT1 + num) ^ 1) { sprintf(str, "Замкнут"); } else { sprintf(str, "Разомкнут"); } #elif HARDWARE_BT6703 if (get_state_din_outs(DOUT1 + num)) { sprintf(str, "Замкнут"); } else { sprintf(str, "Разомкнут"); } #endif *len = strlen(str); } /** * @brief Состояние релейного выхода */ void GetDOUT0StatusStr(char *str, uint8_t *len) { #if defined HARDWARE_BT6707 || HARDWARE_BT6709 sprintf(str, "%d", (get_state_din_outs(DOUT1) ^ 1)); #elif HARDWARE_BT6703 sprintf(str, "%d", get_state_din_outs(DOUT1)); #endif *len = strlen(str); } /** * @brief Состояние релейного выхода */ void GetDOUT1StatusStr(char *str, uint8_t *len) { #if defined HARDWARE_BT6707 || HARDWARE_BT6709 sprintf(str, "%d", (get_state_din_outs(DOUT2) ^ 1)); #elif HARDWARE_BT6703 sprintf(str, "%d", get_state_din_outs(DOUT2)); #endif *len = strlen(str); } #if defined HARDWARE_BT6707 || HARDWARE_BT6709 /** * @brief Состояние релейного выхода */ void GetDOUT2StatusStr(char *str, uint8_t *len) { sprintf(str, "%d", (get_state_din_outs(DOUT3) ^ 1)); *len = strlen(str); } #endif #endif // ************************************************************************** // // Информация #ifndef BT6702_SERVICE /** * @brief Время работы устройства */ void GetWorkTimeStr(char *str, uint8_t *len) { u32_t tick; uint16_t day; uint8_t hour; uint8_t min; // TODO открыть с новым api для snmp //snmp_get_sysuptime(&tick); MIB2_COPY_SYSUPTIME_TO(&tick); day = tick / 8640000; tick = tick % 8640000; hour = tick / 360000; tick = tick % 360000; min = tick / 6000; sprintf(str, "%d дн. %d ч. %d мин.", day, hour, min); *len = strlen(str); } #endif /** * @brief Модель устройства */ void GetModelStr(char *str, uint8_t *len) { *len = strlen(HW_REV); strncpy(str, HW_REV, *len); } /** * @brief Название устройсва устройства */ void GetNameDeviceStr(char *str, uint8_t *len) { *len = (uint8_t)sSettings.sSnmp.sysName.len; strncpy(str, sSettings.sSnmp.sysName.name, *len); } /** * @brief Дата производства */ void GetProductionDataStr(char *str, uint8_t *len) { *len = strlen(sSettings.sInfo.productionData); strncpy(str, sSettings.sInfo.productionData, *len); } /** * @brief Версия ПО */ void GetVersionStr(char *str, uint8_t *len) // + { *len = strlen(VERSION); strncpy(str, VERSION, *len); } /** * @brief MAC адрес устройства */ void GetMacStr(char *str, uint8_t *len) { *len = strlen(sSettings.sInfo.mac); strncpy(str, sSettings.sInfo.mac, *len); } /** * @brief Серийный номер устройства */ void GetSerialNumberStr(char *str, uint8_t *len) { *len = strlen(sSettings.sInfo.serialNumber); strncpy(str, sSettings.sInfo.serialNumber, *len); } /** * @brief Владелец устройства */ void GetOwnerStr(char *str, uint8_t *len) { *len = (uint8_t)sSettings.sSnmp.sysContact.len; strncpy(str, sSettings.sSnmp.sysContact.contact, *len); } /** * @brief Местоположение устройства */ void GetLocationStr(char *str, uint8_t *len) { *len = (uint8_t) sSettings.sSnmp.sysLocation.len; strncpy(str, sSettings.sSnmp.sysLocation.location, *len); } /** * @brief Комментарии */ void GetCommentsStr(char *str, uint8_t *len) { *len = strlen(sSettings.sInfo.comments); strncpy(str, sSettings.sInfo.comments, *len); } #ifndef BT6702_SERVICE /** * @brief Модель UPS */ void GetUPSModelStr(char *str, uint8_t *len) { *len = strlen(UPS.model); strncpy(str, UPS.model, *len); } /** * @brief Серийный номер UPS */ void GetUPSSerialStr(char *str, uint8_t *len) { *len = strlen(UPS.serial); strncpy(str, UPS.serial, *len); } /** * @brief Версия UPS ПО */ void GetUPSVersionStr(char *str, uint8_t *len) // + { *len = strlen(UPS.vertion); strncpy(str, UPS.vertion, *len); } #endif #ifdef HARDWARE_BT6709 // ************************************************************************** // // Параметры уведомления /** * @brief Параметр разрешения отправки трапа */ void GetNotificationTrapsStateStr(char *str, uint8_t *len, uint8_t num) { if ( sSettings.sFlagNotification[num] ) { sprintf(str, "%s", "true"); *len = strlen(str); } else { sprintf(str, "%s", "false"); *len = strlen(str); } } /** * @brief Параметр разрешения отправки трапа */ void GetNotificationTrapsStateStr2(char *str, uint8_t *len, uint8_t num) { if ( sSettings.sFlagNotification[num] ) { sprintf(str, "%s", "ENA"); *len = strlen(str); } else { sprintf(str, "%s", "DIS"); *len = strlen(str); } } /** * @brief Длинное имя трапа */ void GetTrapLongNameStr(char *str, uint8_t *len, uint8_t num) { sprintf(str, "%s", name_traps[num]); *len = strlen(str); } #endif // ************************************************************************** // // Настройки аутентификации void GetUserLogin(uint8_t user_id, char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sAuth[user_id].login); *len = strlen(str); } void GetUserPassword(uint8_t user_id, char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sAuth[user_id].password); *len = strlen(str); } void GetUserLevel(uint8_t user_id, char *str, uint8_t *len) { sprintf(str, "%d", sSettings.sAuth[user_id].level); *len = strlen(str); } void GetUserLevelInt(uint8_t user_id, uint8_t *value) { *value = sSettings.sAuth[user_id].level; } // ************************************************************************** // // Параметры WEB /** * @brief Текущий IP адрес */ void GetIpStr(char *str, uint8_t *len) { /* Если сейчас временные настройки */ if (sSettings.sFlags.netsettingsChanged) { sprintf(str, "%s", sSettings.sWebTempParams.ip); } else { sprintf(str, "%s", sSettings.sWebParams.ip); } *len = strlen(str); } /** * @brief Текущий шлюз */ void GetGatewayStr(char *str, uint8_t *len) { /* Если сейчас временные настройки */ if (sSettings.sFlags.netsettingsChanged) { sprintf(str, "%s", sSettings.sWebTempParams.gate); } else { sprintf(str, "%s", sSettings.sWebParams.gate); } *len = strlen(str); } /** * @brief Текущая маска подсети */ void GetMaskStr(char *str, uint8_t *len) { /* Если сейчас временные настройки */ if (sSettings.sFlags.netsettingsChanged) { sprintf(str, "%s", sSettings.sWebTempParams.mask); } else { sprintf(str, "%s", sSettings.sWebParams.mask); } *len = strlen(str); } /** * @brief Настройка DHCP */ void GetDhcpStateStr(char *str, uint8_t *len) { /* Если сейчас временные настройки */ if (sSettings.sFlags.netsettingsChanged) { if (sSettings.sWebTempParams.dhcpEnable) { *str = '1'; } else { *str = '0'; } } else { if (sSettings.sWebParams.dhcpEnable) { *str = '1'; } else { *str = '0'; } } *len = 1; } /** * @brief Настройка DHCP */ void GetDhcpStateUDP(char *str, uint8_t *len) { /* Если сейчас временные настройки или был загружен файл конфигурации */ if (sSettings.sFlags.netsettingsChanged) { if (sSettings.sWebTempParams.dhcpEnable) { sprintf(str, "%s", "True"); } else { sprintf(str, "%s", "False"); } } else { if (sSettings.sWebParams.dhcpEnable) { sprintf(str, "%s", "True"); } else { sprintf(str, "%s", "False"); } } *len = strlen(str); } /** * @brief Настройка DHCP */ void GetDhcpStateStrRu(char *str, uint8_t *len) { /* Если сейчас временные настройки или был загружен файл конфигурации */ if (sSettings.sFlags.netsettingsChanged) { if (sSettings.sWebTempParams.dhcpEnable) { sprintf(str, "%s", "Вкл"); } else { sprintf(str, "%s", "Откл"); } } else { if (sSettings.sWebParams.dhcpEnable) { sprintf(str, "%s", "Вкл"); } else { sprintf(str, "%s", "Откл"); } } *len = strlen(str); } #ifdef HARDWARE_BT6709 // ************************************************************************** // // Параметры довверительных хостов /** * @brief диапазон доверительных хостов */ void GetWhiteListSTR(char *str, uint8_t *len, uint8_t num) { if (sSettings.sFlags.netsettingsChanged) { strcpy(str, sSettings.sWhiteListTemp[num].ip_range); } else { strcpy(str, sSettings.sWhiteList[num].ip_range); } *len = strlen(str); } /** * @brief маска диапазона доверительных хостов */ void GetWhiteListMask(uint32_t *value, uint8_t num) { if (sSettings.sFlags.netsettingsChanged) { *value = sSettings.sWhiteListTemp[num].mask; } else { *value = sSettings.sWhiteList[num].mask; } } /** * @brief ip диапазона доверительных хостов */ void GetWhiteListIP(uint32_t *value, uint8_t num) { if (sSettings.sFlags.netsettingsChanged) { *value = sSettings.sWhiteListTemp[num].ip; } else { *value = sSettings.sWhiteList[num].ip; } } #endif // ************************************************************************** // // Параметры SNMP /** * @brief Текущее community для чтения */ void GetReadCommunity(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.readCommunity); *len = strlen(str); } /** * @brief Текущее community для записи */ void GetWriteCommunity(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.writeCommunity); *len = strlen(str); } /** * @brief IP SNMP менеджера */ void GetManagerIp(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.managerIP); *len = strlen(str); } void GetManagerIp2(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.managerIP2); *len = strlen(str); } void GetManagerIp3(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.managerIP3); *len = strlen(str); } void GetManagerIp4(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.managerIP4); *len = strlen(str); } void GetManagerIp5(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sSnmp.managerIP5); *len = strlen(str); } #ifdef HARDWARE_BT6703 // ************************************************************************** // // Параметры RADIUS /** * @brief Текущий IP адрес */ void GetRDSIpStr(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sRADIUS.ServerIP); *len = strlen(str); } /** * @brief Текущий Порт */ void GetRDSPortStr(char *str, uint8_t *len) { sprintf(str, "%d", sSettings.sRADIUS.port); *len = strlen(str); } /** * @brief Текущий Код access */ void GetRDSKeyAccesstStr(char *str, uint8_t *len) { sprintf(str, "%d", sSettings.sRADIUS.key_access); *len = strlen(str); } /** * @brief Текущая пароль RADIUS */ void GetRDSPasswordkStr(char *str, uint8_t *len) { sprintf(str, "%s", sSettings.sRADIUS.rds_password); *len = strlen(str); } /** * @brief Настройка вкл/ выкл RADIUS сервера */ void GetRDSEnableStateStr(char *str, uint8_t *len) { if (sSettings.sRADIUS.RDSEnable) { *str = '1'; } else { *str = '0'; } *len = 1; } /** * @brief Настройка вкл/ выкл авторизации */ void GetAuthEnableStateStr(char *str, uint8_t *len) { if (sSettings.sRADIUS.Auth_enable) { *str = '1'; } else { *str = '0'; } *len = 1; } #endif #if defined HARDWARE_BT6707 || HARDWARE_BT6709 // ************************************************************************** // // Параметры Telnet /** * @brief Текущий Порт */ void GetTelnetPortStr(char *str, uint8_t *len) { sprintf(str, "%d", sSettings.sTelnet.port); *len = strlen(str); } /** * @brief Настройка вкл/ выкл Telnet сервера */ void GetTelnetEnableStateStr(char *str, uint8_t *len) { if (sSettings.sTelnet.TelnetEnable) { *str = '1'; } else { *str = '0'; } *len = 1; } #if defined HARDWARE_BT6709 // ************************************************************************** // // Параметры SSH /** * @brief Текущий Порт */ void GetSSHPortStr(char *str, uint8_t *len) { sprintf(str, "%d", sSettings.sSSH.port); *len = strlen(str); } /** * @brief Настройка вкл/ выкл SSH сервера */ void GetSSHEnableStateStr(char *str, uint8_t *len) { if (sSettings.sSSH.SSHEnable) { *str = '1'; } else { *str = '0'; } *len = 1; } #endif // HARDWARE_BT6709 #endif // ************************************************************************** // // Флаги /** * @brief Вернуть признак изменения сетевых параметров */ void GetWebReinitFlag(char *str, uint8_t *len) { if (sSettings.sFlags.netsettingsChanged) { sprintf(str, "%s", "true"); *len = strlen(str); } else { sprintf(str, "%s", "false"); *len = strlen(str); } } // ************************************************************************** // // Параметры настройки ИБП /** * @brief Минимальное напряжение на ячейках АКБ */ void GetUPSVoltCellMinStr(char *str, uint8_t *len) { sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmin, 2)); *len = strlen(str); } /** * @brief Максимальное напряжение на ячейках АКБ */ void GetUPSVoltCellMaxStr(char *str, uint8_t *len) { sprintf(str, "%0.2f", roundto(sSettings.UPS_Setting.Ucellmax, 2)); *len = strlen(str); } #ifdef HARDWARE_BT6709 /** * @brief Дата замены АКБ */ void GetDataNextChangeAKBStrRU(char *str, uint8_t *len) { if (sSettings.UPS_Setting.set_data == 0) { sprintf(str, "%s", "не установлена"); *len = strlen(str); return; } TM_RTC_t data; uint16_t sys_year; uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time); memset(&data, 0, sizeof(data)); TM_RTC_GetDateTimeFromUnix(&data, data_change); sys_year = 2000 + data.year; sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date); *len = strlen(str); } /** * @brief Дата замены АКБ */ void GetDataNextChangeAKBStr(char *str, uint8_t *len) { if (sSettings.UPS_Setting.set_data == 0) { *len = 0; return; } TM_RTC_t data; uint16_t sys_year; uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time); memset(&data, 0, sizeof(data)); TM_RTC_GetDateTimeFromUnix(&data, data_change); sys_year = 2000 + data.year; sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date); *len = strlen(str); } /** * @brief Дата установки АКБ */ void GetDataSetAKBStr(char *str, uint8_t *len) { if (sSettings.UPS_Setting.set_data == 0) { *len = 0; return; } TM_RTC_t data; uint16_t sys_year; TM_RTC_GetDateTimeFromUnix(&data, sSettings.UPS_Setting.set_data); sys_year = 2000 + data.year; sprintf(str, "%04i-%02i-%02i", sys_year, data.month, data.date); *len = strlen(str); } /** * @brief Срок службы АКБ */ void GetLifeTimeAKBStr(char *str, uint8_t *len) { sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.life_time); *len = strlen(str); } /** * @brief Номинальное напряжение АКБ */ void GetVoltageAKBNominalStr(char *str, uint8_t *len) { sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.Uakb); *len = strlen(str); } /** * @brief Полная мощность АКБ */ void GetUPSPowerStr(char *str, uint8_t *len) { sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.ups_power); *len = strlen(str); } /** * @brief Емкость АКБ */ void GetCapacityNominalAKBStr(char *str, uint8_t *len) { sprintf(str, "%d", (int32_t)sSettings.UPS_Setting.common_capacity); *len = strlen(str); } #endif // ************************************************************************** // // Параметры менеджера аварийных событий /** * @brief Верхняя граница VAC */ void GetVACAlarmHighRangeStr(char *str, uint8_t *len) { sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.high); *len = strlen(str); } /** * @brief Нижняя граница VAC */ void GetVACAlarmLowRangeStr(char *str, uint8_t *len) { sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.low); *len = strlen(str); } /** * @brief Гистерезис (VAC) */ void GetVACAlarmHisteStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", sSettings.sAlarmManager.ac_output_range.hyst); *len = strlen(str); } /** * @brief Верхняя граница температуры */ void GetTemperatureAlarmHighRangeStr(char *str, uint8_t *len) { sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.high); *len = strlen(str); } /** * @brief Нижняя граница температуры */ void GetTemperatureAlarmLowRangeStr(char *str, uint8_t *len) { sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.low); *len = strlen(str); } /** * @brief Гистерезис (температура) */ void GetTemperatureAlarmHisteStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", sSettings.sAlarmManager.Temprature_range.hyst); *len = strlen(str); } /** * @brief Верхняя граница нагрузки */ void GetLoadAlarmHighRangeStr(char *str, uint8_t *len) { sprintf(str, "%d", (int)sSettings.sAlarmManager.load_range.high); *len = strlen(str); } /** * @brief Гистерезис (нагрузки) */ void GetLoadAlarmHisteStr(char *str, uint8_t *len) { sprintf(str, "%0.1f", sSettings.sAlarmManager.load_range.hyst); *len = strlen(str); } // ************************************************************************** // // Установка параметрв // ************************************************************************** // /** * @brief Установить признак обновления ПО. */ void SetLoadMode(void) { /* Set loadMode = 1 */ RTC_WriteBackupRegister(RTC_BKP_DR1, 1); /* Set bootTry = 0 */ RTC_WriteBackupRegister(RTC_BKP_DR2, 0); } /** * @brief Установить признак изменения сетевых параметров */ void SetWebReinitFlag(bool value) { sSettings.sFlags.netsettingsChanged = value; } /** * @brief Установить флаг подтверждения сетевых настроек пользователем */ void SetConfirmWebParamsFlag(void) { fConfirmWebParams = true; } #ifdef HARDWARE_BT6709 // ************************************************************************** // // Параметры уведомления /** * @brief Параметр разрешения отправки */ void SetNotificationFlagsStr(uint8_t *value, uint8_t num) { sSettings.sFlagNotification[num] = *value; } #endif // ************************************************************************** // // Сетевые параметры /** * @brief IP адрес */ void SetIPStr(char *str) { //strcpy(sSettings.sWebParams.ip, str); strcpy(sSettings.sWebTempParams.ip, str); } /** * @brief Шлюз */ void SetGatewayStr(char *str) { //strcpy(sSettings.sWebParams.gate, str); strcpy(sSettings.sWebTempParams.gate, str); } /** * @brief Текущая маска подсети */ void SetMaskStr(char *str) { //strcpy(sSettings.sWebParams.mask, str); strcpy(sSettings.sWebTempParams.mask, str); } /** * @brief Настройка DHCP */ void SetDhcpStateStr(char *str) { if (strncmp(str, "on", 2) == 0) //sSettings.sWebParams.dhcpEnable = 1; { sSettings.sWebTempParams.dhcpEnable = 1; } else //sSettings.sWebParams.dhcpEnable = 0; { sSettings.sWebTempParams.dhcpEnable = 0; } } /** * @brief Настройка DHCP */ void SetUDPDhcpStateStr(char *str) { if (strncmp(str, "True", 4) == 0) { sSettings.sWebTempParams.dhcpEnable = 1; } else if (strncmp(str, "False", 5) == 0) { sSettings.sWebTempParams.dhcpEnable = 0; } } #ifdef HARDWARE_BT6709 // ************************************************************************** // // Параметры довверительных хостов /** * @brief диапазон доверительных хостов */ void SetWhiteListSTR(char *str, uint8_t num) { char ip_str[20]; char *mask_str; uint32_t mask; uint8_t num_octet = 0; strcpy(sSettings.sWhiteListTemp[num].ip_range, str); if (strlen(sSettings.sWhiteListTemp[num].ip_range) != 0) { mask_str = strstr(sSettings.sWhiteListTemp[num].ip_range, "/"); if (mask_str != NULL) { mask = atoi(&mask_str[1]); sSettings.sWhiteListTemp[num].mask = 0; for (uint8_t i = 0; i < mask; i ++) { if (i < 8) { num_octet = 1; } else { num_octet = i / 8 + 1; } sSettings.sWhiteListTemp[num].mask |= (1 << (8 * num_octet - 1 - (i - 8 * (num_octet - 1)))); } memset(ip_str, 0, 20); strncpy(ip_str, sSettings.sWhiteListTemp[num].ip_range, (mask_str - sSettings.sWhiteListTemp[num].ip_range)); sSettings.sWhiteListTemp[num].ip = ipaddr_addr(ip_str); } else { memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num])); sSettings.sWhiteListTemp[num].mask = 0; sSettings.sWhiteListTemp[num].ip = 0; } } else { memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num])); sSettings.sWhiteListTemp[num].mask = 0; sSettings.sWhiteListTemp[num].ip = 0; } } #endif // ************************************************************************** // // Параметры SNMP /** * @brief Community для чтения */ void SetReadCommunity(char *str) { strcpy(sSettings.sSnmp.readCommunity, str); } /** * @brief Community для записи */ void SetWriteCommunity(char *str) { strcpy(sSettings.sSnmp.writeCommunity, str); } #ifndef BT6702_SERVICE /** * @brief IP SNMP менеджера */ void SetManagerIp(char *str) { strcpy(sSettings.sSnmp.managerIP, str); SNMP_SetManagerIP(sSettings.sSnmp.managerIP); } void SetManagerIp2(char *str) { strcpy(sSettings.sSnmp.managerIP2, str); SNMP_SetManagerIP(sSettings.sSnmp.managerIP2); } void SetManagerIp3(char *str) { strcpy(sSettings.sSnmp.managerIP3, str); SNMP_SetManagerIP(sSettings.sSnmp.managerIP3); } void SetManagerIp4(char *str) { strcpy(sSettings.sSnmp.managerIP4, str); SNMP_SetManagerIP(sSettings.sSnmp.managerIP4); } void SetManagerIp5(char *str) { strcpy(sSettings.sSnmp.managerIP5, str); SNMP_SetManagerIP(sSettings.sSnmp.managerIP5); } /** * @brief Название устройсва устройства */ void SetNameDeviceStr(char *str) { strcpy(sSettings.sSnmp.sysName.name, str); sSettings.sSnmp.sysName.len = strlen(str); } /** * @brief Установить владельца */ void SetOwner(char *str) { strcpy(sSettings.sSnmp.sysContact.contact, str); sSettings.sSnmp.sysContact.len = strlen(str); SNMP_SetObjDescr(); } /** * @brief Установить местоположение */ void SetLocation(char *str) { strcpy(sSettings.sSnmp.sysLocation.location, str); sSettings.sSnmp.sysLocation.len = strlen(str); } #endif /** * @brief Установить комментарий */ void SetComment(char *str) { strcpy(sSettings.sInfo.comments, str); } #ifdef HARDWARE_BT6703 // ************************************************************************** // // Сетевые параметры RADIUS сервера /** * @brief IP адрес */ void SetRDSIpStr(char *str) { strcpy(sSettings.sRADIUS.ServerIP, str); } /** * @brief Порт */ void SetRDSPortStr(char *str) { sSettings.sRADIUS.port = atoi(str); } /** * @brief Код access */ void SetRDSKeyAccesstStr(char *str) { sSettings.sRADIUS.key_access = atoi(str); } /** * @brief пароль RADIUS */ void SetRDSPasswordkStr(char *str) { strcpy(sSettings.sRADIUS.rds_password, str); } /** * @brief Настройка вкл/ выкл RADIUS сервера */ void SetRDSEnableStateStr(char *str) { if (strncmp(str, "on", 2) == 0) { sSettings.sRADIUS.RDSEnable = 1; } else { sSettings.sRADIUS.RDSEnable = 0; } } /** * @brief Настройка вкл/ выкл авторизации */ void SetAuthEnableStateStr(char *str) { if (strncmp(str, "on", 2) == 0) { sSettings.sRADIUS.Auth_enable = 1; } else { sSettings.sRADIUS.Auth_enable = 0; } } #endif #if defined HARDWARE_BT6707 || HARDWARE_BT6709 #ifndef BT6702_SERVICE // ************************************************************************** // // Параметры Telnet /** * @brief Текущий Порт */ void SetTelnetPortStr(char *str) { sSettings.sTelnet.port = atoi(str); } /** * @brief Настройка вкл/ выкл Telnet сервера */ void SetTelnetEnableStateStr(char *str) { if (strncmp(str, "on", 2) == 0) { sSettings.sTelnet.TelnetEnable = 1; } else { sSettings.sTelnet.TelnetEnable = 0; } } #if defined HARDWARE_BT6709 // ************************************************************************** // // Параметры SSH /** * @brief Текущий Порт */ void SetSSHPortStr(char *str) { sSettings.sSSH.port = atoi(str); } /** * @brief Настройка вкл/ выкл SSH сервера */ void SetSSHEnableStateStr(char *str) { if (strncmp(str, "on", 2) == 0) { sSettings.sSSH.SSHEnable = 1; } else { sSettings.sSSH.SSHEnable = 0; } } #endif // HARDWARE_BT6709 #endif #endif // ************************************************************************** // // Параметры даты и времени /** * @brief Дата */ void SetDateStr(char *str) { TM_RTC_t tmp_data; char str_data[18]; char str_time[9]; uint8_t len; memset(str_data, 0, 18); memset(str_time, 0, 9); str += 2; strncpy(str_data, (str + 6), 2); strncat(str_data, (str + 2), 4); strncat(str_data, str, 2); TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN); sprintf(str_time, "-01-%02i:%02i", tmp_data.hours, tmp_data.minutes); len = strlen(str_time); strncat(str_data, str_time, len); //TM_RTC_SetDateTimeString(&str_data); TM_RTC_SetDateTimeString(str_data); } /** * @brief Время */ void SetTimeStr(char *str) { TM_RTC_t tmp_data; char str_data[18]; char str_date[14]; uint8_t len; memset(str_data, 0, 18); memset(str_date, 0, 14); TM_RTC_GetDateTime(&tmp_data, TM_RTC_Format_BIN); sprintf(str_date, "%02i-%02i-%02i-01-", tmp_data.date, tmp_data.month, tmp_data.year); len = strlen(str_date); strncat(str_data, str_date, len); strncat(str_data, str, 5); //TM_RTC_SetDateTimeString(&str_data); TM_RTC_SetDateTimeString(str_data); } // ************************************************************************** // // Параметры SNTP #ifndef BT6702_SERVICE /** * @brief Состояние SNTP */ void SetSntpStateStr(char *str) { if (strncmp(str, "1", 1) == 0) { sSettings.sSNTP.sntpEnable = true; } else { sSettings.sSNTP.sntpEnable = false; } } #endif /** * @brief IP адрес SNTP сервера */ void SetSntpServerIpStr(char *str) { strcpy(sSettings.sSNTP.ip, str); } /** * @brief Часовой пояс контроллера */ void SetSntpTimeZoneStr(char *str) { float newUtc; newUtc = atof(str); if (sSettings.sSNTP.timeZone > 0) { if (newUtc >= 0) { if (newUtc >= sSettings.sSNTP.timeZone) { TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone); } else { TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone); } } else { TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone); } } else if (sSettings.sSNTP.timeZone < 0) { if (newUtc >= 0) { TM_RTC_Correction(newUtc + fabs(sSettings.sSNTP.timeZone)); } else { if (newUtc >= sSettings.sSNTP.timeZone) { TM_RTC_Correction(fabs(sSettings.sSNTP.timeZone) - fabs(newUtc)); } else { TM_RTC_Correction(newUtc - sSettings.sSNTP.timeZone); } } } else if (sSettings.sSNTP.timeZone == 0) { TM_RTC_Correction(newUtc); } sSettings.sSNTP.timeZone = newUtc; // atof(str); //TM_RTC_Correction(sSettings.sSNTP.timeZone); } #ifndef HARDWARE_BT6709 // ************************************************************************** // // Параметры реле/сухих контактов /** * @brief Тип действий при срабатывание сухих контактов */ void SetDINTypeActStr(char *str, uint8_t num) { sSettings.sInOuts.din_type_act[num] = atoi(str); } /** * @brief Источник срабатывания реле */ void SetROTypeActStr(char *str, uint8_t num) { static uint8_t OldROtype_Sourse[2] = {0}; OldROtype_Sourse[num] = sSettings.sInOuts.ro_type_source[num]; sSettings.sInOuts.ro_type_source[num] = atoi(str); if (OldROtype_Sourse[num] != sSettings.sInOuts.ro_type_source[num]) { SetROInt(0, num); } } /** * @brief */ void SetROStr(char *str, uint8_t num) { set_state_douts((DOUT1 + num), atoi(str)); } /** * @brief */ void SetROInt(uint8_t val, uint8_t num) { set_state_douts((DOUT1 + num), val); } #endif // ************************************************************************** // // Параметры настройки ИБП /** * @brief Минимальное напряжение на ячейках АКБ */ void SetUPSVoltCellMinStr(char *str) { sSettings.UPS_Setting.Ucellmin = atof(str); } /** * @brief Максимальное напряжение на ячейках АКБ */ void SetUPSVoltCellMaxStr(char *str) { sSettings.UPS_Setting.Ucellmax = atof(str); } #ifdef HARDWARE_BT6709 /** * @brief Дата установки АКБ */ void SetDataSetAKBStr(char *str) { TM_RTC_t tmp_data; char str_data[3]; if (str[0] != 0) { memset(str_data, 0, 3); memset(&tmp_data, 0, sizeof(tmp_data)); str += 2; strncpy(str_data, str, 2); tmp_data.year = atoi(str_data); memset(str_data, 0, 3); strncat(str_data, (str + 3), 2); tmp_data.month = atoi(str_data); memset(str_data, 0, 3); strncat(str_data, (str + 6), 2); tmp_data.date = atoi(str_data); sSettings.UPS_Setting.set_data = TM_RTC_GetUnixTimeStamp(&tmp_data); } else { sSettings.UPS_Setting.set_data = 0; } } /** * @brief Срок службы АКБ */ void SetLifeTimeAKBStr(char *str) { sSettings.UPS_Setting.life_time = atof(str); } /** * @brief Номинальное напряжение АКБ */ void SetVoltageAKBNominalStr(char *str) { sSettings.UPS_Setting.Uakb = atof(str); } /** * @brief Полная мощность АКБ */ void SetUPSPowerStr(char *str) { sSettings.UPS_Setting.ups_power = atof(str); } /** * @brief Емкость АКБ */ void SetCapacityNominalAKBStr(char *str) { sSettings.UPS_Setting.common_capacity = atoi(str); } #endif // ************************************************************************** // // Параметры менеджера аварий /** * @brief Верхняя граница VAC */ void SetVACAlarmHighRangeStr(char *str) { sSettings.sAlarmManager.ac_output_range.high = atof(str); } /** * @brief Нижняя граница VAC */ void SetVACAlarmLowRangeStr(char *str) { sSettings.sAlarmManager.ac_output_range.low = atof(str); } /** * @brief Гистерезис (VAC) */ void SetVACAlarmHisteStr(char *str) { sSettings.sAlarmManager.ac_output_range.hyst = atof(str); } /** * @brief Верхняя граница температуры */ void SetTemperatureAlarmHighRangeStr(char *str) { sSettings.sAlarmManager.Temprature_range.high = atof(str); } /** * @brief Нижняя граница температуры */ void SetTemperatureAlarmLowRangeStr(char *str) { sSettings.sAlarmManager.Temprature_range.low = atof(str); } /** * @brief Гистерезис (температура) */ void SetTemperatureAlarmHisteStr(char *str) { sSettings.sAlarmManager.Temprature_range.hyst = atof(str); } /** * @brief Верхняя граница нагрузки */ void SetLoadAlarmHighRangeStr(char *str) { sSettings.sAlarmManager.load_range.high = atof(str); } /** * @brief Гистерезис (нагрузки) */ void SetLoadAlarmHistStr(char *str) { sSettings.sAlarmManager.load_range.hyst = atof(str); } /********************************* (C) РОТЕК **********************************/