解析HCI的报文的话,可以直接调用hal层的usart接口,也可以简单使用usart_stream模块(串口流)。
串口流接口如下:
struct usart_stream_t
{
vsfhal_usart_t index;
uint8_t mode;
uint16_t int_priority;
uint32_t baudrate;
struct vsf_stream_t *stream_tx;
struct vsf_stream_t *stream_rx;
// private
bool txing;
bool rx_pend;
};
vsf_err_t usart_stream_init(struct usart_stream_t *usart_stream);
vsf_err_t usart_stream_fini(struct usart_stream_t *usart_stream);
vsf_err_t usart_stream_config(struct usart_stream_t *usart_stream);
usart_stream_t结构中,index、mode、int_priority、baudrate是和串口硬件相关的设置。
stream_tx和stream_rx是流指针,实际使用什么数据格式的流并没有规定,反正流也只是一种接口定义。
定义好usart_stream_t数据结构后,通过简单的usart_stream_init就可以初始化串口流了。
usart_stream_fini是不在使用串口流的时候调用的。
usart_stream_config是在需要重新配置串口参数的时候调用的(比如蓝牙串口HCI,芯片初始化时候一般使用115200,初始化之后,可以提升到几M)。
注意一点,串口流模块中,并没有带流结构的实例,而是需要用户按需定义发送和接收流(如果只是发送,就不需要定义接收流)。
这个是因为串口流模块对流的数据格式没要求。在一些其他的流应用中,如果模块对流的格式有要求的话,一般会直接内置流的数据结构,而不是放一个指针。
|