创建COC流程
低功耗蓝牙协议栈SDK提供API来创建L2CAP COC信道,以在支持此功能的两个设备之间双向传输数据。
创建COC时,APP与BLE Stack之间的交互流程如图 31所示。
创建COC的具体步骤如下:
- 步骤中的代码片段出自于SDK的COC创建流程示例ble_app_l2cap_coc_server(SDK_Folder\projects\ble\ble_basic_example\)在初始化时,服务端的应用程序首先向GAP注册PSM。
gap_lepsm_register_t param; param.le_psm = 0x25; param.sec_lvl = 0x00; param.mks_flag = false; error_code = ble_gap_lepsm_register(¶m); APP_ERROR_CHECK(error_code);
说明:代码路径:SDK_Folder\projects\ble\ble_basic_example\ble_app_l2cap_coc_server\Src\user\user_app.c
- 建立链路连接之后,客户端通过指定的PSM发起一个创建COC信道的请求。
lecb_conn_req_t conn_req; conn_req.le_psm = psm; conn_req.local_credits = 0xffff; conn_req.local_cid = 0; conn_req.mtu = 512; conn_req.mps = 230; ble_l2cap_lecb_conn_create(0, &conn_req);
说明:代码路径:SDK_Folder\projects\ble\ble_basic_example\ble_app_l2cap_coc_client\Src\user_callback\user_gap_callback.c
- 服务端收到该请求之后转发给应用层。
- 应用层确认是否接受请求,并且发送创建COC信道的响应消息给对方。如果接受了该连接请求,则表示创建了一个COC信道。
static void app_l2cap_lecb_conn_req_cb(uint8_t conn_idx, lecb_conn_req_ind_t *p_conn_req) { APP_LOG_DEBUG("app rcv lecb con req\n"); APP_LOG_DEBUG("peer_mtu = %d, peer_mps = %d\n", p_conn_req->peer_mtu, p_conn_req->peer_mps); lecb_cfm_conn_t cfm_conn; cfm_conn.accept = true; cfm_conn.peer_cid = p_conn_req->peer_cid; cfm_conn.local_credits = 0xffff; cfm_conn.local_cid = 0; cfm_conn.mtu = 512; cfm_conn.mps = 230; ble_l2cap_lecb_conn_cfm(conn_idx, &cfm_conn); }
说明:代码路径:SDK_Folder\projects\ble\ble_basic_example\ble_app_l2cap_coc_server\Src\user_callback\user_l2cap_callback.c