Forum Rule: Always post complete source code & details to reproduce any issue!
Page 3 of 3 FirstFirst 1 2 3
Results 51 to 66 of 66

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

  1. #51
    So whats a good way of integrating this into the USBHost_t36 lib?

  2. #52
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    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 by KurtE; 08-21-2022 at 01:50 PM.

  3. #53
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    Update, the code has been merged into the main(master) USBHost_t36 branch

  4. #54
    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?

  5. #55
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    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
                                                                    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
    Unexpected packet IN. Time: 1.8505016
    Last edited by KurtE; 08-22-2022 at 08:59 PM.

  6. #56
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    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

  7. #57
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    8,429
    @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.

  8. #58
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    @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 by KurtE; 08-27-2022 at 01:02 PM.

  9. #59
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    8,429
    Quote Originally Posted by KurtE View Post
    @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)
        usage=70004, value=1(Keycode 4)
        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????

  10. #60
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    8,429
    @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

  11. #61
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    @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.

  12. #62
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    8,429
    @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

  13. #63
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    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.

  14. #64
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    8,429
    Quote Originally Posted by KurtE View Post
    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

  15. #65
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    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...

  16. #66
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    10,975
    @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;
    	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];
    	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 ?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •