1 #include "k_api.h"
2 #include "aos/hal/uart.h"
3 #include "drv_usart.h"
4 #include <csi_config.h>
5 #include <csi_core.h>
6 #include "pin.h"
7 #include "k_config.h"
8 #include "board.h"
9
10 #define MAX_BUF_UART_BYTES 128
11 kbuf_queue_t g_buf_queue_uart;
12 char g_buf_uart[MAX_BUF_UART_BYTES];
13 //static uint8_t rx_buffer[1];
14 extern usart_handle_t console_handle;
15
16 /* can not get data here
17 void usart_hal_event_fun(int32_t idx, usart_event_e event);
18 {
19 if(idx != CONSOLE_IDX || event != USART_EVENT_RECEIVE_COMPLETE){
20 return;
21 }
22
23 }*/
24
25
hal_uart_init(uart_dev_t * uart)26 int32_t hal_uart_init(uart_dev_t *uart)
27 {
28 int32_t ret;
29 kstat_t err_code;
30 if(NULL == uart || uart->port != CONSOLE_IDX){
31 return -1;
32 }
33
34 err_code = krhino_buf_queue_create(&g_buf_queue_uart, "buf_queue_uart",
35 g_buf_uart, MAX_BUF_UART_BYTES, 1);
36 if(err_code){
37 return -1;
38 }
39
40 console_handle = csi_usart_initialize(uart->port, NULL);
41 /* config the UART */
42 ret = csi_usart_config(console_handle, 115200, USART_MODE_ASYNCHRONOUS, USART_PARITY_NONE, USART_STOP_BITS_1, USART_DATA_BITS_8);
43
44 return ret;
45 }
46
47
hal_uart_recv_II(uart_dev_t * uart,void * data,uint32_t expect_size,uint32_t * recv_size,uint32_t timeout)48 int32_t hal_uart_recv_II(uart_dev_t *uart, void *data, uint32_t expect_size,
49 uint32_t *recv_size, uint32_t timeout)
50 {
51 uint8_t *pdata = (uint8_t *)data;
52 int i = 0;
53 uint32_t rx_count = 0;
54 int32_t ret = -1;
55 size_t rev_size;
56
57 if (data == NULL) {
58 return -1;
59 }
60
61 for (i = 0; i < expect_size; i++)
62 {
63 ret = krhino_buf_queue_recv(&g_buf_queue_uart, RHINO_WAIT_FOREVER, &pdata[i], &rev_size);
64 if((ret == 0) && (rev_size == 1))
65 {
66 rx_count++;
67 }else {
68 break;
69 }
70
71 }
72
73 if (recv_size)
74 {
75 *recv_size = rx_count;
76 }
77
78 if(rx_count != 0)
79 {
80 ret = 0;
81 }
82 else
83 {
84 ret = -1;
85 }
86
87 return ret;
88 }
89
hal_uart_send(uart_dev_t * uart,const void * data,uint32_t size,uint32_t timeout)90 int32_t hal_uart_send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout)
91 {
92 uint32_t i;
93 uint8_t byte;
94 uint32_t ret = 0;
95 for(i=0;i<size;i++)
96 {
97 byte = *((uint8_t *)data + i);
98 ret |= csi_usart_putchar(console_handle, byte);
99 }
100 return ret;
101
102 }
103
hal_reboot(void)104 void hal_reboot(void)
105 {
106 }
107
uart_input_read(void)108 char uart_input_read(void)
109 {
110 uint8_t ch = 0;
111 csi_usart_getchar(console_handle, &ch);
112 return (char)ch;
113 }