Windows上自定义开发的蓝牙鼠标的问题
我一直在做一个模拟蓝牙HID设备的小项目,它基于嵌入式linux、Bluez和python实现的代码。这个想法是寻找键盘和鼠标设备上的输入事件,解析它并转发给蓝牙主机。除了在Windows上的鼠标行为外,一切正常 在Android和Linux的目标系统上,鼠标表现得很好:按钮、滚动和移动都按预期工作。但是,在Windows目标上,观察到以下情况:Windows上自定义开发的蓝牙鼠标的问题,windows,bluetooth,mouse,hid,Windows,Bluetooth,Mouse,Hid,我一直在做一个模拟蓝牙HID设备的小项目,它基于嵌入式linux、Bluez和python实现的代码。这个想法是寻找键盘和鼠标设备上的输入事件,解析它并转发给蓝牙主机。除了在Windows上的鼠标行为外,一切正常 在Android和Linux的目标系统上,鼠标表现得很好:按钮、滚动和移动都按预期工作。但是,在Windows目标上,观察到以下情况: 跳跃的动作,即使是最轻微的动作,我。e、 ,发送带有单位移动的报告会产生许多像素的光标移动 我认为卷轴是不负责任的。e、 ,在物理鼠标上滚动会生成输入
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application)
0x85, 0x01, // Report ID (1)
0xA1, 0x00, // Collection (Physical)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0xE0, // Usage Minimum (0xE0)
0x29, 0xE7, // Usage Maximum (0xE7)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x08, // Report Count (8)
0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x65, // Logical Maximum (101)
0x05, 0x07, // Usage Page (Kbrd/Keypad)
0x19, 0x00, // Usage Minimum (0x00)
0x29, 0x65, // Usage Maximum (0x65)
0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x02, // Usage (Mouse)
0xA1, 0x01, // Collection (Application)
0x85, 0x02, // Report ID (2)
0x09, 0x01, // Usage (Pointer)
0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Button)
0x19, 0x01, // Usage Minimum (0x01)
0x29, 0x03, // Usage Maximum (0x03)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x03, // Report Count (3)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x75, 0x05, // Report Size (5)
0x95, 0x01, // Report Count (1)
0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x09, 0x38, // Usage (Wheel)
0x15, 0x81, // Logical Minimum (-127)
0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8)
0x95, 0x03, // Report Count (3)
0x81, 0x06, // Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
// 104 bytes
发现了问题。实际上有一些 首先,蓝牙配置文件的服务记录(未发布在原始帖子上)格式不正确:它在属性0x0009(BluetoothProfileDescriptorList)上存在问题,该属性未正确设置应设置的内容:根据人机界面设备配置文件1.1蓝牙规范,配置文件版本。一旦我做对了,鼠标就开始工作了,但键盘又在我身上停了下来 然后,我注意到我正在使用的样板HID描述符期望我在读取时为活动密钥发送8个字节(参见原始帖子): 我只发送了6个字节的报告。在我得到正确答案后,windows正确地接受了鼠标和键盘的输入 毕竟,Linux的HIDP实现似乎比windows的更为宽松
(从自定义键盘和鼠标组合设备本身键入:D)我认为您需要更具体,并尽可能缩小问题范围。如果问题发生在Windows上,那么您可能应该标记此Windows,而不是Linux。当然,我的错误。我进入了“嵌入式linux”,旨在描述开发环境,但这确实是一种误导。编辑好了,谢谢!
...
0x95, 0x08, // Report Count (8)
0x75, 0x08, // Report Size (8)
...