写在前面:本文参照 examples/ble_central/ble_app_uart_c 例程,分析一下产品做主机central时通过ble uart来跟server数据交互的流程,有理解不到位的地方,还请高手指出并欢迎讨论, QQ:993650814
正文:
同样也是实现两个方向的数据流:
第一个:PC ------->板子(Central)-------->server,这个主要是电脑通过物理串口,将数据传输到板子上,板子接受到数据之后作为Central,通过BLE将其发送到server端。
第二个:server------>板子(Central)-------->PC,这个就是server将数据通过BLE传送到板子Central端,然后板子通过物理串口将数据打印到PC端。
1、PC-->板子-->server
在串口的回调函数里:
再看 ble_nus_c_string_send:
看一下这两个handle的来历:
这个函数中,
看一下这个 db_disc_handler
在刚开始的main函数里:
所以,最终调用的是 ble_nus_c_evt_handler这个函数:
ble_nus_c_string_send 函数中的这两个handle确认完毕。
2.server------>板子------->PC
server 通过BLE uart 发送到Central中,Central端的协议栈将server端发过来的数据信息等打包,然后以BLE_GATTC_EVT_HVX这个事件上抛给应用,在派发函数ble_evt_dispatch中进行派发,
最后又是调到了 p_ble_nus_c->evt_handler(p_ble_nus_c, &ble_nus_c_evt);上面已经讲到过,这个函数指针是ble_nus_c_evt_handler这个函数。
3. central 扫描参数的参数配置:
这个函数中:
4、Central 跟 Server的连接过程:
毫无疑问,也是在协议栈的派发函数中,
这里面同样注意一个参数:连接间隔m_connection_param。
5、区分两个概念:
我这里一直讲两个角色 Central 和 Server,其实有点不准确,更确切的应该是:
在未发生连接之前两个角色分别叫:Central和 Peripheral;连接建立后,Client和Server。