IOHIDManager API を使用して、マウス (Magic Apple Mouse) の X、Y、button1、Button2 などの Mac OsX 上のデバイスの HID レポートからデータを読み取ろうとしています。
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、ホイール、Btn1 | Btn2 | Btn3 | Btn4、ARMD
これは、記述子から Linux で提供された RAW 情報です。
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 を使用する方法をよりよく理解していますか?