lorawan moved to webguiapp
This commit is contained in:
parent
e8287d8746
commit
e181984c8e
|
|
@ -11,6 +11,7 @@ idf_component_register(
|
|||
"src/WiFiTransport.c"
|
||||
"src/GSMTransport.c"
|
||||
"src/ETHTransport.c"
|
||||
"src/LoRaWANTransport.c"
|
||||
"src/SNTP.c"
|
||||
"src/MQTT.c"
|
||||
"src/MQTTSysHandler.c"
|
||||
|
|
@ -33,4 +34,5 @@ idf_component_register(
|
|||
esp_https_ota
|
||||
app_update
|
||||
jReadWrite
|
||||
ttn-esp32
|
||||
)
|
||||
44
Kconfig
44
Kconfig
|
|
@ -420,8 +420,6 @@ menu "WebGUIApp"
|
|||
endif
|
||||
endmenu
|
||||
|
||||
|
||||
|
||||
menu "GPRS settings"
|
||||
config WEBGUIAPP_GPRS_ENABLE
|
||||
bool "Enabled GPRS PPP interface"
|
||||
|
|
@ -577,6 +575,48 @@ menu "WebGUIApp"
|
|||
endif
|
||||
endmenu
|
||||
|
||||
menu "LoRaWAN settings"
|
||||
config WEBGUIAPP_LORAWAN_ENABLE
|
||||
bool "Enabled LoRaWAN interface"
|
||||
default n
|
||||
help
|
||||
Set enabled LoRaWAN module
|
||||
|
||||
if WEBGUIAPP_LORAWAN_ENABLE
|
||||
config LORA_SPI_CS_GPIO
|
||||
int "SPI CS GPIO number for LoRa module"
|
||||
range 0 33
|
||||
default 4
|
||||
help
|
||||
Set the GPIO number used by SPI chip select for LoRa module.
|
||||
config LORA_DIO0_GPIO
|
||||
int "DIO0 GPIO number for LoRa module"
|
||||
range 0 39
|
||||
default 34
|
||||
help
|
||||
Set the GPIO number used by .
|
||||
|
||||
config LORA_DIO1_GPIO
|
||||
int "DIO1 GPI1 number for LoRa module"
|
||||
range 0 39
|
||||
default 35
|
||||
help
|
||||
Set the GPIO number used by .
|
||||
config LORA_APP_ID
|
||||
string "Default LoRaWAN Application ID"
|
||||
default "BBBBBBBBBBBBBBBB"
|
||||
help
|
||||
Set default application ID for LoRaWAN network
|
||||
|
||||
config LORA_APP_KEY
|
||||
string "Default LoRaWAN Application key"
|
||||
default "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
|
||||
help
|
||||
Set default application key for LoRaWAN network
|
||||
endif
|
||||
endmenu
|
||||
|
||||
|
||||
menu "MQTT settings"
|
||||
config WEBGUIAPP_MQTT_ENABLE
|
||||
bool "Enabled MQTT transport"
|
||||
|
|
|
|||
|
|
@ -46,18 +46,25 @@ typedef struct
|
|||
|
||||
//#define DEFAULT_FALLBACK_DNS "8.8.8.8"
|
||||
|
||||
|
||||
QueueHandle_t MQTT1MessagesQueueHandle;
|
||||
QueueHandle_t MQTT2MessagesQueueHandle;
|
||||
|
||||
|
||||
EventGroupHandle_t transport_event_group;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MQTT = 0,
|
||||
} transport_data_type;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
transport_data_type dType;
|
||||
char *raw_data_ptr;
|
||||
int data_length;
|
||||
} net_transport_data_t;
|
||||
|
||||
void StartTimeGet(void);
|
||||
|
||||
|
||||
void WiFiAPStart(void);
|
||||
void WiFiSTAStart(void);
|
||||
void EthStart(void);
|
||||
|
|
|
|||
|
|
@ -76,11 +76,6 @@
|
|||
#define DEFAULT_DNS2 "4.4.8.8"
|
||||
#define DEFAULT_DNS3 "1.1.1.1"
|
||||
|
||||
/*GSM DEFAULT SETTINGS*/
|
||||
#define DEFAULT_GSM_GLOBAL_ENABLED true
|
||||
|
||||
|
||||
//#define LOCK_RELAY_ON
|
||||
|
||||
// Application-dependent structure used to contain address information
|
||||
|
||||
|
|
@ -240,6 +235,27 @@
|
|||
} gsmSettings;
|
||||
#endif
|
||||
|
||||
struct
|
||||
{
|
||||
char DevEui[8];
|
||||
char AppEui[8];
|
||||
char AppKey[16];
|
||||
|
||||
struct
|
||||
{
|
||||
char b0 :1;
|
||||
char b1 :1;
|
||||
char b2 :1;
|
||||
char b3 :1;
|
||||
char b4 :1;
|
||||
char b5 :1;
|
||||
char b6 :1;
|
||||
char bIsLoRaWANEnabled :1;
|
||||
} Flags1; // Flag structure
|
||||
|
||||
} lorawanSettings;
|
||||
|
||||
|
||||
} SYS_CONFIG;
|
||||
|
||||
esp_err_t ReadNVSSysConfig(SYS_CONFIG *SysConf);
|
||||
|
|
|
|||
|
|
@ -461,6 +461,41 @@ void HTTPPrint_gsmmac(char *VarData, void *arg)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
|
|
@ -564,97 +599,116 @@ static void HTTPPrint_mqtt2st(char *VarData, void *arg)
|
|||
snprintf(VarData, MAX_DYNVAR_LENGTH, "DISCONNECTED");
|
||||
}
|
||||
|
||||
|
||||
/* Pass build configuration to web interface*/
|
||||
static void HTTPPrint_ifc_gprs(char *VarData, void *arg)
|
||||
static void HTTPPrint_hide_gprs(char *VarData, void *arg)
|
||||
{
|
||||
#if CONFIG_WEBGUIAPP_GPRS_ENABLE
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "1");
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
|
||||
#else
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "0");
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void HTTPPrint_ifc_mq2(char *VarData, void *arg)
|
||||
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, "1");
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
|
||||
#else
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "0");
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "hide");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void HTTPPrint_hide_lora(char *VarData, void *arg)
|
||||
{
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
|
||||
}
|
||||
|
||||
static void HTTPPrint_hide_eth(char *VarData, void *arg)
|
||||
{
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
|
||||
}
|
||||
|
||||
static void HTTPPrint_hide_wifi(char *VarData, void *arg)
|
||||
{
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, " ");
|
||||
}
|
||||
|
||||
static void HTTPPrint_testvariable(char *VarData, void *arg)
|
||||
{
|
||||
static int counter = 1;
|
||||
snprintf(VarData, MAX_DYNVAR_LENGTH, "[Long extended dynamic variable number %d]", counter++);
|
||||
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");
|
||||
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 },
|
||||
{ "fver", sizeof("fver") - 1, &HTTPPrint_fver },
|
||||
{ "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 },
|
||||
/*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 },
|
||||
{ "fver", sizeof("fver") - 1, &HTTPPrint_fver },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
#endif
|
||||
/*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 },
|
||||
{ "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 },
|
||||
#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
|
||||
/*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
|
||||
|
||||
{ "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat },
|
||||
{ "gsmstat", sizeof("gsmstat") - 1, &HTTPPrint_gsmstat },
|
||||
|
||||
#if CONFIG_WEBGUIAPP_GPRS_ENABLE
|
||||
/*GSM modem*/
|
||||
|
|
@ -673,17 +727,25 @@ dyn_var_handler_t HANDLERS_ARRAY[] = {
|
|||
{ "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
|
||||
/*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 },
|
||||
|
|
@ -692,87 +754,92 @@ dyn_var_handler_t HANDLERS_ARRAY[] = {
|
|||
{ "mqgrp2", sizeof("mqgrp2") - 1, &HTTPPrint_mqgrp2 },
|
||||
{ "mqname2", sizeof("mqname2") - 1, &HTTPPrint_mqname2 },
|
||||
{ "mqpass2", sizeof("mqpass2") - 1, &HTTPPrint_mqpass2 },
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
/*SNTP*/
|
||||
{ "sntpen", sizeof("sntpen") - 1, &HTTPPrint_sntpen },
|
||||
{ "tmsrv", sizeof("tmsrv") - 1, &HTTPPrint_tmsrv },
|
||||
/*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 },
|
||||
{ "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 },
|
||||
/*ERROR report*/
|
||||
{ "status_fail", sizeof("status_fail") - 1, &HTTPPrint_status_fail },
|
||||
|
||||
{ "ifc_gprs", sizeof("ifc_gprs") - 1, &HTTPPrint_ifc_gprs },
|
||||
{ "ifc_mq2", sizeof("ifc_mq2") - 1, &HTTPPrint_ifc_mq2 },
|
||||
{ "testvariable", sizeof("testvariable") - 1, &HTTPPrint_testvariable},
|
||||
{ "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)
|
||||
char VarData[MAX_DYNVAR_LENGTH];
|
||||
const char incPat[] = "inc:";
|
||||
const int incPatLen = sizeof(incPat) - 1;
|
||||
if (!memcmp(var, incPat, incPatLen))
|
||||
{
|
||||
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);
|
||||
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;
|
||||
}
|
||||
}
|
||||
if (strcmp(var, HANDLERS_ARRAY[i].tag) == 0
|
||||
&& HANDLERS_ARRAY[i].HandlerRoutine != NULL)
|
||||
|
||||
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)
|
||||
{
|
||||
HANDLERS_ARRAY[i].HandlerRoutine(VarData, (void*) &arg);
|
||||
fnd = true;
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
|
||||
}
|
||||
|
|
|
|||
195
src/LoRaWANTransport.c
Normal file
195
src/LoRaWANTransport.c
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/* 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 name: LoRaWANTransport.c
|
||||
* Project: MStation2Firmware
|
||||
* Created on: 2022-12-17
|
||||
* Author: bogd
|
||||
* Description:
|
||||
*/
|
||||
|
||||
#include "ttn.h"
|
||||
#include "driver/spi_common.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "Helpers.h"
|
||||
#include "SystemConfiguration.h"
|
||||
#include "NetTransport.h"
|
||||
#include "webguiapp.h"
|
||||
|
||||
// Pins and other resources
|
||||
/*Defined in global configuration*/
|
||||
|
||||
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
|
||||
|
||||
#define TTN_SPI_HOST CONFIG_SPI_HOST
|
||||
#define TTN_PIN_NSS CONFIG_LORA_SPI_CS_GPIO
|
||||
#define TTN_PIN_RXTX TTN_NOT_CONNECTED
|
||||
#define TTN_PIN_RST TTN_NOT_CONNECTED
|
||||
#define TTN_PIN_DIO0 CONFIG_LORA_DIO0_GPIO
|
||||
#define TTN_PIN_DIO1 CONFIG_LORA_DIO1_GPIO
|
||||
|
||||
#define LORAWAN_DELIVERY_RETRY_PERIOD 10
|
||||
#define MESSAGE_LENGTH 32
|
||||
#define TAG "LoRaWANApp"
|
||||
#define LORAWAN_APP_LOG_ENABLED 1
|
||||
#define LORAWAN_MESSAGE_BUFER_LENTH 32
|
||||
|
||||
static const int LORA_WAIT_DELIVERY_BIT = BIT2;
|
||||
|
||||
QueueHandle_t LORAMessagesQueueHandle;
|
||||
static StaticQueue_t xStaticLoRaMessagesQueue;
|
||||
uint8_t LoRaMessagesQueueStorageArea[LORAWAN_MESSAGE_BUFER_LENTH
|
||||
* sizeof(DATA_SEND_STRUCT)];
|
||||
|
||||
esp_err_t LORASendData(DATA_SEND_STRUCT *pdss)
|
||||
{
|
||||
char *ptr = (char*) malloc(MESSAGE_LENGTH);
|
||||
if (ptr)
|
||||
{
|
||||
memcpy(ptr, pdss->raw_data_ptr, MESSAGE_LENGTH);
|
||||
DATA_SEND_STRUCT DSS;
|
||||
DSS.raw_data_ptr = ptr;
|
||||
DSS.data_length = MESSAGE_LENGTH;
|
||||
|
||||
if (xQueueSend(LORAMessagesQueueHandle, &DSS,
|
||||
pdMS_TO_TICKS(1000)) == pdPASS)
|
||||
return ESP_OK;
|
||||
else
|
||||
{
|
||||
free(ptr);
|
||||
return ESP_ERR_TIMEOUT;
|
||||
}
|
||||
}
|
||||
else
|
||||
return ESP_ERR_NO_MEM;
|
||||
}
|
||||
|
||||
void messageReceived(const uint8_t *message, size_t length, ttn_port_t port)
|
||||
{
|
||||
#if LORAWAN_APP_LOG_ENABLED == 1
|
||||
if (length == MESSAGE_LENGTH && port == 1)
|
||||
{
|
||||
char P[MESSAGE_LENGTH * 2 + 1];
|
||||
P[MESSAGE_LENGTH * 2] = 0x00;
|
||||
BytesToStr((unsigned char*) message, (unsigned char*) P, length);
|
||||
ESP_LOGI(TAG, "Received=%s", P);
|
||||
}
|
||||
#endif
|
||||
//TODO Here registered from application handler must be called
|
||||
|
||||
}
|
||||
|
||||
void LoRaWANTransportTask(void *pvParameter)
|
||||
{
|
||||
DATA_SEND_STRUCT DSS;
|
||||
while (!LORAMessagesQueueHandle)
|
||||
vTaskDelay(pdMS_TO_TICKS(300)); //wait for LORA queue ready
|
||||
while (1)
|
||||
{
|
||||
while (!ttn_is_connected())
|
||||
vTaskDelay(pdMS_TO_TICKS(300));
|
||||
|
||||
if (ttn_is_provisioned())
|
||||
{
|
||||
xEventGroupClearBits(transport_event_group, LORA_WAIT_DELIVERY_BIT);
|
||||
xQueuePeek(LORAMessagesQueueHandle, &DSS, portMAX_DELAY);
|
||||
|
||||
#if LORAWAN_APP_LOG_ENABLED == 1
|
||||
char P[MESSAGE_LENGTH * 2 + 1];
|
||||
BytesToStr((unsigned char*) DSS.raw_data_ptr, (unsigned char*) P, MESSAGE_LENGTH);
|
||||
P[MESSAGE_LENGTH * 2] = 0x00;
|
||||
ESP_LOGI(TAG, "Sent=%s", P);
|
||||
#endif
|
||||
ttn_transmit_message((const uint8_t*) DSS.raw_data_ptr, MESSAGE_LENGTH, 1, true);
|
||||
xQueueReceive(LORAMessagesQueueHandle, &DSS, 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
#if LORAWAN_APP_LOG_ENABLED == 1
|
||||
ESP_LOGW(TAG, "Transmit fail, transport not ready");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LoRaWANRejoin(void)
|
||||
{
|
||||
ttn_rejoin();
|
||||
}
|
||||
|
||||
void LoRaWANInitJoinTask(void *pvParameter)
|
||||
{
|
||||
LORAMessagesQueueHandle = NULL;
|
||||
if (GetSysConf()->lorawanSettings.Flags1.bIsLoRaWANEnabled)
|
||||
LORAMessagesQueueHandle = xQueueCreateStatic(LORAWAN_MESSAGE_BUFER_LENTH,
|
||||
sizeof(DATA_SEND_STRUCT),
|
||||
LoRaMessagesQueueStorageArea,
|
||||
&xStaticLoRaMessagesQueue);
|
||||
|
||||
ttn_init();
|
||||
// Configure the SX127x pins
|
||||
ttn_configure_pins(TTN_SPI_HOST, TTN_PIN_NSS, TTN_PIN_RXTX, -1,
|
||||
TTN_PIN_DIO0,
|
||||
TTN_PIN_DIO1);
|
||||
|
||||
char devEui[17], appEui[17], appKey[33];
|
||||
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.DevEui,
|
||||
(unsigned char*) devEui,
|
||||
8);
|
||||
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppEui,
|
||||
(unsigned char*) appEui,
|
||||
8);
|
||||
BytesToStr((unsigned char*) &GetSysConf()->lorawanSettings.AppKey,
|
||||
(unsigned char*) appKey,
|
||||
16);
|
||||
|
||||
// Register callback for received messages
|
||||
ttn_on_message(messageReceived);
|
||||
|
||||
while (!ttn_join(devEui, appEui, appKey))
|
||||
{
|
||||
};
|
||||
|
||||
xTaskCreate(LoRaWANTransportTask, "LoRaWANTransportTask", 1024 * 4,
|
||||
(void*) 0,
|
||||
3,
|
||||
NULL);
|
||||
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void LoRaWANStart(void)
|
||||
{
|
||||
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
|
||||
xTaskCreate(LoRaWANInitJoinTask, "LoRaWANInitJoinTask", 1024 * 4, (void*) 0,
|
||||
3,
|
||||
NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool isLORAConnected(void)
|
||||
{
|
||||
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
|
||||
return ttn_is_connected();
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
|
@ -109,6 +109,14 @@ esp_err_t WebGuiAppInit(void)
|
|||
PPPModemStart();
|
||||
#endif
|
||||
|
||||
/*LoRaWAN start if enabled*/
|
||||
#if !CONFIG_TTN_LORA_FREQ_DISABLED
|
||||
if (GetSysConf()->lorawanSettings.Flags1.bIsLoRaWANEnabled)
|
||||
{
|
||||
LoRaWANStart();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_WEBGUIAPP_ETHERNET_ENABLE
|
||||
/*Start Ethernet connection*/
|
||||
if (GetSysConf()->ethSettings.Flags1.bIsETHEnabled)
|
||||
|
|
@ -318,6 +326,19 @@ esp_netif_str_to_ip4(CONFIG_WEBGUIAPP_DNS3_ADDRESS_DEFAULT, (esp_ip4_addr_t*) &C
|
|||
Conf->sntpClient.Flags1.bIsWifiEnabled = DEFAULT_SNTP_WIFI_IS_ENABLED;
|
||||
Conf->sntpClient.Flags1.bIsGlobalEnabled = DEFAULT_SNTP_GLOBAL_ENABLED;
|
||||
Conf->sntpClient.TimeZone = DEFAULT_SNTP_TIMEZONE;
|
||||
|
||||
#ifdef CONFIG_WEBGUIAPP_LORAWAN_ENABLE
|
||||
Conf->lorawanSettings.Flags1.bIsLoRaWANEnabled = true;
|
||||
Conf->Flags1.bIsLoRaConfirm = false;
|
||||
unsigned char temp[16] = { 0 };
|
||||
GetChipId((uint8_t*) temp + 4);
|
||||
memcpy(Conf->lorawanSettings.DevEui, temp, 8);
|
||||
StrToBytes((unsigned char*) CONFIG_LORA_APP_KEY, temp);
|
||||
memcpy(Conf->lorawanSettings.AppKey, temp, 16);
|
||||
StrToBytes((unsigned char*) CONFIG_LORA_APP_ID, temp);
|
||||
memcpy(Conf->lorawanSettings.AppEui, temp, 8);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
esp_err_t ReadNVSSysConfig(SYS_CONFIG *SysConf)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user