// // Created by nano on 8/23/26. // #include "uart_serial.h" #include "esp_err.h" #include "driver/uart.h" void uart_serial::init() { ESP_ERROR_CHECK(uart_driver_install(uart_num, buffer_size * 2, buffer_size * 2, 10, &uart_queue, 0)); ESP_ERROR_CHECK(uart_param_config(uart_num, &uart_config)); ESP_ERROR_CHECK( uart_set_pin(uart_num, tx_pin_num, rx_pin_num, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)); uart_flush(uart_num); } void uart_serial::write(const char* data, int len) { uart_write_bytes(uart_num, data, len); ESP_ERROR_CHECK(uart_wait_tx_done(uart_num, 100)); } void uart_serial::write_byte(const char* data) { uart_write_bytes(uart_num, data, 1); ESP_ERROR_CHECK(uart_wait_tx_done(uart_num, 100)); } int uart_serial::read(char* data, int size) { int length = 0; ESP_ERROR_CHECK(uart_get_buffered_data_len(uart_num,(size_t *) &length)); if (length > size) { uart_read_bytes(uart_num,data,size,100); return size; } uart_read_bytes(uart_num,data,length,100); return length; } /*int uart_serial::read_byte(char* data) { int length = 0; ESP_LOGI("sanity check","uart num: %d",uart_num); ESP_ERROR_CHECK(uart_get_buffered_data_len(uart_num,(size_t *) &length)); if (length) { uart_read_bytes(uart_num,data,1,100); return 1; } return 0; }*/ int uart_serial::read_byte(char* data) { size_t length = 0; esp_err_t err = uart_get_buffered_data_len(this->uart_num, &length); if (err != ESP_OK) { ESP_LOGE("uart_serial", "get_buffered_data_len failed on port %d: %s", uart_num, esp_err_to_name(err)); return 0; } if (length > 0) { int n = uart_read_bytes(uart_num, data, 1, pdMS_TO_TICKS(100)); return (n == 1) ? 1 : 0; } return 0; }