嗨支持团队,
我又遇到了一个连接问题,以前不容易复制和报告。
我把sample-128改成了外设,很适合我的应用程序。最近的广告数据更新传感器检测,这也很好的工作。但有时连接无法响应!!
今天,当我的应用程序/ iPhone尝试向DA14580设备发送命令时,根本没有回复,但我可以看到来自广告的数据。在另一个词,广告很好地运作。我试图使用LightBlue来测试它,结果相同(这意味着我的应用程序运作良好)。LightBlue的报告“在被询问时的外围断开连接”。重置DA14580后,它再次运行得很好,这种情况非常难以复制,但它是产品的致命问题。
我这边找不到任何问题。我想某个地方可能有个窃听器。我不确定停止广告和开始广告更新的广告数据是否有任何问题,但广告数据已发送,我的应用程序可以很好地接收。请帮帮我!
谢谢!
关键词:
嗨,亚历克斯:
我怀疑您的示例128配置文件不是正确的,特别是例程“Sample128_Create_db_req_handler”。你能发布你的日常生活吗?
谢谢,
tru对话框
嗨,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);
返回(已消耗的消息);
}
请帮忙!
你好,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.
将再次设置设备配置,因此您无需担心。嗨Vesa,
谢谢你的建议。,
是的,这是基于我的设计和问题是软件相关的,但我不知道是什么原因造成的问题。
在我更新了广告数据之后,我最近发现了2-3次问题(iPhone和DS14580之间无法连接)。复位后,再次正常工作。
为您的建议,我认为S / W必须在分配和发送CAPM_RESET之前检测BLE是否无法连接。如果S / W可以检测到问题,则很容易修复它。知道BLE连接问题是否存在的任何想法或始终断开连接?
更多线索:当我发现我的iphone和DA14580之间存在连接问题时,我使用了LightBlue来连接DA14580。LightBlue工具报告“在被审问时外设断开”。。。这意味着在iPhone尝试连接后,DA14580断开了连接。
谢谢,