diff --git a/src/main.cpp b/src/main.cpp index 5d81664..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,6 +30,8 @@ WiFiClient serverClientsRO[MAX_SRV_CLIENTS]; unsigned long last_comms; +unsigned char txBuf[TXBUFFERSIZE]; + int random_ch(){ #ifdef ESP32 return 6; @@ -188,9 +191,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 > TXBUFFERSIZE) ? TXBUFFERSIZE : 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 > TXBUFFERSIZE) ? TXBUFFERSIZE : client_data_len; } }