10个帖子/ 0个新帖子
最后发表
ao
离线
最后看到:1个月1个星期前
加入:2016-06-02 20:58
安全培训05

你好,

我目前正在通过您的05安全培训,并遵循了步骤,已经能够连接到设备。
然而,经过一段时间的测试,我不再能够连接到LightBlue。我得到的错误:外设断开时被询问。
然后,我用不同的手机测试连接,并能够正确连接和使用设备。
进一步调查我尝试使用在Xcode上开发的我自己的iPhone应用程序连接到设备,并且能够连接到设备,但是随时会立即断开未知错误。我试过上传不同的项目,我仍然无法与手机连接我正在测试。

谁能告诉我如何解决这个问题或者学习更多使用安全系统的方法?

设备:
MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨ao,

嗨ao,

断开连接的原因可能是安全,当你与设备配对后,如果你尝试再次配对,设备将拒绝连接,因为它已经配对。尝试解除设备与手机的绑定,并尝试再次连接,您也可以捕捉到断开回拨,并检查断开的原因。关于立即断开连接的事实,您正在测试您的手机的应用程序是否实现了安全性?外围设备会发出安全请求,但启动配对过程是主程序的责任,如果外围设备发出这样的请求,而中心设备没有回应,外围设备就会自动断开连接。您可以查看实现安全性并处理配对过程检索的密钥的Smart Tag项目。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨太,

嗨太,

我有类似的问题作为AO,在尝试使用训练05中打开安全性之后,如果我关闭安全性,将重新连接。

断开原因是0x16 (CO_ERROR_CO_TERM_BY_LOCAL_HOST),它的确切含义是什么?

完全是,我记得在第一次,它是以某种方式成功绑定和工作的,在重置DA14580开发套件后,它被断开。
在我的手机上忘记绑定设备(运行的是iOS 9.3.2)后,它仍然无法连接到安全。

有线索吗?

ao
离线
最后看到:1个月1个星期前
加入:2016-06-02 20:58
霍勒斯,

霍勒斯,
当我忘记手机上的设备时,我能够重新绑定DA14580。为了与芯片一起工作,我不得不经常忘记设备,每次我重新编程。

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨Ao,

嗨Ao,

是的,我有着你的情况,你现在想要彻底解决它。

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨Horach,

嗨Horach,

您获取co_error_co_term_by_local_host的消息是因为设备是默认拒绝连接的。如果您已启用设备中的安全性,并且设备没有绑定数据,则它将接受配对请求和与该设备的联系。如果断开连接,则重新连接过程是不同的。要与绑定设备重新连接,中央应发送加密请求。加密请求的处理程序将从中央检查安全数据,如果数据不匹配,则设备将拒绝连接。您的手机记得连接的绑定数据,但如果您的循环或重新编程580所有绑定数据将丢失,并且加密请求用于重新连接时,580将拒绝它。

你可以抓住的配对和加密事件处理程序函数在user_callback_config.h文件(default_app_on_pairing_request()函数应该在配对请求消息和default_app_on_ecryption_req_ind调用()函数应该调用的请求消息加密,以防断开顺序reconnetion)。您可以通过使用模板示例进行测试,就像在user_config.h文件中使用DEF_SEC_REQ_ON_CONNECT更改.security_request_scenario以请求连接的安全性一样,这将使您能够使用一个工作安全连接。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
亲爱的太,

亲爱的太,

非常感谢您的回复。

这是我在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,
+ #如果1
.iocap = GAP_IO_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_IO_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 = {
@@ - 21,7 + 22,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)

如果(((app_sec_env [connection_idx]。& GAP_AUTH_BOND) != 0)
...
返回(真正的);
其他的
返回(假);——>假。

Connection_idx = 0, app_sec_env[0]用0填充

这是否意味着我必须将绑定信息保存在永久存储中
如第18页training_05 material for multiple device bonding?

因此,稍后,可以在encrypt_req_ind中检查它,对吗?

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨对话支持,

嗨对话支持,

你能帮忙回答第7个问题吗?谢谢你!

MT_dialog
离线
最后看到:6个月2周前
工作人员
加入:2015-06-08 34
嗨霍勒斯,

嗨霍勒斯,

正如我已经指出的,如果外设已经绑定,它将只触发加密请求函数,以检查中央为连接所拥有的密钥是否有效。配对完成后,指定连接(connection_idx)的app_sec_env不应该为零,而是应该具有配对过程中定义的键。如果设备断电,密钥不会被保留(app_sec_env将被设置为0),因为它们存储在RAM空间中,是的,你应该将它们存储在flash中,并自定义应用程序,以便检查flash中的密钥。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨,MT,好的,知道了,谢谢!

嗨太,

好的,知道了,谢谢!

主题锁定