diff --git a/cores/esp32/HardwareSerial.cpp b/cores/esp32/HardwareSerial.cpp index b1245cb672c..52b6f6b0d74 100644 --- a/cores/esp32/HardwareSerial.cpp +++ b/cores/esp32/HardwareSerial.cpp @@ -60,6 +60,10 @@ int HardwareSerial::available(void) { return uartAvailable(_uart); } +int HardwareSerial::availableForWrite(void) +{ + return uartAvailableForWrite(_uart); +} int HardwareSerial::peek(void) { diff --git a/cores/esp32/HardwareSerial.h b/cores/esp32/HardwareSerial.h index 1338f1c31ed..75660130c05 100644 --- a/cores/esp32/HardwareSerial.h +++ b/cores/esp32/HardwareSerial.h @@ -40,6 +40,7 @@ class HardwareSerial: public Stream void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false); void end(); int available(void); + int availableForWrite(void); int peek(void); int read(void); void flush(void); diff --git a/cores/esp32/esp32-hal-uart.c b/cores/esp32/esp32-hal-uart.c index 6612668901b..bcf9d045093 100644 --- a/cores/esp32/esp32-hal-uart.c +++ b/cores/esp32/esp32-hal-uart.c @@ -248,6 +248,14 @@ uint32_t uartAvailable(uart_t* uart) return uxQueueMessagesWaiting(uart->queue); } +uint32_t uartAvailableForWrite(uart_t* uart) +{ + if(uart == NULL) { + return 0; + } + return 0x7f - uart->dev->status.txfifo_cnt; +} + uint8_t uartRead(uart_t* uart) { if(uart == NULL || uart->queue == NULL) { diff --git a/cores/esp32/esp32-hal-uart.h b/cores/esp32/esp32-hal-uart.h index ce83f1461c7..5cd6e965099 100644 --- a/cores/esp32/esp32-hal-uart.h +++ b/cores/esp32/esp32-hal-uart.h @@ -55,6 +55,7 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx void uartEnd(uart_t* uart); uint32_t uartAvailable(uart_t* uart); +uint32_t uartAvailableForWrite(uart_t* uart); uint8_t uartRead(uart_t* uart); uint8_t uartPeek(uart_t* uart);