From 219478a4dc2828283e8561d9ff13e071daec1e33 Mon Sep 17 00:00:00 2001 From: ysard Date: Fri, 6 Jan 2023 17:09:59 +0100 Subject: [PATCH 1/2] Improve the processing of characters from TCP to UART Using a buffer to read & write multiple bytes at a time. Maybe we could reduce it's size, but now it's RXBUFFERSIZE Conflicts: src/main.cpp --- src/main.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5d81664..761afce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,6 +29,8 @@ WiFiClient serverClientsRO[MAX_SRV_CLIENTS]; unsigned long last_comms; +unsigned char txBuf[RXBUFFERSIZE]; + int random_ch(){ #ifdef ESP32 return 6; @@ -188,9 +190,18 @@ void loop() { //check TCP clients for data for (int i = 0; i < MAX_SRV_CLIENTS; i++){ - while (serverClients[i].available() && Serial.availableForWrite() > 0) { - // working char by char is not very efficient - Serial.write(serverClients[i].read()); + size_t client_data_len = serverClients[i].available(); + size_t authorized_len = (client_data_len > RXBUFFERSIZE) ? RXBUFFERSIZE : client_data_len; + + while (authorized_len && Serial.availableForWrite() > 0) { + size_t ret = serverClients[i].readBytes(txBuf, authorized_len); + if (ret < authorized_len) + // Error + continue; + Serial.write(txBuf, authorized_len); + + client_data_len = serverClients[i].available(); + authorized_len = (client_data_len > RXBUFFERSIZE) ? RXBUFFERSIZE : client_data_len; } } From f2d39b2a421bc7cc8a13134d52eb4b0028a26abd Mon Sep 17 00:00:00 2001 From: ysard Date: Fri, 6 Jan 2023 19:12:59 +0100 Subject: [PATCH 2/2] Use separate TX buffer size to avoid naming confusion Conflicts: src/main.cpp --- src/main.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 761afce..f660bd9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,7 @@ #define MAX_SRV_CLIENTS 4 #define RXBUFFERSIZE 1024 +#define TXBUFFERSIZE 512 #define STACK_PROTECTOR 512 // bytes #define HOSTNAME "esp-eBus" #define RESET_PIN 3 @@ -29,7 +30,7 @@ WiFiClient serverClientsRO[MAX_SRV_CLIENTS]; unsigned long last_comms; -unsigned char txBuf[RXBUFFERSIZE]; +unsigned char txBuf[TXBUFFERSIZE]; int random_ch(){ #ifdef ESP32 @@ -191,7 +192,7 @@ void loop() { //check TCP clients for data for (int i = 0; i < MAX_SRV_CLIENTS; i++){ size_t client_data_len = serverClients[i].available(); - size_t authorized_len = (client_data_len > RXBUFFERSIZE) ? RXBUFFERSIZE : client_data_len; + size_t authorized_len = (client_data_len > TXBUFFERSIZE) ? TXBUFFERSIZE : client_data_len; while (authorized_len && Serial.availableForWrite() > 0) { size_t ret = serverClients[i].readBytes(txBuf, authorized_len); @@ -201,7 +202,7 @@ void loop() { Serial.write(txBuf, authorized_len); client_data_len = serverClients[i].available(); - authorized_len = (client_data_len > RXBUFFERSIZE) ? RXBUFFERSIZE : client_data_len; + authorized_len = (client_data_len > TXBUFFERSIZE) ? TXBUFFERSIZE : client_data_len; } }