嗨。
我使用DA14585 Pro工具包与SDK 6.0.6,我目前试图存储一个虚拟值(让我们假设值是1)到一个变量,并使用我的应用程序上的服务读取它。我试图基于ble_app_peripheral项目来做这件事,但到目前为止运气不太好——据我所知,通过激活控制点(user_svc1_ctrl_wr_ind_handler),它调用一个计时器函数(app_adcval1_timer_cb_handler),当计时器到期时将通知中央……问题是,这只适用于通知过程,因为当我按下“读”选项时,给出的答案是No Value。另一个问题是,这不是我想要的,因为我不想更新一个值,而只想显示一个值。
因此,我的问题是:如何使用READ命令在中心设备中显示预加载的值?(在我的例子中,是LightBlue iOS应用程序)。
谢谢
关键词:
设备:
嗨TMiranda,
你将不得不设定特定的价值特点您喜欢的任何值,自定义概要文件使用一个消息来这么做,例如,如果你想设置一个特定的价值特征可以发送CUSTS1_VAL_SET_REQ,处理该消息的处理函数将触发custs1_val_set_req_handler(),该处理函数将使用attmdb_att_set_value(),这是设置特征值的实际函数。所以,一旦你设置了特征值,你就可以从中央读取它。
由于MT_dialog
我想我还不够明白。关于ble_app_peripheral的例子,我试图在ADC value 2读取属性上读取一个虚拟值。
在@user_peripheral.c文件上,user_catch_rest_hndl上没有CUSTS1_VAL_SET_REQ,所以我用这种方式创建一个新文件
案例CUSTS1_VAL_SET_REQ:
{
Struct custs1_val_set_req const *msg_param = (Struct custs1_val_set_req const *) (param);
开关(msg_param - >处理)
{
案例SVC1_IDX_ADC_VAL_2_VAL:
User_svcl_adc_2_val_set_req_handler (msgid, msg_param, dest_id, src_id);
打破;
}
}
在@user_custs1_impl.c文件中,我正在做:
Void user_svcl_adc_2_val_set_req_handler(ke_msg_id_t const msgid,
Struct custs1_val_set_req const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
//static uint8_t val = 2;
// memcpy(param->value, &val, param->length);
GPIO_SetActive (GPIO_LED_PORT GPIO_LED_PIN);
}
正如你所看到的,我只是试图切换一个LED端口,因为我之前的尝试给了我一个错误。不幸的是,当我尝试读取ADC值2特征时,什么都没有发生。我哪里错了?
嗨TMiranda,
当你发送读取命令从中央580年将回复的价值已经在数据库中,所以你必须设置值,你想读中央实际读取的值之前,你将不得不发行CUSTS1_VAL_SET_REQ,这是为了设置值而向SDK发出的请求,而不是表示有人想要读取该值。所以在fw的某个时刻,你必须发出命令CUSTS1_VAL_SET_REQ,然后当中央读取该特征时,它将返回你已经存储的值。如前所述,CUSTS1_VAL_SET_REQ是应用程序向概要文件发出的请求,您所编写的内容将永远不会被触发。另外,为了表明有人正在试图阅读你的特征,你必须实现ATTS_READ_REQ_IND,为了实现这个,请查看以下帖子:
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
https://support.dialog-semiconductor.com/gattcreadcmdind-da14580
由于MT_dialog