Cli: added uart tx buffering, removed debug logs
This commit is contained in:
parent
8d4678d17b
commit
6884bfa2b1
|
@ -10,10 +10,15 @@
|
|||
#define CLI_UART_CTS_PIN (UART_PIN_NO_CHANGE)
|
||||
#define CLI_UART_BAUD_RATE (115200)
|
||||
#define CLI_UART_BUF_SIZE (128)
|
||||
#define CLI_UART_RX_BUF_SIZE (64)
|
||||
|
||||
static Cli* cli_uart;
|
||||
static QueueHandle_t cli_uart_queue;
|
||||
static uint8_t cli_rx_buffer[CLI_UART_RX_BUF_SIZE];
|
||||
static size_t cli_rx_index = 0;
|
||||
|
||||
static void cli_uart_write(const uint8_t* data, size_t data_size, void* context);
|
||||
static void cli_uart_flush(void* context);
|
||||
|
||||
static void cli_uart_rx_task(void* pvParameters) {
|
||||
uart_event_t event;
|
||||
|
@ -47,6 +52,7 @@ static void cli_uart_rx_task(void* pvParameters) {
|
|||
void cli_uart_init() {
|
||||
cli_uart = cli_init();
|
||||
cli_set_write_cb(cli_uart, cli_uart_write);
|
||||
cli_set_flush_cb(cli_uart, cli_uart_flush);
|
||||
|
||||
uart_config_t uart_config = {
|
||||
.baud_rate = CLI_UART_BAUD_RATE,
|
||||
|
@ -77,5 +83,20 @@ void cli_uart_init() {
|
|||
}
|
||||
|
||||
static void cli_uart_write(const uint8_t* data, size_t data_size, void* context) {
|
||||
uart_write_bytes(CLI_UART_PORT_NUM, data, data_size);
|
||||
for(size_t i = 0; i < data_size; i++) {
|
||||
cli_rx_buffer[cli_rx_index] = data[i];
|
||||
cli_rx_index++;
|
||||
|
||||
if(cli_rx_index == CLI_UART_RX_BUF_SIZE) {
|
||||
cli_uart_flush(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void cli_uart_flush(void* context) {
|
||||
if(cli_rx_index > 0) {
|
||||
uart_write_bytes(CLI_UART_PORT_NUM, cli_rx_buffer, cli_rx_index);
|
||||
}
|
||||
|
||||
cli_rx_index = 0;
|
||||
}
|
|
@ -60,14 +60,12 @@ void cli_set_flush_cb(Cli* cli, CliFlush flush_cb) {
|
|||
}
|
||||
|
||||
void cli_write(Cli* cli, const uint8_t* data, size_t data_size) {
|
||||
ESP_LOGI("cli", "write");
|
||||
if(cli->write_cb != NULL) {
|
||||
cli->write_cb(data, data_size, cli->context);
|
||||
}
|
||||
}
|
||||
|
||||
void cli_flush(Cli* cli) {
|
||||
ESP_LOGI("cli", "flush");
|
||||
if(cli->flush_cb != NULL) {
|
||||
cli->flush_cb(cli->context);
|
||||
}
|
||||
|
@ -149,7 +147,6 @@ static void cli_handle_backspace(Cli* cli) {
|
|||
if(mstring_size(cli->line) > 0) {
|
||||
// Other side
|
||||
cli_write_str(cli, "\e[D\e[1P");
|
||||
cli_flush(cli);
|
||||
// Our side
|
||||
mstring_set_strn(cli->line, mstring_get_cstr(cli->line), mstring_size(cli->line) - 1);
|
||||
cli->cursor_position--;
|
||||
|
@ -159,8 +156,6 @@ static void cli_handle_backspace(Cli* cli) {
|
|||
}
|
||||
|
||||
void cli_handle_char(Cli* cli, uint8_t c) {
|
||||
ESP_LOGI("cli", "%c", c);
|
||||
|
||||
switch(c) {
|
||||
case CliSymbolAsciiCR:
|
||||
if(mstring_size(cli->line) == 0) {
|
||||
|
@ -200,10 +195,11 @@ void cli_handle_char(Cli* cli, uint8_t c) {
|
|||
cli_write_str(cli, "\e[4h");
|
||||
cli_write_char(cli, c);
|
||||
cli_write_str(cli, "\e[4l");
|
||||
cli_flush(cli);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
cli_flush(cli);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue