你好,
我正在尝试在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”,即侦听激活)。基本上通知权限没有正确启用。你能给我指出适当的文件或方法来实现特性中的通知权限吗?
谢谢
我在等待任何关于我的问题的更新,如果你需要更多的信息,我也可以提供
亲爱的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秒看到一个新值。
希望这个有帮助,
问候,
对话框的团队。
你好朋友
现在,我有同样的问题,你怎么解决?
我使用gl_dialog的方法,但我没有成功,
我发现在spotar的项目中,patch_status和smaple128也有NOTIFY特征,我尝试在mem_info中更改它,但也失败了,
怎么做呢?
嗨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
亲爱的Mohit
谢谢您的回复,我添加了一个用户资料,它将工作。