From fb552427d6ad09fccca451acf19f9edaa00793a1 Mon Sep 17 00:00:00 2001 From: bogdan Date: Sun, 27 Aug 2023 11:00:08 +0200 Subject: [PATCH] some refactoring and optimization in mqtt and rest api handler --- include/SystemApplication.h | 2 +- src/HTTPAPISystem.c | 2 +- src/MQTT.c | 43 ++++++++++++++----------------------- src/SysComm.c | 35 +++++------------------------- 4 files changed, 23 insertions(+), 59 deletions(-) diff --git a/include/SystemApplication.h b/include/SystemApplication.h index c78b9eb..5e2baed 100644 --- a/include/SystemApplication.h +++ b/include/SystemApplication.h @@ -97,7 +97,7 @@ typedef struct 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); +esp_err_t ServiceDataHandler(data_message_t *MSG); sys_error_code SysVarsPayloadHandler(data_message_t *MSG); void GetSysErrorDetales(sys_error_code err, const char **br, const char **ds); diff --git a/src/HTTPAPISystem.c b/src/HTTPAPISystem.c index 49d398d..71f2e1d 100644 --- a/src/HTTPAPISystem.c +++ b/src/HTTPAPISystem.c @@ -40,7 +40,7 @@ HTTP_IO_RESULT HTTPPostSysAPI(httpd_req_t *req, char *PostData) M.chlidx = 100; M.outputDataBuffer = respbuf; M.outputDataLength = EXPECTED_MAX_DATA_RESPONSE_SIZE; - SysServiceDataHandler(&M); + ServiceDataHandler(&M); httpd_resp_set_type(req, "application/json"); httpd_resp_sendstr(req, respbuf); free(respbuf); diff --git a/src/MQTT.c b/src/MQTT.c index e918a3e..10ff1ee 100644 --- a/src/MQTT.c +++ b/src/MQTT.c @@ -26,6 +26,11 @@ #include "MQTT.h" #include "UserCallbacks.h" +#define TAG "MQTT" +#define SERVICE_NAME "SYSTEM" // Dedicated service name +#define UPLINK_SUBTOPIC "UPLINK" // Device publish to this topic +#define DOWNLINK_SUBTOPIC "DWLINK" // Device listen from this topic + #define MQTT_DEBUG_MODE CONFIG_WEBGUIAPP_MQTT_DEBUG_LEVEL #define MQTT_MESSAGE_BUFER_LENTH 5 //size of mqtt queue @@ -47,7 +52,7 @@ uint8_t MQTT2MessagesQueueStorageArea[MQTT_MESSAGE_BUFER_LENTH * sizeof(MQTT_DAT mqtt_client_t mqtt[CONFIG_WEBGUIAPP_MQTT_CLIENTS_NUM] = { 0 }; -#define TAG "MQTTApp" + static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data); @@ -119,7 +124,7 @@ esp_err_t SysServiceMQTTSend(char *data, int len, int idx) { memcpy(buf, data, len); MQTT_DATA_SEND_STRUCT DSS; - ComposeTopic(DSS.topic, idx, "SYSTEM", "UPLINK"); + ComposeTopic(DSS.topic, idx, SERVICE_NAME, UPLINK_SUBTOPIC); DSS.raw_data_ptr = buf; DSS.data_length = len; if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS) @@ -151,32 +156,16 @@ mqtt_app_err_t PublicTestMQTT(int idx) strcat(resp, ":"); strcat(resp, tmp); jwObj_string(&jwc, "url", resp); - ComposeTopic(resp, idx, "SYSTEM", "UPLINK"); + ComposeTopic(resp, idx, SERVICE_NAME, UPLINK_SUBTOPIC); jwObj_string(&jwc, "tx_topic", resp); - ComposeTopic(resp, idx, "SYSTEM", "DWLINK"); + ComposeTopic(resp, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC); jwObj_string(&jwc, "rx_topic", resp); jwEnd(&jwc); jwClose(&jwc); - char *buf = (char*) malloc(strlen(JSONMess) + 1); - if (buf) - { - memcpy(buf, JSONMess, strlen(JSONMess)); - MQTT_DATA_SEND_STRUCT DSS; - ComposeTopic(DSS.topic, idx, "SYSTEM", "UPLINK"); - DSS.raw_data_ptr = buf; - DSS.data_length = strlen(JSONMess); - if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(1000)) == pdPASS) - return API_OK; - else - { - free(buf); - return API_INTERNAL_ERR; - } - } - else - { // ERR internal error on publish error - return API_INTERNAL_ERR; - } + mqtt_app_err_t merr = API_OK; + if (SysServiceMQTTSend(JSONMess, strlen(JSONMess), idx) != ESP_OK) + merr = API_INTERNAL_ERR; + return merr; } static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_base_t base, int32_t event_id, @@ -200,7 +189,7 @@ static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_bas #if MQTT_DEBUG_MODE > 0 ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED client %d", idx); #endif - ComposeTopic(topic, idx, "SYSTEM", "DWLINK"); + ComposeTopic(topic, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC); msg_id = esp_mqtt_client_subscribe(client, (const char*) topic, 0); #if MQTT_DEBUG_MODE > 0 ESP_LOGI(TAG, "Subscribe to %s", topic); @@ -242,7 +231,7 @@ static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_bas ESP_LOGI(TAG, "MQTT_EVENT_DATA, client %d", idx); #endif //Check if topic is SYSTEM and pass data to handler - ComposeTopic(topic, idx, "SYSTEM", "DWLINK"); + ComposeTopic(topic, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC); if (!memcmp(topic, event->topic, event->topic_len)) { //SystemDataHandler(event->data, event->data_len, idx); //Old API @@ -255,7 +244,7 @@ static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_bas M.chlidx = idx; M.outputDataBuffer = respbuf; M.outputDataLength = EXPECTED_MAX_DATA_RESPONSE_SIZE; - SysServiceDataHandler(&M); + ServiceDataHandler(&M); SysServiceMQTTSend(M.outputDataBuffer, strlen(M.outputDataBuffer), idx); free(respbuf); #if(MQTT_DEBUG_MODE > 0) diff --git a/src/SysComm.c b/src/SysComm.c index ff32006..db6586c 100644 --- a/src/SysComm.c +++ b/src/SysComm.c @@ -35,18 +35,6 @@ "wifi_mode":"", "wifi_sta_ip":"", "wifi_sta_mask":"", - "wifi_sta_gw":"", - "wifi_ap_ip":"", - "wifi_dns1":"", - "wifi_dns2":"", - "wifi_dns3":"", - "wifi_sta_ssid":"", - "wifi_sta_key":"", - "wifi_ap_ssid":"", - "wifi_ap_key":"", - "wifi_enab":"", - "wifi_isdhcp":"", - "wifi_power":"" } }}, "signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"} @@ -59,9 +47,6 @@ #define TAG "SysComm" #define MAX_JSON_DATA_SIZE 1024 - -//sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) - sys_error_code (*CustomPayloadTypeHandler)(data_message_t *MSG); void regCustomPayloadTypeHandler(sys_error_code (*payload_handler)(data_message_t *MSG)) @@ -86,17 +71,8 @@ static esp_err_t SHA256hmacHash(unsigned char *data, return ESP_OK; } -/* - static void Timestamp(char *ts) - { - struct timeval tp; - gettimeofday(&tp, NULL); - unsigned long long ms = (((unsigned long long) tp.tv_sec) * 1000000 + tp.tv_usec); - sprintf(ts, "%llu", ms); - } - */ -static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) +static sys_error_code PayloadType_1_Handler(data_message_t *MSG) { struct jReadElement result; const char *err_br; @@ -222,7 +198,7 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG) return SYS_OK_DATA; } -static sys_error_code SysDataParser(data_message_t *MSG) +static sys_error_code DataHeaderParser(data_message_t *MSG) { struct jReadElement result; jRead(MSG->inputDataBuffer, "", &result); @@ -297,8 +273,7 @@ static sys_error_code SysDataParser(data_message_t *MSG) switch (MSG->parsedData.payloadType) { case 1: - //MSG->parsedData.payload = malloc(sizeof(payload_type_vars)); Not needed for this case - return SysPayloadTypeVarsHandler(MSG); + return PayloadType_1_Handler(MSG); break; default: @@ -311,9 +286,9 @@ static sys_error_code SysDataParser(data_message_t *MSG) return SYS_ERROR_UNKNOWN; } -esp_err_t SysServiceDataHandler(data_message_t *MSG) +esp_err_t ServiceDataHandler(data_message_t *MSG) { - MSG->err_code = (int) SysDataParser(MSG); + MSG->err_code = (int) DataHeaderParser(MSG); if (MSG->err_code) { struct jWriteControl jwc;