diff --git a/include/SystemApplication.h b/include/SystemApplication.h index 7d7d56e..fce0d36 100644 --- a/include/SystemApplication.h +++ b/include/SystemApplication.h @@ -92,8 +92,8 @@ typedef struct int err_code; } data_message_t; -esp_err_t GetConfVar(char* name, char* val); -esp_err_t SetConfVar(char* name, char* val); +esp_err_t GetConfVar(char* name, char* val, rest_var_types *tp); +esp_err_t SetConfVar(char* name, char* val, rest_var_types *tp); esp_err_t SysServiceDataHandler(data_message_t *MSG); sys_error_code SysVarsPayloadHandler(data_message_t *MSG); diff --git a/src/RestApiHandler.c b/src/RestApiHandler.c index 71da71e..8ce1c4f 100644 --- a/src/RestApiHandler.c +++ b/src/RestApiHandler.c @@ -24,6 +24,7 @@ #include "SystemApplication.h" #include #include +#include "esp_wifi.h" extern SYS_CONFIG SysConfig; @@ -41,18 +42,36 @@ static void funct_time(char *argres) snprintf(argres, MAX_DYNVAR_LENGTH, "%d", (int) now); } +static void funct_wifiscan(char *argres) +{ + if (atoi(argres)) + WiFiScan(); +} + +static void funct_wifiscanres(char *argres) +{ + int arg = atoi(argres); + wifi_ap_record_t *R = GetWiFiAPRecord(arg); + if (!R) + return; + snprintf(argres, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", R->ssid, R->rssi, + R->primary); +} + const rest_var_t ConfigVariables[] = { { 0, "netname", &SysConfig.NetBIOSName, VAR_STRING, 3, 31 }, { 1, "otaurl", &SysConfig.OTAURL, VAR_STRING, 3, 128 }, { 2, "ledenab", &SysConfig.Flags1.bIsLedsEnabled, VAR_BOOL, 0, 1 }, { 3, "otaint", &SysConfig.OTAAutoInt, VAR_INT, 0, 65535 }, - { 4, "time", &funct_time, VAR_FUNCT, 0, 65535 }, - { 5, "addone", &funct_addone, VAR_FUNCT, 0, 65535 } + { 4, "time", &funct_time, VAR_FUNCT, 0, 0 }, + { 5, "addone", &funct_addone, VAR_FUNCT, 0, 0 }, + { 6, "wifiscan", &funct_wifiscan, VAR_FUNCT, 0, 0 }, + { 7, "wifiscanres", &funct_wifiscanres, VAR_FUNCT, 0, 0 } }; -esp_err_t SetConfVar(char *name, char *val) +esp_err_t SetConfVar(char *name, char *val, rest_var_types *tp) { rest_var_t *V = NULL; for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i) @@ -66,6 +85,7 @@ esp_err_t SetConfVar(char *name, char *val) if (!V) return ESP_ERR_NOT_FOUND; int constr; + *tp = V->vartype; switch (V->vartype) { case VAR_BOOL: @@ -96,7 +116,7 @@ esp_err_t SetConfVar(char *name, char *val) return ESP_OK; } -esp_err_t GetConfVar(char *name, char *val) +esp_err_t GetConfVar(char *name, char *val, rest_var_types *tp) { rest_var_t *V = NULL; for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i) @@ -109,6 +129,7 @@ esp_err_t GetConfVar(char *name, char *val) } if (!V) return ESP_ERR_NOT_FOUND; + *tp = V->vartype; switch (V->vartype) { case VAR_BOOL: @@ -127,7 +148,7 @@ esp_err_t GetConfVar(char *name, char *val) } - val = V->ref; + //val = V->ref; return ESP_OK; } diff --git a/src/SysComm.c b/src/SysComm.c index 3aa2daa..ec7dac3 100644 --- a/src/SysComm.c +++ b/src/SysComm.c @@ -32,9 +32,9 @@ "payload":{ "applytype":1, "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"}, - {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, - {"name":"ledenab","val":"0"}, - {"name":"otaint","val":"3600"}] + {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, + {"name":"ledenab","val":"0"}, + {"name":"otaint","val":"3600"}] }}, "signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"} @@ -47,9 +47,9 @@ "payloadtype":1, "payload":{ "variables":[{"name":"netname","val":""}, - {"name":"otaurl","val":""}, - {"name":"ledenab","val":""}, - {"name":"otaint","val":""}] + {"name":"otaurl","val":""}, + {"name":"ledenab","val":""}, + {"name":"otaint","val":""}] }}, "signature":"3c1254d5b0e7ecc7e662dd6397554f02622ef50edba18d0b30ecb5d53e409bcb"} @@ -63,9 +63,9 @@ "payloadtype":1, "payload":{ "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"}, - {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, - {"name":"ledenab","val":"0"}, - {"name":"otaint","val":"3600"}] + {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"}, + {"name":"ledenab","val":"0"}, + {"name":"otaint","val":"3600"}] }, "error":"SYS_OK", "error_descr":"Result successful"}, @@ -142,21 +142,29 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) jwArr_object(); if (MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND) { //Write variables - esp_err_t res = SetConfVar(VarName, VarValue); + rest_var_types tp; + esp_err_t res = SetConfVar(VarName, VarValue, &tp); if (res == ESP_OK) - GetConfVar(VarName, VarValue); + GetConfVar(VarName, VarValue, &tp); else strcpy(VarValue, esp_err_to_name(res)); jwObj_string("name", VarName); - jwObj_string("val", VarValue); + if (tp == VAR_STRING) + jwObj_string("val", VarValue); + else + jwObj_raw("val", VarValue); } else { //Read variables - esp_err_t res = GetConfVar(VarName, VarValue); + rest_var_types tp; + esp_err_t res = GetConfVar(VarName, VarValue, &tp); if (res != ESP_OK) strcpy(VarValue, esp_err_to_name(res)); jwObj_string("name", VarName); - jwObj_string("val", VarValue); + if (tp == VAR_STRING) + jwObj_string("val", VarValue); + else + jwObj_raw("val", VarValue); } jwEnd(); } @@ -171,25 +179,23 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) jwObj_string("error_descr", (char*) err_desc); jwEnd(); - - char* datap = strstr(MSG->outputDataBuffer, "\"data\":"); - if(datap) + char *datap = strstr(MSG->outputDataBuffer, "\"data\":"); + if (datap) { datap += sizeof("\"data\":") - 1; - SHA256hmacHash((unsigned char*) datap , strlen(datap), (unsigned char*) "mykey", sizeof("mykey"), + SHA256hmacHash((unsigned char*) datap, strlen(datap), (unsigned char*) "mykey", sizeof("mykey"), MSG->parsedData.sha256); unsigned char sha_print[32 * 2 + 1]; BytesToStr(MSG->parsedData.sha256, sha_print, 32); sha_print[32 * 2] = 0x00; ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print); - jwObj_string("signature", (char*)sha_print); + jwObj_string("signature", (char*) sha_print); } else return SYS_ERROR_SHA256_DATA; jwEnd(); jwClose(); - jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result); if (result.elements == 1) { @@ -200,11 +206,11 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) break; case 1: WriteNVSSysConfig(GetSysConf()); - break; + break; case 2: WriteNVSSysConfig(GetSysConf()); DelayedRestart(); - break; + break; default: return SYS_ERROR_PARSE_APPLYTYPE; }