问题描述
我坚持使用 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 (将#修改为@)