你好,
我目前正在通过您的培训05安全性,并遵循步骤,并能够连接到设备。
但是,在测试一点点后,我不再能够与LightBlue连接。我收到错误:在被询问时断开连接。
然后,我用不同的手机测试连接,并能够正确连接和使用设备。
进一步调查我尝试使用在Xcode上开发的我自己的iPhone应用程序连接到设备,并且能够连接到设备,但是随时会立即断开未知错误。我试过上传不同的项目,我仍然无法与手机连接我正在测试。
有谁可以指出我的方向来解决这个问题或更多地了解有关使用安全性的更多信息?
设备:
嗨敖,
断开连接的原因可能是安全性,在与设备配对之后,如果您再次尝试对设备进行断开连接,则自组配对以来将拒绝连接。尝试从手机中取消绑住设备并尝试再次连接,也可以捕捉断开回调并检查断开连接的原因。关于您对ManciDelly进行断开连接的事实,您是否正在测试您的手机实施安全性的应用程序?外围设备将进行安全请求,但是如果外设使此类请求和中央不回复外围设备将自动断开连接,则启动配对过程是担任主权。您可以查看智能标记项目,实现安全性并处理由配对过程中继的键。
谢谢mt_dialog.
嗨MT,
我有类似的问题作为AO,在尝试使用训练05中打开安全性之后,如果我关闭安全性,将重新连接。
断开原因是0x16(co_error_co_term_by_local_host),这完全是含义吗?
完全是,我记得在第一次,它是以某种方式成功绑定和工作的,在重置DA14580开发套件后,它被断开。
在我从手机忘记绑定设备之后(使用iOS 9.3.2运行),它仍然无法与安全性连接。
任何线索?
霍勒斯,
当我从手机忘记设备时,我能够使用DA14580绑定。为了与芯片一起使用,我每次重新编程时都不必忘记设备。
嗨敖,
是的,我有着你的情况,你现在想要彻底解决它。
豪拉,
您获取co_error_co_term_by_local_host的消息是因为设备是默认拒绝连接的。如果您已启用设备中的安全性,并且设备没有绑定数据,则它将接受配对请求和与该设备的联系。如果断开连接,则重新连接过程是不同的。要与绑定设备重新连接,中央应发送加密请求。加密请求的处理程序将从中央检查安全数据,如果数据不匹配,则设备将拒绝连接。您的手机记得连接的绑定数据,但如果您的循环或重新编程580所有绑定数据将丢失,并且加密请求用于重新连接时,580将拒绝它。
您可以在User_callback_config.h文件中捕获配对和加密事件,在user_callback_config.h文件中(default_app_on_pairing_request()函数应在配对请求消息上调用,并且在verafault_app_on_ecryption_req_ind()函数中应在加密请求消息中调用断开和顺序重新核化)。您可以使用模板示例测试此功能,如user_config.h文件中的小修改,使用def_sec_req_on_connect更改.security_request_scenario才能请求连接的安全性,这将使您能够使用After Works安全连接。
谢谢mt_dialog.
亲爱的,
非常感谢您的回复。
这是我在user_config.h的适应
@@ -47,9 +47,15 @ const static sleep_state_t app_default_sleep_mode = arch_sleep_off;
static const struct security_configuration user_security_configuration = {
.oob = gap_oob_auth_data_not_present,
.key_size = key_len,
+#IF 1
.iocap = gap_cap_no_input_no_output,
.auth = gap_auth_req_no_mitm_bond,
- .sec_req = gap_no_sec,
+ .sec_req = gap_sec1_noauth_pair_enc,
+#else.
+ .iocap = gap_cap_kb_only,
+ .auth = gap_auth_req_mitm_bond,
+ .sec_req = gap_sec1_auth_pair_enc,
+#结束
.ikey_dist = gap_kdist_signkey,
.rkey_dist = gap_kdist_enckey,
.tk = {
@@ -215,7 +221,7 @@ static const struct default_handlers_configuration user_default_hnd_conf = {
//配置默认处理程序的安全开始操作
//如果启用了安全性(cfg_app_security)
- .security_request_scenario = def_sec_req_never
+ .security_request_scenario = def_sec_req_on_connect
};
#endif // _user_config_h_
当您引导时,我抓住了default_app_on_pairing_request()和default_app_on_ecryption_req_ind()函数,
但它只调用default_app_on_encryption_req_ind()。
我认为这是因为外围设备已经与手机配对,不是吗?
void default_app_on_encrypt_req_ind(uint8_t connection_idx,struct gapc_encrypt_req_ind const * param)
==>
if(app_easy_security_validate_encrypt_req_against_env(connection_idx,param))
==>
BOOL APP_EASY_SECURY_VALIDATE_ENCRYPT_REQ_AGAINST_ENV(UINT8_T CONNECTION_IDX,STRUCT GAPC_ENCRYPT_REQ_IND CONST * PARAM)
{
if(((app_sec_env [connection_idx] .auth&gap_auth_bond)!= 0)
......
返回(真实);
别的
返回(false);- >走假。
}
connection_idx等于0,APP_SEC_ENV [0]填充零
这是否意味着我必须在永久商店中保存绑定信息
正如多个设备键合的Transtract_05材料的第18页中的描述?
那么,稍后,它可以在加密_req_ind中检查,正确?
嗨对话支持,
你能帮忙回答#7吗?谢谢!
嗨霍勒斯,
正如我已经知道的那样,如果外设绑定,它将仅触发加密请求函数,以检查中央对连接的键是否有效。配对完成后,指定连接(Connection_idx)的app_sec_env不应为零,但应具有在配对过程中定义的键。如果设备失去电源,则不保留键(app_sec_env将设置为零),因为它们存储在RAM空间中,因此您应该将它们存储在闪存中并自定义应用程序以检查键的闪存。
谢谢mt_dialog.
嗨MT,
好的,得到它,谢谢!