size_t uart_resize_rx_buffer(uart_t* uart, size_t new_size) { if(uart == NULL || !uart->rx_enabled) { return 0; } if(uart->rx_buffer->size == new_size) { return uart->rx_buffer->size; } uint8_t * new_buf = (uint8_t*)malloc(new_size); if(!new_buf) { return uart->rx_buffer->size; } size_t new_wpos = 0; ETS_UART_INTR_DISABLE(); while(uart_rx_available(uart) && new_wpos < new_size) { new_buf[new_wpos++] = uart_read_char(uart); } uint8_t * old_buf = uart->rx_buffer->buffer; uart->rx_buffer->rpos = 0; uart->rx_buffer->wpos = new_wpos; uart->rx_buffer->size = new_size; uart->rx_buffer->buffer = new_buf; free(old_buf); ETS_UART_INTR_ENABLE(); return uart->rx_buffer->size; }
int HardwareSerial::available(void) { int result = static_cast<int>(uart_rx_available(_uart)); if (!result) { optimistic_yield(10000); } return result; }
int uart_peek_char(uart_t* uart) { if(uart == NULL || !uart->rx_enabled) { return -1; } if (!uart_rx_available(uart)) { return -1; } return uart->rx_buffer->buffer[uart->rx_buffer->rpos]; }
/* serial1 can not rx data, just tx for debug */ irom int serial_available() { uart_t *_uart = uart0; if(!_uart || !uart_rx_enabled(_uart)) { return 0; } int result = uart_rx_available(_uart); if (_peek_char != -1) { result += 1; } if (!result) { optimistic_yield(10000); } return result; }