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

Bluetooth 如何处理报告地图并从蓝牙键盘读取按键?,bluetooth,bluetooth-lowenergy,keyboard-events,esp32,hid,Bluetooth,Bluetooth Lowenergy,Keyboard Events,Esp32,Hid,我被一个带有ESP32微控制器的BLE键盘到PS2适配器的项目困住了。对于可编辑的部分,我使用。我的蓝牙键盘是微软Surface人体工程学键盘。我以前没有使用BLE的经验 以下是蓝牙键盘的服务及其特点: 0x1800: Generic Access Characteristics: 0x2a00: Device Name 0x2a01: Appearance 0x2a04: Peripherial Preferred Connection Par

我被一个带有ESP32微控制器的BLE键盘到PS2适配器的项目困住了。对于可编辑的部分,我使用。我的蓝牙键盘是微软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服务的“报告映射”特性,并读取其描述报告的值。价值的意义

我不知道该如何处理这些信息。我想我以后需要这些信息来解释输入的按键报告。然而,我不知道如何接收它们

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


如何从设备读取报告?它们显然不是通知。

你说的“我无法注册通知”是什么意思?你有错误吗?在这种情况下有什么错误?嗨,谢谢你的问题。在为通知注册回调函数之前,我检查了灵活函数blemoteCharacteristic::canNotify,如果可以的话。这是对关贸总协定结构的适当比特属性的测试。我现在跳过了那个测试,并尝试注册:它有效,我更新了我的问题。我是否应该收到按键通知?我只是想知道我该往哪个方向走。
0x05, 0x01 -> Usage Page (Generic Desktop)
0x09, 0x06 -> Usage (Keyboard)
0xA1, 0x01 -> Collection (Application)
0x85, 0x01 -> ???
0x15       -> Logical Minimum? (0)