diff --git a/src/asyncwebserver.cpp b/src/asyncwebserver.cpp index 19432026..a9b28acc 100644 --- a/src/asyncwebserver.cpp +++ b/src/asyncwebserver.cpp @@ -57,6 +57,7 @@ //embedded response file if no files on SPIFFS #include "nofile.h" +bool can_process_serial = true; extern bool deleteRecursive(String path); extern void CloseSerialUpload (bool iserror, String & filename); @@ -707,6 +708,8 @@ void handle_web_command (AsyncWebServerRequest *request) LOG ("Start PurgeSerial\r\n") ESPCOM::processFromSerial (true); LOG ("End PurgeSerial\r\n") + can_process_serial = false; + request->onDisconnect([request](){can_process_serial = true;}); //send command LOG ("Send Command\r\n") ESPCOM::println (cmd, DEFAULT_PRINTER_PIPE); diff --git a/src/asyncwebserver.h b/src/asyncwebserver.h index 6a7c7dcb..b4c4659a 100644 --- a/src/asyncwebserver.h +++ b/src/asyncwebserver.h @@ -34,6 +34,7 @@ extern void handle_serial_SDFileList (AsyncWebServerRequest *request); extern void SDFile_serial_upload (AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final); extern void handle_Websocket_Event(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len); extern void handle_onevent_connect(AsyncEventSourceClient *client); +extern bool can_process_serial; #ifdef SSDP_FEATURE extern void handle_SSDP (AsyncWebServerRequest *request); diff --git a/src/config.h b/src/config.h index 6f984759..f1b62cfa 100644 --- a/src/config.h +++ b/src/config.h @@ -19,7 +19,7 @@ */ //version and sources location -#define FW_VERSION "2.0.0.c14" +#define FW_VERSION "2.0.0.c15" #define REPOSITORY "https://github.com/luc-github/ESP3D" //Customize ESP3D //////////////////////////////////////////////////////////////////////// diff --git a/src/espcom.cpp b/src/espcom.cpp index 5efe710a..f4f37a8c 100644 --- a/src/espcom.cpp +++ b/src/espcom.cpp @@ -44,6 +44,9 @@ bool ESPCOM::block_2_printer = false; void ESPCOM::bridge(bool async) { +#if defined (ASYNCWEBSERVER) + if(can_process_serial) { +#endif //be sure wifi is on to proceed wifi function if ((WiFi.getMode() != WIFI_OFF) || wifi_config.WiFi_on) { //read tcp port input @@ -53,7 +56,11 @@ void ESPCOM::bridge(bool async) } //read serial input ESPCOM::processFromSerial(); +#if defined (ASYNCWEBSERVER) + } +#endif } + long ESPCOM::readBytes (tpipe output, uint8_t * sbuf, size_t len) { switch (output) { @@ -339,7 +346,10 @@ bool ESPCOM::processFromSerial (bool async) //check UART for data if (ESPCOM::available(DEFAULT_PRINTER_PIPE)) { size_t len = ESPCOM::available(DEFAULT_PRINTER_PIPE); - uint8_t sbuf[len+1]; + uint8_t * sbuf = (uint8_t *)malloc(len+1); + if(!sbuf){ + return false; + } sbuf[len] = '\0'; ESPCOM::readBytes (DEFAULT_PRINTER_PIPE, sbuf, len); #ifdef TCP_IP_DATA_FEATURE @@ -366,6 +376,7 @@ bool ESPCOM::processFromSerial (bool async) #endif //process data if any COMMAND::read_buffer_serial (sbuf, len); + free(sbuf); return true; } else { return false;