gpt4 book ai didi

linux - IOHIDManager OsX : wrong match between HID descriptor and HID report?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:30 29 4
gpt4 key购买 nike

我正在尝试使用 IOHIDManager API 从 Mac OsX 上的设备的 HID 报告中读取数据,例如鼠标的 X、Y、button1、Button2(Magic Apple Mouse)

使用 API,我可以动态读取描述符,但有几个问题:- API 没有从描述符中提供我需要的所有信息:例如,我没有找到有关填充位的信息! ...我必须自己计算填充才能正确构建我的结构。- API 没有按照描述符或 HID 报告的顺序提供功能(X、Y、btn1 ...)!那么我怎么知道读取 HID 报告的正确顺序!?

所以我没有与 HID 报告数据正确匹配。

这是 OsX API 从描述符中向我提供的信息。

device 0x7f94f4804c70 is Apple Optical USB Mouse (vendor 5ac), max report size 6 
nb element descriptor : 11
element (usage name) Generic Desktop item 0002
element (usage name) Generic Desktop item 0001
element (usage name) X
element (usage name) Y
element (usage name) Z
element (usage name) Wheel
element (usage name) Button 1
element (usage name) Button 2
element (usage name) Button 3
element (usage name) Button 4
element (usage name) Apple Reserved Mouse Data

所以我构建了一个结构:X, Y, Z, Wheel, Btn1|Btn2|Btn3|Btn4, ARMD

这是从描述符中向我提供的 Linux 上的原始信息。

0x05, 0x01,                    // Usage Page (Generic Desktop)        0
0x09, 0x02, // Usage (Mouse) 2
0xa1, 0x01, // Collection (Application) 4
0x05, 0x09, // Usage Page (Button) 6
0x19, 0x01, // Usage Minimum (1) 8
0x29, 0x04, // Usage Maximum (4) 10
0x15, 0x00, // Logical Minimum (0) 12
0x25, 0x01, // Logical Maximum (1) 14
0x95, 0x04, // Report Count (4) 16
0x75, 0x01, // Report Size (1) 18
0x81, 0x02, // Input (Data,Var,Abs) 20
0x95, 0x01, // Report Count (1) 22
0x75, 0x04, // Report Size (4) 24
0x81, 0x01, // Input (Cnst,Arr,Abs) 26
0x05, 0x01, // Usage Page (Generic Desktop) 28
0x09, 0x01, // Usage (Pointer) 30
0xa1, 0x00, // Collection (Physical) 32
0x09, 0x30, // Usage (X) 34
0x09, 0x31, // Usage (Y) 36
0x09, 0x32, // Usage (Z) 38
0x09, 0x38, // Usage (Wheel) 40
0x15, 0x81, // Logical Minimum (-127) 42
0x25, 0x7f, // Logical Maximum (127) 44
0x75, 0x08, // Report Size (8) 46
0x95, 0x04, // Report Count (4) 48
0x81, 0x06, // Input (Data,Var,Rel) 50
0xc0, // End Collection 52
0x05, 0xff, // Usage Page (Vendor Usage Page 0xff) 53
0x09, 0xc0, // Usage (Vendor Usage 0xc0) 55
0x75, 0x08, // Report Size (8) 57
0x95, 0x01, // Report Count (1) 59
0x81, 0x02, // Input (Data,Var,Abs) 61
0xc0, // End Collection 63

所以我可以构建一个结构:Btn1|Btn2|Btn3|Btn4|0|0|0|0, X, Y, Z, Wheel, ARMD

从那里,基于 OsX API,我正在构建一个几乎相同的结构(包括填充位)来“匹配”HID 报告。所以我有:X,Y,Z,轮,Btn1|Btn2|Btn3|Btn4|0|0|0|0,ARMD

我订阅了 HID 报告并解析它,因为它应该适合我的结构...但事实并非如此

这是我在 OsX 上单击 Btn1 时得到的结果:

device : 0x7fe609007500, id: 0 ---  01  00  00  00  00  00  size - 48
X : 1 Y : 0 Z : 0 Wheel : 0 Button 1 : 0 Button 2 : 0 Button 3 : 0 Button 4 : 0 ARMData : 0

报告告诉我 X=1!!!!

这里,这是我在 Linux 上的

2.384001  B1: 1 | B2: 0 | B3: 0 | B4: 0 | # | X:    0 | Y:    0 | Z:    0 | Wheel:    0 | 0xff00c0: -127

该程序适用于除 Magic Apple Mouse 之外的一些鼠标设备,但我在其他设备上也遇到了类似的问题... API 为我提供了错误顺序的功能和部分信息!

有什么我不明白的地方吗?有人有同样的问题或者更好地了解如何在 OSX 上使用 HID API 吗?

最佳答案

我没有使用此 API 的经验,因此这个答案可能不切实际。另外,我发现你的问题有点令人困惑。

听起来您正在使用 IOHIDManager API并且无法确定来自 USB 设备的某些 HID 报告的确切位结构。

我怀疑确切的位结构正是应该由像这样的高级 API 从您那里抽象出来的那种细节。为什么需要知道确切的结构?您可以只使用 IOHIDManagerRegisterInputValueCallback 从设备读取数据吗?

关于linux - IOHIDManager OsX : wrong match between HID descriptor and HID report?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20978362/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com