我在我的外围设备上使用STM BlueNRG芯片,连接后我想读取连接中央设备(android手机)的名称。
我想我可以在注册为hci回调的user_notify例程中直接这样做。
/* Initialize the Host-Controller Interface */
hci_init(user_notify, NULL);因此,在EVT_LE_CONN_COMPLETE事件中,我使用中心设备提供的句柄,并使用aci_gatt_read_using_charac_uuid()读取我认为具有设备名称的特性(UUID0x2a00)。
case EVT_LE_META_EVENT:
{
evt_le_meta_event *evt = (void *)event_pckt->data;
switch(evt->subevent){
case EVT_LE_CONN_COMPLETE:
{
evt_le_connection_complete *cc = (void *)evt->data;
GAP_ConnectionComplete_CB(cc->peer_bdaddr, cc->handle);
uint16_t uuid = 0x2a00;
resp = aci_gatt_read_using_charac_uuid(cc->handle, 0, 1, UUID_TYPE_16, (uint8_t*)&uuid);
LOG("GATT read status: %d", resp);
enqueEvent(EVENT_BLE_CONNECTED);
}
break;
}
}长话短说,这不管用。首先我不确定的是,什么是start_handle和end_handle参数的aci_gatt_read_using_charac_uuid(),它返回ERR_INVALID_HCI_CMD_PARAMS。
有人能在这里亮点光吗?
更新
同样令我困惑的是,函数aci_gatt_read_using_charac_uuid()在BlueNRG程序设计指南中没有引用。
update2
我将函数调用更改为aci_gatt_read_using_charac_uuid(cc->handle, 0x0001, 0xffff, UUID_TYPE_16, (uint8_t*)&uuid);,但仍然得到了ERR_INVALID_HCI_CMD_PARAMS。哪一个参数可能是无效的?uuid存在,如果我使用带有蓝牙的BlueNRG图形用户界面,我可以读取设备名称。
update3
有没有人使用过这个功能,或者以某种方式从中央设备中读取一个特性?我非常感谢你的帮助或暗示。
发布于 2021-10-29 07:18:33
事实证明,BlueNRG API中有两个bug。
在bluenrg_aci_const.h文件中,OCF代码OCF_GATT_READ_USING_CHARAC_UUID应该是0x119而不是0x109。在aci_gatt_read_using_charac_uuid()函数的实现中,缺少一个关于事件的设置:
rq.event = EVT_CMD_STATUS;修补他们解决了这个问题。
https://stackoverflow.com/questions/68373235
复制相似问题