嗨,对话框中,
我有两个由da14583组成的设备BLE central和外设,它们在连接上交换数据。我想实现bonding功能,所以我按照tutorial_5 ble_security_sample .pdf中的建议在外设侧做了更改。但是在中央方面,我找不到实现绑定的过程。我也通过了sps_host示例,但没有实现。通过RW-BLE-GAP-IS.pdf,我了解到绑定过程需要使用GAPC_BOND_CMD命令从主端启动。我已经通过GAPC_SECURITY_CMD请求外接安全,并在master上成功接收到GAPC_SECURITY_IND指示。我需要帮助编写一个过程,在安全请求时从master启动bonding功能。
谢谢,
问候,
Dhiraj
设备:

嗨dhirajp15,
annihilate没有例子,将指导您通过一个中央的安全程序,但随着文档表明你需要发出GAPC_BOND_CMD为了启动程序,这样你可以尽快发送GAPC_BOND_CMD GAPC_SECURITY_IND被触发的处理程序。所以你可以创建一个回调函数来发送GAPC_BOND_CMD,如下所示:
struct gapc_bond_cmd *味精;
msg = (struct gapc_bond_cmd *) KE_MSG_ALLOC(gapc_bond_cmd, TASK_GAPC,TASK_APP, gapc_bond_cmd);
然后在.app_on_security_req_ind钩子中附加回调函数。
Thansk MT_dialog
嗨MT_Dialog,
我使用Justworks安全级别绑定以下配置:
Static const struct security_configuration user_security_configuration = {
.oob = GAP_OOB_AUTH_DATA_NOT_PRESENT,
.key_size = KEY_LEN,
.iocap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT,
.auth = GAP_AUTH_REQ_NO_MITM_BOND,
.sec_req = GAP_SEC1_NOAUTH_PAIR_ENC,
.ikey_dist = GAP_KDIST_SIGNKEY,
.rkey_dist = GAP_KDIST_ENCKEY,
.tk = {
。key = {0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0},
},
.csrk = {
xab。key = {0, 0 xab 0 x45 0 x55 0 x23 0 x01, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0, 0 x0},
},
};
我实现了GAPC_BOND_CMD在user_catch_rest处理程序cb上的GAPC_SECURITY_IND建议。因此外设获得配对请求并提供配对响应。在此之后,我在中心设备上获得app_on_pairing_succsucceeded回调。我还通过msg_param->info==GAPC_LTK_EXCH接收GAPC_BOND_IND,这里我发起GAPC_ENCRYPT_CMD发送之前接收到的长期密钥。进一步,我收到app_on_encryption_ind回调,后面跟着GAPC_CMP_EVT, msg_param->operation==GAPC_ENCRYPT和msg_param->status =00,这表示加密已经完成,没有错误。这是在中心设备上实现绑定的正确方法吗?还有什么命令我没听到吗?
谢谢,
问候,
dhiraj
嗨dhirajp15,
如果我正确理解你描述的顺序是什么,与GAPC_LTK_EXCH GAPC_BOND_IND到来时,这意味着设备获得LTK键,当你收到,关键你应该存储它,不启动GAPC_ENCRYPT_CMD(什么样的钥匙是分布在空气取决于应用程序)。GAPC_ENCRYPT命令是为了加密链接键过程结束后,和配对成功,如果你想加密与LTK而不是TK(这是当前的加密链接),然后你可以发送一个加密命令。例如,可以在app_on_pairing_succeeded中发送加密命令。
由于MT_dialog
嗨MT_dialog,
谢谢你的帮助。我按照建议做了修改,成功地完成了粘合过程。如果我不想重复配对过程(假设我有绑定数据存在- LTK,Ediv,randnb), RW_BLE_GAP_IS.pdf建议:
当收到安全请求指示时,链路主人可以决定启动配对或加密
根据其债券数据”。- 95页。
所以在主端如果我收到GAPC_SECURITY_IND,我应该保持一个检查是否发出GAPC_BOND_CMD或GAPC_ENCRYPT_CMD(先前绑定)??
谢谢,
问候,
Dhiraj
嗨dhirajp15,
由于绑定完成,然后设备断开,这意味着两个设备都绑定了,并保留了它们的绑定数据,所以不需要再次执行绑定过程来重新连接安全。所以当设备绑定时,中央应该发出加密命令来加密链路,所以主服务器应该检查它是否绑定,以便发出绑定命令或加密命令。
由于MT_dialog
嗨MT_Dialog,
谢谢你的帮助!
问候,
Dhiraj