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 }