使用例程路径
. . \ DA14580_581_583_SDK_3.0.10.1 \ dk_apps \ keil_projects \接近\ prox_monitor_ext_usb \ Keil_5
. . DA14580_581_583_SDK_3.0.10.1 \ host_apps \ windows \接近\监视器
以上称端为中心。
自己创建了个外围设备,功能正常(类似sample128.c . h,特征具备读写,通知属性)。
使用中心端来搜索周边,并建立连接,可以正常的进行特点读写,通知功能。
问题来了:
当连接上后,断开连接,重新搜索并建立连接,此时
就像例程一样,对概要文件进行启用如:app_proxm_enable (con_id);
app_sample128m_enable (con_id);
问题1:改回调函数中,状态= PRF_CLIENT_ENABLE (con_info, param sample128m);得到的值是PRF_ERR_REQ_DISALLOWED,不知道如何解决。
(第一次建立连接都能正常返回PRF_ERR_OK,但第二次就不行。除非发送GAPM_RESET_CMD命令之后重新搜索并建立连接才能返回PRF_ERR_OK)
系统回调如下函数:
Static int sample128m_enable_req_handler(ke_msg_id_t const msgid,
Struct sample128m_enable_req const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
uint8_t状态;
struct sample128m_env_tag * sample128m_env;
struct prf_con_info con_info;
Int I = 0;
con_info。conidx = gapc_get_conidx (param - > conhdl);
con_info。prf_id = dest_id;
con_info。appid = src_id;
status = PRF_CLIENT_ENABLE(con_info, param, sample128m);
if (status == PRF_ERR_FEATURE_NOT_SUPPORTED) / /输出
{
返回(KE_MSG_NO_FREE);
}
else if (status == PRF_ERR_OK)
{
sample128m_env = PRF_CLIENT_GET_ENV(dest_id, sample128m);
if (param->con_type == PRF_CON_DISCOVERY)
{
prf_disc_svc_send (&sample128m_env - > con_info, 0 x20ff);
ke_state_set (dest_id SAMPLE128M_DISCOVERING);
}
其他的
{
sample128m_enable_cfm_send (sample128m_env &con_info PRF_ERR_OK);
}
}
其他的
{
sample128m_enable_cfm_send (NULL, &con_info、状态);
}
返回(KE_MSG_CONSUMED);
}
/ /出现PRF_ERR_REQ_DISALLOWED,情况比较多。有一种情况,因为你两次的处理索引是一样的,如果之前属性对应的那块内存没释放,会报这个错。
想问一下,你断开连接的时候,有没有调用prf_client_disable的接口函数。
嗨,Gongyu
好的,谢谢,原因是因为没有调用PRF_CLIENT_DISABLE_IND_SEND(…)进行释放,修改了可以使用。
十分感谢。