SDK5(版本5.0.3)-当APP_DIS_FEATURES中的部分标志被设置时,设备信息服务中断。

8个帖子/ 0个新
最后发表
奥伦
离线
最后看到:1年8个月前
专家
加入:2014-06-28 22:03
SDK5(版本5.0.3)-当APP_DIS_FEATURES中的部分标志被设置时,设备信息服务中断。

SDK5(版本5.0.3)-当APP_DIS_FEATURES中的部分标志被设置时,设备信息服务中断。
默认情况下,APP_DIS_FEATURES被定义为设置了所有相关位。
当我注释掉一些位时,糟糕的事情发生了——值出现在错误的特征中。
我觉得这跟diss_create_db_cfm_handler(…)在app_dis_task .c中尝试设置所有可能的DIS字符,忽略APP_DIS_FEATURES位掩码。

关键词:
设备:
MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨,奥伦,

嗨,奥伦,

我在5.0.3模板项目中看不到这样的东西,我已经注释掉了一些APP_DIS_FEATURES,在服务中显示的特征是,我在APP_DIS_FEATURES中声明的和显示的值是正确的。也许您应该重新启动客户端设备中的ble模块,因为客户端缓存从外设检索的数据,有时事情会搞砸,有时这就是导致糟糕事情发生的原因。

由于MT_dialog

戴夫。意甲首轮
离线
最后看到:2年8个月前
加入:2015-10-08 13:21
我可以重建

我能够在模板项目中重新创建错误。例如,如果我在我的应用程序或模板项目中只尝试dis_manufacer_name_char_sup,设备信息服务将显示一个未知的特征。有时候,一切都如预期的那样运行。如果我只删除dis_manufacer_name_char_sup,那么其他所有特征都会正确显示。从我所做的测试来看,当它发生时,似乎只有一个特性被破坏了。每次我看到未知的特征,它总是有相同的UUID。我在ios和android上测试了3个不同的应用程序,它们都返回了相同的结果。

戴夫。意甲首轮
离线
最后看到:2年8个月前
加入:2015-10-08 13:21
我也有同样的问题。

我也有同样的问题。

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨,大卫。首轮,

嗨,大卫。首轮,

当DIS_MANUFACTURER_NAME_CHAR_SUP只定义时,我可以确认DISS服务的奇怪行为,尽管我不能重现模板的问题,但我可以看到它在ble_app_peripheral项目中有一些错误。团队会检查,然后通知你。

由于MT_dialog

Gongyu_Dialog
离线
最后看到:5天9小时前
加入:2016-04-27 07:07
基于ble_app

基于ble_app_peripheral项目,修复步骤如下:

1.在结构“diss_create_db_cfm”中添加特性项,文件“diss_task.h”
/// @ref DISS_CREATE_DB_CFM消息参数
struct diss_create_db_cfm

/ / /状态
uint8_t状态;
uint16_t特性;/ /新添加的
};

2.当检查参数>特性时,为每个项目添加if条件,文件" app_diss_task.c"

Int diss_create_db_cfm_handler(ke_msg_id_t const msgid,
Struct diss_create_db_cfm const *param
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

uint8 len;

if (ke_state_get(dest_id) == APP_DB_INIT)

if (param->status == CO_ERROR_NO_ERROR)

//进入空闲状态
if(param->features & dis_manufacer_name_char_sup) //添加

// sactuer DB中的名称值
struct dis_set_char_val_req *req_name = KE_MSG_ALLOC_DYN(dis_set_char_val_req,
TASK_DISS TASK_APP,
diss_set_char_val_req,
APP_DIS_MANUFACTURER_NAME_LEN);

//填充参数结构
req_name - > char_code = DIS_MANUFACTURER_NAME_CHAR;
req_name - > val_len = APP_DIS_MANUFACTURER_NAME_LEN;
memcpy (&req_name - > val [0], APP_DIS_MANUFACTURER_NAME, APP_DIS_MANUFACTURER_NAME_LEN);

//发送消息
ke_msg_send (req_name);

if(param->features & DIS_MODEL_NB_STR_CHAR_SUP) //添加

struct dis_set_char_val_req *req_mod = KE_MSG_ALLOC_DYN(dis_set_char_val_req,
TASK_DISS TASK_APP,
diss_set_char_val_req,
APP_DIS_MODEL_NB_STR_LEN);

//填充参数结构
req_mod - > char_code = DIS_MODEL_NB_STR_CHAR;
req_mod - > val_len = APP_DIS_MODEL_NB_STR_LEN;
memcpy (&req_mod - > val [0], APP_DIS_MODEL_NB_STR, APP_DIS_MODEL_NB_STR_LEN);

//发送消息
ke_msg_send (req_mod);

..........

3.添加MSG send info "cfm->features = param->features;" in function "diss_create_db_req_handler"。文件“diss_task.c”

Static int diss_create_db_req_handler(ke_msg_id_t const msgid,
Struct diss_create_db_req const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

........
//发送响应到应用程序
struct dis_create_db_cfm * cfm = KE_MSG_ALLOC(dis_create_db_cfm, src_id, TASK_DISS,
diss_create_db_cfm);
cfm - >状态=状态;
cfm - >功能=参数- >功能;/ /添加
ke_msg_send (cfm);

返回(KE_MSG_CONSUMED);

奥伦
离线
最后看到:1年8个月前
专家
加入:2014-06-28 22:03
而不是使用param-

而不是使用param - >特性,并检查每一项If (param->features &…)我做了:if (APP_DIS_FEATURES &…)

我看不出有什么理由不及格特性作为一个变量,除非你想做一些动态的DIS服务,字符可以在初始化后添加或删除(我真的看不到这样做的实际原因)。

Gongyu_Dialog
离线
最后看到:5天9小时前
加入:2016-04-27 07:07
嗨,奥伦

嗨,奥伦

你是对的。推荐给你的方法

主题锁定