嗨,大家好,
我跟着我在这里发布的问题(https://support.dialog semiconductor.com/forums/post/dialog-smartbond-bl。。。–-软件/读取虚拟值),它没有完全满足我的需要。
我正在尝试在我的蓝牙服务中设置一个虚拟价值,我已经这样做了:
在文件@ user_custs1_impl.c
void更新_device_id()
{
struct musts1_val_set_req * req = ke_msg_alloc_dyn(custs1_val_set_req,
prf_get_task_from_id(task_id_custs1),
task_app,
custs1_val_set_req,
定义\u SVC1 \u设备\u ID \u字符\u LEN);
//待采样的ADC值
静态UINT16_T样本;
样本= 1234;
// req-> conhdl = app_env-> conhdl;
req-> handle = svc1_idx_device_id_val;
请求->长度=DEF\u SVC1\u DEVICE\u ID\u CHAR LEN;
// req-> notification = true;
memcpy(req->值,&sample,def_svc1_device_id_char_len);
KE_MSG_SEND(REQ);
}
void更新_major()
{
struct musts1_val_set_req * req = ke_msg_alloc_dyn(custs1_val_set_req,
prf_get_task_from_id(task_id_custs1),
task_app,
custs1_val_set_req,
def_svc1_major_char_len);
//待采样的ADC值
静态UINT16_T样本;
样本= 4536;
// req-> conhdl = app_env-> conhdl;
req-> handle = svc1_idx_major_val;
req-> length = def_svc1_major_char_len;
// req-> notification = true;
memcpy(请求->值,&样本,定义\u SVC1 \u主字符\u LEN);
KE_MSG_SEND(REQ);
}
void更新_minor()
{
struct musts1_val_set_req * req = ke_msg_alloc_dyn(custs1_val_set_req,
prf_get_task_from_id(task_id_custs1),
task_app,
custs1_val_set_req,
def_svc1_minor_char_len);
静态UINT16_T样本;
样本= 0xA0AA;
// req-> conhdl = app_env-> conhdl;
req-> handle = svc1_idx_minor_val;
req-> length = def_svc1_minor_char_len;
// req-> notification = true;
Memcpy(req->值,&sample,def_svc1_minor_char_len);
KE_MSG_SEND(REQ);
}
void更新_location()
{
struct musts1_val_set_req * req = ke_msg_alloc_dyn(custs1_val_set_req,
prf_get_task_from_id(task_id_custs1),
task_app,
custs1_val_set_req,
def_svc1_location__char_len);
//待采样的ADC值
静态UINT16_T样本;
样本= 6435;
// req-> conhdl = app_env-> conhdl;
req-> handle = svc1_idx_location_val;
req-> length = def_svc1_location__char_len;
// req-> notification = true;
memcpy(req->值,&sample,def_svc1_location__char_len);
KE_MSG_SEND(REQ);
}
文件@ user_peripheral.c.
void user_app_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
if(app_env [connection_idx] .conidx!= gap_invalid_conidx)
{
app\u connection\u idx=连接\u idx;
//停止广告数据更新计时器
app_easy_timer_cancel(app_add_data_update_timer_used);
更新_device_id();
更新_major();
更新_minor();
update_location();
......
}
基本上,我正在在电路板和应用程序之间建立数据库上的值。我的问题是:如何更改这些价值?
作为示例,如果我读取值一次,我想将0x0001添加到数据库上的存储值,并在下次读取命令上显示新值。
我正在尝试在user_catch_rest_hndl函数上进行,特别是在案例custs1_att_info_req上。但这根本不起作用。有小费吗?
我正在使用SDK 6.0.6的BLE_PHERIPERAL示例来构建我的代码。
我已经阅读了下面的两个答案,但我仍然不确定要做什么。
https://support.dialog-semicondiondiondum/cant-read-charationistic-value-i ...
https://support.dialog-semiconductor.com/gattcreadcmdind-da14580
嗨tmiranda,
我不确定是否了解您正在尝试的内容,在您粘贴的代码中,您只是发送消息,以便更新特征的值,就我理解您想要阅读这些值从手机中,一旦读取这些值,您想更新该特征的值,如果是这种情况,那么你可以使用的情况ATTS_READ_REQ_IND以便在应用程序级别中获得那种指示,并且一旦读取特征并且在接收时,您可以再次更新特征的值。在585/586中有点不同,Custs1配置文件不会向应用程序级别发送消息,以指示该消息,但例如,如果在user_custs1_def.c文件中的数据库定义中应用RI选项使用以下行作为参考,以便激活此功能以获取您希望在阅读时进行指示的自定义特征:
// ADC值1特征值
[svc1_dx_adc_val_1_val] = {svc1_adc_val_1_uuid_128,att_uuid_128_len,perm(rd,启用)|perm(ntf,启用),
perm(ri,启用)| def_svc1_adc_val_1_char_len,0,null},
通过这样做,一旦中央尝试读取一个特定的特征,就可以获得GattC_Read_Req_ind_handler()函数来执行,这样您就可以实现您想要的方式,请检查使用类似的普通配置文件的实现选项。
谢谢mt_dialog.