Merge branch 'jwrite_no_global_control' into 'rest_api'
reduced memory allocate for variable value, handle errors in wifi scan See merge request userbogd/webguiapp!4
This commit is contained in:
commit
26e5af602a
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8bbe1c28dc69b8adadc1ab3aed989a38e1dc8996
|
Subproject commit cdb702a89b355fe86c971e5f0c5da1b376cd827b
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
#define EXPECTED_MAX_DATA_RESPONSE_SIZE (4096)
|
#define EXPECTED_MAX_DATA_RESPONSE_SIZE (4096)
|
||||||
#define VAR_MAX_NAME_LENGTH MAX_DYNVAR_NAME_LENGTH
|
#define VAR_MAX_NAME_LENGTH MAX_DYNVAR_NAME_LENGTH
|
||||||
#define VAR_MAX_VALUE_LENGTH (2048)
|
#define VAR_MAX_VALUE_LENGTH (1024)
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,12 @@
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
#include "driver/spi_master.h"
|
#include "driver/spi_master.h"
|
||||||
|
|
||||||
|
#include "SystemApplication.h"
|
||||||
#include "UserCallbacks.h"
|
#include "UserCallbacks.h"
|
||||||
|
#include "SysConfiguration.h"
|
||||||
|
|
||||||
esp_err_t spi_device_polling_transmit_synchronized(spi_device_handle_t handle, spi_transaction_t *trans_desc);
|
esp_err_t spi_device_polling_transmit_synchronized(spi_device_handle_t handle, spi_transaction_t *trans_desc);
|
||||||
|
void SetAppVars( rest_var_t* appvars, int size);
|
||||||
bool GetUserAppNeedReset(void);
|
bool GetUserAppNeedReset(void);
|
||||||
void SetUserAppNeedReset(bool res);
|
void SetUserAppNeedReset(bool res);
|
||||||
void LogFile(char *fname, char *format, ...);
|
void LogFile(char *fname, char *format, ...);
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ const char url_adapters[] = "adapters.html";
|
||||||
const char url_services[] = "services.html";
|
const char url_services[] = "services.html";
|
||||||
const char url_system[] = "system.html";
|
const char url_system[] = "system.html";
|
||||||
const char url_reboot[] = "reboot.html";
|
const char url_reboot[] = "reboot.html";
|
||||||
const char url_sysapi[] = "sysapi";
|
const char url_api[] = "api";
|
||||||
|
|
||||||
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData);
|
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData);
|
||||||
static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData);
|
static HTTP_IO_RESULT HTTPPostAdaptersSettings(httpd_req_t *req, char *PostData);
|
||||||
|
|
@ -86,7 +86,7 @@ HTTP_IO_RESULT HTTPPostApp(httpd_req_t *req, const char *filename, char *PostDat
|
||||||
|
|
||||||
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData)
|
static HTTP_IO_RESULT AfterPostHandler(httpd_req_t *req, const char *filename, char *PostData)
|
||||||
{
|
{
|
||||||
if (!memcmp(filename, url_sysapi, sizeof(url_sysapi)))
|
if (!memcmp(filename, url_api, sizeof(url_api)))
|
||||||
return HTTPPostSysAPI(req, PostData);
|
return HTTPPostSysAPI(req, PostData);
|
||||||
if (!memcmp(filename, url_adapters, sizeof(url_adapters)))
|
if (!memcmp(filename, url_adapters, sizeof(url_adapters)))
|
||||||
return HTTPPostAdaptersSettings(req, PostData);
|
return HTTPPostAdaptersSettings(req, PostData);
|
||||||
|
|
|
||||||
|
|
@ -989,8 +989,8 @@ void GenerateSystemSettingsJSONFile(void)
|
||||||
char *buf = malloc(2048);
|
char *buf = malloc(2048);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return;
|
return;
|
||||||
|
struct jWriteControl jwc;
|
||||||
jwOpen(buf, 2048, JW_OBJECT, JW_PRETTY);
|
jwOpen(&jwc, buf, 2048, JW_OBJECT, JW_PRETTY);
|
||||||
for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i)
|
for (int i = 0; i < (sizeof(HANDLERS_ARRAY) / sizeof(HANDLERS_ARRAY[0])); ++i)
|
||||||
{
|
{
|
||||||
char val[18];
|
char val[18];
|
||||||
|
|
@ -998,10 +998,10 @@ void GenerateSystemSettingsJSONFile(void)
|
||||||
strcat(val, "~");
|
strcat(val, "~");
|
||||||
strcat(val, HANDLERS_ARRAY[i].tag);
|
strcat(val, HANDLERS_ARRAY[i].tag);
|
||||||
strcat(val, "~");
|
strcat(val, "~");
|
||||||
jwObj_string((char*) HANDLERS_ARRAY[i].tag, val);
|
jwObj_string(&jwc, (char*) HANDLERS_ARRAY[i].tag, val);
|
||||||
}
|
}
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
jwClose();
|
jwClose(&jwc);
|
||||||
ESP_LOGI(TAG, "%s", buf);
|
ESP_LOGI(TAG, "%s", buf);
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
25
src/MQTT.c
25
src/MQTT.c
|
|
@ -58,9 +58,10 @@ static void mqtt1_user_event_handler(void *handler_args, esp_event_base_t base,
|
||||||
static void mqtt2_user_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
static void mqtt2_user_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
|
|
||||||
void (*UserEventHandler)(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
void (*UserEventHandler)(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
|
||||||
static void* UserArg;
|
static void *UserArg;
|
||||||
void regUserEventHandler(
|
void regUserEventHandler(
|
||||||
void (*event_handler)(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data), void* user_arg)
|
void (*event_handler)(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data),
|
||||||
|
void *user_arg)
|
||||||
{
|
{
|
||||||
UserEventHandler = event_handler;
|
UserEventHandler = event_handler;
|
||||||
UserArg = user_arg;
|
UserArg = user_arg;
|
||||||
|
|
@ -138,23 +139,24 @@ mqtt_app_err_t PublicTestMQTT(int idx)
|
||||||
char tmp[10];
|
char tmp[10];
|
||||||
char resp[256];
|
char resp[256];
|
||||||
char JSONMess[512];
|
char JSONMess[512];
|
||||||
jwOpen(JSONMess, MAX_ERROR_JSON, JW_OBJECT, JW_PRETTY);
|
struct jWriteControl jwc;
|
||||||
|
jwOpen(&jwc, JSONMess, MAX_ERROR_JSON, JW_OBJECT, JW_PRETTY);
|
||||||
time_t now;
|
time_t now;
|
||||||
time(&now);
|
time(&now);
|
||||||
jwObj_int("time", (unsigned int) now);
|
jwObj_int(&jwc, "time", (unsigned int) now);
|
||||||
jwObj_string("event", "MQTT_TEST_MESSAGE)");
|
jwObj_string(&jwc, "event", "MQTT_TEST_MESSAGE)");
|
||||||
strcpy(resp, "mqtt://");
|
strcpy(resp, "mqtt://");
|
||||||
strcat(resp, GetSysConf()->mqttStation[idx].ServerAddr);
|
strcat(resp, GetSysConf()->mqttStation[idx].ServerAddr);
|
||||||
itoa(GetSysConf()->mqttStation[idx].ServerPort, tmp, 10);
|
itoa(GetSysConf()->mqttStation[idx].ServerPort, tmp, 10);
|
||||||
strcat(resp, ":");
|
strcat(resp, ":");
|
||||||
strcat(resp, tmp);
|
strcat(resp, tmp);
|
||||||
jwObj_string("url", resp);
|
jwObj_string(&jwc, "url", resp);
|
||||||
ComposeTopic(resp, idx, "SYSTEM", "UPLINK");
|
ComposeTopic(resp, idx, "SYSTEM", "UPLINK");
|
||||||
jwObj_string("tx_topic", resp);
|
jwObj_string(&jwc, "tx_topic", resp);
|
||||||
ComposeTopic(resp, idx, "SYSTEM", "DWLINK");
|
ComposeTopic(resp, idx, "SYSTEM", "DWLINK");
|
||||||
jwObj_string("rx_topic", resp);
|
jwObj_string(&jwc, "rx_topic", resp);
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
jwClose();
|
jwClose(&jwc);
|
||||||
char *buf = (char*) malloc(strlen(JSONMess) + 1);
|
char *buf = (char*) malloc(strlen(JSONMess) + 1);
|
||||||
if (buf)
|
if (buf)
|
||||||
{
|
{
|
||||||
|
|
@ -177,7 +179,6 @@ mqtt_app_err_t PublicTestMQTT(int idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id,
|
static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id,
|
||||||
void *event_data)
|
void *event_data)
|
||||||
{
|
{
|
||||||
|
|
@ -462,6 +463,4 @@ static void mqtt2_user_event_handler(void *handler_args, esp_event_base_t base,
|
||||||
UserEventHandler(1, handler_args, base, event_id, event_data);
|
UserEventHandler(1, handler_args, base, event_id, event_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,15 @@
|
||||||
|
|
||||||
extern SYS_CONFIG SysConfig;
|
extern SYS_CONFIG SysConfig;
|
||||||
|
|
||||||
|
|
||||||
|
rest_var_t *AppVars = NULL;
|
||||||
|
int AppVarsSize = 0;
|
||||||
|
void SetAppVars( rest_var_t* appvars, int size)
|
||||||
|
{
|
||||||
|
AppVars = appvars;
|
||||||
|
AppVarsSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
static void PrintInterfaceState(char *argres, int rw, esp_netif_t *netif)
|
static void PrintInterfaceState(char *argres, int rw, esp_netif_t *netif)
|
||||||
{
|
{
|
||||||
snprintf(argres, MAX_DYNVAR_LENGTH,
|
snprintf(argres, MAX_DYNVAR_LENGTH,
|
||||||
|
|
@ -140,22 +149,6 @@ static void funct_wifiscanres(char *argres, int rw)
|
||||||
{
|
{
|
||||||
int arg = atoi(argres);
|
int arg = atoi(argres);
|
||||||
wifi_ap_record_t *Rec;
|
wifi_ap_record_t *Rec;
|
||||||
|
|
||||||
char onerec[64];
|
|
||||||
strcpy(argres, "[");
|
|
||||||
for (int i = 0; i < arg; i++)
|
|
||||||
{
|
|
||||||
Rec = GetWiFiAPRecord(i);
|
|
||||||
if (!Rec)
|
|
||||||
return;
|
|
||||||
snprintf(onerec, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", Rec->ssid, Rec->rssi,
|
|
||||||
Rec->primary);
|
|
||||||
strcat(argres, onerec);
|
|
||||||
if (i < arg - 1)
|
|
||||||
strcat(argres, ",");
|
|
||||||
}
|
|
||||||
strcat(argres, "]");
|
|
||||||
/*
|
|
||||||
struct jWriteControl jwc;
|
struct jWriteControl jwc;
|
||||||
jwOpen(&jwc, argres, VAR_MAX_VALUE_LENGTH, JW_ARRAY, JW_COMPACT);
|
jwOpen(&jwc, argres, VAR_MAX_VALUE_LENGTH, JW_ARRAY, JW_COMPACT);
|
||||||
for (int i = 0; i < arg; i++)
|
for (int i = 0; i < arg; i++)
|
||||||
|
|
@ -164,21 +157,26 @@ static void funct_wifiscanres(char *argres, int rw)
|
||||||
if (Rec)
|
if (Rec)
|
||||||
{
|
{
|
||||||
jwArr_object(&jwc);
|
jwArr_object(&jwc);
|
||||||
jwObj_string(&jwc,"ssid", (char*) Rec->ssid);
|
jwObj_string(&jwc, "ssid", (char*) Rec->ssid);
|
||||||
jwObj_int(&jwc,"rssi", Rec->rssi);
|
jwObj_int(&jwc, "rssi", Rec->rssi);
|
||||||
jwObj_int(&jwc,"ch", Rec->primary);
|
jwObj_int(&jwc, "ch", Rec->primary);
|
||||||
jwEnd(&jwc);
|
jwEnd(&jwc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jwClose(&jwc);
|
int err = jwClose(&jwc);
|
||||||
*/
|
if (err == JWRITE_OK)
|
||||||
ESP_LOGI("REST", "%s", argres);
|
return;
|
||||||
|
if(err > JWRITE_BUF_FULL )
|
||||||
|
strcpy(argres, "\"SYS_ERROR_NO_MEMORY\"");
|
||||||
|
else
|
||||||
|
strcpy(argres, "\"SYS_ERROR_UNKNOWN\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
const int hw_rev = CONFIG_BOARD_HARDWARE_REVISION;
|
const int hw_rev = CONFIG_BOARD_HARDWARE_REVISION;
|
||||||
|
|
||||||
const rest_var_t ConfigVariables[] =
|
|
||||||
|
|
||||||
|
const rest_var_t SystemVariables[] =
|
||||||
{
|
{
|
||||||
/*FUNCTIONS*/
|
/*FUNCTIONS*/
|
||||||
{ 0, "time", &funct_time, VAR_FUNCT, R, 0, 0 },
|
{ 0, "time", &funct_time, VAR_FUNCT, R, 0, 0 },
|
||||||
|
|
@ -291,14 +289,28 @@ const rest_var_t ConfigVariables[] =
|
||||||
esp_err_t SetConfVar(char *name, char *val, rest_var_types *tp)
|
esp_err_t SetConfVar(char *name, char *val, rest_var_types *tp)
|
||||||
{
|
{
|
||||||
rest_var_t *V = NULL;
|
rest_var_t *V = NULL;
|
||||||
for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i)
|
//Search for system variables
|
||||||
|
for (int i = 0; i < sizeof(SystemVariables) / sizeof(rest_var_t); ++i)
|
||||||
{
|
{
|
||||||
if (!strcmp(ConfigVariables[i].alias, name))
|
if (!strcmp(SystemVariables[i].alias, name))
|
||||||
{
|
{
|
||||||
V = (rest_var_t*) (&ConfigVariables[i]);
|
V = (rest_var_t*) (&SystemVariables[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Search for user variables
|
||||||
|
if(AppVars)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AppVarsSize; ++i)
|
||||||
|
{
|
||||||
|
if (!strcmp(AppVars[i].alias, name))
|
||||||
|
{
|
||||||
|
V = (rest_var_t*) (&AppVars[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!V)
|
if (!V)
|
||||||
return ESP_ERR_NOT_FOUND;
|
return ESP_ERR_NOT_FOUND;
|
||||||
if (V->varattr == R)
|
if (V->varattr == R)
|
||||||
|
|
@ -353,14 +365,26 @@ esp_err_t SetConfVar(char *name, char *val, rest_var_types *tp)
|
||||||
esp_err_t GetConfVar(char *name, char *val, rest_var_types *tp)
|
esp_err_t GetConfVar(char *name, char *val, rest_var_types *tp)
|
||||||
{
|
{
|
||||||
rest_var_t *V = NULL;
|
rest_var_t *V = NULL;
|
||||||
for (int i = 0; i < sizeof(ConfigVariables) / sizeof(rest_var_t); ++i)
|
for (int i = 0; i < sizeof(SystemVariables) / sizeof(rest_var_t); ++i)
|
||||||
{
|
{
|
||||||
if (!strcmp(ConfigVariables[i].alias, name))
|
if (!strcmp(SystemVariables[i].alias, name))
|
||||||
{
|
{
|
||||||
V = (rest_var_t*) (&ConfigVariables[i]);
|
V = (rest_var_t*) (&SystemVariables[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Search for user variables
|
||||||
|
if(AppVars)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AppVarsSize; ++i)
|
||||||
|
{
|
||||||
|
if (!strcmp(AppVars[i].alias, name))
|
||||||
|
{
|
||||||
|
V = (rest_var_t*) (&AppVars[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!V)
|
if (!V)
|
||||||
return ESP_ERR_NOT_FOUND;
|
return ESP_ERR_NOT_FOUND;
|
||||||
*tp = V->vartype;
|
*tp = V->vartype;
|
||||||
|
|
|
||||||
|
|
@ -95,17 +95,17 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
|
||||||
|
|
||||||
if (!(MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND || MSG->parsedData.msgType == DATA_MESSAGE_TYPE_REQUEST))
|
if (!(MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND || MSG->parsedData.msgType == DATA_MESSAGE_TYPE_REQUEST))
|
||||||
return SYS_ERROR_PARSE_MSGTYPE;
|
return SYS_ERROR_PARSE_MSGTYPE;
|
||||||
|
struct jWriteControl jwc;
|
||||||
jwOpen(MSG->outputDataBuffer, MSG->outputDataLength, JW_OBJECT, JW_COMPACT);
|
jwOpen(&jwc, MSG->outputDataBuffer, MSG->outputDataLength, JW_OBJECT, JW_COMPACT);
|
||||||
jwObj_object("data");
|
jwObj_object(&jwc, "data");
|
||||||
jwObj_int("msgid", MSG->parsedData.msgID);
|
jwObj_int(&jwc, "msgid", MSG->parsedData.msgID);
|
||||||
char time[RFC3339_TIMESTAMP_LENGTH];
|
char time[RFC3339_TIMESTAMP_LENGTH];
|
||||||
GetRFC3339Time(time);
|
GetRFC3339Time(time);
|
||||||
jwObj_string("time", time);
|
jwObj_string(&jwc, "time", time);
|
||||||
jwObj_int("messtype", DATA_MESSAGE_TYPE_RESPONSE);
|
jwObj_int(&jwc, "messtype", DATA_MESSAGE_TYPE_RESPONSE);
|
||||||
jwObj_int("payloadtype", 1);
|
jwObj_int(&jwc, "payloadtype", 1);
|
||||||
jwObj_object("payload");
|
jwObj_object(&jwc, "payload");
|
||||||
jwObj_object("variables");
|
jwObj_object(&jwc, "variables");
|
||||||
|
|
||||||
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'variables'", &result);
|
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'variables'", &result);
|
||||||
if (result.dataType == JREAD_OBJECT)
|
if (result.dataType == JREAD_OBJECT)
|
||||||
|
|
@ -148,9 +148,9 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
|
||||||
}
|
}
|
||||||
//Response with actual data
|
//Response with actual data
|
||||||
if (tp == VAR_STRING || tp == VAR_IPADDR || tp == VAR_ERROR || tp == VAR_PASS)
|
if (tp == VAR_STRING || tp == VAR_IPADDR || tp == VAR_ERROR || tp == VAR_PASS)
|
||||||
jwObj_string(VarName, VarValue);
|
jwObj_string(&jwc, VarName, VarValue);
|
||||||
else
|
else
|
||||||
jwObj_raw(VarName, VarValue);
|
jwObj_raw(&jwc, VarName, VarValue);
|
||||||
|
|
||||||
}
|
}
|
||||||
free(VarValue);
|
free(VarValue);
|
||||||
|
|
@ -158,12 +158,12 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
|
||||||
else
|
else
|
||||||
return SYS_ERROR_PARSE_VARIABLES;
|
return SYS_ERROR_PARSE_VARIABLES;
|
||||||
|
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
GetSysErrorDetales((sys_error_code) MSG->err_code, &err_br, &err_desc);
|
GetSysErrorDetales((sys_error_code) MSG->err_code, &err_br, &err_desc);
|
||||||
jwObj_string("error", (char*) err_br);
|
jwObj_string(&jwc, "error", (char*) err_br);
|
||||||
jwObj_string("error_descr", (char*) err_desc);
|
jwObj_string(&jwc, "error_descr", (char*) err_desc);
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
|
|
||||||
char *datap = strstr(MSG->outputDataBuffer, "\"data\":");
|
char *datap = strstr(MSG->outputDataBuffer, "\"data\":");
|
||||||
if (datap)
|
if (datap)
|
||||||
|
|
@ -177,12 +177,12 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
|
||||||
#if REAST_API_DEBUG_MODE
|
#if REAST_API_DEBUG_MODE
|
||||||
ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print);
|
ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print);
|
||||||
#endif
|
#endif
|
||||||
jwObj_string("signature", (char*) sha_print);
|
jwObj_string(&jwc, "signature", (char*) sha_print);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return SYS_ERROR_SHA256_DATA;
|
return SYS_ERROR_SHA256_DATA;
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
jwClose();
|
jwClose(&jwc);
|
||||||
|
|
||||||
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result);
|
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result);
|
||||||
if (result.elements == 1)
|
if (result.elements == 1)
|
||||||
|
|
@ -303,19 +303,20 @@ esp_err_t SysServiceDataHandler(data_message_t *MSG)
|
||||||
MSG->err_code = (int) SysDataParser(MSG);
|
MSG->err_code = (int) SysDataParser(MSG);
|
||||||
if (MSG->err_code)
|
if (MSG->err_code)
|
||||||
{
|
{
|
||||||
jwOpen(MSG->outputDataBuffer, MSG->outputDataLength, JW_OBJECT, JW_PRETTY);
|
struct jWriteControl jwc;
|
||||||
jwObj_int("msgid", MSG->parsedData.msgID);
|
jwOpen(&jwc, MSG->outputDataBuffer, MSG->outputDataLength, JW_OBJECT, JW_PRETTY);
|
||||||
|
jwObj_int(&jwc, "msgid", MSG->parsedData.msgID);
|
||||||
char time[RFC3339_TIMESTAMP_LENGTH];
|
char time[RFC3339_TIMESTAMP_LENGTH];
|
||||||
GetRFC3339Time(time);
|
GetRFC3339Time(time);
|
||||||
jwObj_string("time", time);
|
jwObj_string(&jwc, "time", time);
|
||||||
jwObj_int("messtype", DATA_MESSAGE_TYPE_RESPONSE);
|
jwObj_int(&jwc, "messtype", DATA_MESSAGE_TYPE_RESPONSE);
|
||||||
const char *err_br;
|
const char *err_br;
|
||||||
const char *err_desc;
|
const char *err_desc;
|
||||||
GetSysErrorDetales((sys_error_code) MSG->err_code, &err_br, &err_desc);
|
GetSysErrorDetales((sys_error_code) MSG->err_code, &err_br, &err_desc);
|
||||||
jwObj_string("error", (char*) err_br);
|
jwObj_string(&jwc, "error", (char*) err_br);
|
||||||
jwObj_string("error_descr", (char*) err_desc);
|
jwObj_string(&jwc, "error_descr", (char*) err_desc);
|
||||||
jwEnd();
|
jwEnd(&jwc);
|
||||||
jwClose();
|
jwClose(&jwc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user