未知的错误连接问题,但advtising效果很好

6个帖子/ 0新
最后一篇
亚历克斯·罗
离线
最后一次露面:1年6个月前
专家
加入:2014年2月28日19:16
未知的错误连接问题,但advtising效果很好

嗨,支持团队,

我再次遇到一个问题,连接问题,这是不容易复制和之前的报道。

我从样品-128修改为是外围,并可以很好地用于我的申请。最近,广告数据由传感器检测,即得效果很好更新。但偶尔的连接不能回答!

今天我用我的App/iPhone向DA14580设备发送命令时,没有任何响应,但是我可以看到来自广告的数据。换句话说,广告效果很好。我尝试使用LightBlue进行测试,结果是一样的(这意味着我的应用程序运行良好)。浅蓝发来一份报告"在审问时外围设备断开"重置DA14580后,它再次工作得很好,这种情况是非常困难的复制,但它是一个产品的致命问题。

我找不到从我身边的任何问题。我觉得有可能是断开的错误的地方。我不知道是否有从公布由stop_advertising和start_adverting更新数据的任何问题,但广告数据发送,可以通过我的应用程序来收好。请帮忙!

谢谢!

tr_dialog.
离线
最后一次露面:4天17小时以前
职员
加入:2014-06-30 23:52
嗨,亚历克斯:

嗨,亚历克斯:

我怀疑您的sample128配置文件没有正确执行,特别是例程“sample128_create_db_req_handler”。你能把你的日程贴出来吗?

谢谢,

TR_DIALOG

亚历克斯·罗
离线
最后一次露面:1年6个月前
专家
加入:2014年2月28日19:16
嗨TR,

嗨TR,

代码在大多数情况下运行良好,很少发生问题。如果发生这种情况,就不能一直连接,唯一的解决方法就是重置DA14580——这是一个致命的问题。请查看下面的程序。

Static int sample128_create_db_req_handler(ke_msg_id_t const msgid,
结构sample128_create_db_req常量* PARAM,
ke_task_id_t常量DEST_ID,
ke_task_id_t常量src_id)
{
//数据库创建状态
uint8_t状态;
uint8_t nb_att_16;
uint8_t nb_att_128;
uint8_t nb_att_32;
uint16_t att_decl_svc = ATT_DECL_PRIMARY_SERVICE;
uint16_t att_decl_char = ATT_DECL_CHARACTERISTIC;
uint16_t att_decl_cfg = ATT_DESC_CLIENT_CHAR_CFG;
uint16_t val_hdl;
uint16_t char_hdl;

/ /保存概要文件ID
sample128_env.con_info。prf_id = TASK_SAMPLE128;

/ * --------------------------------------------------- *
Sample128服务创建
* -------------------------------------------------- * /

//添加服务导入数据库
nb_att_16 = 6;
/* 1主服务属性

+ 1 char1的值属性

+ 1 char2的值属性
+ 1个客户端Characterisitic配置属性对于char 2

+ 1 char3的值属性
+ 1个客户端Characterisitic配置属性对于char 3

= 6
* /
nb_att_32 = 0; //无UUID32属性

nb_att_128 = 3;// 3种UUID128属性类型,每个的三个自定义特性

状态= attmdb_add_service(&(sample128_env.sample128_shdl),TASK_SAMPLE128,
nb_att_16,nb_att_32,nb_att_128,106);// 106:从1B改变为20Byte,87字节总大小

/*
16为服务字节值UUID

+ 19个字节的第一特性的声明(1个字节属性+ 2字节值手柄+ 16字节UUID = 19字节)
+ 20/1字节的数据的第一个特征
+ 0字节的第一特性的客户端配置(没有通知或指示在第一个字符)

+ 19字节第二个特征的声明(1字节属性+ 2字节值句柄+ 16字节UUID = 19字节)
+为第二特性1个字节的数据的
+ 2字节的第一个特征的客户端配置(在第二个特征上允许Notify)

+ 19字节的第三特征的声明(1个字节属性+ 2字节值手柄+ 16字节UUID = 19字节)
+ 8字节的数据用于第三个特征
+ 2个字节的第三特征的客户端配置(通知被允许在所述第三特性)

= 106个字节

* /

status == ATT_ERR_NO_ERROR
{
//添加SVC值属性
= attmdb_add_attribute (sample128_env地位。sample128_shdl, ATT_UUID_128_LEN, //数据大小= 16 (ATT_UUID_128_LEN)
ATT_UUID_16_LEN, (uint8_t*)&att_decl_svc, PERM(RD, ENABLE),
&(sample128_env.sample128_shdl));

= attmdb_att_set_value (sample128_env地位。采样128_shdl, ATT_UUID_128_LEN, (uint8_t *)采样128_svc.uuid;

/ / / / / /字符1
/ /添加char1属性
状态= attmdb_add_attribute(sample128_env.sample128_shdl,ATT_UUID_128_LEN + 3,//数据大小= 19(ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN, (uint8_t*) &att_decl_char, PERM(RD, ENABLE),
&(char_hdl));

//添加CHAR1 VAL属性
状态= attmdb_add_attribute(sample128_env.sample128_shdl,20,//的sizeof(uint8_t);数据的尺寸= 1
ATT_UUID_128_LEN,(uint8_t *)&sample128_1_val.uuid,PERM(RD,ENABLE)|PERM(WR,ENABLE)
&(val_hdl));

的memcpy(sample128_1_char.attr_hdl,&val_hdl,的sizeof(uint16_t));

状态= attmdb_att_set_value(char_hdl,的sizeof(sample128_1_char),(uint8_t *)&sample128_1_char);

/ / / / / /字符2
//添加char属性,第二个特征
状态= attmdb_add_attribute(sample128_env.sample128_shdl,ATT_UUID_128_LEN + 3,//数据大小= 19(ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN, (uint8_t*) &att_decl_char, PERM(RD, ENABLE),
&(char_hdl));

//添加VAL属性,第二个特点
状态= attmdb_add_attribute(sample128_env.sample128_shdl,的sizeof(uint8_t),//数据的尺寸= 1
ATT_UUID_128_LEN,(uint8_t *)&sample128_2_val.uuid,PERM(RD,ENABLE)|PERM(NTF,ENABLE)
&(val_hdl));

memcpy (sample128_2_char。attr_hdl &val_hdl, sizeof (uint16_t));

状态= attmdb_att_set_value(char_hdl,的sizeof(sample128_2_char),(uint8_t *)&sample128_2_char);

//添加CFG属性,第二个特点
= attmdb_add_attribute (sample128_env地位。sample128_shdl, sizeof (uint16_t),
ATT_UUID_16_LEN, (uint8_t*) &att_decl_cfg, PERM(RD, ENABLE) | PERM(WR, ENABLE),
&(val_hdl));

/ / / / / /字符3
//添加char属性,第三个特征
状态= attmdb_add_attribute(sample128_env.sample128_shdl,ATT_UUID_128_LEN + 3,//数据大小= 19(ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN, (uint8_t*) &att_decl_char, PERM(RD, ENABLE),
&(char_hdl));

//添加VAL属性,第三特征
= attmdb_add_attribute (sample128_env地位。sample128_shdl, 8, //数据大小= 8字节
&sample128_3_val ATT_UUID_128_LEN (uint8_t *)。uuid, PERM(RD, ENABLE) | PERM(NTF, ENABLE),
&(val_hdl));

memcpy (sample128_3_char。attr_hdl &val_hdl, sizeof (uint16_t));

状态= attmdb_att_set_value(char_hdl, sizeof(sample128_3_char), (uint8_t *)&sample128_3_char);

//添加cfg属性,第三个特征
= attmdb_add_attribute (sample128_env地位。sample128_shdl, sizeof (uint16_t),
ATT_UUID_16_LEN, (uint8_t*) &att_decl_cfg, PERM(RD, ENABLE) | PERM(WR, ENABLE),
&(val_hdl));

/ /禁用sample128服务
attmdb_svc_set_permission(sample128_env.sample128_shdl,PERM(SVC,DISABLE));

//进入Idle状态

//如果我们这里,数据库已经实现了成功,进入空闲状态
ke_state_set(TASK_SAMPLE128,SAMPLE128_IDLE);
}

//发送CFM应用
结构sample128_create_db_cfm * CFM = KE_MSG_ALLOC(SAMPLE128_CREATE_DB_CFM,src_id,
TASK_SAMPLE128,sample128_create_db_cfm);
cfm->状态=状态;
ke_msg_send(CFM);

回报(KE_MSG_CONSUMED);
}

亚历克斯·罗
离线
最后一次露面:1年6个月前
专家
加入:2014年2月28日19:16
请帮助!

请帮助!

VesaN
离线
最后一次露面:5年7个月前
大师 掌握
加入:2014年6月26日08:49
您好亚历克斯罗,

您好亚历克斯罗,

你确定该问题与软件有关?您是否使用自己的设计?

您也可以尝试到BLE子系统与分配和发送GAPM_RESET消息复位。

struct gapm_reset_cmd* cmd = KE_MSG_ALLOC(gapm_reset_cmd, TASK_GAPM, TASK_APP, gapm_reset_cmd);
cmd - >操作= GAPM_RESET;
ke_msg_send(CMD);

gapm_cmp_evt_handler将重新设置该设备的配置,所以你并不需要有关的忧虑。

亚历克斯·罗
离线
最后一次露面:1年6个月前
专家
加入:2014年2月28日19:16
嗨视频电子设备标准协会,

嗨视频电子设备标准协会,

谢谢你的建议。,

是的,这是基于我的设计,问题是软件相关的,但我无法弄清楚什么是造成这个问题的原因。

我更新了广告数据之后,我发现这个问题(无法iPhone和DS14580之间的连接),2-3的时间最近。复位后,它将再次正常工作。

对于你的建议,我认为s/w必须在分配和发送CAPM_RESET之前检测BLE是否不能连接。如果s/w可以检测到问题,就很容易修复它。知道BLE连接是否有问题或总是断开吗?

更多的线索:我用LightBlue来连接DA14580当我发现我的iPhone和DA14580之间的连接问题。LightBlue工具报道的“外围断开而被审问” ......这意味着,DA14580断开后,iPhone尝试连接。

谢谢,