Teensy 4.1 USB-Host USB-Hub Mouse-Keyboard Problem

there is stuff in my hid_info branch that was working yesterday... did not fix hub issue. but you might give a try
 
Last edited:
Hey, I have taken a look. Thank you very much for all the help.
Were you able to look into the USB Hub stuff too yet?
 
Hub - I have looked, so far, I know that the hub with other keyboard was causing a screwed-up transfer list...
(Loops) - Something prorbably @PaulStoffregen needs to look at soon.

Right now I am trying to figure out why a Gigabyte keyboard at times crashes the teensy at startup...

Running the HIDDumper from Master banch with the only change is to print out crashreport.

With Debug turned on (other change)
Code:
USB HID Device Info Program

This Sketch shows information about plugged in HID devices

*** You can control the output by simple character input to Serial ***
R - Turns on or off showing the raw data
C - Toggles showing changed data only on or off
<anything else> - toggles showing the Hid formatted breakdown of the data

USB2 PLL running
reset waited 6
USBHS_ASYNCLISTADDR = 0
USBHS_PERIODICLISTBASE = 20006000
periodictable = 20006000
port change: 10001803
connect
begin reset
port change: 10001005
port enabled
end recovery
new_Device: 12 Mbit/sec
new_Pipe
enumeration:
enumeration:
ERROR Followup
remove from followup list
remove from followup list
CrashReport:
A problem occurred at (system time) 12:9:25
Code was executing from address 0x3EB2
CFSR: 82
(DACCVIOL) Data Access Violation
(MMARVALID) Accessed Address: 0x10 (nullptr)
Check code at 0x3EB2 - very likely a bug!
Run "addr2line -e mysketch.ino.elf 0x3EB2" for filename & line number.
Temperature inside the chip was 47.92 °C
Startup CPU clock speed is 600MHz
Reboot was caused by auto reboot after fault or bad interrupt detected

Without debug on, and where after it reboots it runs:
Code:
USB HID Device Info Program

This Sketch shows information about plugged in HID devices

*** You can control the output by simple character input to Serial ***
R - Turns on or off showing the raw data
C - Toggles showing changed data only on or off
<anything else> - toggles showing the Hid formatted breakdown of the data

CrashReport:
A problem occurred at (system time) 11:23:5
Code was executing from address 0x3DB6
CFSR: 82
(DACCVIOL) Data Access Violation
(MMARVALID) Accessed Address: 0x10 (nullptr)
Check code at 0x3DB6 - very likely a bug!
Run "addr2line -e mysketch.ino.elf 0x3DB6" for filename & line number.
Temperature inside the chip was 47.30 °C
Startup CPU clock speed is 600MHz
Reboot was caused by auto reboot after fault or bad interrupt detected


USB HID Device Info Program

This Sketch shows information about plugged in HID devices

*** You can control the output by simple character input to Serial ***
R - Turns on or off showing the raw data
C - Toggles showing changed data only on or off
<anything else> - toggles showing the Hid formatted breakdown of the data


USBDeviceInfo claim this=2000DB68

****************************************
** Device Level **
vid=4D9
pid=A06B
bDeviceClass = 0
bDeviceSubClass = 0
bDeviceProtocol = 0
09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 3B 00 07 05 81 03 08 00 08 09 04 01 00 01 03 00
00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00 00 00 09 21 10 01 00
01 22 25 00 07 05 83 03 10 00 01 

USBDeviceInfo claim this=2000DB68

****************************************
** Interface Level **
09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 3B 00 07 05 81 03 08 00 08 09 04 01 00 01 03 00
00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00 00 00 09 21 10 01 00
01 22 25 00 07 05 83 03 10 00 01 
bInterfaceNumber = 0
number end points = 1
bInterfaceClass = 3
bInterfaceSubClass = 1
HID (BOOT)
bInterfaceProtocol = 1
Keyboard
report descriptor size = 59
endpoint = 81
attributes = 3 Interrupt
size = 8
interval = 8

USBDeviceInfo claim this=2000DB68

****************************************
** Interface Level **
09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00
00 00 09 21 10 01 00 01 22 25 00 07 05 83 03 10 00 01 
bInterfaceNumber = 1
number end points = 1
bInterfaceClass = 3
bInterfaceSubClass = 0
HID
bInterfaceProtocol = 0
None
report descriptor size = 81
endpoint = 82
attributes = 3 Interrupt
size = 16
interval = 8

USBDeviceInfo claim this=2000DB68

****************************************
** Interface Level **
09 04 02 00 01 03 00 00 00 09 21 10 01 00 01 22 25 00 07 05 83 03 10 00 01 
bInterfaceNumber = 2
number end points = 1
bInterfaceClass = 3
bInterfaceSubClass = 0
HID
bInterfaceProtocol = 0
None
report descriptor size = 37
endpoint = 83
attributes = 3 Interrupt
size = 16
interval = 1
*** Device HID1 4d9:a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard
*** Device HID2 4d9:a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard
HIDDumpController(1 : 0x200051e0 : 0x2000a640) Claim: 4d9:a06b usage: 10080 - Yes

HID Report Descriptor (0x2000a670) size: 81
05 01 // Usage Page(1) - Generic Desktop
09 80 // Usage(80) -(?)
A1 01 // Collection(1) top Usage(10080)
85 02 // Report ID(2)
19 81 // Usage Minimum(81) - (System Power Down)
29 83 // Usage Maximum(83) - (System Wake Up)
15 00 // Logical Minimum(0)
25 01 // Logical maximum(1)
75 01 // Report Size(1)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
95 05 // Report Count(5)
81 01 // Input(1) // (Constant, Array, Absolute)
C0 // End Collection
05 0C // Usage Page(c) - Consumer
09 01 // Usage(1) -(Consumer Controls)
A1 01 // Collection(1) top Usage(c0000)
85 03 // Report ID(3)
19 00 // Usage Minimum(0) - (?)
2A FF 02 // Usage Maximum(2ff) - (?)
15 00 // Logical Minimum(0)
26 FF 7F // Logical maximum(7fff)
95 01 // Report Count(1)
75 10 // Report Size(10)
81 00 // Input(0) // (Data, Array, Absolute)
C0 // End Collection
06 00 FF // Usage Page(ff00) - Vendor Defined
09 01 // Usage(1) -
A1 01 // Collection(1) top Usage(ff000000)
85 06 // Report ID(6)
15 00 // Logical Minimum(0)
26 FF 00 // Logical maximum(ff)
09 2F // Usage(2f) -
75 08 // Report Size(8)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
09 30 // Usage(30) -
95 07 // Report Count(7)
B1 02 // Feature(2) // (Data, Variable, Absolute)
C0 // End Collection
HIDDumpController(1 : 0x200051e0 : 0x2000a640) Claim: 4d9:a06b usage: c0001 - NO (Usage: 10080)
HIDDumpController(2 : 0x200062c0 : 0x2000a640) Claim: 4d9:a06b usage: c0001 - Yes

HID Report Descriptor (0x2000a670) size: 81
05 01 // Usage Page(1) - Generic Desktop
09 80 // Usage(80) -(?)
A1 01 // Collection(1) top Usage(10080)
85 02 // Report ID(2)
19 81 // Usage Minimum(81) - (System Power Down)
29 83 // Usage Maximum(83) - (System Wake Up)
15 00 // Logical Minimum(0)
25 01 // Logical maximum(1)
75 01 // Report Size(1)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
95 05 // Report Count(5)
81 01 // Input(1) // (Constant, Array, Absolute)
C0 // End Collection
05 0C // Usage Page(c) - Consumer
09 01 // Usage(1) -(Consumer Controls)
A1 01 // Collection(1) top Usage(c0000)
85 03 // Report ID(3)
19 00 // Usage Minimum(0) - (?)
2A FF 02 // Usage Maximum(2ff) - (?)
15 00 // Logical Minimum(0)
26 FF 7F // Logical maximum(7fff)
95 01 // Report Count(1)
75 10 // Report Size(10)
81 00 // Input(0) // (Data, Array, Absolute)
C0 // End Collection
06 00 FF // Usage Page(ff00) - Vendor Defined
09 01 // Usage(1) -
A1 01 // Collection(1) top Usage(ff000000)
85 06 // Report ID(6)
15 00 // Logical Minimum(0)
26 FF 00 // Logical maximum(ff)
09 2F // Usage(2f) -
75 08 // Report Size(8)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
09 30 // Usage(30) -
95 07 // Report Count(7)
B1 02 // Feature(2) // (Data, Variable, Absolute)
C0 // End Collection
HIDDumpController(1 : 0x200051e0 : 0x2000a640) Claim: 4d9:a06b usage: ff000001 - NO (Usage: 10080)
HIDDumpController(2 : 0x200062c0 : 0x2000a640) Claim: 4d9:a06b usage: ff000001 - NO (Usage: c0001)
HIDDumpController(3 : 0x200073a0 : 0x2000a640) Claim: 4d9:a06b usage: ff000001 - Yes

HID Report Descriptor (0x2000a670) size: 81
05 01 // Usage Page(1) - Generic Desktop
09 80 // Usage(80) -(?)
A1 01 // Collection(1) top Usage(10080)
85 02 // Report ID(2)
19 81 // Usage Minimum(81) - (System Power Down)
29 83 // Usage Maximum(83) - (System Wake Up)
15 00 // Logical Minimum(0)
25 01 // Logical maximum(1)
75 01 // Report Size(1)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
95 05 // Report Count(5)
81 01 // Input(1) // (Constant, Array, Absolute)
C0 // End Collection
05 0C // Usage Page(c) - Consumer
09 01 // Usage(1) -(Consumer Controls)
A1 01 // Collection(1) top Usage(c0000)
85 03 // Report ID(3)
19 00 // Usage Minimum(0) - (?)
2A FF 02 // Usage Maximum(2ff) - (?)
15 00 // Logical Minimum(0)
26 FF 7F // Logical maximum(7fff)
95 01 // Report Count(1)
75 10 // Report Size(10)
81 00 // Input(0) // (Data, Array, Absolute)
C0 // End Collection
06 00 FF // Usage Page(ff00) - Vendor Defined
09 01 // Usage(1) -
A1 01 // Collection(1) top Usage(ff000000)
85 06 // Report ID(6)
15 00 // Logical Minimum(0)
26 FF 00 // Logical maximum(ff)
09 2F // Usage(2f) -
75 08 // Report Size(8)
95 03 // Report Count(3)
81 02 // Input(2) // (Data, Variable, Absolute)
09 30 // Usage(30) -
95 07 // Report Count(7)
B1 02 // Feature(2) // (Data, Variable, Absolute)
C0 // End Collection
*** HID Device hdc1 4d9: a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard
*** HID Device hdc2 4d9: a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard
*** HID Device hdc3 4d9: a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard
HIDDumpController(1 : 0x200051e0 : 0x2000ad00) Claim: 4d9:a06b usage: 10006 - NO (Usage: 10080)
HIDDumpController(2 : 0x200062c0 : 0x2000ad00) Claim: 4d9:a06b usage: 10006 - NO (Usage: c0001)
HIDDumpController(3 : 0x200073a0 : 0x2000ad00) Claim: 4d9:a06b usage: 10006 - NO (Usage: ff000001)
HIDDumpController(4 : 0x20008480 : 0x2000ad00) Claim: 4d9:a06b usage: 10006 - Yes

HID Report Descriptor (0x2000ad30) size: 37
05 01 // Usage Page(1) - Generic Desktop
09 06 // Usage(6) -(Keyboard)
A1 01 // Collection(1) top Usage(10000)
05 07 // Usage Page(7) - Keycode
19 E0 // Usage Minimum(e0) - (Left Control)
29 E7 // Usage Maximum(e7) - (Right)
15 00 // Logical Minimum(0)
25 01 // Logical maximum(1)
75 01 // Report Size(1)
95 08 // Report Count(8)
81 02 // Input(2) // (Data, Variable, Absolute)
19 00 // Usage Minimum(0) - (Keycode 0)
29 6F // Usage Maximum(6f) - (F20)
15 00 // Logical Minimum(0)
25 01 // Logical maximum(1)
75 01 // Report Size(1)
95 70 // Report Count(70)
81 02 // Input(2) // (Data, Variable, Absolute)
C0 // End Collection
*** HID Device hdc4 4d9: a06b - connected ***
manufacturer: E-Signal
product: GIGABYTE Keyboard

Note in both places they point to same line of code
Code:
C:\Users\kurte\AppData\Local\Temp\arduino-sketch-7EF54F97E6CB5EA561AC39B4A7F1E5CB>addr2line -e HIDDeviceInfo.ino.elf 0x3DB6
c:\Users\kurte\Documents\Arduino\libraries\USBHost_T36/ehci.cpp:907

Code:
void USBHost::followup_Error(void)
…
                                                                // halted pipe (probably) still has unfinished transfers
                                                                // find the halted pipe's dummy halt transfer[COLOR="#FF0000"]
                                                               [/COLOR] p = (Transfer_t *)(haltedpipe->qh.next & ~0x1F);
Not sure what is going on here either.

Edit: Here is some of my decoded LA capture of when it faults... There may be other low level information as well in capture, but first to look at the decoded stuff
Code:
1.84797154	 SETUP 	 0x0 	 0x0 	 <GET_DESCRIPTOR - DEVICE #:0 I:0x0 L:0x8> 	  0x80 0x6 0x0 0x1 0x0 0x0 0x8 0x0
1.84839974	 IN 	 0x0 	 0x0 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.8484121	 IN 	 0x0 	 0x0 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.84842454	 IN 	 0x0 	 0x0 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.84904922	 SETUP 	 0x0 	 0x0 	 <SET_ADDRESS I:0x0 L:0x0> 	  0x0 0x5 0x1 0x0 0x0 0x0 0x0 0x0
1.85004922	 SETUP 	 0x0 	 0x1 	 <GET_DESCRIPTOR - DEVICE #:0 I:0x0 L:0x12> 	  0x80 0x6 0x0 0x1 0x0 0x0 0x12 0x0
1.8504892	 IN 	 0x0 	 0x1 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.8505092	 IN 	 0x0 	 0x1 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.85052156	 IN 	 0x0 	 0x1 	  	  0x12 0x1 0x0 0x2 0x0 0x0 0x0 0x8
1.85084896	 IN 	 0x0 	 0x1 	  	  0xd9 0x4 0x6b 0xa0 0x2 0x3 0x1 0x2
1.8508639	 IN 	 0x0 	 0x1 	  	  0xd9 0x4 0x6b 0xa0 0x2 0x3 0x1 0x2
1.85097156	 IN 	 0x0 	 0x1 	  	  0xd9 0x4 0x6b 0xa0 0x2 0x3 0x1 0x2
1.8509915	 IN 	 0x0 	 0x1 	  	  0xd9 0x4 0x6b 0xa0 0x2 0x3 0x1 0x2
1.8510039	 IN 	 0x0 	 0x1 	  	  0xd9 0x4 0x6b 0xa0 0x2 0x3 0x1 0x2
1.8511954	 IN 	 0x0 	 0x1 	  	  0x0 0x1

Output from Control report:
Code:
USB RESET Time: 0.

USB RESET Time: 1.6827583

SETUP address: 0x00 time: 1.84797534
	bmRequestType=0x80 Data direction=Device to host, Type=Standard, Recipient=Device
	bRequest=0x06 GET_DESCRIPTOR
	wValue=0x0100 Descriptor=DEVICE, Index=0x00
	wIndex=0x0000
	wLength=0x0008
DATA time: 1.84798656
	<data IN packet NAKed by device. Time: 1.84798972>
	<data IN packet NAKed by device. Time: 1.84799594>
	<data IN packet NAKed by device. Time: 1.84800204>
	<data IN packet NAKed by device. Time: 1.84800824>
	<data IN packet NAKed by device. Time: 1.84801442>
	<data IN packet NAKed by device. Time: 1.84802058>
	<data IN packet NAKed by device. Time: 1.84802668>
	<data IN packet NAKed by device. Time: 1.84803286>
	<data IN packet NAKed by device. Time: 1.84803904>
	<data IN packet NAKed by device. Time: 1.8480452>
	<data IN packet NAKed by device. Time: 1.8480513>
	<data IN packet NAKed by device. Time: 1.84805748>
	<data IN packet NAKed by device. Time: 1.84806368>
	<data IN packet NAKed by device. Time: 1.84806982>
	<data IN packet NAKed by device. Time: 1.84807592>
	<data IN packet NAKed by device. Time: 1.84816306>
	<data IN packet NAKed by device. Time: 1.84816918>
	<data IN packet NAKed by device. Time: 1.84817534>
	<data IN packet NAKed by device. Time: 1.8481815>
	<data IN packet NAKed by device. Time: 1.8481877>
	<data IN packet NAKed by device. Time: 1.8481938>
	<data IN packet NAKed by device. Time: 1.84819996>
	<data IN packet NAKed by device. Time: 1.84820606>
	<data IN packet NAKed by device. Time: 1.84821224>
	<data IN packet NAKed by device. Time: 1.84821836>
	<data IN packet NAKed by device. Time: 1.84822458>
	<data IN packet NAKed by device. Time: 1.84823068>
	<data IN packet NAKed by device. Time: 1.84823686>
	<data IN packet NAKed by device. Time: 1.84824306>
	<data IN packet NAKed by device. Time: 1.84824922>
	<data IN packet NAKed by device. Time: 1.84825532>
	<data IN packet NAKed by device. Time: 1.84834128>
	<data IN packet NAKed by device. Time: 1.84834738>
	<data IN packet NAKed by device. Time: 1.84835354>
	<data IN packet NAKed by device. Time: 1.84835972>
	<data IN packet NAKed by device. Time: 1.8483659>
	<data IN packet NAKed by device. Time: 1.84837202>
	<data IN packet NAKed by device. Time: 1.84837818>
	<data IN packet NAKed by device. Time: 1.84838442>
	<data IN packet NAKed by device. Time: 1.84839062>
	<data IN packet NAKed by device. Time: 1.84839672>
Descriptor time: 1.84840352
	bLength=0x12
	bDescriptorType=0x01 DEVICE
	bcdUSB=0x0200 2.00
	bDeviceClass=0x00 Deferred to Interface Descriptors
	bDeviceSubClass=0x00
	bDeviceProtocol=0x00
	bMaxPacketSize0=0x08
Unexpected packet IN. Time: 1.8484121

SETUP address: 0x00 time: 1.84905302
	bmRequestType=0x00 Data direction=No data, Type=Standard, Recipient=Device
	bRequest=0x05 SET_ADDRESS
	wValue=0x0001 Address=0x01
	wIndex=0x0000
	wLength=0x0000
STATUS time: 1.84906428
	<status IN packet NAKed by device. Time: 1.84906748>
	<status IN packet NAKed by device. Time: 1.84907364>
	<status IN packet NAKed by device. Time: 1.84907982>
	<status IN packet NAKed by device. Time: 1.84908594>
	<status IN packet NAKed by device. Time: 1.84909206>
	<status IN packet NAKed by device. Time: 1.84909822>
	<status IN packet NAKed by device. Time: 1.84910432>
	<status IN packet NAKed by device. Time: 1.84911044>
	<status IN packet NAKed by device. Time: 1.84911656>
	<status IN packet NAKed by device. Time: 1.84912266>
	<status IN packet NAKed by device. Time: 1.84912876>
	<status IN packet NAKed by device. Time: 1.84913488>
	<status IN packet NAKed by device. Time: 1.849141>
	<status IN packet NAKed by device. Time: 1.84914716>
	<status IN packet NAKed by device. Time: 1.84915328>
	<status IN packet NAKed by device. Time: 1.84915938>
	<status IN packet NAKed by device. Time: 1.84924634>
	<status IN packet NAKed by device. Time: 1.84925244>
	<status IN packet NAKed by device. Time: 1.84925852>
	ACK

SETUP address: 0x01 time: 1.85005302
	bmRequestType=0x80 Data direction=Device to host, Type=Standard, Recipient=Device
	bRequest=0x06 GET_DESCRIPTOR
	wValue=0x0100 Descriptor=DEVICE, Index=0x00
	wIndex=0x0000
	wLength=0x0012
DATA time: 1.85006426
	<data IN packet NAKed by device. Time: 1.85006746>
	<data IN packet NAKed by device. Time: 1.85007372>
	<data IN packet NAKed by device. Time: 1.85007984>
	<data IN packet NAKed by device. Time: 1.85008592>
	<data IN packet NAKed by device. Time: 1.8500921>
	<data IN packet NAKed by device. Time: 1.85009822>
	<data IN packet NAKed by device. Time: 1.85010434>
	<data IN packet NAKed by device. Time: 1.85011052>
	<data IN packet NAKed by device. Time: 1.8501167>
	<data IN packet NAKed by device. Time: 1.8501228>
	<data IN packet NAKed by device. Time: 1.85012892>
	<data IN packet NAKed by device. Time: 1.85013508>
	<data IN packet NAKed by device. Time: 1.85014128>
	<data IN packet NAKed by device. Time: 1.85014746>
	<data IN packet NAKed by device. Time: 1.85015358>
	<data IN packet NAKed by device. Time: 1.85015982>
	<data IN packet NAKed by device. Time: 1.85016592>
	<data IN packet NAKed by device. Time: 1.85025264>
	<data IN packet NAKed by device. Time: 1.85025874>
	<data IN packet NAKed by device. Time: 1.85026498>
	<data IN packet NAKed by device. Time: 1.8502711>
	<data IN packet NAKed by device. Time: 1.85027722>
	<data IN packet NAKed by device. Time: 1.85028332>
	<data IN packet NAKed by device. Time: 1.8502895>
	<data IN packet NAKed by device. Time: 1.8502956>
	<data IN packet NAKed by device. Time: 1.8503018>
	<data IN packet NAKed by device. Time: 1.8503079>
	<data IN packet NAKed by device. Time: 1.85031408>
	<data IN packet NAKed by device. Time: 1.85032026>
	<data IN packet NAKed by device. Time: 1.85032638>
	<data IN packet NAKed by device. Time: 1.85033248>
	<data IN packet NAKed by device. Time: 1.85033866>
	<data IN packet NAKed by device. Time: 1.85034476>
	<data IN packet NAKed by device. Time: 1.85035088>
	<data IN packet NAKed by device. Time: 1.85043718>
	<data IN packet NAKed by device. Time: 1.85044336>
	<data IN packet NAKed by device. Time: 1.85044946>
	<data IN packet NAKed by device. Time: 1.85045558>
	<data IN packet NAKed by device. Time: 1.8504617>
	<data IN packet NAKed by device. Time: 1.8504678>
	<data IN packet NAKed by device. Time: 1.85047396>
	<data IN packet NAKed by device. Time: 1.85048016>
	<data IN packet NAKed by device. Time: 1.85048628>
Descriptor time: 1.85049302
	bLength=0x12
	bDescriptorType=0x01 DEVICE
	bcdUSB=0x0200 2.00
	bDeviceClass=0x00 Deferred to Interface Descriptors
	bDeviceSubClass=0x00
	bDeviceProtocol=0x00
	bMaxPacketSize0=0x08
[COLOR="#FF0000"]Unexpected packet IN. Time: 1.8505016[/COLOR]
 
Last edited:
Quick update:

In the faulting case,
Code:
ISR: C082
 USB Error
ERROR Followup
    remove from followup list
    remove from followup list
    remain on followup list
C082 - (AS, PS, SRI, and UEI) bits set

Note in the remove from list where faulting,
Pipe_t *haltedpipe = p->pipe;

haltedpipe is a NULL pointer

I tried to not do anything except freetransfer. It does not fault, but does not work either
 
@KurtE - @PaulStoffregen

Thought I would jump in and play with a Gigabyte keyboard to see if I get the same problem so I purchased a Gigabyte AORUS GK-AORUS K1, the one @KurtE has wasn;t available from amazon.

I hooked it up directly to a T3.6, T4.1 and a TMM and HIDDeviceInfo sketch ran with no crashes that I could see:
Code:
USB HID Device Info Program

This Sketch shows information about plugged in HID devices

*** You can control the output by simple character input to Serial ***
R - Turns on or off showing the raw data
C - Toggles showing changed data only on or off
<anything else> - toggles showing the Hid formatted breakdown of the data


USBDeviceInfo claim this=2000CB68

****************************************
** Device Level **
  vid=1044
  pid=7A4A
  bDeviceClass = 0
  bDeviceSubClass = 0
  bDeviceProtocol = 0
09 04 00 00 01 03 01 01 00 09 21 11 01 00 01 22 3B 00 07 05 81 03 08 00 01 09 04 01 00 01 03 00
00 00 09 21 11 01 00 01 22 22 00 07 05 04 03 40 00 01 09 04 02 00 01 03 00 00 00 09 21 11 01 00
01 22 B5 00 07 05 82 03 40 00 01 09 04 03 00 02 03 00 00 00 09 21 11 01 00 01 22 1F 00 07 05 85
03 40 00 01 07 05 06 03 40 00 01 

USBDeviceInfo claim this=2000CB68

****************************************
** Interface Level **
09 04 00 00 01 03 01 01 00 09 21 11 01 00 01 22 3B 00 07 05 81 03 08 00 01 09 04 01 00 01 03 00
00 00 09 21 11 01 00 01 22 22 00 07 05 04 03 40 00 01 09 04 02 00 01 03 00 00 00 09 21 11 01 00
01 22 B5 00 07 05 82 03 40 00 01 09 04 03 00 02 03 00 00 00 09 21 11 01 00 01 22 1F 00 07 05 85
03 40 00 01 07 05 06 03 40 00 01 
 bInterfaceNumber = 0
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 1
    HID (BOOT)
 bInterfaceProtocol = 1
    Keyboard
report descriptor size = 59
  endpoint = 81
    attributes = 3 Interrupt
    size = 8
    interval = 1

USBDeviceInfo claim this=2000CB68

****************************************
** Interface Level **
09 04 01 00 01 03 00 00 00 09 21 11 01 00 01 22 22 00 07 05 04 03 40 00 01 09 04 02 00 01 03 00
00 00 09 21 11 01 00 01 22 B5 00 07 05 82 03 40 00 01 09 04 03 00 02 03 00 00 00 09 21 11 01 00
01 22 1F 00 07 05 85 03 40 00 01 07 05 06 03 40 00 01 
 bInterfaceNumber = 1
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 0
    HID
 bInterfaceProtocol = 0
    None
report descriptor size = 34
  endpoint = 4
    attributes = 3 Interrupt
    size = 64
    interval = 1

USBDeviceInfo claim this=2000CB68

****************************************
** Interface Level **
09 04 02 00 01 03 00 00 00 09 21 11 01 00 01 22 B5 00 07 05 82 03 40 00 01 09 04 03 00 02 03 00
00 00 09 21 11 01 00 01 22 1F 00 07 05 85 03 40 00 01 07 05 06 03 40 00 01 
 bInterfaceNumber = 2
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 0
    HID
 bInterfaceProtocol = 0
    None
report descriptor size = 181
  endpoint = 82
    attributes = 3 Interrupt
    size = 64
    interval = 1

USBDeviceInfo claim this=2000CB68

****************************************
** Interface Level **
09 04 03 00 02 03 00 00 00 09 21 11 01 00 01 22 1F 00 07 05 85 03 40 00 01 07 05 06 03 40 00 01 
 bInterfaceNumber = 3
 number end points = 2
 bInterfaceClass =    3
 bInterfaceSubClass = 0
    HID
 bInterfaceProtocol = 0
    None
report descriptor size = 31
  endpoint = 85
    attributes = 3 Interrupt
    size = 64
    interval = 1
  endpoint = 6
    attributes = 3 Interrupt
    size = 64
    interval = 1
*** Device HID1 1044:7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** Device HID2 1044:7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
HIDDumpController(1 : 0x200041e0 : 0x20009640) Claim: 1044:7a4a usage: 10002 - Yes

HID Report Descriptor (0x20009670) size: 181
  05 01	// Usage Page(1) - Generic Desktop
  09 02	// Usage(2) -(Mouse)
  A1 01	// Collection(1) top Usage(10000)
    85 01	// Report ID(1)
    09 01	// Usage(1) -(?)
    A1 00	// Collection(0)
    05 09	// Usage Page(9) - Button
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    19 01	// Usage Minimum(1) -  (BUTTON 1)
    29 05	// Usage Maximum(5) -  (BUTTON 5)
    75 01	// Report Size(1)
    95 05	// Report Count(5)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 03	// Report Count(3)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    05 01	// Usage Page(1) - Generic Desktop
    16 01 80	// Logical Minimum(8001)
    26 FF 7F	// Logical maximum(7fff)
    09 30	// Usage(30) -(X)
    09 31	// Usage(31) -(Y)
    75 10	// Report Size(10)
    95 02	// Report Count(2)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    15 81	// Logical Minimum(81)
    25 7F	// Logical maximum(7f)
    09 38	// Usage(38) -(Wheel)
    75 08	// Report Size(8)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    05 0C	// Usage Page(c) - Consumer
    0A 38 02	// Usage(238) -(AC Pan)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    C0	// End Collection
  C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 07	// Usage Maximum(7ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 07	// Logical maximum(7ff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 02 FF	// Usage Page(ff02) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff020000)
    85 04	// Report ID(4)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 03	// Usage(3) -
    75 08	// Report Size(8)
    95 07	// Report Count(7)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 06	// Usage(6) -(Keyboard)
  A1 01	// Collection(1) top Usage(10000)
    85 05	// Report ID(5)
    05 07	// Usage Page(7) - Keycode
    95 01	// Report Count(1)
    75 08	// Report Size(8)
    81 03	// Input(3)	// (Constant, Variable, Absolute)
    95 E8	// Report Count(e8)
    75 01	// Report Size(1)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    05 07	// Usage Page(7) - Keycode
    19 00	// Usage Minimum(0) - (Keycode 0)
    29 E7	// Usage Maximum(e7) - (Right)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x200041e0 : 0x20009640) Claim: 1044:7a4a usage: 10080 - NO (Usage: 10002)
HIDDumpController(2 : 0x200052c0 : 0x20009640) Claim: 1044:7a4a usage: 10080 - Yes

HID Report Descriptor (0x20009670) size: 181
  05 01	// Usage Page(1) - Generic Desktop
  09 02	// Usage(2) -(Mouse)
  A1 01	// Collection(1) top Usage(10000)
    85 01	// Report ID(1)
    09 01	// Usage(1) -(?)
    A1 00	// Collection(0)
    05 09	// Usage Page(9) - Button
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    19 01	// Usage Minimum(1) -  (BUTTON 1)
    29 05	// Usage Maximum(5) -  (BUTTON 5)
    75 01	// Report Size(1)
    95 05	// Report Count(5)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 03	// Report Count(3)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    05 01	// Usage Page(1) - Generic Desktop
    16 01 80	// Logical Minimum(8001)
    26 FF 7F	// Logical maximum(7fff)
    09 30	// Usage(30) -(X)
    09 31	// Usage(31) -(Y)
    75 10	// Report Size(10)
    95 02	// Report Count(2)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    15 81	// Logical Minimum(81)
    25 7F	// Logical maximum(7f)
    09 38	// Usage(38) -(Wheel)
    75 08	// Report Size(8)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    05 0C	// Usage Page(c) - Consumer
    0A 38 02	// Usage(238) -(AC Pan)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    C0	// End Collection
  C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 07	// Usage Maximum(7ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 07	// Logical maximum(7ff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 02 FF	// Usage Page(ff02) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff020000)
    85 04	// Report ID(4)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 03	// Usage(3) -
    75 08	// Report Size(8)
    95 07	// Report Count(7)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 06	// Usage(6) -(Keyboard)
  A1 01	// Collection(1) top Usage(10000)
    85 05	// Report ID(5)
    05 07	// Usage Page(7) - Keycode
    95 01	// Report Count(1)
    75 08	// Report Size(8)
    81 03	// Input(3)	// (Constant, Variable, Absolute)
    95 E8	// Report Count(e8)
    75 01	// Report Size(1)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    05 07	// Usage Page(7) - Keycode
    19 00	// Usage Minimum(0) - (Keycode 0)
    29 E7	// Usage Maximum(e7) - (Right)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x200041e0 : 0x20009640) Claim: 1044:7a4a usage: c0001 - NO (Usage: 10002)
HIDDumpController(2 : 0x200052c0 : 0x20009640) Claim: 1044:7a4a usage: c0001 - NO (Usage: 10080)
HIDDumpController(3 : 0x200063a0 : 0x20009640) Claim: 1044:7a4a usage: c0001 - Yes

HID Report Descriptor (0x20009670) size: 181
  05 01	// Usage Page(1) - Generic Desktop
  09 02	// Usage(2) -(Mouse)
  A1 01	// Collection(1) top Usage(10000)
    85 01	// Report ID(1)
    09 01	// Usage(1) -(?)
    A1 00	// Collection(0)
    05 09	// Usage Page(9) - Button
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    19 01	// Usage Minimum(1) -  (BUTTON 1)
    29 05	// Usage Maximum(5) -  (BUTTON 5)
    75 01	// Report Size(1)
    95 05	// Report Count(5)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 03	// Report Count(3)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    05 01	// Usage Page(1) - Generic Desktop
    16 01 80	// Logical Minimum(8001)
    26 FF 7F	// Logical maximum(7fff)
    09 30	// Usage(30) -(X)
    09 31	// Usage(31) -(Y)
    75 10	// Report Size(10)
    95 02	// Report Count(2)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    15 81	// Logical Minimum(81)
    25 7F	// Logical maximum(7f)
    09 38	// Usage(38) -(Wheel)
    75 08	// Report Size(8)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    05 0C	// Usage Page(c) - Consumer
    0A 38 02	// Usage(238) -(AC Pan)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    C0	// End Collection
  C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 07	// Usage Maximum(7ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 07	// Logical maximum(7ff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 02 FF	// Usage Page(ff02) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff020000)
    85 04	// Report ID(4)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 03	// Usage(3) -
    75 08	// Report Size(8)
    95 07	// Report Count(7)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 06	// Usage(6) -(Keyboard)
  A1 01	// Collection(1) top Usage(10000)
    85 05	// Report ID(5)
    05 07	// Usage Page(7) - Keycode
    95 01	// Report Count(1)
    75 08	// Report Size(8)
    81 03	// Input(3)	// (Constant, Variable, Absolute)
    95 E8	// Report Count(e8)
    75 01	// Report Size(1)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    05 07	// Usage Page(7) - Keycode
    19 00	// Usage Minimum(0) - (Keycode 0)
    29 E7	// Usage Maximum(e7) - (Right)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x200041e0 : 0x20009640) Claim: 1044:7a4a usage: ff020001 - NO (Usage: 10002)
HIDDumpController(2 : 0x200052c0 : 0x20009640) Claim: 1044:7a4a usage: ff020001 - NO (Usage: 10080)
HIDDumpController(3 : 0x200063a0 : 0x20009640) Claim: 1044:7a4a usage: ff020001 - NO (Usage: c0001)
HIDDumpController(4 : 0x20007480 : 0x20009640) Claim: 1044:7a4a usage: ff020001 - Yes

HID Report Descriptor (0x20009670) size: 181
  05 01	// Usage Page(1) - Generic Desktop
  09 02	// Usage(2) -(Mouse)
  A1 01	// Collection(1) top Usage(10000)
    85 01	// Report ID(1)
    09 01	// Usage(1) -(?)
    A1 00	// Collection(0)
    05 09	// Usage Page(9) - Button
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    19 01	// Usage Minimum(1) -  (BUTTON 1)
    29 05	// Usage Maximum(5) -  (BUTTON 5)
    75 01	// Report Size(1)
    95 05	// Report Count(5)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 03	// Report Count(3)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    05 01	// Usage Page(1) - Generic Desktop
    16 01 80	// Logical Minimum(8001)
    26 FF 7F	// Logical maximum(7fff)
    09 30	// Usage(30) -(X)
    09 31	// Usage(31) -(Y)
    75 10	// Report Size(10)
    95 02	// Report Count(2)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    15 81	// Logical Minimum(81)
    25 7F	// Logical maximum(7f)
    09 38	// Usage(38) -(Wheel)
    75 08	// Report Size(8)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    05 0C	// Usage Page(c) - Consumer
    0A 38 02	// Usage(238) -(AC Pan)
    95 01	// Report Count(1)
    81 06	// Input(6)	// (Data, Variable, Relative)
    C0	// End Collection
  C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 07	// Usage Maximum(7ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 07	// Logical maximum(7ff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 02 FF	// Usage Page(ff02) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff020000)
    85 04	// Report ID(4)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 03	// Usage(3) -
    75 08	// Report Size(8)
    95 07	// Report Count(7)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  05 01	// Usage Page(1) - Generic Desktop
  09 06	// Usage(6) -(Keyboard)
  A1 01	// Collection(1) top Usage(10000)
    85 05	// Report ID(5)
    05 07	// Usage Page(7) - Keycode
    95 01	// Report Count(1)
    75 08	// Report Size(8)
    81 03	// Input(3)	// (Constant, Variable, Absolute)
    95 E8	// Report Count(e8)
    75 01	// Report Size(1)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    05 07	// Usage Page(7) - Keycode
    19 00	// Usage Minimum(0) - (Keycode 0)
    29 E7	// Usage Maximum(e7) - (Right)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x200041e0 : 0x20009d00) Claim: 1044:7a4a usage: ff010001 - NO (Usage: 10002)
HIDDumpController(2 : 0x200052c0 : 0x20009d00) Claim: 1044:7a4a usage: ff010001 - NO (Usage: 10080)
HIDDumpController(3 : 0x200063a0 : 0x20009d00) Claim: 1044:7a4a usage: ff010001 - NO (Usage: c0001)
HIDDumpController(4 : 0x20007480 : 0x20009d00) Claim: 1044:7a4a usage: ff010001 - NO (Usage: ff020001)
HIDDumpController(5 : 0x20008560 : 0x20009d00) Claim: 1044:7a4a usage: ff010001 - Yes

HID Report Descriptor (0x20009d30) size: 31
  06 01 FF	// Usage Page(ff01) - Vendor Defined
  09 01	// Usage(1) -(?)
  A1 01	// Collection(1) top Usage(ff010000)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    75 08	// Report Size(8)
    95 40	// Report Count(40)
    09 20	// Usage(20) -(?)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    09 21	// Usage(21) -(?)
    91 02	// Output(2)	// (Data, Variable, Absolute)
    09 22	// Usage(22) -(?)
    95 08	// Report Count(8)
    B1 02	// Feature(2)	// (Data, Variable, Absolute)
    C0	// End Collection
*** HID Device hdc2 1044: 7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** HID Device hdc3 1044: 7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** HID Device hdc4 1044: 7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** HID Device hdc5 1044: 7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** HID Device hdc1 1044: 7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
also ran the KeyboardForward sketch:

The interesting thing here is that the manufacturer and vendor are completely different than that identified by @KurtE
Code:
  manufacturer: HOLTEK
  product: USB-HID Keyboard
versus
Code:
manufacturer: E-Signal
product: GIGABYTE Keyboard

So next up was attaching the keyboard and a wireless mouse to a hub to a T4.1:
Code:
USB Host Testing
960
*** Device Hub1 bda:5411 - connected ***
  manufacturer: Generic
  product: 4-Port USB 2.0 Hub
*** Device KB1 46d:c52b - connected ***
  manufacturer: Logitech
  product: USB Receiver
*** Device HID1 46d:c52b - connected ***
  manufacturer: Logitech
  product: USB Receiver
*** Device HID2 46d:c52b - connected ***
  manufacturer: Logitech
  product: USB Receiver
*** HID Device Mouse1 46d:c52b - connected ***
  manufacturer: Logitech
  product: USB Receiver
*** Device KB2 1044:7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** Device HID3 1044:7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
*** Device HID4 1044:7a4a - connected ***
  manufacturer: HOLTEK
  product: USB-HID Keyboard
  Serial: AP0000000003
Mouse: buttons = 0,  mouseX = 0,  mouseY = 1,  wheel = 0,  wheelH = 0
......
Mouse: buttons = 0,  mouseX = 3,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = 3,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = 2,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = 1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = 1,  mouseY = 0,  wheel = 0,  wheelH = 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
key 'h'  104 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
Mouse: buttons = 0,  mouseX = 0,  mouseY = 1,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 1,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 1,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -2,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 1,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -2,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 1,  wheel = 0,  wheelH = 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
Mouse: buttons = 0,  mouseX = -2,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -2,  mouseY = 1,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
Mouse: buttons = 0,  mouseX = 0,  mouseY = 1,  wheel = 0,  wheelH = 0
key 'h'  104 MOD: 0 OEM: 0 LEDS: 0
Mouse: buttons = 0,  mouseX = -1,  mouseY = 0,  wheel = 0,  wheelH = 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
Mouse: buttons = 0,  mouseX = 0,  mouseY = -1,  wheel = 0,  wheelH = 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
key 'h'  104 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'g'  103 MOD: 0 OEM: 0 LEDS: 0
key 'h'  104 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
key 'j'  106 MOD: 0 OEM: 0 LEDS: 0
key 'f'  102 MOD: 0 OEM: 0 LEDS: 0
all seems to be working. Have not experienced any crashes or reboots.

Just some added info.
 
@mjs513 @PaulStoffregen and all,

Yesk, as you mentioned, looks like completely different animals.

For example, if I press the h button I see:
Code:
*** HID Device hdc4 4d9: a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
HID(4 : 10006): 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 
Begin topusage:10000 type:2 min:0 max:1
  usage=700E0, value=0 (Left Control)
  usage=700E1, value=0 (Left Shift)
  usage=700E2, value=0 (Left Alt)
  usage=700E3, value=0 (Left)
  usage=700E4, value=0 (Right Control)
  usage=700E5, value=0 (Right Shift)
  usage=700E6, value=0 (Right Alt)
  usage=700E7, value=0 (Right)
  Begin topusage:10000 type:2 min:0 max:1
    usage=70000, value=0 (Keycode 0)
    usage=70001, value=0 (Keycode 1)
    usage=70002, value=0 (Keycode 2)
    usage=70003, value=0 (Keycode 3)
    usage=70004, value=0 (a and A)
    usage=70005, value=0 (b and B)
    usage=70006, value=0 (c and C)
    usage=70007, value=0 (d and D)
    usage=70008, value=0 (e and E)
    usage=70009, value=0 (f and F)
    usage=7000A, value=0 (g and G)
    usage=7000B, value=1 (h and H)
    usage=7000C, value=0 (i and I)
    usage=7000D, value=0 (j and J)
    usage=7000E, value=0 (k and K)
    usage=7000F, value=0 (l and L)
    usage=70010, value=0 (m and M)
    usage=70011, value=0 (n and N)
    usage=70012, value=0 (o and O)
    usage=70013, value=0 (p and P)
    usage=70014, value=0 (q and Q)
    usage=70015, value=0 (r and R)
    usage=70016, value=0 (s and S)
    usage=70017, value=0 (t and T)
    usage=70018, value=0 (u and U)
    usage=70019, value=0 (v and V)
    usage=7001A, value=0 (w and W)
    usage=7001B, value=0 (x and X)
    usage=7001C, value=0 (y and Y)
    usage=7001D, value=0 (z and Z)
    usage=7001E, value=0 (1 and !)
    usage=7001F, value=0 (2 and @)
    usage=70020, value=0 (3 and #)
    usage=70021, value=0 (4 and $)
    usage=70022, value=0 (5 and %)
    usage=70023, value=0 (6 and ^)
    usage=70024, value=0 (7 and &)
    usage=70025, value=0 (8 and *)
    usage=70026, value=0 (9 and ()
    usage=70027, value=0 (0 and ))
    usage=70028, value=0 (Return (ENTER))
    usage=70029, value=0 (ESCAPE)
    usage=7002A, value=0 (DELETE (Backspace))
    usage=7002B, value=0 (Tab)
    usage=7002C, value=0 (Spacebar)
    usage=7002D, value=0 (- and (underscore))
    usage=7002E, value=0 (= and +)
    usage=7002F, value=0 ([ and {)
    usage=70030, value=0 (] and })
    usage=70031, value=0 (nd |)
    usage=70032, value=0 (Non-US # and ˜)
    usage=70033, value=0 (; and :)
    usage=70034, value=0 (‘ and “)
    usage=70035, value=0 (Grave Accent and Tilde)
    usage=70036, value=0 (, and <)
    usage=70037, value=0 (. and >)
    usage=70038, value=0 (/ and ?)
    usage=70039, value=0 (Caps Lock)
    usage=7003A, value=0 (F1)
    usage=7003B, value=0 (F2)
    usage=7003C, value=0 (F3)
    usage=7003D, value=0 (F4)
    usage=7003E, value=0 (F5)
    usage=7003F, value=0 (F6)
    usage=70040, value=0 (F7)
    usage=70041, value=0 (F8)
    usage=70042, value=0 (F9)
    usage=70043, value=0 (F10)
    usage=70044, value=0 (F11)
    usage=70045, value=0 (F12)
    usage=70046, value=0 (PrintScreen)
    usage=70047, value=0 (Scroll Lock)
    usage=70048, value=0 (Pause)
    usage=70049, value=0 (Insert)
    usage=7004A, value=0 (Home)
    usage=7004B, value=0 (PageUp)
    usage=7004C, value=0 (Delete Forward)
    usage=7004D, value=0 (End)
    usage=7004E, value=0 (PageDown)
    usage=7004F, value=0 (RightArrow)
    usage=70050, value=0 (LeftArrow)
    usage=70051, value=0 (DownArrow)
    usage=70052, value=0 (UpArrow)
    usage=70053, value=0 (Keypad Num Lock and Clear)
    usage=70054, value=0 (Keypad /)
    usage=70055, value=0 (Keypad *)
    usage=70056, value=0 (Keypad -)
    usage=70057, value=0 (Keypad +)
    usage=70058, value=0 (Keypad ENTER)
    usage=70059, value=0 (Keypad 1 and End)
    usage=7005A, value=0 (Keypad 2 and Down Arrow)
    usage=7005B, value=0 (Keypad 3 and PageDn)
    usage=7005C, value=0 (Keypad 4 and Left Arrow)
    usage=7005D, value=0 (Keypad 5)
    usage=7005E, value=0 (Keypad 6 and Right Arrow)
    usage=7005F, value=0 (Keypad 7 and Home)
    usage=70060, value=0 (Keypad 8 and Up Arrow)
    usage=70061, value=0 (Keypad 9 and PageUp)
    usage=70062, value=0 (Keypad 0 and Insert)
    usage=70063, value=0 (Keypad . and Delete)
    usage=70064, value=0 (Non-US nd |)
    usage=70065, value=0 (Application)
    usage=70066, value=0 (Power)
    usage=70067, value=0 (Keypad =)
    usage=70068, value=0 (F13)
    usage=70069, value=0 (F14)
    usage=7006A, value=0 (F15)
    usage=7006B, value=0 (F16)
    usage=7006C, value=0 (F17)
    usage=7006D, value=0 (F18)
    usage=7006E, value=0 (F19)
    usage=7006F, value=0 (F20)
  END:
Which is a full N Key rollover.

I wonder how many of the keyboards that Gigabyte actually makes versus simply collect a bunch of different products made by several?
Like if you try to do a compare of their current keyboards:
https://www.gigabyte.com/Comparison/Keyboard

There are a lot!

It has also been a few years, so maybe their newer keyboards don't have same firmware that by default output N key Rollover even in boot mode unless, explicitly told to.
 
Last edited:
@mjs513 @PaulStoffregen and all,

Yesk, as you mentioned, looks like completely different animals.

For example, if I press the h button I see:
....:[/CODE]
Which is a full N Key rollover.

I wonder how many of the keyboards that Gigabyte actually makes versus simply collect a bunch of different products made by several?
Like if you try to do a compare of their current keyboards:
https://www.gigabyte.com/Comparison/Keyboard

There are a lot!

It has also been a few years, so maybe their newer keyboards don't have same firmware that by default output N key Rollover even in boot mode unless, explicitly told to.

@KurtE
As you know I am a glutton for punishment so I picked up a K83 keyboard off of ebay just to have some more torture besides the Huion tablet not recognized by the T4.x.

Anyway back to the main point. Long story short am seeing the same thing you even on the T3.6:
Code:
USBDeviceInfo claim this=1FFF5628

****************************************
** Device Level **
  vid=4D9
  pid=A06B
  bDeviceClass = 0
  bDeviceSubClass = 0
  bDeviceProtocol = 0
09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 3B 00 07 05 81 03 08 00 08 09 04 01 00 01 03 00
00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00 00 00 09 21 10 01 00
01 22 25 00 07 05 83 03 10 00 01 

USBDeviceInfo claim this=1FFF5628

****************************************
** Interface Level **
09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 3B 00 07 05 81 03 08 00 08 09 04 01 00 01 03 00
00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00 00 00 09 21 10 01 00
01 22 25 00 07 05 83 03 10 00 01 
 bInterfaceNumber = 0
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 1
    HID (BOOT)
 bInterfaceProtocol = 1
    Keyboard
report descriptor size = 59
  endpoint = 81
    attributes = 3 Interrupt
    size = 8
    interval = 8

USBDeviceInfo claim this=1FFF5628

****************************************
** Interface Level **
09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 51 00 07 05 82 03 10 00 08 09 04 02 00 01 03 00
00 00 09 21 10 01 00 01 22 25 00 07 05 83 03 10 00 01 
 bInterfaceNumber = 1
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 0
    HID
 bInterfaceProtocol = 0
    None
report descriptor size = 81
  endpoint = 82
    attributes = 3 Interrupt
    size = 16
    interval = 8

USBDeviceInfo claim this=1FFF5628

****************************************
** Interface Level **
09 04 02 00 01 03 00 00 00 09 21 10 01 00 01 22 25 00 07 05 83 03 10 00 01 
 bInterfaceNumber = 2
 number end points = 1
 bInterfaceClass =    3
 bInterfaceSubClass = 0
    HID
 bInterfaceProtocol = 0
    None
report descriptor size = 37
  endpoint = 83
    attributes = 3 Interrupt
    size = 16
    interval = 1
*** Device HID1 4d9:a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
*** Device HID2 4d9:a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
HIDDumpController(1 : 0x1fff7580 : 0x1fff48a0) Claim: 4d9:a06b usage: 10080 - Yes

HID Report Descriptor (0x1fff48d0) size: 81
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 02	// Usage Maximum(2ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 7F	// Logical maximum(7fff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 00 FF	// Usage Page(ff00) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff000000)
    85 06	// Report ID(6)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 2F	// Usage(2f) -
    75 08	// Report Size(8)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    09 30	// Usage(30) -
    95 07	// Report Count(7)
    B1 02	// Feature(2)	// (Data, Variable, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x1fff7580 : 0x1fff48a0) Claim: 4d9:a06b usage: c0001 - NO (Usage: 10080)
HIDDumpController(2 : 0x1fff8660 : 0x1fff48a0) Claim: 4d9:a06b usage: c0001 - Yes

HID Report Descriptor (0x1fff48d0) size: 81
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 02	// Usage Maximum(2ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 7F	// Logical maximum(7fff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 00 FF	// Usage Page(ff00) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff000000)
    85 06	// Report ID(6)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 2F	// Usage(2f) -
    75 08	// Report Size(8)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    09 30	// Usage(30) -
    95 07	// Report Count(7)
    B1 02	// Feature(2)	// (Data, Variable, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x1fff7580 : 0x1fff48a0) Claim: 4d9:a06b usage: ff000001 - NO (Usage: 10080)
HIDDumpController(2 : 0x1fff8660 : 0x1fff48a0) Claim: 4d9:a06b usage: ff000001 - NO (Usage: c0001)
HIDDumpController(3 : 0x1fff37c0 : 0x1fff48a0) Claim: 4d9:a06b usage: ff000001 - Yes

HID Report Descriptor (0x1fff48d0) size: 81
  05 01	// Usage Page(1) - Generic Desktop
  09 80	// Usage(80) -(?)
  A1 01	// Collection(1) top Usage(10080)
    85 02	// Report ID(2)
    19 81	// Usage Minimum(81) - (System Power Down)
    29 83	// Usage Maximum(83) - (System Wake Up)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    95 05	// Report Count(5)
    81 01	// Input(1)	// (Constant, Array, Absolute)
    C0	// End Collection
  05 0C	// Usage Page(c) - Consumer
  09 01	// Usage(1) -(Consumer Controls)
  A1 01	// Collection(1) top Usage(c0000)
    85 03	// Report ID(3)
    19 00	// Usage Minimum(0) - (?)
    2A FF 02	// Usage Maximum(2ff) - (?)
    15 00	// Logical Minimum(0)
    26 FF 7F	// Logical maximum(7fff)
    95 01	// Report Count(1)
    75 10	// Report Size(10)
    81 00	// Input(0)	// (Data, Array, Absolute)
    C0	// End Collection
  06 00 FF	// Usage Page(ff00) - Vendor Defined
  09 01	// Usage(1) -
  A1 01	// Collection(1) top Usage(ff000000)
    85 06	// Report ID(6)
    15 00	// Logical Minimum(0)
    26 FF 00	// Logical maximum(ff)
    09 2F	// Usage(2f) -
    75 08	// Report Size(8)
    95 03	// Report Count(3)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    09 30	// Usage(30) -
    95 07	// Report Count(7)
    B1 02	// Feature(2)	// (Data, Variable, Absolute)
    C0	// End Collection
HIDDumpController(1 : 0x1fff7580 : 0x1fff4f60) Claim: 4d9:a06b usage: 10006 - NO (Usage: 10080)
HIDDumpController(2 : 0x1fff8660 : 0x1fff4f60) Claim: 4d9:a06b usage: 10006 - NO (Usage: c0001)
HIDDumpController(3 : 0x1fff37c0 : 0x1fff4f60) Claim: 4d9:a06b usage: 10006 - NO (Usage: ff000001)
HIDDumpController(4 : 0x1fff2020 : 0x1fff4f60) Claim: 4d9:a06b usage: 10006 - Yes

HID Report Descriptor (0x1fff4f90) size: 37
  05 01	// Usage Page(1) - Generic Desktop
  09 06	// Usage(6) -(Keyboard)
  A1 01	// Collection(1) top Usage(10000)
    05 07	// Usage Page(7) - Keycode
    19 E0	// Usage Minimum(e0) - (Left Control)
    29 E7	// Usage Maximum(e7) - (Right)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 08	// Report Count(8)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    19 00	// Usage Minimum(0) - (Keycode 0)
    29 6F	// Usage Maximum(6f) - (Keycode 111)
    15 00	// Logical Minimum(0)
    25 01	// Logical maximum(1)
    75 01	// Report Size(1)
    95 70	// Report Count(70)
    81 02	// Input(2)	// (Data, Variable, Absolute)
    C0	// End Collection
*** HID Device hdc1 4d9: a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
*** HID Device hdc2 4d9: a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
*** HID Device hdc3 4d9: a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard
*** HID Device hdc4 4d9: a06b - connected ***
  manufacturer: E-Signal
  product: GIGABYTE Keyboard

Wondering to self though on looking at the keypressed info:
Code:
HID(4 : 10006): 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
Begin topusage:10000 type:2 min:0 max:1
  usage=700E0, value=0(Left Control)
  usage=700E1, value=0(Left Shift)
  usage=700E2, value=0(Left Alt)
  usage=700E3, value=0(Left)
  usage=700E4, value=0(Right Control)
  usage=700E5, value=0(Right Shift)
  usage=700E6, value=0(Right Alt)
  usage=700E7, value=0(Right)
  Begin topusage:10000 type:2 min:0 max:1
    usage=70000, value=0(Keycode 0)
    usage=70001, value=0(Keycode 1)
    usage=70002, value=0(Keycode 2)
    usage=70003, value=0(Keycode 3)
[COLOR="#FF0000"]    usage=70004, value=1(Keycode 4)
[/COLOR]    usage=70005, value=0(Keycode 5)
,,,
after pressing the 'a' key - the raw data is showing keycode 4???

If I look at the keyboard example in usbhost it looks like its using 0xc0000 for the usage page???? Maybe we need to do something like we did for the tablets and request a different report????
 
@KurtE

When I originally tried thekeyboardforeward example with the gigabyte keyboard it was this line uncommented:
Code:
            //keyboard1.forceBootProtocol();
and did not get any keyboard output.

As a test I commented it out and it seems to be working:
Code:
OnRawRelease keycode: 5 Modifiers: 0
key 'c'  99 MOD: 0 OEM: 6 LEDS: 0
OnRawPress keycode: 6 Modifiers: 0
OnRawRelease keycode: 6 Modifiers: 0
key 'd'  100 MOD: 0 OEM: 7 LEDS: 0
OnRawPress keycode: 7 Modifiers: 0
OnRawRelease keycode: 7 Modifiers: 0
key 'e'  101 MOD: 0 OEM: 8 LEDS: 0
OnRawPress keycode: 8 Modifiers: 0
OnRawRelease keycode: 8 Modifiers: 0
key 'f'  102 MOD: 0 OEM: 9 LEDS: 0
OnRawPress keycode: 9 Modifiers: 0
OnRawRelease keycode: 9 Modifiers: 0
key 'g'  103 MOD: 0 OEM: A LEDS: 0
OnRawPress keycode: A Modifiers: 0
OnRawRelease keycode: A Modifiers: 0
 
@mjs513 - yes you appear to be a gluten for punishment!

About a week and a half ago I was playing with the keyboard - with a USBHost branch HID_keyboard,

Which was working although I was running to the cases where the Keyboard would randomly reboot the teensy. Then went back to the master branch and it too would
randomly crash. Usually on the first couple of messages, the USB_ERROR (or some such state would be set), more or less nothing else. Then the code would try to walk the
list of transfers for ones that may have an issue, and then try to reset the pipe associated with it... Only problem was the PIPE was NULL.

The things I changed within that branch include:

Needed to change USBHIDParser - claim method as it has code in it that if it were a HID Boot device of type keyboard, it would not claim the interface. That way for sure Keyboard would grab it.

But I added the ability to override this. that is another table VID/PID if it is one of these then HID will claim and keyboard will not. And then Keyboard would claim the top level usages.
It already was claiming some HID top usages for multimedia and system keys.

When not running in BOOT mode these keyboards output a different input format:

That is in boot mode, things are in a fixed format:
Byte 0 - contains the state of the modifier keys like (left shift, left ctrl, left alt, right shift...)
Byte 1 - I think is more or less ignored
2-7 are the 6 key rollover, where each byte contains keycodes for each key pressed. These keys then get mapped...

In straight HID mode: I believe it comes out to about 16 byte packets:
In the Top usage page:
We then get the keyboard modifers bits:
// Lets first process modifier keys...
// usage=700E0, value=0 (Left Control)
// usage=700E1, value=0 (Left Shift)
// usage=700E2, value=0 (Left Alt)
// usage=700E3, value=0 (Left GUI)
// usage=700E4, value=0 (Right Control)
// usage=700E5, value=0 (Right Shift)
// usage=700E6, value=0 (Right Alt)
// usage=700E7, value=0 (Right GUI)

The Usages in the ranges
// normal keys to be processed here.
if ((usage >= 0x70000) && (usage <= 0x70073)) {
Are the normal keys on the keyboard, Which have a value of 0 or 1.

I believe these keyboards allow the user to have up to 64 keys pressed at once.
Note: I believe that 0x70004 maps to the "a" key

At this point not sure I will finish this branch. Also, somewhat needless to say, if we are holding more than 6 keys, and one wanted the keyword forwarder code to forward this information to the PC, the underlying USB Keyboard code in core would need some significant work.
 
@KurtE

This is probably going to be a convoluted post but here it goes.

1. Attached the Gigabyte K83 to direct to the T4.1 and ran both the DeviceInfo sketch and the Mouse sketch. Typed on the keyboard as well as letting it sit and then typed again but not seeing any crashes as you descrbed.

2. Attached the Gigabyte K83 + Gigabyte mouse to a unpowered Anker USB3 hub. Repeated test in #1 and still did not experience any crashes.

3. Attached the Gigabyte Aorus keyboard as well with no crashes but did notice that if I change
Code:
static const vid_pid_t keyboard_use_hid_mode[] = {
	{0x046D, 0xC547},
	{0x1044, 0x7a4a}
};
I will see the raw data in the DeviceInfo sketch.

Code:
HID(1 : 10006): 00 00 09 07 04 16 00 00 
Begin topusage:10000 type:2 min:0 max:1
  usage=700E0, value=0 (Left Control)
  usage=700E1, value=0 (Left Shift)
  usage=700E2, value=0 (Left Alt)
  usage=700E3, value=0 (Left)
  usage=700E4, value=0 (Right Control)
  usage=700E5, value=0 (Right Shift)
  usage=700E6, value=0 (Right Alt)
  usage=700E7, value=0 (Right)
  Begin topusage:10000 type:0 min:0 max:255
    usage=70009, value=1 (f and F)
    usage=70007, value=1 (d and D)
    usage=70004, value=1 (a and A)
    usage=70016, value=1 (s and S)
    usage=70000, value=1 (Keycode 0)
    usage=70000, value=1 (Keycode 0)
  END:

If I don't do that I don't see any data. But to run the example sketches like Mouse or KeyboardForeward I have to comment out the aorus pid/vid. Strange.

Guess it wasn't that convoluted
 
Will have to take a look:

From this I am assuming you are using my HID_Keyboard branch as that is the only one that has that table.

It is interesting that the crash is not consistent. Also in that branch I may have left it in a state that does not crash but instead just does not work...
That is I have/had code that checked if the transfer it was looking at as bad had a NULL for pipe... Which would then reboot... Again not sure how that could happen,
Although suppose there could be a timing hole of maybe transfer added to queue, and then set the pipe? but before than interrupt that mucked with it?

As I have mentioned, I am thinking of making a version of Keyboard that is no longer a top level device but always uses the HID and see how that works.
 
Will have to take a look:

From this I am assuming you are using my HID_Keyboard branch as that is the only one that has that table.

It is interesting that the crash is not consistent. Also in that branch I may have left it in a state that does not crash but instead just does not work...
That is I have/had code that checked if the transfer it was looking at as bad had a NULL for pipe... Which would then reboot... Again not sure how that could happen,
Although suppose there could be a timing hole of maybe transfer added to queue, and then set the pipe? but before than interrupt that mucked with it?

As I have mentioned, I am thinking of making a version of Keyboard that is no longer a top level device but always uses the HID and see how that works.

Nope- I am using the master branch from Paul's repository so not sure how it got it there
 
Yes you are right, that part went in to keep that one phantom Keyboard (Logitech G Pro Wireless Mouse/Keyboard) wireless controller from causing the USB stuff to not work any more...
It had long packets and the like which was driving the usb code nuts...
 
@PaulStoffregen - Again looking at why the one keyboard will Fault sometimes and not others, and I am not sure if any of the others might or not...

As I mentioned:

The crashreport showed NULL pointer. Pretty sure same issue I reported back in
Where, early on, we get an USB ISR with an ERROR flag marked on it, and the code in followup_Error() then walks the transfers looking to recover, and it finds a transfer that it wants to process that has a NULL pipe:
Code:
Code:
				Pipe_t *haltedpipe = p->pipe;
is NULL and faults on the line:
Code:
Code:
				p = (Transfer_t *)(haltedpipe->qh.next & ~0x1F);

The question is, how does it get a transfer where the Pipe is NULL?

Was wondering if maybe something like in the code in ehci.cpp:
Code:
bool USBHost::queue_Transfer(Pipe_t *pipe, Transfer_t *transfer)
{
	// find halt qTD
	Transfer_t *halt = (Transfer_t *)(pipe->qh.next);
	while (!(halt->qtd.token & 0x40)) halt = (Transfer_t *)(halt->qtd.next);
	// transfer's token
	uint32_t token = transfer->qtd.token;
	// transfer becomes new halt qTD
	transfer->qtd.token = 0x40;
	// copy transfer non-token fields to halt
	halt->qtd.next = transfer->qtd.next;
[COLOR="#FF0000"]	halt->qtd.alt_next = transfer->qtd.alt_next;
	halt->qtd.buffer[0] = transfer->qtd.buffer[0]; // TODO: optimize memcpy, all
	halt->qtd.buffer[1] = transfer->qtd.buffer[1]; //       fields except token
	halt->qtd.buffer[2] = transfer->qtd.buffer[2];
	halt->qtd.buffer[3] = transfer->qtd.buffer[3];
	halt->qtd.buffer[4] = transfer->qtd.buffer[4];
[/COLOR]	halt->pipe = pipe;
	halt->buffer = transfer->buffer;
	halt->length = transfer->length;
	halt->setup = transfer->setup;
	halt->driver = transfer->driver;
If it is possible that somewhere in the Red lines, the ISR happens? i.e. the new item is linked in to the end but none of the other data like Pipe has been filled ?
 
I've tested a Logitech B100 Mouse... Wheel Button not working. Can someone fix it?

First guess - it hasn't been tested and does something unique - others may not have it.

It seems enabling the debug output stream would be needed showing message passed when the mouse wheel is moved.

If nothing shows maybe the first messages upon arrival may ID the device to add processing for the messages it is sending. Those may be needed in any case to include coverage.

Posting those may allow 'remote' fix to be suggested.
 
Found a solution. The problem is, that directly after the "usage=90003" (Wheel button) Value "1" event, 4 more "usage=90003" events with Value "0" follow without the button being released. Thus the value "1" is immediately overwritten again with "0". To me it looks like no 90004, 90005, 90006, 90007 events are generated (limited to 90003).


I've fixed it with a hack inside the Mouse.cpp:


void MouseController::hid_input_data(uint32_t usage, int32_t value) {

uint32_t usage_page = usage >> 16;
usage &= 0xFFFF;

if(usage == lastUsage) return;
lastUsage = usage;

...
 
Back
Top