dsps工程的数据发送链条,主要包含两块:串口接收流程和BLE发送流程
简单的描述即是:
串口接收流程。负责将数据不断从uart dma中取出,存进链表;会不断通过 malloc 申请堆空间
BLE发送流程。负责不断弹出链表节点,将其数据通过BLE发送出去
串口接收流程
dma_uart_sps_init:串口初始化。
串口硬件初始化(dma的方式):uart_initialize注册串口接收函数:dma_uart_rx_callbackdma_uart_rx_activate:使能串口接收。
创建链表 dma_uart_allocate_rx_buffer,用于持续接收串口数据使能串口接收中断:dma_uart_readdma_uart_rx_callback:串口接收回调函数
将数据推进链表保存:co_list_push_backBLE 发送流程
user_on_ble_powered:位于main函数的while(1)中,当有蓝牙事件(或其它消息)时都会被调用。可以在此处判断uart接收缓冲是否有数据,并作BLE数据发送处理
user_dma_uart_to_ble: 判断是否有串口接收数据,有则发消息出来:
弹出链表第一个节点:co_list_pop_front,保存在:dma_uart.p_rx_ready_active获得 dma_uart.p_rx_ready_active 的参数的指针,以给出待发送数据的长度:req->length = dma_uart.p_rx_ready_active->param_len;发送 SPS_SERVER_DATA_TX_REQ 消息 ke_msg_send(req);协议栈接收到 SPS_SERVER_DATA_TX_REQ 消息之后,会给到应用层一个回应,并回调:user_dma_uart_to_ble_confirm:
若 success 为 true,说明协议栈还有能力接收应用层发送蓝牙数据的请求,于是继续调用 user_dma_uart_to_ble未完待续。。。