嗨,伙计们,
我正在跟进我在这里发布的一个问题(https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。——software/reading-dummy-value),它并没有完全满足我的需求。
我试图在我的蓝牙服务中设置一个虚拟值,我已经这样做了:
在文件@user_custs1_impl.c
空白updating_device_id ()
{
struct custs1_val_set_req *req = KE_MSG_ALLOC_DYN,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_set_req,
DEF_SVC1_DEVICE_ID_CHAR_LEN);
//需要采样的ADC值
静态uint16_t样本;
示例= 1234;
/ /请求- > conhdl = app_env - > conhdl;
申请- >处理= SVC1_IDX_DEVICE_ID_VAL;
申请- >长度= DEF_SVC1_DEVICE_ID_CHAR_LEN;
/ /请求- >通知= true;
顺利进行,memcpy(请求- >价值DEF_SVC1_DEVICE_ID_CHAR_LEN);
ke_msg_send(要求的);
}
空白updating_major ()
{
struct custs1_val_set_req *req = KE_MSG_ALLOC_DYN,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_set_req,
DEF_SVC1_MAJOR_CHAR_LEN);
//需要采样的ADC值
静态uint16_t样本;
示例= 4536;
/ /请求- > conhdl = app_env - > conhdl;
申请- >处理= SVC1_IDX_MAJOR_VAL;
申请- >长度= DEF_SVC1_MAJOR_CHAR_LEN;
/ /请求- >通知= true;
顺利进行,memcpy(请求- >价值DEF_SVC1_MAJOR_CHAR_LEN);
ke_msg_send(要求的);
}
空白updating_minor ()
{
struct custs1_val_set_req *req = KE_MSG_ALLOC_DYN,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_set_req,
DEF_SVC1_MINOR_CHAR_LEN);
静态uint16_t样本;
示例= 0 xa0aa;
/ /请求- > conhdl = app_env - > conhdl;
申请- >处理= SVC1_IDX_MINOR_VAL;
申请- >长度= DEF_SVC1_MINOR_CHAR_LEN;
/ /请求- >通知= true;
顺利进行,memcpy(请求- >价值DEF_SVC1_MINOR_CHAR_LEN);
ke_msg_send(要求的);
}
空白updating_location ()
{
struct custs1_val_set_req *req = KE_MSG_ALLOC_DYN,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_set_req,
DEF_SVC1_LOCATION__CHAR_LEN);
//需要采样的ADC值
静态uint16_t样本;
示例= 6435;
/ /请求- > conhdl = app_env - > conhdl;
申请- >处理= SVC1_IDX_LOCATION_VAL;
申请- >长度= DEF_SVC1_LOCATION__CHAR_LEN;
/ /请求- >通知= true;
顺利进行,memcpy(请求- >价值DEF_SVC1_LOCATION__CHAR_LEN);
ke_msg_send(要求的);
}
文件@user_peripheral.c
Void user_app_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
如果(app_env [connection_idx]。conidx ! = GAP_INVALID_CONIDX)
{
app_connection_idx = connection_idx;
//停止广告数据更新定时器
app_easy_timer_cancel (app_adv_data_update_timer_used);
updating_device_id ();
updating_major ();
updating_minor ();
updating_location ();
...
}
基本上,我在我的数据库上设置板和应用程序之间的连接的值。我的问题是:我如何能动态地改变那些值?
例如,如果我读取一次该值,我希望将0x0001添加到数据库上的存储值中,并在下一个read命令中显示新值。
我试图在user_catch_rest_hndl函数上这样做,特别是在案例CUSTS1_ATT_INFO_REQ上。但这根本不起作用。任何建议吗?
我使用SDK 6.0.6的ble_pheriperal示例来构建我的代码。
我已经阅读了下面的两个答案,但我仍然不确定该怎么做。
https://support.dialog-semiconductor.com/cant-read-charateristic-value-i..。
https://support.dialog-semiconductor.com/gattcreadcmdind-da14580
嗨TMiranda,
我不知道明白你想做什么,在你的代码粘贴你只是为了更新发送消息的价值特征,只要我能理解你想从手机读取这些值,只要这些值是读取你想更新特性的值,如果是这样的话,那么您可以使用580年ATTS_READ_REQ_IND,以便在应用程序级别上获得那种指示,一旦一个特征被读取,当接收到它时,你可以再次更新特征的值。在585/586中情况有所不同,cust1配置文件没有向应用程序级别发送消息来指示这一点,但如果你在user_custs1_def.c文件的数据库定义中应用RI选项,例如,使用下面的行作为参考,以便为您希望在读取时得到指示的自定义特征激活该特性:
// ADC值1特征值
[svc1_idx_adc_val_1_val] = {svc1_adc_val_1_uuid_128, att_uuid_128_len, perm (rd, enable) | perm (ntf, enable),
烫(RI,启用)| DEF_SVC1_ADC_VAL_1_CHAR_LEN0零}
通过这样做,你将得到gattc_read_req_ind_handler()函数在中央试图读取特定的特性时立即执行,这样你就可以实现你想要的,也请检查使用类似选项的DISS配置文件的实现。
由于MT_dialog