/********************************* (C) ROTEK *********************************** * @module web_params_api * @file web_params_api.c * @version 1.0.0 * @date XX.XX.XXXX * $brief web_params_api ******************************************************************************* * @history Version Author Comment * XX.XX.XXXX 1.0.0 Telenkov D.A. First release. ******************************************************************************* */ #include "stm32f4xx.h" #include "web_params_api.h" #include "parameters.h" #include "trap_params.h" #include "snmp_api.h" #include "trap_api.h" #include "settings_api.h" #include "common_config.h" #include "snmp.h" #include "log.h" #include "hal.h" #include "FreeRTOS.h" #include "task.h" #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #include typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t JumpAddress; /** * @brief Возвращяет строку с настройками на первой странице * @retval None */ void HTTP_GetParamsPage1(char *buf) { char str[40]; uint8_t len; memset(buf, 0, 1000); // Headers для поддержки saffari strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n"); // Параметры UPS GetInputVoltageStr(str, &len); strcat(buf, "{\"AC\":\""); strncat(buf, str, len); GetOutputVoltageStr(str, &len); strcat(buf, "\",\"DC\":\""); strncat(buf, str, len); GetInputFreqStr(str, &len); strcat(buf, "\",\"in_freq\":\""); strncat(buf, str, len); GetOutputFreqStr(str, &len); strcat(buf, "\",\"out_freq\":\""); strncat(buf, str, len); GetPowerStr(str, &len); strcat(buf, "\",\"pwr\":\""); strncat(buf, str, len); GetBatCapacityStr(str, &len); strcat(buf, "\",\"bat_cap\":\""); strncat(buf, str, len); GetInternalTempStr(str, &len); strcat(buf, "\",\"inner_temp\":\""); strncat(buf, str, len); GetRuntimeStr(str, &len); strcat(buf, "\",\"bat_time_left\":\""); strncat(buf, str, len); GetDINStatusStr(str, &len, 0); strcat(buf, "\",\"di1\":\""); strncat(buf, str, len); GetDOUTStatusStr(str, &len, 0); strcat(buf, "\",\"ro1\":\""); strncat(buf, str, len); GetDOUTStatusStr(str, &len, 1); strcat(buf, "\",\"ro2\":\""); strncat(buf, str, len); #ifdef HARDWARE_BT6706 GetDOUTStatusStr(str, &len, 2); strcat(buf, "\",\"ro3\":\""); strncat(buf, str, len); #endif // Дополнительные параметры // Мониторинг // load_monitor (нагрузка, 0 - норма, 1 - fail) // temp_monitor (внутренняя температура, 0 - норма, 1 - fail) // connect_monitor (связь с UPSом, 0 - норма, 1 - fail) GetAlarmMonitorStr(str, &len); strcat(buf, "\",\"m_alarm\":\""); strncat(buf, str, len); GetAlarmStr(str, &len); strcat(buf, "\",\"u_alarm\":\""); strncat(buf, str, len); // Признак изменения сетевых настроек GetWebReinitFlag(str, &len); strcat(buf, "\",\"netsettings_changed\":\""); strncat(buf, str, len); strncat(buf, "\"}", 2); //printf(buf); } /** * @brief Возвращяет строку с настройками на второй странице * @retval None */ void HTTP_GetSettings(char *buf) { char str[30]; uint8_t len; /* Headers для поддержки saffari */ strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n"); /* SNMP */ GetReadCommunity(str, &len); strcat(buf, "{\"read_community\":\""); strncat(buf, str, len); GetWriteCommunity(str, &len); strcat(buf, "\",\"write_community\":\""); strncat(buf, str, len); GetManagerIp(str, &len); strcat(buf, "\",\"managerIP\":\""); strncat(buf, str, len); GetManagerIp2(str, &len); strcat(buf, "\",\"managerIP2\":\""); strncat(buf, str, len); GetManagerIp3(str, &len); strcat(buf, "\",\"managerIP3\":\""); strncat(buf, str, len); GetManagerIp4(str, &len); strcat(buf, "\",\"managerIP4\":\""); strncat(buf, str, len); GetManagerIp5(str, &len); strcat(buf, "\",\"managerIP5\":\""); strncat(buf, str, len); /*Параметры реле и сухих контактов*/ GetDINTypeActStr(str, &len, 0); strcat(buf, "\",\"di1\":\""); strncat(buf, str, len); GetROTypeActStr(str, &len, 0); strcat(buf, "\",\"ro1\":\""); strncat(buf, str, len); GetROTypeActStr(str, &len, 1); strcat(buf, "\",\"ro2\":\""); strncat(buf, str, len); #ifdef HARDWARE_BT6706 GetROTypeActStr(str, &len, 2); strcat(buf, "\",\"ro3\":\""); strncat(buf, str, len); #endif /* WEB */ GetIpStr(str, &len); strcat(buf, "\",\"ipaddr\":\""); strncat(buf, str, len); GetGatewayStr(str, &len); strcat(buf, "\",\"gw\":\""); strncat(buf, str, len); GetMaskStr(str, &len); strcat(buf, "\",\"mask\":\""); strncat(buf, str, len); GetDhcpStateStr(str, &len); strcat(buf, "\",\"dhcp\":"); strncat(buf, str, len); GetAuthEnableStateStr(str, &len); strcat(buf, ",\"swauth\":"); strncat(buf, str, len); /* RADIUS */ GetRDSIpStr(str, &len); strcat(buf, ",\"rs_server\":\""); strncat(buf, str, len); GetRDSPortStr(str, &len); strcat(buf, "\",\"rs_port\":\""); strncat(buf, str, len); GetRDSPasswordkStr(str, &len); strcat(buf, "\",\"rs_pwd\":\""); strncat(buf, str, len); GetRDSKeyAccesstStr(str, &len); strcat(buf, "\",\"rs_key\":\""); strncat(buf, str, len); GetRDSEnableStateStr(str, &len); strcat(buf, "\",\"rs_enabled\":"); strncat(buf, str, len); /* Параметры даты и времени */ GetDateStr(str, &len); strcat(buf, ",\"date\":\""); strncat(buf, str, len); GetTimeStr(str, &len); strcat(buf, "\",\"time\":\""); strncat(buf, str, len); /* Параметры SNTP */ GetSntpStateStr(str, &len); strcat(buf, "\",\"ntp\":\""); strncat(buf, str, len); GetSntpServerIpStr(str, &len); strcat(buf, "\",\"ntpservip\":\""); strncat(buf, str, len); GetSntpTimeZoneStr(str, &len); strcat(buf, "\",\"utc\":\""); strncat(buf, str, len); GetUnixTimeStr(str, &len); strcat(buf, "\",\"utm\":\""); strncat(buf, str, len); GetSntpLastDataStr(str, &len); strcat(buf, "\",\"lastsynctime\":\""); strncat(buf, str, len); /* Признак изменения сетевых настроек */ GetWebReinitFlag(str, &len); strcat(buf, "\",\"netsettings_changed\":\""); strncat(buf, str, len); strncat(buf, "\"}", 2); //printf(buf); } /** * @brief Возвращяет строку с информацией об устройстве * @retval None */ // TODO Согласовать максимальную длину строк void HTTP_GetInfo(char *buf) { char str[40]; uint8_t len; /* Headers для поддержки saffari */ strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n"); GetWorkTimeStr(str, &len); strcat(buf, "{\"uptime\":\""); strncat(buf, str, len); GetModelStr(str, &len); strcat(buf, "\",\"model\":\""); strncat(buf, str, len); GetProductionDataStr(str, &len); strcat(buf, "\",\"prodate\":\""); strncat(buf, str, len); GetVersionStr(str, &len); strcat(buf, "\",\"fwversion\":\""); strncat(buf, str, len); GetMacStr(str, &len); strcat(buf, "\",\"macaddr\":\""); strncat(buf, str, len); GetSerialNumberStr(str, &len); strcat(buf, "\",\"serno\":\""); strncat(buf, str, len); GetOwnerStr(str, &len); strcat(buf, "\",\"owner\":\""); strncat(buf, str, len); GetLocationStr(str, &len); strcat(buf, "\",\"sysLocation\":\""); strncat(buf, str, len); GetCommentsStr(str, &len); strcat(buf, "\",\"comment\":\""); strncat(buf, str, len); GetUPSModelStr(str, &len); strcat(buf, "\",\"ups_model\":\""); strncat(buf, str, len); GetUPSVersionStr(str, &len); strcat(buf, "\",\"ups_fwversion\":\""); strncat(buf, str, len); /* Признак изменения сетевых настроек */ GetWebReinitFlag(str, &len); strcat(buf, "\",\"netsettings_changed\":\""); strncat(buf, str, len); strncat(buf, "\"}", 2); } void HTTP_GetHistoryPage(char* buf, uint32_t pageNumber) { char str[16]; uint16_t len; strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n"); strcat(buf, "{\"page\": ["); History_GetPage(buf, pageNumber); len = strlen(buf); buf +=len-1; *buf = 0; buf -=len-1; /* Количество страниц */ memset(str, 0, 16); sprintf(str, "%i", History_GetPageCount()); strcat(buf, "],\"pages\":\""); strcat(buf, str); /* Часовой пояс */ GetSntpTimeZoneStr(str, (uint8_t*)&len); strcat(buf, "\",\"utc\":\""); strncat(buf, str, len); GetUnixTimeStr(str, (uint8_t*)&len); strcat(buf, "\",\"utm\":\""); strncat(buf, str, len); strcat(buf, "\"}"); //printf(buf); } void HTTP_GetUpsHistoryPage(char* buf, uint32_t pageNumber) { char str[16]; uint16_t len; strcpy(buf, "HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n"); strcat(buf, "{\"page\": ["); LOG_GetPage(buf, pageNumber); len = strlen(buf); buf +=len-1; *buf = 0; buf -=len-1; /* Количество страниц */ memset(str, 0, 16); sprintf(str, "%i", LOG_GetPageCount()); strcat(buf, "],\"pages\":\""); strcat(buf, str); /* Часовой пояс */ GetSntpTimeZoneStr(str, (uint8_t*)&len); strcat(buf, "\",\"utc\":\""); strncat(buf, str, len); GetUnixTimeStr(str, (uint8_t*)&len); strcat(buf, "\",\"utm\":\""); strncat(buf, str, len); strcat(buf, "\"}"); //printf(buf); } /** * @brief Возвращает uptime, freq, dutycicle */ void HTTP_GetProgonParams(char *buf) { char str[20]; u32_t tick; strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n"); strcat(buf, "{\"uptime\":\""); // snmp_get_sysuptime(&tick); tick = tick/100; memset(str, 0, 20); sprintf(str, "%d", tick); strncat(buf, str, strlen(str)); strncat(buf, "\"}", 2); } /** * @brief Сброс настроек (всё кроме сетевых параметров) */ void HTTP_ResetSettings(void) { //taskENTER_CRITICAL(); SNMP_SendUserTrap(DEVICE_RESTORED); log_event_data(LOG_SYSTEM_DEFCONFIG, name_login); vTaskDelay(500); SETTINGS_SetPartDefault(); SETTINGS_Save(); //taskEXIT_CRITICAL(); } /** * @brief Сохранение настроек */ void HTTP_SaveSettings(void) { // taskENTER_CRITICAL(); SETTINGS_Save(); log_event_data(LOG_SETTING_SAVE, name_login); // taskEXIT_CRITICAL(); } /** * @brief Перезагрузка контроллера */ void HTTP_Reboot(void) { vTaskDelay(1010); Reboot(); } /** * @brief Запускает задачу ресета контроллера * @param fBootMode: * true - перед перезагрузкой будет установлен флаг входа в режим * bootloader и перезаписаны настройки * * false - обычная перезагрузка */ void HTTP_StartResetTask(bool fBootMode) { static bool temp; temp = fBootMode; xTaskCreate(vTaskReboot, "RebootTask", configMINIMAL_STACK_SIZE, (void*)&temp, tskIDLE_PRIORITY, NULL); } /** * @brief */ void vTaskReboot(void * pvParameters) { bool mode = false; // тип перезагрузки (нужно ли устанавливать флаг bootloader) for (;;) { mode = *(bool*)pvParameters; if (mode) { SNMP_SendUserTrap(FW_VERSION_UPDATE); log_event_data(LOG_UPDATE_SOFT, name_login); SetLoadMode(); HTTP_SaveSettings(); vTaskDelay(2000); /* Блокируем управление ключем на тау секунд*/ //IO_KeyBlockOn(); vTaskDelay(1010); Reboot(); } else { vTaskDelay(1000); /* Блокируем управление ключем на тау секунд*/ //IO_KeyBlockOn(); vTaskDelay(1010); Reboot(); } } } /********************************* (C) ROTEK **********************************/