diff --git a/cores/esp32/HardwareSerial.cpp b/cores/esp32/HardwareSerial.cpp index d0d83bd34387b900b70088f166db8fd4f0a98ad9..c449b1640e76d43ef51ce418962334689d9a7a86 100644 --- a/cores/esp32/HardwareSerial.cpp +++ b/cores/esp32/HardwareSerial.cpp @@ -62,6 +62,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 f1a9d36ca1a0c088d21b4e8556fccd1012eb9704..c0e00ec2e23699c75f947e5d6b4d2b4e74835467 100644 --- a/cores/esp32/HardwareSerial.h +++ b/cores/esp32/HardwareSerial.h @@ -40,6 +40,7 @@ public: 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 6612668901bb3134b31804bfa2a2205bb4ca29c7..bcf9d0450931ba740e93c28a4afc96dbba49ace1 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 ce83f1461c7b338df78da0d5a0a606e30c1d4650..5cd6e965099d709d15de87465e1582abb0e49a7b 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);