64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
//
|
|
// 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;
|
|
} |