连接问题未知的错误,但建议工作得很好

6个职位/0个新职位
最后一篇文章
罗念文
离线
最后一次见到:1年1个月前
专家
已加入:2014-02-28 19:16
连接问题未知的错误,但建议工作得很好

嗨支持团队,

我又遇到了一个连接问题,以前不容易复制和报告。

我把sample-128改成了外设,很适合我的应用程序。最近的广告数据更新传感器检测,这也很好的工作。但有时连接无法响应!!

今天,当我的应用程序/ iPhone尝试向DA14580设备发送命令时,根本没有回复,但我可以看到来自广告的数据。在另一个词,广告很好地运作。我试图使用LightBlue来测试它,结果相同(这意味着我的应用程序运作良好)。LightBlue的报告“在被询问时的外围断开连接”。重置DA14580后,它再次运行得很好,这种情况非常难以复制,但它是产品的致命问题。

我这边找不到任何问题。我想某个地方可能有个窃听器。我不确定停止广告和开始广告更新的广告数据是否有任何问题,但广告数据已发送,我的应用程序可以很好地接收。请帮帮我!

谢谢!

tru对话框
离线
最后一次见到:1周1天前
工作人员
已加入:2014-06-30 23:52
嗨,亚历克斯:

嗨,亚历克斯:

我怀疑您的示例128配置文件不是正确的,特别是例程“Sample128_Create_db_req_handler”。你能发布你的日常生活吗?

谢谢,

tru对话框

罗念文
离线
最后一次见到:1年1个月前
专家
已加入:2014-02-28 19:16
嗨,TR,

嗨,TR,

该代码在大部分时间内运作良好,问题很少发生。如果发生这种情况,则无法一直在进行连接,并将其修复其重置DA14580的唯一方法 - 这是致命的问题。请查看下面的例程。

静态int sample128_create_db_req_handler(ke_msg_id_t const msgid,
结构示例128\u create\u db\u req const*param,
任务id常量目标id,
Keu任务\u id \u t const src \u id)
{
//数据库创建状态
UINT8_T状态;
uint8\ t nb\ U附件16;
uint8_t nb_att_128;
uint8_t nb_att_32;
uint16\u t att\u decl\u svc=att\u decl\u主服务;
UINT16_T ATT_DECL_CHAR = ATT_DECL_CHAROMATION;
uint16\u t att\u decl\u cfg=att\u DESC\u CLIENT\u CHAR\u cfg;
uint16值hdl;
uint16_t char_hdl;

//保存配置文件ID
sample128_env.con_info.prf_id = task_sample128;

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

//将服务添加到数据库
注意16=6;
/ * 1主要服务属性

char1的+ 1值属性

char2的+ 1值属性
+1 char 2的客户端特征配置属性

char3的+ 1值属性
+1 char 3的客户端特征配置属性

= 6
*/
nb_att_32=0;//没有UUID32属性

nb_att_128=3;//3个UUID128属性类型,三个自定义特征各一个

状态=attmdb\ U add\ U service(&(示例128_环境样品128\U shdl),任务样本128,
nb_att_16,nb_att_32,nb_att_128,106);//106:从1B更改为20字节,总大小为87字节

/ *
服务UUID的16字节值

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

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

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

=106字节

*/

if(status == att_err_no_error)
{
//添加SVC value属性
status = attmdb_add_attribute(sample128_env.sample128_shdl,att_uuid_128_len,// data size = 16(att_uuid_128_len)
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_SVC,PERM(RD,ENABLE),
&(样本128)_环境样品128\U shdl));

status = attmdb_att_set_value(sample128_env.sample128_shdl,att_uuid_128_len,(uint8_t *)sample128_svc.uuid);

//////字符1
//添加char1属性
status=attmdb\u add\u属性(示例128_环境样品128\U shdl,ATT\u UUID\u 128\u LEN+3,//数据大小=19(ATT\u UUID\u 128\u LEN+3)
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_CHAR,PERM(RD,ENABLE),
&(char_hdl));

//添加char1 val属性
status=attmdb\u add\u属性(示例128_环境样品128\U shdl,20,//sizeof(uint8\u t);数据大小=1
附件128长度(uint8 t*)和样本128长度1_增值税,PERM(RD,ENABLE)| PERM(WR,ENABLE),
&(高密度脂蛋白);

memcpy(样本1_字符属性\u hdl,&val\ hdl,sizeof(uint16\ t));

status=attmdb\u att\u set\u value(char\u hdl,sizeof(sample128\u 1\u char),(uint8\u t*)&sample128\u 1\u char);

//////字符2
//添加char属性,第二个特征
status=attmdb\u add\u属性(示例128_环境样品128\U shdl,ATT\u UUID\u 128\u LEN+3,//数据大小=19(ATT\u UUID\u 128\u LEN+3)
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_CHAR,PERM(RD,ENABLE),
&(char_hdl));

//添加val属性,第二个特征
status=attmdb\u add\u属性(示例128_环境样品128\U shdl,sizeof(uint8\u t),//数据大小=1
附件128长度(uint8 t*)和样本128 2_增值税,PERM(RD,ENABLE)| PERM(NTF,ENABLE),
&(高密度脂蛋白);

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

status=attmdb\u att\u set\u value(char\u hdl,sizeof(sample128\u 2\u char),(uint8\u t*)&sample128\u 2\u char);

//添加cfg属性,第二个特征
status = attmdb_add_attribute(sample128_env.sample128_shdl,sizeof(uint16_t),
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_CFG,PERM(RD,ENABLE)|perm(wr,启用),
&(高密度脂蛋白);

//////字符3.
//添加char属性,第三个特征
status=attmdb\u add\u属性(示例128_环境样品128\U shdl,ATT\u UUID\u 128\u LEN+3,//数据大小=19(ATT\u UUID\u 128\u LEN+3)
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_CHAR,PERM(RD,ENABLE),
&(char_hdl));

//添加val属性,第三个特征
status = attmdb_add_attribute(sample128_env.sample128_shdl,8,// data size = 8字节
ATT_UUID_128_LEN,(UINT8_T *)和SAMPLE128_3_VAL.UUID,PERM(RD,ENABLE)|perm(ntf,启用),
&(高密度脂蛋白);

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

status = attmdb_att_set_value(char_hdl,sizeof(sample128_3_char),(uint8_t *)和sample128_3_char);

//添加CFG属性,第三个特征
status = attmdb_add_attribute(sample128_env.sample128_shdl,sizeof(uint16_t),
ATT_UUID_16_LEN,(UINT8_T *)&ATT_DECL_CFG,PERM(RD,ENABLE)|perm(wr,启用),
&(高密度脂蛋白);

//禁用示例128服务
attmdb\u svc\u set\u权限(示例128)_环境样品128\U shdl,PERM(SVC,DISABLE));

//转到空闲状态

//如果我们在这里,数据库已经成功完成,进入空闲状态
keu state\u set(TASK\u SAMPLE128,SAMPLE128\u IDLE);
}

//将CFM发送到应用程序
结构sample128\u create\u db\u cfm*cfm=KE\u MSG\u ALLOC(sample128\u create\u db\u cfm,src\u id,
任务(SAMPLE128,SAMPLE128,create,db,cfm);
cfm->status=状态;
发送消息(cfm);

返回(已消耗的消息);
}

罗念文
离线
最后一次见到:1年1个月前
专家
已加入:2014-02-28 19:16
请帮忙!

请帮忙!

维桑
离线
最后一次见到:5年4个月前
格鲁鲁 硕士
已加入:2014-06-26 08:49
你好,Alex Luo,

你好,Alex Luo,

您确定问题与软件有关吗?你在用你自己的设计吗?

您还可以尝试通过分配和发送GAPM\u reset消息来重置BLE子系统。

struct gapm_reset_cmd * cmd = ke_msg_alloc(gapm_reset_cmd,task_gapm,task_app,gapm_reset_cmd);
cmd->操作= gapm_reset;
发送消息(cmd);

gapm_cmp_evt_handler.将再次设置设备配置,因此您无需担心。

罗念文
离线
最后一次见到:1年1个月前
专家
已加入:2014-02-28 19:16
嗨Vesa,

嗨Vesa,

谢谢你的建议。,

是的,这是基于我的设计和问题是软件相关的,但我不知道是什么原因造成的问题。

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

为您的建议,我认为S / W必须在分配和发送CAPM_RESET之前检测BLE是否无法连接。如果S / W可以检测到问题,则很容易修复它。知道BLE连接问题是否存在的任何想法或始终断开连接?

更多线索:当我发现我的iphone和DA14580之间存在连接问题时,我使用了LightBlue来连接DA14580。LightBlue工具报告“在被审问时外设断开”。。。这意味着在iPhone尝试连接后,DA14580断开了连接。

谢谢,