CN / EN
CN / EN

提问

设计支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

5515发现服务异常问题 GR551x

清晨の

2023-06-12 12:16

SDK版本:V1.7.0

问题描述:开发芯片为5515IENDU,使用5515的扫描发现服务功能,第三方设备为ESP32,能正常扫描到第三方设备,能建立连接和MTU交互,但是无法发现对应的服务,在服务发现回调函数中打印状态为:0x57,未到解析对应的UUID直接退出。使用手机工具GRToolbox扫描第三方设备连接后,服务发现正常。

交叉验证:为了验证连接到发现服务流程是否有问题,我使用另外一台5515设备模拟了第三方的设备广播和服务(服务UUID一致),能正常发现设备,建立连接正常,MTU交互正常,发现服务也正常,NOTIFY交互和写交互均正常。

服务发现均在设备连接成功之后调用接口。

请问下该如何排查解决该问题,相关初始化和发现第一个0xFFE0服务接口如下:

#define BLE_LB_NOTIFY_UUID (0xFFE0)

#define LB_SERVICE_CHAR_NOTIFY (0xFFE4)

#define BLE_ATT_LB_NOTIFY BLE_ATT_UUID_16(BLE_LB_NOTIFY_UUID)

static void ble_lb_notify_c_srvc_browse_cb(uint8_t conn_handle, uint8_t status, const ble_gattc_browse_srvc_t *p_browse_srvc)

{

ble_lb_notify_c_evt_t ble_lb_notify_c_evt;

uint16_t uuid_disc;

uint16_t handle_disc;


ble_lb_notify_c_evt.conn_handle = conn_handle;

if (BLE_GATT_ERR_BROWSE_NO_ANY_MORE == status)

{

APP_LOG_INFO(">>>>>>>>>>>>>>>>>>>>>>>>>>>BLE_GATT_ERR_BROWSE_NO_ANY_MORE");

return;

}


if (BLE_SUCCESS == status)

{

uuid_disc = p_browse_srvc->uuid[0] | p_browse_srvc->uuid[1] << 8;

APP_LOG_INFO(">>>>>>>>>>>>>>>>>>>>>>>>>>>service_uuid %0.4X",uuid_disc);

if (BLE_LB_NOTIFY_UUID == uuid_disc)

{

s_ble_lb_notify_c_env.handles.lb_notify_start_handle = p_browse_srvc->start_hdl;

s_ble_lb_notify_c_env.handles.lb_notify_end_handle = p_browse_srvc->end_hdl;

for (uint32_t i = 0; i < (p_browse_srvc->end_hdl - p_browse_srvc->start_hdl); i++)

{

uuid_disc = p_browse_srvc->info[i].attr.uuid[0] | p_browse_srvc->info[i].attr.uuid[1] << 8;

handle_disc = p_browse_srvc->start_hdl + i + 1;

if (BLE_GATTC_BROWSE_ATTR_VAL == p_browse_srvc->info[i].attr_type)

{

if (LB_SERVICE_CHAR_NOTIFY == uuid_disc)

{

APP_LOG_INFO(">>>>>>>>>>>>>>>>>>>>>>>>>>>notify_uuid %0.4X %X %X",uuid_disc,handle_disc,handle_disc+1);

s_ble_lb_notify_c_env.handles.notify_char_handle = handle_disc;

s_ble_lb_notify_c_env.handles.notify_cccd_handle = handle_disc+1;

}

}

else if (BLE_GATTC_BROWSE_NONE == p_browse_srvc->info[i].attr_type)

{

break;

}

}

ble_lb_notify_c_evt.evt_type = BLE_LB_NOTIFY_C_EVT_DISCOVERY_COMPLETE;

ble_lb_notify_c_evt.params.peer_db=s_ble_lb_notify_c_env.handles;

ble_lb_notify_c_evt_handler_excute(&ble_lb_notify_c_evt);

}

}

}

sdk_err_t ble_lb_notify_client_init(ble_lb_notify_c_evt_handler_t evt_handler)

{

if (NULL == evt_handler)

{

return SDK_ERR_POINTER_NULL;

}

memset(&s_ble_lb_notify_c_env, 0, sizeof(s_ble_lb_notify_c_env));

s_ble_lb_notify_c_env.evt_handler = evt_handler;

return ble_client_prf_add(&ble_lb_notify_c_prf_info, &s_ble_lb_notify_c_env.prf_id);

}


sdk_err_t ble_lb_service_c_disc_notify_start(uint8_t conn_handle)

{

uint8_t target_uuid[2];

target_uuid[0] = LO_U16(BLE_ATT_LB_NOTIFY);

target_uuid[1] = HI_U16(BLE_ATT_LB_NOTIFY);

const ble_uuid_t lb_service_uuid =

{

.uuid_len = 2,

.uuid = target_uuid,

};

s_ble_lb_notify_c_env.handles.lb_notify_start_handle=0x0000;

s_ble_lb_notify_c_env.handles.lb_notify_end_handle=0x0000;

s_ble_lb_notify_c_env.handles.notify_cccd_handle=0x0000;

s_ble_lb_notify_c_env.handles.notify_char_handle=0x0000;

return ble_gattc_prf_services_browse(s_ble_lb_notify_c_env.prf_id, conn_handle, &lb_service_uuid);

}



0收藏

0赞成

188***205

2023-09-20 14:02

兄弟后面怎么弄好的啊,我也遇到同样问题了

2条评论

0赞成

0收藏

您的评论

清晨の

2023-06-12 19:58

使用GRToolBox连接是可以发现对应的服务,服务的UUID与配置的Target UUID一致,我使用SDK的例程:ble_app_cts_c,去操作连接设备再发现服务,状态打印为:BLE_GATT_ERR_BROWSE_NO_ANY_MORE(0x57),未到解析对应的UUID直接异常结束

5条评论

0赞成

0收藏

您的评论

zhongchengzhi

汇顶员工
2023-06-12 19:32

您好,您用GRToolBox连接看能扫到ESP32的服务吗?若能,您检查下服务UUID是否和您配置的Target UUID一致;

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注