微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理报告地图并从蓝牙键盘读取按键?

如何解决如何处理报告地图并从蓝牙键盘读取按键?

我坚持使用 ESP32 微控制器进行 BLE 键盘到 PS2 适配器的项目。对于 BLE 部分,我使用 NimBLE library。我的蓝牙键盘是 Microsoft Surface 人体工学键盘。我以前没有使用 BLE 的经验。

这些是蓝牙键盘的服务及其特点:

 0x1800: Generic Access
      characteristics:
      0x2a00: Device Name
      0x2a01: Appearance
      0x2a04: Peripherial Preferred Connection Parameters
    0x1801: Generic Attribute
    0x180a: Device information
      characteristics:
      0x2a29: Manifacturer Name
      0x2a50: PNP Id
    0x180f: Battery Service
      Characteristic:
      0x2a19: Battery Level
    0x1812: HID Service
      characteristics:
      0x2a4e: Protocol Mode
      0x2a4d: Report
      0x2a4b: Report Map
      0x2a22: Boot Keyboard Input Report
      0x2a32: Boot Keyboard Output Report
      0x2a4a: HID information
      0x2a4c: HID Control Point

当我找到它并通过输入PIN配对后,我可以成功读取电池电量并在它发生变化时收到通知,所以我得到了配对、通知注册和读取特征值。

现在我显然想阅读按键操作。我采用 HID 服务的“报告地图”特征并读取其描述报告的值。值 here in section E.6 的含义。

0x05,0x01 -> Usage Page (Generic Desktop)
0x09,0x06 -> Usage (Keyboard)
0xA1,0x01 -> Collection (Application)
0x85,0x01 -> ???
0x15       -> Logical Minimum? (0)

我不知道如何处理这些信息。我想我稍后会需要它来解释传入的按键报告。但是,我不知道如何接收它们。

我继续使用“报告”特性,因为我认为这是按键输入的地方? 我读取了特性的值:它的句柄为 0x0047,值为 0x78。我注册通知。 然后我第二次得到相同的特征,现在它有句柄 0x0016,相同的值和值为 1 的 2902 描述符(意味着它处于报告模式而不是启动模式)。我再次注册接收通知,但我按下按键时没有收到通知

我如何从设备读取报告?它们显然不是作为通知发出的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。