3 posts / 0 new
Last post
Stone_wang
Offline
Last seen:1 year 1 week ago
加入:2015-10-23 03:55
Da14580 monitor error PRF_ERR_REQ_DISALLOWED

使用例程路径
..\DA14580_581_583_SDK_3.0.10.1\dk_apps\keil_projects\proximity\prox_monitor_ext_usb\Keil_5
. . DA14580_581_583_SDK_3.0.10.1 \ host_apps\windows\proximity\monitor
以上称为center端。
自己创建了个Peripheral 设备,功能正常(类似sample128.c .h ,characteristic 具备读写、通知属性)。
使用center端来搜索Peripheral ,并建立连接,可以正常的进行characteristic 读写,通知功能。
问题来了:
当连接上后,断开连接,重新搜索并建立连接,此时
就像例程一样,对profile进行enable 如 : app_proxm_enable(con_id);

app_sample128m_enable(con_id);

问题1 : 改回调函数中, status = 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 *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
uint8_t status;
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)
{
return (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, 0x20ff);
ke_state_set(dest_id, SAMPLE128M_DISCOVERING);
}
else
{
sample128m_enable_cfm_send(sample128m_env, &con_info, PRF_ERR_OK);
}
}
else
{
sample128m_enable_cfm_send(NULL, &con_info, status);
}
return (KE_MSG_CONSUMED);
}

Device:
Gongyu_Dialog
Offline
Last seen:5 hours 53 min ago
加入:2016-04-27 07:07
//出现PRF_ERR_REQ_DISALLOWED

//出现PRF_ERR_REQ_DISALLOWED ,情况比较多。有一种情况,因为你两次的handle index是一样的,如果之前attributes对应的那块内存没释放,会报这个错。

想问一下,你断开连接的时候,有没有调用prf_client_disable的接口函数。

Stone_wang
Offline
Last seen:1 year 1 week ago
加入:2015-10-23 03:55
Hi,Gongyu

Hi,Gongyu
好的,谢谢,原因是因为没有调用PRF_CLIENT_DISABLE_IND_SEND(...)进行释放, 修改了 可以使用。
十分感谢。