#include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/queue.h" #include "driver/uart.h" #include "esp_log.h" static const char *TAG = "uart_cmdr"; static QueueHandle_t uart0_queue; #define BUF_SIZE (1024) #define RD_BUF_SIZE (BUF_SIZE) static void uart_event_task(void *pvParameters) { uart_event_t event; uint8_t *dtmp = (uint8_t*) malloc(RD_BUF_SIZE); uint8_t size = 0; bzero(dtmp, RD_BUF_SIZE); for(;;) { //Waiting for UART event. if(xQueueReceive(uart0_queue, (void * )&event, (portTickType)portMAX_DELAY)) { switch(event.type) { case UART_DATA: uart_read_bytes(UART_NUM_0, dtmp + size, event.size, portMAX_DELAY); //uart_write_bytes(UART_NUM_0, (const char*) dtmp + size, event.size); size += event.size; if(dtmp[size - 1] == '\n' || dtmp[size - 1] == '\r') { //uart_write_bytes(UART_NUM_0, (const char*) dtmp, size); bzero(dtmp, RD_BUF_SIZE); } break; case UART_BREAK: case UART_BUFFER_FULL: case UART_FIFO_OVF: case UART_FRAME_ERR: case UART_PARITY_ERR: case UART_DATA_BREAK: case UART_PATTERN_DET: case UART_EVENT_MAX: break; } } } }