53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#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;
|
|
}
|
|
}
|
|
}
|
|
}
|