USB Host Testing
sizeof Device = 40
sizeof Pipe = 96
sizeof Transfer = 64
power up USBHS PHY
ISR: 4004
Port Change
port change: 10001803
connect
ISR: 1004088
Timer0
begin reset
ISR: 408C
Port Change
port change: 10001805
port enabled
ISR: 1004088
Timer0
end recovery
new_Device: 12 Mbit/sec
new_Pipe
new_Control_Transfer
ISR: 4E081
USB Async
Async Followup
Followup 1FFF5420 token=80000200
Followup 1FFF5360 token=100
Followup 1FFF53A0 token=8000
enumeration:
new_Control_Transfer
Followup 1FFF53E0 token=80280
Followup 1FFF5420 token=80008180
ISR: 4E081
USB Async
Async Followup
Followup 1FFF53E0 token=80000200
Followup 1FFF5420 token=8100
enumeration:
new_Control_Transfer
Followup 1FFF5360 token=80280
Followup 1FFF3580 token=80120180
Followup 1FFF53A0 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF5360 token=80000200
Followup 1FFF3580 token=100
Followup 1FFF53A0 token=8000
enumeration:
new_Control_Transfer
Followup 1FFF53E0 token=80280
Followup 1FFF5420 token=80FC0180
Followup 1FFF5360 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF53E0 token=80000200
Followup 1FFF5420 token=F80100
Followup 1FFF5360 token=8000
enumeration:
new_Control_Transfer
Followup 1FFF3580 token=80280
Followup 1FFF53A0 token=80FC0180
Followup 1FFF53E0 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF3580 token=80000200
Followup 1FFF53A0 token=80F20100
Followup 1FFF53E0 token=8000
enumeration:
Manufacturer string: 0A 03 44 00 65 00 6C 00 6C 00
new_Control_Transfer
Followup 1FFF5420 token=80280
Followup 1FFF5360 token=80FC0180
Followup 1FFF3580 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF5420 token=80000200
Followup 1FFF5360 token=80D00100
Followup 1FFF3580 token=8000
enumeration:
Product string: 2C 03 44 00 65 00 6C 00 6C 00 20 00 55 00 53 00 42 00 20 00 4B 00 65 00 79 00 62 00 6F 00 61 00 72 00 64 00 20 00 48 00 75 00 62 00
new_Control_Transfer
Followup 1FFF53A0 token=80280
Followup 1FFF53E0 token=80090180
Followup 1FFF5420 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF53A0 token=80000200
Followup 1FFF53E0 token=80000100
Followup 1FFF5420 token=8000
enumeration:
Config data length = 25
new_Control_Transfer
Followup 1FFF5360 token=80280
Followup 1FFF3580 token=80190180
Followup 1FFF53A0 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF5360 token=80000200
Followup 1FFF3580 token=80000100
Followup 1FFF53A0 token=8000
enumeration:
bNumInterfaces = 1
bConfigurationValue = 1
new_Control_Transfer
Followup 1FFF53E0 token=80280
Followup 1FFF5360 token=80008180
ISR: 4E081
USB Async
Async Followup
Followup 1FFF53E0 token=80000200
Followup 1FFF5360 token=8100
enumeration:
======== Claim Drivers: 09 04 00 00 01 09 00 00 02 07 05 81 03 01 00 18
USBHub memory usage = 928
USBHub claim_device this=1FFF36C0
polling interval = 24
7
5
81
1
bDeviceClass = 9
bDeviceSubClass = 0
bDeviceProtocol = 0
new_Control_Transfer
===== Driver claimed whole device1FFF36C0
Followup 1FFF3580 token=80280
Followup 1FFF5420 token=80100180
Followup 1FFF53A0 token=80008080
ISR: 4E081
USB Async
Async Followup
Followup 1FFF3580 token=80000200
Followup 1FFF5420 token=80070100
Followup 1FFF53A0 token=8000
USBHub control callback
09 29 03 0D 00 16 64 02 FF 00 00 00 00 00 00 00
Hub ports = 3
new_Control_Transfer
new_Control_Transfer
Followup 1FFF53E0 token=80280
Followup 1FFF3580 token=80008180
Followup 1FFF5420 token=80280
Followup 1FFF3540 token=80008180
ISR: 4E081
USB Async
Async Followup
Followup 1FFF53E0 token=80000200
Followup 1FFF3580 token=8100
USBHub control callback
new_Control_Transfer
Followup 1FFF5420 token=80000200
Followup 1FFF3540 token=8100
USBHub control callback
power turned on to all ports
device addr = 1
new_Pipe
allocate_interrupt_pipe_bandwidth
best_bandwidth = 3
, at offset = 0, shift= 0
add_qh_to_periodic_schedule: 1FFF3460
interval = 16
offset = 0
old slot 0: (empty)
add to slot 0
new slot 0: 1FFF3460
old slot 16: (empty)
add to slot 16
new slot 16: 1FFF3460
Periodic Schedule:
0: 1FFF3460
1: (empty)
2: (empty)
3: (empty)
4: (empty)
5: (empty)
6: (empty)
7: (empty)
8: (empty)
9: (empty)
10: (empty)
11: (empty)
12: (empty)
13: (empty)
14: (empty)
15: (empty)
16: 1FFF3460
17: (empty)
18: (empty)
19: (empty)
20: (empty)
21: (empty)
22: (empty)
23: (empty)
24: (empty)
25: (empty)
26: (empty)
27: (empty)
28: (empty)
29: (empty)
30: (empty)
31: (empty)
pipe cap1 = F0010101
new_Data_Transfer
Followup 1FFF5360 token=80000200
Followup 1FFF53A0 token=8100
USBHub control callback
ISR: 4C081
USB Async
Async Followup
kurt@kurt-UP-CHT01:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0424:2530 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter
Bus 001 Device 003: ID 0424:4603 Standard Microsystems Corp.
Bus 001 Device 007: ID 413c:2006 Dell Computer Corp.
Bus 001 Device 006: ID 413c:1004 Dell Computer Corp.
Bus 001 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
kurt@kurt-UP-CHT01:~$ dmesg | tail -40
...
[ 138.247918] usb 1-3: new full-speed USB device number 6 using xhci_hcd
[ 138.376659] usb 1-3: New USB device found, idVendor=413c, idProduct=1004
[ 138.376670] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 138.376677] usb 1-3: Product: Dell USB Keyboard Hub
[ 138.376683] usb 1-3: Manufacturer: Dell
[ 138.377033] usb 1-3: ep 0x81 - rounding interval to 128 microframes, ep desc says 192 mic roframes
[ 138.378697] hub 1-3:1.0: USB hub found
[ 138.378816] hub 1-3:1.0: 3 ports detected
[ 138.647953] usb 1-3.1: new low-speed USB device number 7 using xhci_hcd
[ 138.741740] usb 1-3.1: New USB device found, idVendor=413c, idProduct=2006
[ 138.741749] usb 1-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 138.741754] usb 1-3.1: Product: Dell USB Keyboard Hub
[ 138.741758] usb 1-3.1: Manufacturer: Dell
[ 138.742042] usb 1-3.1: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 mic roframes
[ 138.742056] usb 1-3.1: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[ 138.783979] usbcore: registered new interface driver usbhid
[ 138.783986] usbhid: USB HID core driver
[ 138.791371] input: Dell Dell USB Keyboard Hub as /devices/pci0000:00/0000:00:14.0/usb1/1- 3/1-3.1/1-3.1:1.0/0003:413C:2006.0001/input/input4
[ 138.844965] hid-generic 0003:413C:2006.0001: input,hidraw0: USB HID v1.10 Keyboard [Dell Dell USB Keyboard Hub] on usb-0000:00:14.0-3.1/input0
[ 138.846643] input: Dell Dell USB Keyboard Hub as /devices/pci0000:00/0000:00:14.0/usb1/1- 3/1-3.1/1-3.1:1.1/0003:413C:2006.0002/input/input5
[ 138.900249] hid-generic 0003:413C:2006.0002: input,hidraw1: USB HID v1.10 Device [Dell De ll USB Keyboard Hub] on usb-0000:00:14.0-3.1/input1
kurt@kurt-UP-CHT01:~$
Also not sure if it matters, but the Port power up messages coming back are in the order: 1, 3, 2. And it creates the pipe when #3 is reported.
static uint32_t lowestbit(uint32_t bitmask)
{
return 31 - __builtin_clz(bitmask);
}
void setup() {
while (!Serial) ;
Serial.begin(115200);
}
void loop() {
Serial.printf("using clz: %d\n", 31 - __builtin_clz(6));
Serial.printf("using ctz: %d\n", __builtin_ctz(6));
delay(5000);
}
using clz: 2
using ctz: 1
09 29 04 E9 00 32 64 00 FF 00 00 00 00 00 00 00
Port:0 Mesg: 290006A0
Hub ports = 4
new_Control_Transfer
if (send_pending_poweron) {
send_poweron(lowestbit(send_pending_poweron));
void USBHub::send_poweron(uint32_t port)
{
if (port == 0 || port > numports) return;
if (can_send_control_now()) {
mk_setup(setup, 0x23, 3, 8, port, 0);
queue_Control_Transfer(device, &setup, NULL, this);
send_pending_poweron &= ~(1 << (MAXPORTS - port));
} else {
send_pending_poweron |= (1 << (MAXPORTS - port));
}
}
61c: fa91 f1a1 rbit r1, r1
620: fab1 f181 clz r1, r1
Just did a quick check. The compiler is using 2 single cycle instructions for __builtin_ctz.
Code:61c: fa91 f1a1 rbit r1, r1 620: fab1 f181 clz r1, r1
Twice the time as clz, but still plenty fast enough!
void setup() {
while (!Serial);
uint8_t mask;
for (uint32_t i=1; i <= 7; i++) {
Serial.print(i);
Serial.print(" -> ");
uint8_t bitmask = (1 << i);
Serial.print(bitmask, HEX);
Serial.print(" -> ");
uint32_t n = 31 - __builtin_clz((uint32_t)bitmask);
Serial.println(n);
}
Serial.print("mask=0 -> ");
uint32_t n = 31 - __builtin_clz((uint32_t)0);
Serial.println(n);
}
void loop() {
}
1 -> 2 -> 1
2 -> 4 -> 2
3 -> 8 -> 3
4 -> 10 -> 4
5 -> 20 -> 5
6 -> 40 -> 6
7 -> 80 -> 7
mask=0 -> 4294967295
case 0x00080323: // power turned on
if (port == numports && changepipe == NULL) {
println("power turned on to all ports");
println("device addr = ", device->address);
changepipe = new_Pipe(device, 3, endpoint, 1, 1, interval);
println("pipe cap1 = ", changepipe->qh.capabilities[0], HEX);
changepipe->callback_function = callback;
queue_Data_Transfer(changepipe, &changebits, 1, this);
// See if this device is in the removable list?
for (uint32_t i=1; i <= numports; i++) {
if (hub_desc[7] & (1 << i)) {
println("Device Removable: ", i);
send_enable(i);
}
}
}
Serial.printf("using clz: %d\n", 31 - __builtin_clz(0xc));
Serial.printf("using ctz: %d\n", __builtin_ctz(0xc));
using clz: 3
using ctz: 2
case 0x00080323: // power turned on
if (port == numports && changepipe == NULL) {
println("power turned on to all ports");
println("device addr = ", device->address);
changepipe = new_Pipe(device, 3, endpoint, 1, 1, interval);
Is not correct as we have not yet turned on #2...
@Paul, I am currently checking out a Keyboard that does not work. ... What is interesting is that this keyboard has a built in USB hub. .... so don't know yet if this is unique to this keyboard.
- It works! - I edited into my version...I just found a bug in the hub driver which might be responsible for that keyboard (and probably many other things) not working with hubs.
Please give this fix a try.
https://github.com/PaulStoffregen/USBHost_t36/commit/5ea0d568a1851cb5ffc3cc57426c95b4d8a91ec2
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i0 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Keyboard), ; Keyboard (06h, application collection)
Collection (Application),
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value)
Usage Maximum (KB Right GUI), ; Keyboard right GUI (E7h, dynamic value)
Logical Minimum (0),
Logical Maximum (1),
Report Count (8),
Report Size (1),
Input (Variable),
Report Count (8),
Report Size (1),
Input (Constant),
Usage Page (LED), ; LEDs (08h)
Usage Minimum (01h),
Usage Maximum (03h),
Report Count (3),
Report Size (1),
Output (Variable),
Report Count (1),
Report Size (5),
Output (Constant),
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (None), ; No event (00h, selector)
Usage Maximum (FFh),
Logical Minimum (0),
Logical Maximum (255),
Report Count (6),
Report Size (8),
Input,
End Collection
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i1 | grep -v : | xxd -r -p | hidrd-convert -o spec Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Sys Control), ; System control (80h, application collection)
Collection (Application),
Report ID (1),
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage Minimum (Sys Power Down), ; System power down (81h, one-shot control)
Usage Maximum (Sys Menu Exit), ; System menu exit (88h, one-shot control)
Logical Minimum (0),
Logical Maximum (1),
Report Count (8),
Report Size (1),
Input (Variable),
End Collection,
Usage Page (Consumer), ; Consumer (0Ch)
Usage (Consumer Control), ; Consumer control (01h, application collection)
Collection (Application),
Report ID (2),
Logical Minimum (0),
Logical Maximum (1),
Usage (AL Consumer Control Config), ; AL consumer control configuration (0183h, selector )
Usage (Play Pause), ; Play/pause (CDh, one-shot control)
Usage (Stop), ; Stop (B7h, one-shot control)
Usage (Volume Inc), ; Volume increment (E9h, re-trigger control)
Usage (Volume Dec), ; Volume decrement (EAh, re-trigger control)
Usage (Mute), ; Mute (E2h, on/off control)
Usage (Scan Previous Track), ; Scan previous track (B6h, one-shot control)
Usage (Scan Next Track), ; Scan next track (B5h, one-shot control)
Usage (AL Email Reader), ; AL email reader (018Ah, selector)
Usage (AL Calculator), ; AL calculator (0192h, selector)
Usage (AL Local Machine Brwsr), ; AL local machine browser (0194h, selector)
Usage (AC Search), ; AC search (0221h, selector)
Usage (AC Home), ; AC home (0223h, selector)
Usage (AC Back), ; AC back (0224h, selector)
Usage (AC Forward), ; AC forward (0225h, selector)
Usage (AC Stop), ; AC stop (0226h, selector)
Usage (AC Refresh), ; AC refresh (0227h, selector)
Usage (AC Bookmarks), ; AC bookmarks (022Ah, selector)
Report Count (18),
Report Size (1),
Input (Variable),
Report Count (1),
Report Size (6),
Input (Constant),
End Collection,
Usage Page (Button), ; Button (09h)
Usage (01h),
Collection (Application),
Report ID (3),
Logical Minimum (0),
Logical Maximum (1),
Usage (2Ch),
Usage (18h),
Usage (20h),
Usage (1Fh),
Usage (1Ch),
Usage (3Dh),
Usage (41h),
Usage (42h),
Usage (43h),
Usage (46h),
Report Count (10),
Report Size (1),
Input (Variable),
Report Count (1),
Report Size (6),
Input (Constant),
End Collection
kurt@kurt-UP-CHT01:~$
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i0 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Keyboard), ; Keyboard (06h, application collection)
Collection (Application),
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value)
Usage Maximum (KB Right GUI), ; Keyboard right GUI (E7h, dynamic value)
Logical Minimum (0),
Logical Maximum (1),
Report Size (1),
Report Count (8),
Input (Variable),
Input (Constant, Variable),
Report Count (5),
Usage Page (LED), ; LEDs (08h)
Usage Minimum (01h),
Usage Maximum (05h),
Output (Variable),
Report Count (1),
Report Size (3),
Output (Constant),
Report Count (6),
Report Size (8),
Logical Minimum (0),
Logical Maximum (164),
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (None), ; No event (00h, selector)
Usage Maximum (KB ExSel), ; Keyboard ExSel (A4h, selector)
Input,
End Collection
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i1 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Mouse), ; Mouse (02h, application collection)
Collection (Application),
Report ID (2),
Usage (Pointer), ; Pointer (01h, physical collection)
Collection (Physical),
Usage Page (Button), ; Button (09h)
Usage Minimum (01h),
Usage Maximum (08h),
Logical Minimum (0),
Logical Maximum (1),
Report Count (8),
Report Size (1),
Input (Variable),
Usage Page (Desktop), ; Generic desktop controls (01h)
Logical Minimum (-2047),
Logical Maximum (2047),
Report Size (12),
Report Count (2),
Usage (X), ; X (30h, dynamic value)
Usage (Y), ; Y (31h, dynamic value)
Input (Variable, Relative),
Logical Minimum (-127),
Logical Maximum (127),
Report Size (8),
Report Count (1),
Usage (Wheel), ; Wheel (38h, dynamic value)
Input (Variable, Relative),
Usage Page (Consumer), ; Consumer (0Ch)
Usage (AC Pan), ; AC pan (0238h, linear control)
Report Count (1),
Input (Variable, Relative),
End Collection,
End Collection,
Usage Page (Consumer), ; Consumer (0Ch)
Usage (Consumer Control), ; Consumer control (01h, application collection)
Collection (Application),
Report ID (3),
Report Size (16),
Report Count (2),
Logical Minimum (1),
Logical Maximum (652),
Usage Minimum (Consumer Control), ; Consumer control (01h, application collection)
Usage Maximum (AC Send), ; AC send (028Ch, selector)
Input (No Preferred, Null State),
End Collection,
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Sys Control), ; System control (80h, application collection)
Collection (Application),
Report ID (4),
Report Size (2),
Report Count (1),
Logical Minimum (1),
Logical Maximum (3),
Usage (Sys Sleep), ; System sleep (82h, one-shot control)
Usage (Sys Power Down), ; System power down (81h, one-shot control)
Usage (Sys Wake Up), ; System wake up (83h, one-shot control)
Input (No Preferred, Null State),
Report Size (6),
Input (Constant, Variable),
End Collection,
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (01h),
Collection (Application),
Report ID (16),
Report Size (8),
Report Count (6),
Logical Minimum (0),
Logical Maximum (255),
Usage (01h),
Input,
Usage (01h),
Output,
End Collection,
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (02h),
Collection (Application),
Report ID (17),
Report Size (8),
Report Count (19),
Logical Minimum (0),
Logical Maximum (255),
Usage (02h),
Input,
Usage (02h),
Output,
End Collection
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i2 | grep -v : | xxd -r -p | hidrd-convert -o spec
No matching HID interfaces
kurt@kurt-UP-CHT01:~$
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i0 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Keyboard), ; Keyboard (06h, application collection)
Collection (Application),
Usage Page (LED), ; LEDs (08h)
Usage Minimum (01h),
Usage Maximum (03h),
Logical Minimum (0),
Logical Maximum (1),
Report Size (1),
Report Count (3),
Output (Variable),
Report Count (5),
Output (Constant),
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (KB Leftcontrol), ; Keyboard left control (E0h, dynamic value)
Usage Maximum (KB Right GUI), ; Keyboard right GUI (E7h, dynamic value)
Report Count (8),
Input (Variable),
Report Size (8),
Report Count (1),
Input (Constant),
Usage Minimum (None), ; No event (00h, selector)
Usage Maximum (KB LANG2), ; Keyboard LANG2 (91h, selector)
Logical Maximum (255),
Report Count (6),
Input,
End Collection
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i1 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Mouse), ; Mouse (02h, application collection)
Collection (Application),
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Mouse), ; Mouse (02h, application collection)
Collection (Logical),
Report ID (26),
Usage (Pointer), ; Pointer (01h, physical collection)
Collection (Physical),
Usage Page (Button), ; Button (09h)
Usage Minimum (01h),
Usage Maximum (05h),
Report Count (5),
Report Size (1),
Logical Minimum (0),
Logical Maximum (1),
Input (Variable),
Report Size (3),
Report Count (1),
Input (Constant),
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (X), ; X (30h, dynamic value)
Usage (Y), ; Y (31h, dynamic value)
Report Count (2),
Report Size (16),
Logical Minimum (-32767),
Logical Maximum (32767),
Input (Variable, Relative),
Collection (Logical),
Report ID (18),
Usage (Resolution Multiplier), ; Resolution multiplier (48h, dynamic value)
Report Count (1),
Report Size (2),
Logical Minimum (0),
Logical Maximum (1),
Physical Minimum (1),
Physical Maximum (12),
Feature (Variable),
Report ID (26),
Usage (Wheel), ; Wheel (38h, dynamic value)
Physical Minimum (0),
Physical Maximum (0),
Report Count (1),
Report Size (16),
Logical Minimum (-32767),
Logical Maximum (32767),
Input (Variable, Relative),
End Collection,
Collection (Logical),
Report ID (18),
Usage (Resolution Multiplier), ; Resolution multiplier (48h, dynamic value)
Report Size (2),
Logical Minimum (0),
Logical Maximum (1),
Physical Minimum (1),
Physical Maximum (12),
Feature (Variable),
Physical Minimum (0),
Physical Maximum (0),
Report Size (4),
Feature (Constant),
Report ID (26),
Usage Page (Consumer), ; Consumer (0Ch)
Report Count (1),
Report Size (16),
Logical Minimum (-32767),
Logical Maximum (32767),
Usage (AC Pan), ; AC pan (0238h, linear control)
Input (Variable, Relative),
End Collection,
End Collection,
End Collection,
End Collection,
Usage Page (Consumer), ; Consumer (0Ch)
Usage (Consumer Control), ; Consumer control (01h, application collection)
Collection (Application),
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Mouse), ; Mouse (02h, application collection)
Collection (Logical),
Report ID (31),
Usage Page (Consumer), ; Consumer (0Ch)
Usage (AC Pan), ; AC pan (0238h, linear control)
Report Count (1),
Report Size (16),
Logical Minimum (-32767),
Logical Maximum (32767),
Input (Variable, Relative),
Report ID (23),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FF06h),
Usage (FF0Fh),
Logical Minimum (0),
Logical Maximum (1),
Physical Minimum (1),
Physical Maximum (12),
Report Count (2),
Report Size (2),
Feature (Variable),
Usage (FF04h),
Physical Minimum (0),
Physical Maximum (0),
Report Count (1),
Report Size (1),
Feature (Variable),
Report Size (3),
Feature (Constant),
End Collection,
End Collection
kurt@kurt-UP-CHT01:~$ sudo usbhid-dump -i2 | grep -v : | xxd -r -p | hidrd-convert -o spec
Usage Page (Consumer), ; Consumer (0Ch)
Usage (Consumer Control), ; Consumer control (01h, application collection)
Collection (Application),
Report ID (32),
Usage Page (FF00h), ; FF00h, vendor-defined
Logical Minimum (0),
Logical Maximum (255),
Report Size (8),
Report Count (18),
Usage (FA0Ah),
Feature (Variable),
Report ID (33),
Usage Page (FF00h), ; FF00h, vendor-defined
Logical Minimum (0),
Logical Maximum (1),
Report Size (1),
Report Count (16),
Usage Minimum (FA10h),
Usage Maximum (FA1Fh),
Input (Variable),
Report ID (40),
Usage Page (FF00h), ; FF00h, vendor-defined
Report Size (1),
Report Count (24),
Usage Minimum (FA10h),
Usage Maximum (FA1Fh),
Feature (Variable),
Report ID (34),
Usage Page (FF00h), ; FF00h, vendor-defined
Logical Minimum (0),
Logical Maximum (255),
Report Size (8),
Report Count (26),
Usage (FA0Ah),
Feature (Variable),
Report ID (35),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (162),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (163),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (36),
Usage Page (FF00h), ; FF00h, vendor-defined
Report Count (31),
Usage (FA0Ah),
Feature (Variable),
Report ID (37),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (164),
Usage Page (FF00h), ; FF00h, vendor-defined
Report Count (31),
Usage (FA0Ah),
Feature (Variable),
Report ID (165),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (38),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Feature (Variable),
Report ID (39),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FA0Ah),
Input (Variable),
End Collection,
Usage Page (Consumer), ; Consumer (0Ch)
Usage (Consumer Control), ; Consumer control (01h, application collection)
Collection (Application),
Report ID (7),
Usage Page (Consumer), ; Consumer (0Ch)
Usage Minimum (00h),
Usage Maximum (03FFh),
Report Count (1),
Report Size (16),
Logical Minimum (0),
Logical Maximum (1023),
Input,
Usage Page (Keyboard), ; Keyboard/keypad (07h)
Usage Minimum (None), ; No event (00h, selector)
Usage Maximum (FFh),
Report Size (8),
Logical Maximum (255),
Input,
Input (Constant),
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (FE03h),
Usage (FE04h),
Report Size (1),
Report Count (2),
Logical Maximum (1),
Input (Variable),
Usage (FF05h),
Report Count (1),
Report Size (5),
Logical Maximum (31),
Input (Variable),
Report Size (1),
Input (Constant),
Usage Minimum (FD01h),
Usage Maximum (FDFFh),
Logical Minimum (1),
Logical Maximum (255),
Report Size (8),
Input,
Usage (FF02h),
Logical Maximum (255),
Logical Minimum (0),
Input (Variable),
End Collection,
Usage Page (Desktop), ; Generic desktop controls (01h)
Usage (Sys Control), ; System control (80h, application collection)
Collection (Application),
Report ID (3),
Usage Minimum (00h),
Usage Maximum (FFh),
Logical Minimum (0),
Logical Maximum (255),
Input,
End Collection
kurt@kurt-UP-CHT01:~$