From cf10b4bb6a0d6c8613557043e63cf06720ba9b8d Mon Sep 17 00:00:00 2001 From: Luc <8822552+luc-github@users.noreply.github.com> Date: Sun, 17 Dec 2023 12:51:11 +0800 Subject: [PATCH] Add Debug string instead of id for readibility Fix Serial2Socket raise error due to misuse of function Add test for telnet in all client to be avoid to copy message if not connected --- src/core/esp3d_client_types.h | 4 +- src/core/esp3d_commands.cpp | 76 +++++++++++++++++---- src/esp3dlib_config.h | 23 +++++++ src/modules/serial2socket/serial2socket.cpp | 8 ++- 4 files changed, 92 insertions(+), 19 deletions(-) diff --git a/src/core/esp3d_client_types.h b/src/core/esp3d_client_types.h index ad47946..b253ebc 100644 --- a/src/core/esp3d_client_types.h +++ b/src/core/esp3d_client_types.h @@ -44,9 +44,9 @@ enum class ESP3DClientType : uint8_t { mks_serial = 14, command, // origin only system, // origin only - all_clients = 255 + all_clients }; #ifdef __cplusplus } // extern "C" -#endif \ No newline at end of file +#endif diff --git a/src/core/esp3d_commands.cpp b/src/core/esp3d_commands.cpp index 32ece3b..55cfc48 100644 --- a/src/core/esp3d_commands.cpp +++ b/src/core/esp3d_commands.cpp @@ -24,6 +24,37 @@ #include "esp3d.h" #include "esp3d_settings.h" +#if defined(ESP_LOG_FEATURE) +const char * esp3dclientstr[]={ + "no_client", + "serial", + "usb_serial", + "stream", + "telnet", + "http", + "webui_websocket", + "websocket", + "rendering", + "bluetooth", + "socket_serial", + "echo_serial", + "serial_bridge", + "remote_screen", + "mks_serial", + "command", + "system", + "all_clients" +}; +#define GETCLIENTSTR(id) static_cast(id)>=0 && static_cast(id)<=static_cast(ESP3DClientType::all_clients)?esp3dclientstr[static_cast(id)] :"Out of index" + +const char * esp3dmsgstr[] = { + "head", "core", "tail", "unique" +}; +#define GETMSGTYPESTR(id) static_cast(id)>=0 && static_cast(id)<=static_cast(ESP3DMessageType::unique)?esp3dmsgstr[static_cast(id)] :"Out of index" + +#endif // defined(ESP_LOG_FEATURE) + + #if COMMUNICATION_PROTOCOL == MKS_SERIAL #include "../modules/mks/mks_service.h" #endif // COMMUNICATION_PROTOCOL == MKS_SERIAL @@ -1180,16 +1211,19 @@ bool ESP3DCommands::dispatch(const char *sbuf, ESP3DClientType target, ESP3DClientType ESP3DCommands::getOutputClient(bool fromSettings) { // TODO: add setting for it when necessary (void)fromSettings; + esp3d_log("OutputClient: %d %s", static_cast(_output_client), GETCLIENTSTR(_output_client)); return _output_client; } bool ESP3DCommands::dispatch(ESP3DMessage *msg) { bool sendOk = true; String tmp; - esp3d_log("Dispatch message origin %d to client %d , size: %d, type: %d", + esp3d_log("Dispatch message origin %d(%s) to client %d(%s) , size: %d, type: %d(%s)", static_cast(msg->origin), - static_cast(msg->target), msg->size, - static_cast(msg->type)); + esp3dclientstr[static_cast(msg->origin)], + static_cast(msg->target), GETCLIENTSTR(msg->target), + msg->size, static_cast(msg->type),GETMSGTYPESTR(msg->type)); + esp3d_log("Dispatch message data: %s", (const char *)msg->data); if (!msg) { esp3d_log_e("no msg"); return false; @@ -1199,6 +1233,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { switch (msg->target) { #if COMMUNICATION_PROTOCOL == RAW_SERIAL case ESP3DClientType::serial: + esp3d_log("Serial message"); if (!esp3d_serial_service.dispatch(msg)) { sendOk = false; esp3d_log_e("Serial dispatch failed"); @@ -1208,6 +1243,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #if COMMUNICATION_PROTOCOL == SOCKET_SERIAL case ESP3DClientType::echo_serial: + esp3d_log("Echo serial message"); MYSERIAL1.write(msg->data, msg->size); if (msg->type == ESP3DMessageType::unique || msg->type == ESP3DMessageType::tail) { if (msg->data[msg->size-1]!='\n'){ @@ -1216,10 +1252,19 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { } ESP3DMessageManager::deleteMsg(msg); break; + + case ESP3DClientType::socket_serial: + esp3d_log("Socket serial message"); + if (!Serial2Socket.dispatch(msg)) { + sendOk = false; + esp3d_log_e("Socket dispatch failed"); + } + break; #endif // COMMUNICATION_PROTOCOL == SOCKET_SERIAL #if defined(ESP_SERIAL_BRIDGE_OUTPUT) case ESP3DClientType::serial_bridge: + esp3d_log("Serial bridge message"); if (!serial_bridge_service.dispatch(msg)) { sendOk = false; esp3d_log_e("Serial bridge dispatch failed"); @@ -1229,6 +1274,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #ifdef WS_DATA_FEATURE case ESP3DClientType::websocket: + esp3d_log("Websocket message"); if (!websocket_data_server.dispatch(msg)) { sendOk = false; esp3d_log_e("Telnet dispatch failed"); @@ -1238,6 +1284,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #ifdef TELNET_FEATURE case ESP3DClientType::telnet: + esp3d_log("Telnet message"); if (!telnet_server.dispatch(msg)) { sendOk = false; esp3d_log_e("Telnet dispatch failed"); @@ -1247,6 +1294,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #ifdef BLUETOOTH_FEATURE case ESP3DClientType::bluetooth: + esp3d_log("Bluetooth message"); if (!bt_service.dispatch(msg)) { sendOk = false; esp3d_log_e("Bluetooth dispatch failed"); @@ -1254,23 +1302,16 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { break; #endif // BLUETOOTH_FEATURE -#if defined(ESP3DLIB_ENV) && COMMUNICATION_PROTOCOL == SOCKET_SERIAL - case ESP3DClientType::socket_serial: - if (!Serial2Socket.dispatch(msg)) { - sendOk = false; - esp3d_log_e("Socket dispatch failed"); - } - break; -#endif // defined(ESP3DLIB_ENV) && COMMUNICATION_PROTOCOL == SOCKET_SERIAL - #ifdef HTTP_FEATURE case ESP3DClientType::webui_websocket: + esp3d_log("Webui websocket message"); if (!websocket_terminal_server.dispatch(msg)) { sendOk = false; esp3d_log_e("Webui websocket dispatch failed"); } break; case ESP3DClientType::http: + esp3d_log("Http message"); if (!HTTP_Server::dispatch(msg)) { sendOk = false; esp3d_log_e("Webui websocket dispatch failed"); @@ -1279,6 +1320,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #endif // HTTP_FEATURE #if defined(DISPLAY_DEVICE) case ESP3DClientType::rendering: + esp3d_log("Rendering message"); if (!esp3d_display.dispatch(msg)) { sendOk = false; esp3d_log_e("Display dispatch failed"); @@ -1288,6 +1330,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #if COMMUNICATION_PROTOCOL == MKS_SERIAL case ESP3DClientType::mks_serial: + esp3d_log("MKS Serial message"); if (!MKSService::dispatch(msg)) { sendOk = false; esp3d_log_e("MKS Serial dispatch failed"); @@ -1297,6 +1340,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #ifdef PRINTER_HAS_DISPLAY case ESP3DClientType::remote_screen: + esp3d_log("Remote screen message"); // change target to output client msg->target = getOutputClient(); // change text to GCODE M117 @@ -1315,6 +1359,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { break; #endif // PRINTER_HAS_DISPLAY case ESP3DClientType::all_clients: + esp3d_log("All clients message"); // Add each client one by one #ifdef PRINTER_HAS_DISPLAY if (msg->origin != ESP3DClientType::remote_screen && @@ -1410,6 +1455,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #endif // ESP_SERIAL_BRIDGE_OUTPUT #ifdef BLUETOOTH_FEATURE + //FIXME: add test if connected to avoid unnecessary copy if (msg->origin != ESP3DClientType::bluetooth) { String msgstr = (const char *)msg->data; msgstr.trim(); @@ -1432,7 +1478,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #endif // BLUETOOTH_FEATURE #ifdef TELNET_FEATURE - if (msg->origin != ESP3DClientType::telnet) { + if (msg->origin != ESP3DClientType::telnet && telnet_server.isConnected()) { String msgstr = (const char *)msg->data; msgstr.trim(); if (msgstr.length() > 0) { @@ -1455,6 +1501,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #ifdef HTTP_FEATURE // http cannot be in all client because it depend of any // connection of the server + //FIXME: add test if connected to avoid unnecessary copy if (msg->origin != ESP3DClientType::webui_websocket) { String msgstr = (const char *)msg->data; msgstr.trim(); @@ -1477,6 +1524,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { #endif // HTTP_FEATURE #ifdef WS_DATA_FEATURE + //FIXME: add test if connected to avoid unnecessary copy if (msg->origin != ESP3DClientType::websocket) { String msgstr = (const char *)msg->data; msgstr.trim(); @@ -1514,7 +1562,7 @@ bool ESP3DCommands::dispatch(ESP3DMessage *msg) { } // clear message if (!sendOk) { - esp3d_log("Send msg failed"); + esp3d_log_e("Send msg failed"); ESP3DMessageManager::deleteMsg(msg); } return sendOk; diff --git a/src/esp3dlib_config.h b/src/esp3dlib_config.h index f53f46a..0a0302a 100644 --- a/src/esp3dlib_config.h +++ b/src/esp3dlib_config.h @@ -323,3 +323,26 @@ #if defined (SD_TIMESTAMP_FEATURE) || defined (FILESYSTEM_TIMESTAMP_FEATURE) #define TIMESTAMP_FEATURE #endif //SD_TIMESTAMP_FEATURE || FILESYSTEM_TIMESTAMP_FEATURE + +/************************************ + * + * Development settings + * Do not modify them for production + ************************************/ + +// Enable log mode +// Do not do this when connected to printer !!! +// be noted all upload may failed if enabled +// LOG_OUTPUT_SERIAL0 +// LOG_OUTPUT_SERIAL1 +// LOG_OUTPUT_SERIAL2 +// LOG_OUTPUT_TELNET +// LOG_OUTPUT_WEBSOCKET +//#define ESP_LOG_FEATURE LOG_OUTPUT_TELNET + +//#define ESP3D_DEBUG_LEVEL LOG_LEVEL_DEBUG + +#ifdef ESP_LOG_FEATURE +#define LOG_ESP3D_BAUDRATE 115200 +#define LOG_ESP3D_OUTPUT_PORT 8000 +#endif // ESP_LOG_FEATURE diff --git a/src/modules/serial2socket/serial2socket.cpp b/src/modules/serial2socket/serial2socket.cpp index 9d4fe3c..0a4eb5e 100644 --- a/src/modules/serial2socket/serial2socket.cpp +++ b/src/modules/serial2socket/serial2socket.cpp @@ -172,6 +172,7 @@ void Serial_2_Socket::flush(void) { // dispatch command if (msg) { // process command + msg->type = ESP3DMessageType::unique; esp3d_commands.process(msg); } else { esp3d_log_e("Cannot create message"); @@ -185,17 +186,18 @@ void Serial_2_Socket::flush(void) { bool Serial_2_Socket::dispatch(ESP3DMessage *message) { if (!message || !_started) { + esp3d_log_e("Serial2Socket: no message or not started"); return false; } if (message->size > 0 && message->data) { - size_t sentcnt = write(message->data, message->size); - if (sentcnt != message->size) { + if (!push(message->data, message->size)) { + esp3d_log_e("Serial2Socket: cannot push all data"); return false; } ESP3DMessageManager::deleteMsg(message); return true; } - + esp3d_log_e("Serial2Socket: no data in message"); return false; }