清晨の
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);
}
188***205
兄弟后面怎么弄好的啊,我也遇到同样问题了
清晨の
使用GRToolBox连接是可以发现对应的服务,服务的UUID与配置的Target UUID一致,我使用SDK的例程:ble_app_cts_c,去操作连接设备再发现服务,状态打印为:BLE_GATT_ERR_BROWSE_NO_ANY_MORE(0x57),未到解析对应的UUID直接异常结束
zhongchengzhi
您好,您用GRToolBox连接看能扫到ESP32的服务吗?若能,您检查下服务UUID是否和您配置的Target UUID一致;
打开微信,使用“扫一扫”即可关注