webguiapp/src/HTTPPrintSystem.c

922 lines
30 KiB
C

/*! Copyright 2022 Bogdan Pilyugin
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* \file HTTPPrintSystem.c
* \version 1.0
* \date 2022-08-14
* \author Bogdan Pilyugin
* \brief
* \details
* \copyright Apache License, Version 2.0
*/
#include "HTTPServer.h"
#include "esp_sntp.h"
#include "esp_netif.h"
#include "esp_wifi.h"
#include "NetTransport.h"
#include "esp_ota_ops.h"
#include "ROMFS.h"
#include "esp_idf_version.h"
#include "jWrite.h"
static const char *TAG = "HTTPServerPrint";
typedef enum
{
IP,
NETMASK,
GW
} IP_PRINT_TYPE;
//Pointer to extend user implemented print handler
static int (*HTTPPrintCust)(httpd_req_t *req, char *buf, char *var, int arg);
void regHTTPPrintCustom(int (*print_handler)(httpd_req_t *req, char *buf, char *var, int arg))
{
HTTPPrintCust = print_handler;
}
static void PrintInterfaceState(char *VarData, void *arg, esp_netif_t *netif)
{
if (netif != NULL && esp_netif_is_netif_up(netif))
snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED");
}
static void PrintIPFromInterface(char *VarData, void *arg, esp_netif_t *netif, IP_PRINT_TYPE tp)
{
char buf[16];
esp_netif_ip_info_t ip_info;
if (netif != NULL && esp_netif_get_ip_info(netif, &ip_info) == ESP_OK)
{
switch (tp)
{
case IP:
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.ip, buf, 16));
break;
case NETMASK:
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.netmask, buf, 16));
break;
case GW:
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa(&ip_info.gw, buf, 16));
break;
}
}
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "-");
}
static void PrintDNSFromInterface(char *VarData, void *arg, esp_netif_t *netif, esp_netif_dns_type_t type)
{
char buf[16];
esp_netif_dns_info_t dns_info;
if (netif != NULL && esp_netif_get_dns_info(netif, type, &dns_info) == ESP_OK)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", esp_ip4addr_ntoa((esp_ip4_addr_t*) (&dns_info.ip), buf, 16));
}
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "-");
}
static void PrintMACFromInterface(char *VarData, void *arg, esp_netif_t *netif)
{
uint8_t mac_addr[6] = { 0 };
esp_netif_get_mac(netif, mac_addr);
snprintf(VarData, MAX_DYNVAR_LENGTH, "%02x-%02x-%02x-%02x-%02x-%02x",
mac_addr[0],
mac_addr[1],
mac_addr[2],
mac_addr[3],
mac_addr[4],
mac_addr[5]);
}
static void PrintCheckbox(char *VarData, void *arg, bool checked)
{
if (checked)
snprintf(VarData, MAX_DYNVAR_LENGTH, "checked");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
}
static void HTTPPrint_name(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", CONFIG_DEVICE_MODEL_NAME);
}
static void HTTPPrint_time(char *VarData, void *arg)
{
time_t now;
time(&now);
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (uint32_t) now);
}
static void HTTPPrint_uptime(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetUpTime());
}
static void HTTPPrint_status_fail(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "none");
}
static void HTTPPrint_dname(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->NetBIOSName);
}
static void HTTPPrint_login(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->SysName);
}
static void HTTPPrint_pass(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******");
}
static void HTTPPrint_ota(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->Flags1.bIsOTAEnabled);
}
static void HTTPPrint_otarst(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->Flags1.bIsResetOTAEnabled);
}
static void HTTPPrint_otaint(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->OTAAutoInt);
}
static void HTTPPrint_serial(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->ID);
}
static void HTTPPrint_serial10(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->SN);
}
static void HTTPPrint_fver(char *VarData, void *arg)
{
esp_app_desc_t cur_app_info;
if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", cur_app_info.version);
}
}
static void HTTPPrint_fverav(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetAvailVersion());
}
static void HTTPPrint_updstat(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetUpdateStatus());
}
static void HTTPPrint_idfver(char *VarData, void *arg)
{
esp_app_desc_t cur_app_info;
if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", cur_app_info.idf_ver);
}
}
static void HTTPPrint_builddate(char *VarData, void *arg)
{
esp_app_desc_t cur_app_info;
if (esp_ota_get_partition_description(esp_ota_get_running_partition(), &cur_app_info) == ESP_OK)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s %s", cur_app_info.date, cur_app_info.time);
}
}
static void HTTPPrint_otaurl(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->OTAURL);
}
static void HTTPPrint_tshift(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "7200");
}
static void HTTPPrint_tz(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->sntpClient.TimeZone);
}
static void HTTPPrint_wlev(char *VarData, void *arg)
{
wifi_ap_record_t wifi;
if (esp_wifi_sta_get_ap_info(&wifi) == ESP_OK)
snprintf(VarData, MAX_DYNVAR_LENGTH, "%ddBm", wifi.rssi);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "--");
}
static void HTTPPrint_defadp(char *VarData, void *arg)
{
GetDefaultNetIFName(VarData);
}
#if CONFIG_WEBGUIAPP_WIFI_ENABLE
static void HTTPPrint_wfen(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsWiFiEnabled);
}
static void HTTPPrint_wfstat(char *VarData, void *arg)
{
if (GetSysConf()->wifiSettings.WiFiMode == WIFI_MODE_AP)
PrintInterfaceState(VarData, arg, GetAPNetifAdapter());
else
PrintInterfaceState(VarData, arg, GetSTANetifAdapter());
}
static void HTTPPrint_cln(char *VarData, void *arg)
{
//PrintCheckbox(VarData, arg, !GetSysConf()->wifiSettings.Flags1.bIsAP);
}
static void HTTPPrint_apn(char *VarData, void *arg)
{
//PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsAP);
}
static void HTTPPrint_wfmode(char *VarData, void *arg)
{
if ((*(uint8_t*) arg) == GetSysConf()->wifiSettings.WiFiMode)
snprintf(VarData, MAX_DYNVAR_LENGTH, "selected");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
}
static void HTTPPrint_ssidap(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->wifiSettings.ApSSID);
}
static void HTTPPrint_wkeyap(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "********");
}
/*AP IP*/
static void HTTPPrint_ipap(char *VarData, void *arg)
{
if (GetAPNetifAdapter() && esp_netif_is_netif_up(GetAPNetifAdapter()))
PrintIPFromInterface(VarData, arg, GetAPNetifAdapter(), IP);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->wifiSettings.ApIPAddr));
}
static void HTTPPrint_ssid(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->wifiSettings.InfSSID);
}
static void HTTPPrint_wkey(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "********");
}
static void HTTPPrint_cbdh(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->wifiSettings.Flags1.bIsDHCPEnabled);
}
/*STA IP*/
static void HTTPPrint_ip(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), IP);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->wifiSettings.InfIPAddr));
}
/*STA NETMASK*/
static void HTTPPrint_msk(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), NETMASK);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->wifiSettings.InfMask));
}
/*STA GATEWAY*/
static void HTTPPrint_gate(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintIPFromInterface(VarData, arg, GetSTANetifAdapter(), GW);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->wifiSettings.InfGateway));
}
/*Current DNS*/
static void HTTPPrint_dns(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_MAIN);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_dns2(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_BACKUP);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_dns3(char *VarData, void *arg)
{
if (GetSTANetifAdapter() && esp_netif_is_netif_up(GetSTANetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetSTANetifAdapter(), ESP_NETIF_DNS_FALLBACK);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_macadr(char *VarData, void *arg)
{
PrintMACFromInterface(VarData, arg, GetSTANetifAdapter());
}
static void HTTPPrint_apmacadr(char *VarData, void *arg)
{
PrintMACFromInterface(VarData, arg, GetAPNetifAdapter());
}
static void HTTPPrint_wifisc(char *VarData, void *arg)
{
wifi_ap_record_t *R = GetWiFiAPRecord(*(uint8_t*) (arg));
if (!R)
return;
snprintf(VarData, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", R->ssid, R->rssi,
R->primary);
}
#endif
#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE
static void HTTPPrint_ethen(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->ethSettings.Flags1.bIsETHEnabled);
}
static void HTTPPrint_ecbdh(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->ethSettings.Flags1.bIsDHCPEnabled);
}
static void HTTPPrint_ethstat(char *VarData, void *arg)
{
PrintInterfaceState(VarData, arg, GetETHNetifAdapter());
}
/*Etherbox IP*/
static void HTTPPrint_eip(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), IP);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->ethSettings.IPAddr));
}
/*Etherbox NETMASK*/
static void HTTPPrint_emsk(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), NETMASK);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->ethSettings.Mask));
}
/*Ethernet GATEWAY*/
static void HTTPPrint_egate(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintIPFromInterface(VarData, arg, GetETHNetifAdapter(), GW);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", ip4addr_ntoa(&GetSysConf()->ethSettings.Gateway));
}
/*Current DNS*/
static void HTTPPrint_edns(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_MAIN);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_bkedns(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_BACKUP);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_fledns(char *VarData, void *arg)
{
if (GetETHNetifAdapter() && esp_netif_is_netif_up(GetETHNetifAdapter()))
PrintDNSFromInterface(VarData, arg, GetETHNetifAdapter(), ESP_NETIF_DNS_FALLBACK);
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "0.0.0.0");
}
static void HTTPPrint_emacadr(char *VarData, void *arg)
{
PrintMACFromInterface(VarData, arg, GetETHNetifAdapter());
}
#endif
#if CONFIG_WEBGUIAPP_GPRS_ENABLE
/*GSM MODEM*/
void HTTPPrint_gsmstat(char *VarData, void *arg)
{
PrintInterfaceState(VarData, arg, GetPPPNetifAdapter());
}
void HTTPPrint_gsmen(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->gsmSettings.Flags1.bIsGSMEnabled);
}
void HTTPPrint_gsmmod(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->model);
}
void HTTPPrint_gsmopr(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->oper);
}
void HTTPPrint_gimei(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->imei);
}
void HTTPPrint_gimsi(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, GetPPPModemInfo()->imsi);
}
/*PPP IP*/
void HTTPPrint_gsmip(char *VarData, void *arg)
{
PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), IP);
}
/*PPP NETMASK*/
void HTTPPrint_gsmmsk(char *VarData, void *arg)
{
PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), NETMASK);
}
/*PPP GATEWAY*/
void HTTPPrint_gsmgate(char *VarData, void *arg)
{
PrintIPFromInterface(VarData, arg, GetPPPNetifAdapter(), GW);
}
/*Current DNS*/
void HTTPPrint_gsmdns(char *VarData, void *arg)
{
PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_MAIN);
}
void HTTPPrint_bkgsmdns(char *VarData, void *arg)
{
PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_BACKUP);
}
void HTTPPrint_flgsmdns(char *VarData, void *arg)
{
PrintDNSFromInterface(VarData, arg, GetPPPNetifAdapter(), ESP_NETIF_DNS_FALLBACK);
}
void HTTPPrint_gsmmac(char *VarData, void *arg)
{
PrintMACFromInterface(VarData, arg, GetPPPNetifAdapter());
}
#endif
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
/*LORAWAN settings*/
void HTTPPrint_lren(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->lorawanSettings.Flags1.bIsLoRaWANEnabled);
}
void HTTPPrint_lrstat(char *VarData, void *arg)
{
if (isLORAConnected())
snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED");
}
void HTTPPrint_lrdvid(char *VarData, void *arg)
{
uint8_t temp[16];
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.DevEui, temp, 8);
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp);
}
void HTTPPrint_lrapid(char *VarData, void *arg)
{
uint8_t temp[16];
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppEui, temp, 8);
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp);
}
void HTTPPrint_lrapkey(char *VarData, void *arg)
{
uint8_t temp[32];
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppKey, temp, 16);
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", temp);
}
#endif
#if CONFIG_WEBGUIAPP_MQTT_ENABLE
void HTTPPrint_mqen1(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[0].Flags1.bIsGlobalEnabled);
}
void HTTPPrint_mqurl1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ServerAddr);
}
void HTTPPrint_mqport1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[0].ServerPort);
}
void HTTPPrint_mqid1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].ClientID);
}
void HTTPPrint_mqsys1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].SystemName);
}
void HTTPPrint_mqgrp1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].GroupName);
}
void HTTPPrint_mqname1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[0].UserName);
}
void HTTPPrint_mqpass1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******");
}
#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
void HTTPPrint_mqen2(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->mqttStation[1].Flags1.bIsGlobalEnabled);
}
void HTTPPrint_mqurl2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ServerAddr);
}
void HTTPPrint_mqport2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", GetSysConf()->mqttStation[1].ServerPort);
}
void HTTPPrint_mqid2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].ClientID);
}
void HTTPPrint_mqsys2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].SystemName);
}
void HTTPPrint_mqgrp2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].GroupName);
}
void HTTPPrint_mqname2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->mqttStation[1].UserName);
}
void HTTPPrint_mqpass2(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", "******");
}
#endif
#endif
/*SNTP*/
void HTTPPrint_sntpen(char *VarData, void *arg)
{
PrintCheckbox(VarData, arg, GetSysConf()->sntpClient.Flags1.bIsGlobalEnabled);
}
void HTTPPrint_tmsrv(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%s", GetSysConf()->sntpClient.SntpServerAdr);
}
static void HTTPPrint_freeram(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) esp_get_free_heap_size());
}
static void HTTPPrint_minram(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "%d", (int) esp_get_minimum_free_heap_size());
}
static void HTTPPrint_mqtt1st(char *VarData, void *arg)
{
if (GetMQTT1Connected())
snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED");
}
static void HTTPPrint_mqtt2st(char *VarData, void *arg)
{
if (GetMQTT2Connected())
snprintf(VarData, MAX_DYNVAR_LENGTH, "CONNECTED");
else
snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED");
}
/* Pass build configuration to web interface*/
static void HTTPPrint_hide_gprs(char *VarData, void *arg)
{
#if CONFIG_WEBGUIAPP_GPRS_ENABLE
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
#else
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
#endif
}
static void HTTPPrint_hide_mqtt1(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
}
static void HTTPPrint_hide_mqtt2(char *VarData, void *arg)
{
#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
#else
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
#endif
}
static void HTTPPrint_hide_lora(char *VarData, void *arg)
{
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
#else
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
#endif
}
static void HTTPPrint_hide_eth(char *VarData, void *arg)
{
#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
#else
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
#endif
}
static void HTTPPrint_hide_wifi(char *VarData, void *arg)
{
#if CONFIG_WEBGUIAPP_WIFI_ENABLE
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
#else
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
#endif
}
static void HTTPPrint_testvariable(char *VarData, void *arg)
{
static int counter = 1;
snprintf(VarData, MAX_DYNVAR_LENGTH, "[Long extended dynamic variable number %d]", counter++);
}
//Default string if not found handler
static void HTTPPrint_DEF(char *VarData, void *arg)
{
snprintf(VarData, MAX_DYNVAR_LENGTH, "#DEF");
}
dyn_var_handler_t HANDLERS_ARRAY[] = {
/*Ststem settings*/
{ "name", sizeof("name") - 1, &HTTPPrint_name },
{ "dname", sizeof("dname") - 1, &HTTPPrint_dname },
{ "login", sizeof("login") - 1, &HTTPPrint_login },
{ "pass", sizeof("pass") - 1, &HTTPPrint_pass },
{ "ota", sizeof("ota") - 1, &HTTPPrint_ota },
{ "otarst", sizeof("otarst") - 1, &HTTPPrint_otarst },
{ "otaint", sizeof("otaint") - 1, &HTTPPrint_otaint },
{ "fver", sizeof("fver") - 1, &HTTPPrint_fver },
{ "fverav", sizeof("fverav") - 1, &HTTPPrint_fverav },
{ "updstat", sizeof("updstat") - 1, &HTTPPrint_updstat },
{ "idfver", sizeof("idfver") - 1, &HTTPPrint_idfver },
{ "builddate", sizeof("builddate") - 1, &HTTPPrint_builddate },
{ "serial", sizeof("serial") - 1, &HTTPPrint_serial },
{ "serial10", sizeof("serial10") - 1, &HTTPPrint_serial10 },
{ "otaurl", sizeof("otaurl") - 1, &HTTPPrint_otaurl },
{ "time", sizeof("time") - 1, &HTTPPrint_time },
{ "uptime", sizeof("uptime") - 1, &HTTPPrint_uptime },
{ "tshift", sizeof("tshift") - 1, &HTTPPrint_tshift },
{ "tz", sizeof("tz") - 1, &HTTPPrint_tz },
{ "defadp", sizeof("defadp") - 1, &HTTPPrint_defadp },
{ "wlev", sizeof("wlev") - 1, &HTTPPrint_wlev },
#if CONFIG_WEBGUIAPP_WIFI_ENABLE
/*WiFi network*/
{ "wfen", sizeof("wfen") - 1, &HTTPPrint_wfen },
{ "wfstat", sizeof("wfstat") - 1, &HTTPPrint_wfstat },
{ "cln", sizeof("cln") - 1, &HTTPPrint_cln },
{ "apn", sizeof("apn") - 1, &HTTPPrint_apn },
{ "wfmode", sizeof("wfmode") - 1, &HTTPPrint_wfmode },
{ "ssidap", sizeof("ssidap") - 1, &HTTPPrint_ssidap },
{ "wkeyap", sizeof("wkeyap") - 1, &HTTPPrint_wkeyap },
{ "ipap", sizeof("ipap") - 1, &HTTPPrint_ipap },
{ "ssid", sizeof("ssid") - 1, &HTTPPrint_ssid },
{ "wkey", sizeof("wkey") - 1, &HTTPPrint_wkey },
{ "cbdh", sizeof("cbdh") - 1, &HTTPPrint_cbdh },
{ "ip", sizeof("ip") - 1, &HTTPPrint_ip },
{ "msk", sizeof("msk") - 1, &HTTPPrint_msk },
{ "gate", sizeof("gate") - 1, &HTTPPrint_gate },
{ "dns", sizeof("dns") - 1, &HTTPPrint_dns },
{ "dns2", sizeof("dns2") - 1, &HTTPPrint_dns2 },
{ "dns3", sizeof("dns3") - 1, &HTTPPrint_dns3 },
{ "macadr", sizeof("macadr") - 1, &HTTPPrint_macadr },
{ "apmacadr", sizeof("apmacadr") - 1, &HTTPPrint_apmacadr },
{ "wifisc", sizeof("wifisc") - 1, &HTTPPrint_wifisc },
#endif
#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE
/*ETHERNET network*/
{ "ethen", sizeof("ethen") - 1, &HTTPPrint_ethen },
{ "ecbdh", sizeof("ecbdh") - 1, &HTTPPrint_ecbdh },
{ "ethstat", sizeof("ethstat") - 1, &HTTPPrint_ethstat },
{ "eip", sizeof("eip") - 1, &HTTPPrint_eip },
{ "emsk", sizeof("emsk") - 1, &HTTPPrint_emsk },
{ "egate", sizeof("egate") - 1, &HTTPPrint_egate },
{ "edns", sizeof("edns") - 1, &HTTPPrint_edns },
{ "bkedns", sizeof("bkedns") - 1, &HTTPPrint_bkedns },
{ "fledns", sizeof("fledns") - 1, &HTTPPrint_fledns },
{ "emacadr", sizeof("emacadr") - 1, &HTTPPrint_emacadr },
#endif
#if CONFIG_WEBGUIAPP_GPRS_ENABLE
/*GSM modem*/
{ "gsmen", sizeof("gsmen") - 1, &HTTPPrint_gsmen },
{ "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat },
{ "gsmmod", sizeof("gsmmod") - 1, &HTTPPrint_gsmmod },
{ "gsmopr", sizeof("gsmopr") - 1, &HTTPPrint_gsmopr },
{ "gimei", sizeof("gimei") - 1, &HTTPPrint_gimei },
{ "gimsi", sizeof("gimsi") - 1, &HTTPPrint_gimsi },
{ "gsmip", sizeof("gsmip") - 1, &HTTPPrint_gsmip },
{ "gsmmsk", sizeof("gsmmsk") - 1, &HTTPPrint_gsmmsk },
{ "gsmgate", sizeof("gsmgate") - 1, &HTTPPrint_gsmgate },
{ "gsmdns", sizeof("gsmdns") - 1, &HTTPPrint_gsmdns },
{ "bkgsmdns", sizeof("bkgsmdns") - 1, &HTTPPrint_bkgsmdns },
{ "flgsmdns", sizeof("flgsmdns") - 1, &HTTPPrint_flgsmdns },
{ "gsmmac", sizeof("gsmmac") - 1, &HTTPPrint_gsmmac },
#endif
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
/*LORAWAN settings*/
{ "lren", sizeof("lren") - 1, &HTTPPrint_lren },
{ "lrstat", sizeof("lrstat") - 1, &HTTPPrint_lrstat },
{ "lrdvid", sizeof("lrdvid") - 1, &HTTPPrint_lrdvid },
{ "lrapid", sizeof("lrapid") - 1, &HTTPPrint_lrapid },
{ "lrapkey", sizeof("lrapkey") - 1, &HTTPPrint_lrapkey },
#endif
#if CONFIG_WEBGUIAPP_MQTT_ENABLE
/*MQTT*/
{ "mqen1", sizeof("mqen1") - 1, &HTTPPrint_mqen1 },
{ "mqurl1", sizeof("mqurl1") - 1, &HTTPPrint_mqurl1 },
{ "mqport1", sizeof("mqport1") - 1, &HTTPPrint_mqport1 },
{ "mqsys1", sizeof("mqsys1") - 1, &HTTPPrint_mqsys1 },
{ "mqgrp1", sizeof("mqgrp1") - 1, &HTTPPrint_mqgrp1 },
{ "mqid1", sizeof("mqid1") - 1, &HTTPPrint_mqid1 },
{ "mqname1", sizeof("mqname1") - 1, &HTTPPrint_mqname1 },
{ "mqpass1", sizeof("mqpass1") - 1, &HTTPPrint_mqpass1 },
#if CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM == 2
{ "mqen2", sizeof("mqen2") - 1, &HTTPPrint_mqen2 },
{ "mqurl2", sizeof("mqurl2") - 1, &HTTPPrint_mqurl2 },
{ "mqport2", sizeof("mqport2") - 1, &HTTPPrint_mqport2 },
{ "mqid2", sizeof("mqid2") - 1, &HTTPPrint_mqid2 },
{ "mqsys2", sizeof("mqsys2") - 1, &HTTPPrint_mqsys2 },
{ "mqgrp2", sizeof("mqgrp2") - 1, &HTTPPrint_mqgrp2 },
{ "mqname2", sizeof("mqname2") - 1, &HTTPPrint_mqname2 },
{ "mqpass2", sizeof("mqpass2") - 1, &HTTPPrint_mqpass2 },
#endif
#endif
/*SNTP*/
{ "sntpen", sizeof("sntpen") - 1, &HTTPPrint_sntpen },
{ "tmsrv", sizeof("tmsrv") - 1, &HTTPPrint_tmsrv },
{ "freeram", sizeof("freeram") - 1, &HTTPPrint_freeram },
{ "minram", sizeof("minram") - 1, &HTTPPrint_minram },
{ "mqtt1st", sizeof("mqtt1st") - 1, &HTTPPrint_mqtt1st },
{ "mqtt2st", sizeof("mqtt2st") - 1, &HTTPPrint_mqtt2st },
/*ERROR report*/
{ "status_fail", sizeof("status_fail") - 1, &HTTPPrint_status_fail },
{ "hide_eth", sizeof("hide_eth") - 1, &HTTPPrint_hide_eth },
{ "hide_wifi", sizeof("hide_wifi") - 1, &HTTPPrint_hide_wifi },
{ "hide_lora", sizeof("hide_lora") - 1, &HTTPPrint_hide_lora },
{ "hide_gprs", sizeof("hide_gprs") - 1, &HTTPPrint_hide_gprs },
{ "hide_mqtt1", sizeof("hide_mqtt1") - 1, &HTTPPrint_hide_mqtt1 },
{ "hide_mqtt2", sizeof("hide_mqtt2") - 1, &HTTPPrint_hide_mqtt2 },
{ "testvariable", sizeof("testvariable") - 1, &HTTPPrint_testvariable },
};
int HTTPPrint(httpd_req_t *req, char *buf, char *var)
{
char VarData[MAX_DYNVAR_LENGTH];
const char incPat[] = "inc:";
const int incPatLen = sizeof(incPat) - 1;
if (!memcmp(var, incPat, incPatLen))
{
const char rootFS[] = "/";
char filename[32];
filename[0] = 0x00;
var += incPatLen;
strcat(filename, rootFS);
strcat(filename, var);
espfs_file_t *file = espfs_fopen(fs, filename);
struct espfs_stat_t stat;
if (file)
{
espfs_fstat(file, &stat);
int readBytes = espfs_fread(file, buf, stat.size);
espfs_fclose(file);
return readBytes;
}
}
bool fnd = false;
char *p2 = var + strlen(var) - 1; //last var symbol
int arg = 0;
//searching for tag in handles array
for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i)
{
if (*p2 == ')')
{ //found close brace
char *p1 = p2;
while ((*p1 != '(') && (p1 > var))
--p1;
if (*p1 == '(')
{ //found open brace
*p1 = 0x00; //trim variable to name part
++p1; //to begin of argument
*p2 = 0x00; //set end of argument
arg = atoi(p1);
}
}
if (strcmp(var, HANDLERS_ARRAY[i].tag) == 0
&& HANDLERS_ARRAY[i].HandlerRoutine != NULL)
{
HANDLERS_ARRAY[i].HandlerRoutine(VarData, (void*) &arg);
fnd = true;
break;
}
}
if (!fnd)
{
if (HTTPPrintCust != NULL)
return HTTPPrintCust(req, buf, var, arg);
else
HTTPPrint_DEF(VarData, NULL);
}
int dLen = strlen(VarData);
memcpy(buf, VarData, dLen);
return dLen;
}
void GenerateSystemSettingsJSONFile(void)
{
char *buf = malloc(2048);
if(!buf) return;
jwOpen(buf, 2048, JW_OBJECT, JW_PRETTY);
for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i)
{
char val[18];
val[0] = 0x00;
strcat(val, "~");
strcat(val, HANDLERS_ARRAY[i].tag);
strcat(val, "~");
jwObj_string(HANDLERS_ARRAY[i].tag, val);
}
jwEnd();
jwClose();
ESP_LOGI(TAG, "%s", buf);
free(buf);
}