向特性添加通知权限

6个员额/ 0个新员额
最后发表
mohit3112
离线
最后看到:6个月2个星期前
专家
加入:2014-08-04一点
向特性添加通知权限

你好,
我正在尝试在diss配置文件的一个特征中实现额外的权限(只是为了理解进程),早些时候它是只读的,我还包括写命令指示处理程序的细节如下

diss.c
---------
///完整的DIS数据库描述-用于向数据库中添加属性
[dis_idx_manufacturer_name_val] = {att_char_manuf_name, perm (rd, enable) | perm (wr, enable) | perm (ntf, enable), dis_val_max_len, 0, null}

const struct att_char_desc DIS_MANUFACTURER_NAME_CHAR = ATT_CHAR(ATT_CHAR_PROP_RD | ATT_CHAR_PROP_WR | ATT_CHAR_PROP_NTF, DIS_MANUFACTURER_NAME_CHAR,
ATT_CHAR_MANUF_NAME);

我还实现了gattc_write_cmd_ind_handler

目前我可以读写从LightBlue iOS应用程序和DA14580,它显示了应用程序上的通知功能(即'listen for notification'),但当我点击“listen for notification”时,它不会做任何事情(不像在加速度计配置文件中,点击“listen for notification”时,会改变为“stop listening”,即侦听激活)。基本上通知权限没有正确启用。你能给我指出适当的文件或方法来实现特性中的通知权限吗?

谢谢

mohit3112
离线
最后看到:6个月2个星期前
专家
加入:2014-08-04一点
我在等待任何更新

我在等待任何关于我的问题的更新,如果你需要更多的信息,我也可以提供

gl_dialog
离线
最后看到:3年3个月前
工作人员
加入:2014-02-07 35
亲爱的Mohit,

亲爱的Mohit,

你做得太对了,干得好!
您需要实现BLE计时器,以每x秒发送一次值,然后它就会工作。

例子:

1)在void app_connection_func(struct gapc_connection_req_ind const *param)函数中,你需要调用该函数:

app_timer_set (APP_TIMER TASK_APP 500);//每5秒中断一次。

在此之前,你需要在app_task_handlers.h中声明处理程序,如下所示:

/*默认状态处理器定义。*/
EXTERN const struct ke_msg_handler app_default_state[] =

(ke_msg_func_t) app_update_value_handler}, {APP_TIMER
...

2)在BLE定时器每5秒触发一次的处理程序中,你可以将一个新值写入特征:

Int app_update_value_handler(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

uint8_t SetVal [20] = {0};
app_timer_set (APP_TIMER TASK_APP 100);
有效载荷+ +;

struct sample128_set_value_cmd *msg= KE_MSG_ALLOC(sample128_set_value_cmd,
TASK_SAMPLE128 TASK_APP,
sample128_set_value_cmd);
SetVal[0] =有效载荷;
SetVal[1] =有效载荷;
SetVal[2] =有效载荷;
SetVal[3] =有效载荷;
SetVal[4] =有效载荷;
SetVal[5] =有效载荷;
SetVal[6] =有效载荷;
SetVal[7] =有效载荷;
SetVal[8] =有效载荷;
SetVal[9] =有效载荷;
SetVal[10] =有效载荷;
SetVal[11] =有效载荷;
SetVal[12] =有效载荷;
SetVal[13] =有效载荷;
SetVal[14] =有效载荷;
SetVal[15] =有效载荷;
SetVal[16] =有效载荷;
SetVal[17] =有效载荷;
SetVal[18] =有效载荷;
SetVal[19] =有效载荷;

memcpy(味精- > sample128_val SetVal 20);
ke_msg_send(味精);

返回(KE_MSG_CONSUMED);

3)在录制“listen for notification”之后,您应该每5秒看到一个新值。

希望这个有帮助,

问候,

对话框的团队。

fengmailx
离线
最后看到:2个星期前
加入:2014-11-21 03:48
你好朋友

你好朋友
现在,我有同样的问题,你怎么解决?
我使用gl_dialog的方法,但我没有成功,
我发现在spotar的项目中,patch_status和smaple128也有NOTIFY特征,我尝试在mem_info中更改它,但也失败了,
怎么做呢?

mohit3112
离线
最后看到:6个月2个星期前
专家
加入:2014-08-04一点
嗨fengmailx,

嗨fengmailx,
试着实现这个函数,它对我有用

空白update_value (uint8_t * packet_data)

attmdb_att_update_value((DIS_IDX_MANUFACTURER_NAME_VAL + dis_env .shdl), APP_DIS_MANUFACTURER_NAME_LEN,0,(uint8_t *)packet_data);

prf_server_send_event((prf_env_struct *)&diss_env, false,(DIS_IDX_MANUFACTURER_NAME_VAL + dis_env .shdl));

Mohit Maheshwari

fengmailx
离线
最后看到:2个星期前
加入:2014-11-21 03:48
亲爱的Mohit

亲爱的Mohit
谢谢您的回复,我添加了一个用户资料,它将工作。