在Diname上更改数据库的值

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
Tmiranda.
离线
最后一次露面:2年5个月前
加入:2017-11-16 18:00
在Diname上更改数据库的值

嗨,大家好,

我跟着我在这里发布的问题(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示例来构建我的代码。

关键词:
设备:
Tmiranda.
离线
最后一次露面:2年5个月前
加入:2017-11-16 18:00
我已经读过两者
mt_dialog.
离线
最后一次露面:1个月3周前
职员
加入:2015-06-08 11:34
嗨tmiranda,

嗨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.