2

我在外围设备上使用 STM BlueNRG-MS 芯片,连接后我想读取连接的中央设备(安卓手机)的名称。

我以为我可以直接在user_notify注册为 hci 回调的例程中执行此操作

  /* Initialize the Host-Controller Interface */
  hci_init(user_notify, NULL);

因此,在EVT_LE_CONN_COMPLETE活动中,我使用为中央设备提供的句柄,并使用aci_gatt_read_using_charac_uuid()设备名称(uuid 0x2a00)读取我认为的特征。

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_handleandend_handle参数是什么aci_gatt_read_using_charac_uuid(),它返回ERR_INVALID_HCI_CMD_PARAMS.

有人可以在这里阐明一下吗?

更新
让我感到困惑的是,BlueNRG-MS 编程指南aci_gatt_read_using_charac_uuid()中没有提到该函数。

update2
我将函数调用更改为,aci_gatt_read_using_charac_uuid(cc->handle, 0x0001, 0xffff, UUID_TYPE_16, (uint8_t*)&uuid);但我仍然得到ERR_INVALID_HCI_CMD_PARAMS. 哪个参数甚至可能无效?uuid 存在,如果我将 BlueNRG GUI 与蓝牙加密狗一起使用,我可以读取设备名称。

update3
有没有人使用过这个功能或以某种方式设法从中央设备读取特征?我非常感谢任何帮助或提示。

4

2 回答 2

1

给你,BlueNRG-MS 蓝牙® LE 堆栈应用程序命令接口 (ACI) - 用户手册

第75 - 4.6.25页Aci_Gatt_Read_Charac_Using_UUID() 并确保您已致电Aci_Gatt_Init()

用户手册最后一次修订是2019年7月,你链接的文件是2018年的,不知道是不是这个原因?

start_handle和是您服务中的end_handle句柄范围,如图所示 -

在此处输入图像描述

这是与我能找到的最接近您的问题的讨论

于 2021-07-14T08:03:48.317 回答
0

事实证明,BlueNRG API 中有两个错误。

bluenrg_aci_const.h文件中,OCF 代码OCF_GATT_READ_USING_CHARAC_UUID0x119代替0x109. 在 aci_gatt_read_using_charac_uuid() 函数的实现中,缺少事件设置:

rq.event = EVT_CMD_STATUS;

修补它们解决了这个问题。

于 2021-10-29T07:18:33.960 回答