Skip to main content
added 22711 characters in body
Source Link

EDIT: I have tried to take the approach used for GP2040-CE, with the same descriptors and the VID/PID of the Razer controller, but I just get the exact same result, even after adding handling for every possible feature request by the PS4 (other than authentication, of course).

EDIT: I have tried to take the approach used for GP2040-CE, with the same descriptors and the VID/PID of the Razer controller, but I just get the exact same result, even after adding handling for every possible feature request by the PS4 (other than authentication, of course). Also, here's what I see with USBTreeView:

    =========================== USB Port2 ===========================

Connection Status        : 0x01 (Device is connected)
Port Chain               : 1-2
Properties               : 0x01
 IsUserConnectable       : yes
 PortIsDebugCapable      : no
 PortHasMultiCompanions  : no
 PortConnectorIsTypeC    : no
ConnectionIndex          : 0x02 (Port 2)
CompanionIndex           : 0
 CompanionHubSymLnk      : USB#ROOT_HUB30#5&2ddeeb85&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
 CompanionPortNumber     : 0x06 (Port 6)
 -> CompanionPortChain   : 1-6

      ========================== Summary =========================
Vendor ID                : 0x1532 (Razer (Asia-Pacific) Pte Ltd.)
Product ID               : 0x0401
Manufacturer String      : "Unknown"
Product String           : "Arduino Leonardo"
Serial                   : ---
USB Version              : 2.0 (but 12 Mbit/s FullSpeed only)
Port maximum Speed       : High-Speed (Companion Port 1-6 is doing the SuperSpeed)
Device maximum Speed     : Full-Speed
Device Connection Speed  : Full-Speed
Self powered             : no
Demanded Current         : 500 mA
Used Endpoints           : 3

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : USB Input Device
Device Path 1            : \\?\USB#VID_1532&PID_0401#6&21a47d&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Device Path 2            : \\?\USB#VID_1532&PID_0401#6&21a47d&0&2#{0c320ff7-bd9b-42b6-bdaf-49feb9c91649}
Kernel Name              : \Device\USBPDO-6
Device ID                : USB\VID_1532&PID_0401\6&21A47D&0&2
Hardware IDs             : USB\VID_1532&PID_0401&REV_0100 USB\VID_1532&PID_0401
Driver KeyName           : {745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0010 (GUID_DEVCLASS_HIDCLASS)
Driver                   : \SystemRoot\System32\drivers\hidusb.sys (Version: 10.0.26100.5074  Date: 2025-09-09  Company: Microsoft Corporation)
Driver Inf               : C:\WINDOWS\inf\input.inf
Legacy BusType           : PNPBus
Class                    : HIDClass
Class GUID               : {745a17a0-74d3-11d0-b6fe-00a0c90f57da} (GUID_DEVCLASS_HIDCLASS)
Service                  : HidUsb
Enumerator               : USB
Location Info            : Port_#0002.Hub_#0002
Address                  : 2
Location IDs             : PCIROOT(0)#PCI(0801)#PCI(0004)#USBROOT(0)#USB(2), ACPI(_SB_)#ACPI(PCI0)#ACPI(GP17)#ACPI(XHC1)#ACPI(RHUB)#ACPI(PRT2)
Container ID             : {daf9550e-78dd-11f0-807d-ac50dea9a6f2}
Manufacturer Info        : (Standard system devices)
Capabilities             : 0x84 (Removable, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
First Install Date       : 2025-08-15 15:09:11
Last Arrival Date        : 2025-10-03 23:40:38
Bus Relations            : HID\VID_1532&PID_0401&Col01\7&2d58bc48&0&0000, HID\VID_1532&PID_0401&Col02\7&2d58bc48&0&0001
SelectiveSuspendEnabled  : 0
EnhancedPowerMgmtEnabled : 1
Power State              : D0 (supported: D0, D3, wake from D0)

        +++++++++++++++++ Registry USB Flags +++++++++++++++++
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\153204010100
 osvc                    : REG_BINARY 00 00

        ---------------- Connection Information ---------------
Connection Index         : 0x02 (Port 2)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x01 (Configuration 1)
Device Address           : 0x01 (1)
Is Hub                   : 0x00 (no)
Device Bus Speed         : 0x01 (Full-Speed)
Number of open Pipes     : 0x02 (2 pipes to data endpoints)
Pipe[0]                  : EndpointID=1  Direction=IN   ScheduleOffset=0  Type=Interrupt  wMaxPacketSize=0x40    bInterval=5   -> 718 Bits/ms = 89750 Bytes/s
Pipe[1]                  : EndpointID=3  Direction=OUT  ScheduleOffset=0  Type=Interrupt  wMaxPacketSize=0x40    bInterval=5   -> 718 Bits/ms = 89750 Bytes/s
Data (HexDump)           : 02 00 00 00 12 01 00 02 00 00 00 40 32 15 01 04   ...........@2...
                           00 01 01 02 00 01 01 01 00 01 00 02 00 00 00 01   ................
                           00 00 00 07 05 81 03 40 00 05 00 00 00 00 07 05   .......@........
                           03 03 40 00 05 00 00 00 00                        ..@......

        --------------- Connection Information V2 -------------
Connection Index         : 0x02 (2)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x03
 Usb110                  : 1 (yes, port supports USB 1.1)
 Usb200                  : 1 (yes, port supports USB 2.0)
 Usb300                  : 0 (no, port not supports USB 3.0) -> but Companion Port 1-6 does
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Device is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Device is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Device is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00
Data (HexDump)           : 02 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

    ---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x200 (USB Version 2.0) -> but device is Full-Speed only
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x40 (64 bytes)
idVendor                 : 0x1532 (Razer (Asia-Pacific) Pte Ltd.)
idProduct                : 0x0401
bcdDevice                : 0x0100
iManufacturer            : 0x01 (String Descriptor 1)
 Language 0x0409         : "Unknown"
iProduct                 : 0x02 (String Descriptor 2)
 Language 0x0409         : "Arduino Leonardo"
iSerialNumber            : 0x00 (No String Descriptor)
bNumConfigurations       : 0x01 (1 Configuration)
Data (HexDump)           : 12 01 00 02 00 00 00 40 32 15 01 04 00 01 01 02   .......@2.......
                           00 01                                             ..

    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0029 (41 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0x80
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x00 (no)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0xFA (500 mA)
Data (HexDump)           : 09 02 29 00 01 01 00 80 FA 09 04 00 00 02 03 00   ..).............
                           00 00 09 21 11 01 00 01 22 E1 01 07 05 81 03 40   ...!...."......@
                           00 05 07 05 03 03 40 00 05                        ......@..

        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00 (Interface 0)
bAlternateSetting        : 0x00
bNumEndpoints            : 0x02 (2 Endpoints)
bInterfaceClass          : 0x03 (HID - Human Interface Device)
bInterfaceSubClass       : 0x00 (None)
bInterfaceProtocol       : 0x00 (None)
iInterface               : 0x00 (No String Descriptor)
Data (HexDump)           : 09 04 00 00 02 03 00 00 00                        .........

        ------------------- HID Descriptor --------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x21 (HID Descriptor)
bcdHID                   : 0x0111 (HID Version 1.11)
bCountryCode             : 0x00 (00 = not localized)
bNumDescriptors          : 0x01
Data (HexDump)           : 09 21 11 01 00 01 22 E1 01                        .!...."..
Descriptor 1:
bDescriptorType          : 0x22 (Class=Report)
wDescriptorLength        : 0x01E1 (481 bytes)
  05 01             Usage Page (Generic Desktop Controls)
  09 05             Usage (Gamepad)
  A1 01             Collection (Application)
  85 01               Report ID (0x01)
  09 30               Usage (Direction-X)
  09 31               Usage (Direction-Y)
  09 32               Usage (Direction-Z)
  09 35               Usage (Rotate-Z)
  15 00               Logical Minimum (0)
  26 FF 00            Logical Maximum (255)
  75 08               Report Size (8)
  95 04               Report Count (4)
  81 02               Input (Var)
  09 39               Usage (Hat Switch)
  15 00               Logical Minimum (0)
  25 07               Logical Maximum (7)
  35 00               Physical Minimum (0)
  46 3B 01            Physical Maximum (315)
  65 14               Unit (0x14)
  75 04               Report Size (4)
  95 01               Report Count (1)
  81 42               Input (Var, NullState)
  65 00               Unit (0x00)
  05 09               Usage Page (Buttons)
  19 01               Usage Minimum (1)
  29 0E               Usage Maximum (14)
  15 00               Logical Minimum (0)
  25 01               Logical Maximum (1)
  75 01               Report Size (1)
  95 0E               Report Count (14)
  81 02               Input (Var)
  06 00 FF            Usage Page (Vendor Defined)
  09 20               Usage (unk)
  75 06               Report Size (6)
  95 01               Report Count (1)
  81 02               Input (Var)
  05 01               Usage Page (Generic Desktop Controls)
  09 33               Usage (Rotate-X)
  09 34               Usage (Rotate-Y)
  15 00               Logical Minimum (0)
  26 FF 00            Logical Maximum (255)
  75 08               Report Size (8)
  95 02               Report Count (2)
  81 02               Input (Var)
  06 00 FF            Usage Page (Vendor Defined)
  09 21               Usage (unk)
  95 36               Report Count (54)
  81 02               Input (Var)
  85 05               Report ID (0x05)
  09 22               Usage (unk)
  95 1F               Report Count (31)
  91 02               Output (Var)
  85 03               Report ID (0x03)
  0A 21 27            Usage (unk)
  95 2F               Report Count (47)
  B1 02               Feature (Var)
  85 02               Report ID (0x02)
  09 24               Usage (unk)
  95 24               Report Count (36)
  B1 02               Feature (Var)
  85 08               Report ID (0x08)
  09 25               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 10               Report ID (0x10)
  09 26               Usage (unk)
  95 04               Report Count (4)
  B1 02               Feature (Var)
  85 11               Report ID (0x11)
  09 27               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 12               Report ID (0x12)
  06 02 FF            Usage Page (Vendor Defined)
  09 21               Usage (unk)
  95 0F               Report Count (15)
  B1 02               Feature (Var)
  85 13               Report ID (0x13)
  09 22               Usage (unk)
  95 16               Report Count (22)
  B1 02               Feature (Var)
  85 14               Report ID (0x14)
  06 05 FF            Usage Page (Vendor Defined)
  09 20               Usage (unk)
  95 10               Report Count (16)
  B1 02               Feature (Var)
  85 15               Report ID (0x15)
  09 21               Usage (unk)
  95 2C               Report Count (44)
  B1 02               Feature (Var)
  06 80 FF            Usage Page (Vendor Defined)
  85 80               Report ID (0x80)
  09 20               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 81               Report ID (0x81)
  09 21               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 82               Report ID (0x82)
  09 22               Usage (unk)
  95 05               Report Count (5)
  B1 02               Feature (Var)
  85 83               Report ID (0x83)
  09 23               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 84               Report ID (0x84)
  09 24               Usage (unk)
  95 04               Report Count (4)
  B1 02               Feature (Var)
  85 85               Report ID (0x85)
  09 25               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 86               Report ID (0x86)
  09 26               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 87               Report ID (0x87)
  09 27               Usage (unk)
  95 23               Report Count (35)
  B1 02               Feature (Var)
  85 88               Report ID (0x88)
  09 28               Usage (unk)
  95 22               Report Count (34)
  B1 02               Feature (Var)
  85 89               Report ID (0x89)
  09 29               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 90               Report ID (0x90)
  09 30               Usage (unk)
  95 05               Report Count (5)
  B1 02               Feature (Var)
  85 91               Report ID (0x91)
  09 31               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 92               Report ID (0x92)
  09 32               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 93               Report ID (0x93)
  09 33               Usage (unk)
  95 0C               Report Count (12)
  B1 02               Feature (Var)
  85 A0               Report ID (0xA0)
  09 40               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 A1               Report ID (0xA1)
  09 41               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A2               Report ID (0xA2)
  09 42               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A3               Report ID (0xA3)
  09 43               Usage (unk)
  95 30               Report Count (48)
  B1 02               Feature (Var)
  85 A4               Report ID (0xA4)
  09 44               Usage (unk)
  95 0D               Report Count (13)
  B1 02               Feature (Var)
  85 A5               Report ID (0xA5)
  09 45               Usage (unk)
  95 15               Report Count (21)
  B1 02               Feature (Var)
  85 A6               Report ID (0xA6)
  09 46               Usage (unk)
  95 15               Report Count (21)
  B1 02               Feature (Var)
  85 A7               Report ID (0xA7)
  09 4A               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A8               Report ID (0xA8)
  09 4B               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A9               Report ID (0xA9)
  09 4C               Usage (unk)
  95 08               Report Count (8)
  B1 02               Feature (Var)
  85 AA               Report ID (0xAA)
  09 4E               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 AB               Report ID (0xAB)
  09 4F               Usage (unk)
  95 39               Report Count (57)
  B1 02               Feature (Var)
  85 AC               Report ID (0xAC)
  09 50               Usage (unk)
  95 39               Report Count (57)
  B1 02               Feature (Var)
  85 AD               Report ID (0xAD)
  09 51               Usage (unk)
  95 0B               Report Count (11)
  B1 02               Feature (Var)
  85 AE               Report ID (0xAE)
  09 52               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 AF               Report ID (0xAF)
  09 53               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 B0               Report ID (0xB0)
  09 54               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  C0                End Collection
  06 F0 FF          Usage Page (Vendor Defined)
  09 40             Usage (unk)
  A1 01             Collection (Application)
  85 F0               Report ID (0xF0)
  09 47               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  85 F1               Report ID (0xF1)
  09 48               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  85 F2               Report ID (0xF2)
  09 49               Usage (unk)
  95 0F               Report Count (15)
  B1 02               Feature (Var)
  85 F3               Report ID (0xF3)
  0A 01 47            Usage (unk)
  95 07               Report Count (7)
  B1 02               Feature (Var)
  C0                End Collection
Data (HexDump)           : 05 01 09 05 A1 01 85 01 09 30 09 31 09 32 09 35   .........0.1.2.5
                           15 00 26 FF 00 75 08 95 04 81 02 09 39 15 00 25   ..&..u......9..%
                           07 35 00 46 3B 01 65 14 75 04 95 01 81 42 65 00   .5.F;.e.u....Be.
                           05 09 19 01 29 0E 15 00 25 01 75 01 95 0E 81 02   ....)...%.u.....
                           06 00 FF 09 20 75 06 95 01 81 02 05 01 09 33 09   .... u........3.
                           34 15 00 26 FF 00 75 08 95 02 81 02 06 00 FF 09   4..&..u.........
                           21 95 36 81 02 85 05 09 22 95 1F 91 02 85 03 0A   !.6.....".......
                           21 27 95 2F B1 02 85 02 09 24 95 24 B1 02 85 08   !'./.....$.$....
                           09 25 95 03 B1 02 85 10 09 26 95 04 B1 02 85 11   .%.......&......
                           09 27 95 02 B1 02 85 12 06 02 FF 09 21 95 0F B1   .'..........!...
                           02 85 13 09 22 95 16 B1 02 85 14 06 05 FF 09 20   ....".......... 
                           95 10 B1 02 85 15 09 21 95 2C B1 02 06 80 FF 85   .......!.,......
                           80 09 20 95 06 B1 02 85 81 09 21 95 06 B1 02 85   .. .......!.....
                           82 09 22 95 05 B1 02 85 83 09 23 95 01 B1 02 85   ..".......#.....
                           84 09 24 95 04 B1 02 85 85 09 25 95 06 B1 02 85   ..$.......%.....
                           86 09 26 95 06 B1 02 85 87 09 27 95 23 B1 02 85   ..&.......'.#...
                           88 09 28 95 22 B1 02 85 89 09 29 95 02 B1 02 85   ..(.".....).....
                           90 09 30 95 05 B1 02 85 91 09 31 95 03 B1 02 85   ..0.......1.....
                           92 09 32 95 03 B1 02 85 93 09 33 95 0C B1 02 85   ..2.......3.....
                           A0 09 40 95 06 B1 02 85 A1 09 41 95 01 B1 02 85   [email protected].....
                           A2 09 42 95 01 B1 02 85 A3 09 43 95 30 B1 02 85   ..B.......C.0...
                           A4 09 44 95 0D B1 02 85 A5 09 45 95 15 B1 02 85   ..D.......E.....
                           A6 09 46 95 15 B1 02 85 A7 09 4A 95 01 B1 02 85   ..F.......J.....
                           A8 09 4B 95 01 B1 02 85 A9 09 4C 95 08 B1 02 85   ..K.......L.....
                           AA 09 4E 95 01 B1 02 85 AB 09 4F 95 39 B1 02 85   ..N.......O.9...
                           AC 09 50 95 39 B1 02 85 AD 09 51 95 0B B1 02 85   ..P.9.....Q.....
                           AE 09 52 95 01 B1 02 85 AF 09 53 95 02 B1 02 85   ..R.......S.....
                           B0 09 54 95 3F B1 02 C0 06 F0 FF 09 40 A1 01 85   ..T.?.......@...
                           F0 09 47 95 3F B1 02 85 F1 09 48 95 3F B1 02 85   ..G.?.....H.?...
                           F2 09 49 95 0F B1 02 85 F3 0A 01 47 95 07 B1 02   ..I........G....
                           C0                                                .

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x05 (5 ms)
Data (HexDump)           : 07 05 81 03 40 00 05                              ....@..

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x03 (Direction=OUT EndpointID=3)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x05 (5 ms)
Data (HexDump)           : 07 05 03 03 40 00 05                              ....@..

    ----------------- Device Qualifier Descriptor -----------------
Error                    : request skipped because low-speed device

      -------------------- String Descriptors -------------------
             ------ String Descriptor 0 ------
bLength                  : 0x04 (4 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language ID[0]           : 0x0409 (English - United States)
Data (HexDump)           : 04 03 09 04                                       ....
             ------ String Descriptor 1 ------
bLength                  : 0x10 (16 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Unknown"
Data (HexDump)           : 10 03 55 00 6E 00 6B 00 6E 00 6F 00 77 00 6E 00   ..U.n.k.n.o.w.n.
             ------ String Descriptor 2 ------
bLength                  : 0x22 (34 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Arduino Leonardo"
Data (HexDump)           : 22 03 41 00 72 00 64 00 75 00 69 00 6E 00 6F 00   ".A.r.d.u.i.n.o.
                           20 00 4C 00 65 00 6F 00 6E 00 61 00 72 00 64 00    .L.e.o.n.a.r.d.
                           6F 00                                             o.

EDIT: I have tried to take the approach used for GP2040-CE, with the same descriptors and the VID/PID of the Razer controller, but I just get the exact same result, even after adding handling for every possible feature request by the PS4 (other than authentication, of course).

EDIT: I have tried to take the approach used for GP2040-CE, with the same descriptors and the VID/PID of the Razer controller, but I just get the exact same result, even after adding handling for every possible feature request by the PS4 (other than authentication, of course). Also, here's what I see with USBTreeView:

    =========================== USB Port2 ===========================

Connection Status        : 0x01 (Device is connected)
Port Chain               : 1-2
Properties               : 0x01
 IsUserConnectable       : yes
 PortIsDebugCapable      : no
 PortHasMultiCompanions  : no
 PortConnectorIsTypeC    : no
ConnectionIndex          : 0x02 (Port 2)
CompanionIndex           : 0
 CompanionHubSymLnk      : USB#ROOT_HUB30#5&2ddeeb85&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
 CompanionPortNumber     : 0x06 (Port 6)
 -> CompanionPortChain   : 1-6

      ========================== Summary =========================
Vendor ID                : 0x1532 (Razer (Asia-Pacific) Pte Ltd.)
Product ID               : 0x0401
Manufacturer String      : "Unknown"
Product String           : "Arduino Leonardo"
Serial                   : ---
USB Version              : 2.0 (but 12 Mbit/s FullSpeed only)
Port maximum Speed       : High-Speed (Companion Port 1-6 is doing the SuperSpeed)
Device maximum Speed     : Full-Speed
Device Connection Speed  : Full-Speed
Self powered             : no
Demanded Current         : 500 mA
Used Endpoints           : 3

      ======================== USB Device ========================

        +++++++++++++++++ Device Information ++++++++++++++++++
Device Description       : USB Input Device
Device Path 1            : \\?\USB#VID_1532&PID_0401#6&21a47d&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Device Path 2            : \\?\USB#VID_1532&PID_0401#6&21a47d&0&2#{0c320ff7-bd9b-42b6-bdaf-49feb9c91649}
Kernel Name              : \Device\USBPDO-6
Device ID                : USB\VID_1532&PID_0401\6&21A47D&0&2
Hardware IDs             : USB\VID_1532&PID_0401&REV_0100 USB\VID_1532&PID_0401
Driver KeyName           : {745a17a0-74d3-11d0-b6fe-00a0c90f57da}\0010 (GUID_DEVCLASS_HIDCLASS)
Driver                   : \SystemRoot\System32\drivers\hidusb.sys (Version: 10.0.26100.5074  Date: 2025-09-09  Company: Microsoft Corporation)
Driver Inf               : C:\WINDOWS\inf\input.inf
Legacy BusType           : PNPBus
Class                    : HIDClass
Class GUID               : {745a17a0-74d3-11d0-b6fe-00a0c90f57da} (GUID_DEVCLASS_HIDCLASS)
Service                  : HidUsb
Enumerator               : USB
Location Info            : Port_#0002.Hub_#0002
Address                  : 2
Location IDs             : PCIROOT(0)#PCI(0801)#PCI(0004)#USBROOT(0)#USB(2), ACPI(_SB_)#ACPI(PCI0)#ACPI(GP17)#ACPI(XHC1)#ACPI(RHUB)#ACPI(PRT2)
Container ID             : {daf9550e-78dd-11f0-807d-ac50dea9a6f2}
Manufacturer Info        : (Standard system devices)
Capabilities             : 0x84 (Removable, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
First Install Date       : 2025-08-15 15:09:11
Last Arrival Date        : 2025-10-03 23:40:38
Bus Relations            : HID\VID_1532&PID_0401&Col01\7&2d58bc48&0&0000, HID\VID_1532&PID_0401&Col02\7&2d58bc48&0&0001
SelectiveSuspendEnabled  : 0
EnhancedPowerMgmtEnabled : 1
Power State              : D0 (supported: D0, D3, wake from D0)

        +++++++++++++++++ Registry USB Flags +++++++++++++++++
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\153204010100
 osvc                    : REG_BINARY 00 00

        ---------------- Connection Information ---------------
Connection Index         : 0x02 (Port 2)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x01 (Configuration 1)
Device Address           : 0x01 (1)
Is Hub                   : 0x00 (no)
Device Bus Speed         : 0x01 (Full-Speed)
Number of open Pipes     : 0x02 (2 pipes to data endpoints)
Pipe[0]                  : EndpointID=1  Direction=IN   ScheduleOffset=0  Type=Interrupt  wMaxPacketSize=0x40    bInterval=5   -> 718 Bits/ms = 89750 Bytes/s
Pipe[1]                  : EndpointID=3  Direction=OUT  ScheduleOffset=0  Type=Interrupt  wMaxPacketSize=0x40    bInterval=5   -> 718 Bits/ms = 89750 Bytes/s
Data (HexDump)           : 02 00 00 00 12 01 00 02 00 00 00 40 32 15 01 04   ...........@2...
                           00 01 01 02 00 01 01 01 00 01 00 02 00 00 00 01   ................
                           00 00 00 07 05 81 03 40 00 05 00 00 00 00 07 05   .......@........
                           03 03 40 00 05 00 00 00 00                        ..@......

        --------------- Connection Information V2 -------------
Connection Index         : 0x02 (2)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x03
 Usb110                  : 1 (yes, port supports USB 1.1)
 Usb200                  : 1 (yes, port supports USB 2.0)
 Usb300                  : 0 (no, port not supports USB 3.0) -> but Companion Port 1-6 does
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Device is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Device is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Device is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00
Data (HexDump)           : 02 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

    ---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x200 (USB Version 2.0) -> but device is Full-Speed only
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x40 (64 bytes)
idVendor                 : 0x1532 (Razer (Asia-Pacific) Pte Ltd.)
idProduct                : 0x0401
bcdDevice                : 0x0100
iManufacturer            : 0x01 (String Descriptor 1)
 Language 0x0409         : "Unknown"
iProduct                 : 0x02 (String Descriptor 2)
 Language 0x0409         : "Arduino Leonardo"
iSerialNumber            : 0x00 (No String Descriptor)
bNumConfigurations       : 0x01 (1 Configuration)
Data (HexDump)           : 12 01 00 02 00 00 00 40 32 15 01 04 00 01 01 02   .......@2.......
                           00 01                                             ..

    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0029 (41 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0x80
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x00 (no)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0xFA (500 mA)
Data (HexDump)           : 09 02 29 00 01 01 00 80 FA 09 04 00 00 02 03 00   ..).............
                           00 00 09 21 11 01 00 01 22 E1 01 07 05 81 03 40   ...!...."......@
                           00 05 07 05 03 03 40 00 05                        ......@..

        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00 (Interface 0)
bAlternateSetting        : 0x00
bNumEndpoints            : 0x02 (2 Endpoints)
bInterfaceClass          : 0x03 (HID - Human Interface Device)
bInterfaceSubClass       : 0x00 (None)
bInterfaceProtocol       : 0x00 (None)
iInterface               : 0x00 (No String Descriptor)
Data (HexDump)           : 09 04 00 00 02 03 00 00 00                        .........

        ------------------- HID Descriptor --------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x21 (HID Descriptor)
bcdHID                   : 0x0111 (HID Version 1.11)
bCountryCode             : 0x00 (00 = not localized)
bNumDescriptors          : 0x01
Data (HexDump)           : 09 21 11 01 00 01 22 E1 01                        .!...."..
Descriptor 1:
bDescriptorType          : 0x22 (Class=Report)
wDescriptorLength        : 0x01E1 (481 bytes)
  05 01             Usage Page (Generic Desktop Controls)
  09 05             Usage (Gamepad)
  A1 01             Collection (Application)
  85 01               Report ID (0x01)
  09 30               Usage (Direction-X)
  09 31               Usage (Direction-Y)
  09 32               Usage (Direction-Z)
  09 35               Usage (Rotate-Z)
  15 00               Logical Minimum (0)
  26 FF 00            Logical Maximum (255)
  75 08               Report Size (8)
  95 04               Report Count (4)
  81 02               Input (Var)
  09 39               Usage (Hat Switch)
  15 00               Logical Minimum (0)
  25 07               Logical Maximum (7)
  35 00               Physical Minimum (0)
  46 3B 01            Physical Maximum (315)
  65 14               Unit (0x14)
  75 04               Report Size (4)
  95 01               Report Count (1)
  81 42               Input (Var, NullState)
  65 00               Unit (0x00)
  05 09               Usage Page (Buttons)
  19 01               Usage Minimum (1)
  29 0E               Usage Maximum (14)
  15 00               Logical Minimum (0)
  25 01               Logical Maximum (1)
  75 01               Report Size (1)
  95 0E               Report Count (14)
  81 02               Input (Var)
  06 00 FF            Usage Page (Vendor Defined)
  09 20               Usage (unk)
  75 06               Report Size (6)
  95 01               Report Count (1)
  81 02               Input (Var)
  05 01               Usage Page (Generic Desktop Controls)
  09 33               Usage (Rotate-X)
  09 34               Usage (Rotate-Y)
  15 00               Logical Minimum (0)
  26 FF 00            Logical Maximum (255)
  75 08               Report Size (8)
  95 02               Report Count (2)
  81 02               Input (Var)
  06 00 FF            Usage Page (Vendor Defined)
  09 21               Usage (unk)
  95 36               Report Count (54)
  81 02               Input (Var)
  85 05               Report ID (0x05)
  09 22               Usage (unk)
  95 1F               Report Count (31)
  91 02               Output (Var)
  85 03               Report ID (0x03)
  0A 21 27            Usage (unk)
  95 2F               Report Count (47)
  B1 02               Feature (Var)
  85 02               Report ID (0x02)
  09 24               Usage (unk)
  95 24               Report Count (36)
  B1 02               Feature (Var)
  85 08               Report ID (0x08)
  09 25               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 10               Report ID (0x10)
  09 26               Usage (unk)
  95 04               Report Count (4)
  B1 02               Feature (Var)
  85 11               Report ID (0x11)
  09 27               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 12               Report ID (0x12)
  06 02 FF            Usage Page (Vendor Defined)
  09 21               Usage (unk)
  95 0F               Report Count (15)
  B1 02               Feature (Var)
  85 13               Report ID (0x13)
  09 22               Usage (unk)
  95 16               Report Count (22)
  B1 02               Feature (Var)
  85 14               Report ID (0x14)
  06 05 FF            Usage Page (Vendor Defined)
  09 20               Usage (unk)
  95 10               Report Count (16)
  B1 02               Feature (Var)
  85 15               Report ID (0x15)
  09 21               Usage (unk)
  95 2C               Report Count (44)
  B1 02               Feature (Var)
  06 80 FF            Usage Page (Vendor Defined)
  85 80               Report ID (0x80)
  09 20               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 81               Report ID (0x81)
  09 21               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 82               Report ID (0x82)
  09 22               Usage (unk)
  95 05               Report Count (5)
  B1 02               Feature (Var)
  85 83               Report ID (0x83)
  09 23               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 84               Report ID (0x84)
  09 24               Usage (unk)
  95 04               Report Count (4)
  B1 02               Feature (Var)
  85 85               Report ID (0x85)
  09 25               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 86               Report ID (0x86)
  09 26               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 87               Report ID (0x87)
  09 27               Usage (unk)
  95 23               Report Count (35)
  B1 02               Feature (Var)
  85 88               Report ID (0x88)
  09 28               Usage (unk)
  95 22               Report Count (34)
  B1 02               Feature (Var)
  85 89               Report ID (0x89)
  09 29               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 90               Report ID (0x90)
  09 30               Usage (unk)
  95 05               Report Count (5)
  B1 02               Feature (Var)
  85 91               Report ID (0x91)
  09 31               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 92               Report ID (0x92)
  09 32               Usage (unk)
  95 03               Report Count (3)
  B1 02               Feature (Var)
  85 93               Report ID (0x93)
  09 33               Usage (unk)
  95 0C               Report Count (12)
  B1 02               Feature (Var)
  85 A0               Report ID (0xA0)
  09 40               Usage (unk)
  95 06               Report Count (6)
  B1 02               Feature (Var)
  85 A1               Report ID (0xA1)
  09 41               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A2               Report ID (0xA2)
  09 42               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A3               Report ID (0xA3)
  09 43               Usage (unk)
  95 30               Report Count (48)
  B1 02               Feature (Var)
  85 A4               Report ID (0xA4)
  09 44               Usage (unk)
  95 0D               Report Count (13)
  B1 02               Feature (Var)
  85 A5               Report ID (0xA5)
  09 45               Usage (unk)
  95 15               Report Count (21)
  B1 02               Feature (Var)
  85 A6               Report ID (0xA6)
  09 46               Usage (unk)
  95 15               Report Count (21)
  B1 02               Feature (Var)
  85 A7               Report ID (0xA7)
  09 4A               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A8               Report ID (0xA8)
  09 4B               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 A9               Report ID (0xA9)
  09 4C               Usage (unk)
  95 08               Report Count (8)
  B1 02               Feature (Var)
  85 AA               Report ID (0xAA)
  09 4E               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 AB               Report ID (0xAB)
  09 4F               Usage (unk)
  95 39               Report Count (57)
  B1 02               Feature (Var)
  85 AC               Report ID (0xAC)
  09 50               Usage (unk)
  95 39               Report Count (57)
  B1 02               Feature (Var)
  85 AD               Report ID (0xAD)
  09 51               Usage (unk)
  95 0B               Report Count (11)
  B1 02               Feature (Var)
  85 AE               Report ID (0xAE)
  09 52               Usage (unk)
  95 01               Report Count (1)
  B1 02               Feature (Var)
  85 AF               Report ID (0xAF)
  09 53               Usage (unk)
  95 02               Report Count (2)
  B1 02               Feature (Var)
  85 B0               Report ID (0xB0)
  09 54               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  C0                End Collection
  06 F0 FF          Usage Page (Vendor Defined)
  09 40             Usage (unk)
  A1 01             Collection (Application)
  85 F0               Report ID (0xF0)
  09 47               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  85 F1               Report ID (0xF1)
  09 48               Usage (unk)
  95 3F               Report Count (63)
  B1 02               Feature (Var)
  85 F2               Report ID (0xF2)
  09 49               Usage (unk)
  95 0F               Report Count (15)
  B1 02               Feature (Var)
  85 F3               Report ID (0xF3)
  0A 01 47            Usage (unk)
  95 07               Report Count (7)
  B1 02               Feature (Var)
  C0                End Collection
Data (HexDump)           : 05 01 09 05 A1 01 85 01 09 30 09 31 09 32 09 35   .........0.1.2.5
                           15 00 26 FF 00 75 08 95 04 81 02 09 39 15 00 25   ..&..u......9..%
                           07 35 00 46 3B 01 65 14 75 04 95 01 81 42 65 00   .5.F;.e.u....Be.
                           05 09 19 01 29 0E 15 00 25 01 75 01 95 0E 81 02   ....)...%.u.....
                           06 00 FF 09 20 75 06 95 01 81 02 05 01 09 33 09   .... u........3.
                           34 15 00 26 FF 00 75 08 95 02 81 02 06 00 FF 09   4..&..u.........
                           21 95 36 81 02 85 05 09 22 95 1F 91 02 85 03 0A   !.6.....".......
                           21 27 95 2F B1 02 85 02 09 24 95 24 B1 02 85 08   !'./.....$.$....
                           09 25 95 03 B1 02 85 10 09 26 95 04 B1 02 85 11   .%.......&......
                           09 27 95 02 B1 02 85 12 06 02 FF 09 21 95 0F B1   .'..........!...
                           02 85 13 09 22 95 16 B1 02 85 14 06 05 FF 09 20   ....".......... 
                           95 10 B1 02 85 15 09 21 95 2C B1 02 06 80 FF 85   .......!.,......
                           80 09 20 95 06 B1 02 85 81 09 21 95 06 B1 02 85   .. .......!.....
                           82 09 22 95 05 B1 02 85 83 09 23 95 01 B1 02 85   ..".......#.....
                           84 09 24 95 04 B1 02 85 85 09 25 95 06 B1 02 85   ..$.......%.....
                           86 09 26 95 06 B1 02 85 87 09 27 95 23 B1 02 85   ..&.......'.#...
                           88 09 28 95 22 B1 02 85 89 09 29 95 02 B1 02 85   ..(.".....).....
                           90 09 30 95 05 B1 02 85 91 09 31 95 03 B1 02 85   ..0.......1.....
                           92 09 32 95 03 B1 02 85 93 09 33 95 0C B1 02 85   ..2.......3.....
                           A0 09 40 95 06 B1 02 85 A1 09 41 95 01 B1 02 85   [email protected].....
                           A2 09 42 95 01 B1 02 85 A3 09 43 95 30 B1 02 85   ..B.......C.0...
                           A4 09 44 95 0D B1 02 85 A5 09 45 95 15 B1 02 85   ..D.......E.....
                           A6 09 46 95 15 B1 02 85 A7 09 4A 95 01 B1 02 85   ..F.......J.....
                           A8 09 4B 95 01 B1 02 85 A9 09 4C 95 08 B1 02 85   ..K.......L.....
                           AA 09 4E 95 01 B1 02 85 AB 09 4F 95 39 B1 02 85   ..N.......O.9...
                           AC 09 50 95 39 B1 02 85 AD 09 51 95 0B B1 02 85   ..P.9.....Q.....
                           AE 09 52 95 01 B1 02 85 AF 09 53 95 02 B1 02 85   ..R.......S.....
                           B0 09 54 95 3F B1 02 C0 06 F0 FF 09 40 A1 01 85   ..T.?.......@...
                           F0 09 47 95 3F B1 02 85 F1 09 48 95 3F B1 02 85   ..G.?.....H.?...
                           F2 09 49 95 0F B1 02 85 F3 0A 01 47 95 07 B1 02   ..I........G....
                           C0                                                .

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x05 (5 ms)
Data (HexDump)           : 07 05 81 03 40 00 05                              ....@..

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x03 (Direction=OUT EndpointID=3)
bmAttributes             : 0x03 (TransferType=Interrupt)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x05 (5 ms)
Data (HexDump)           : 07 05 03 03 40 00 05                              ....@..

    ----------------- Device Qualifier Descriptor -----------------
Error                    : request skipped because low-speed device

      -------------------- String Descriptors -------------------
             ------ String Descriptor 0 ------
bLength                  : 0x04 (4 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language ID[0]           : 0x0409 (English - United States)
Data (HexDump)           : 04 03 09 04                                       ....
             ------ String Descriptor 1 ------
bLength                  : 0x10 (16 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Unknown"
Data (HexDump)           : 10 03 55 00 6E 00 6B 00 6E 00 6F 00 77 00 6E 00   ..U.n.k.n.o.w.n.
             ------ String Descriptor 2 ------
bLength                  : 0x22 (34 bytes)
bDescriptorType          : 0x03 (String Descriptor)
Language 0x0409          : "Arduino Leonardo"
Data (HexDump)           : 22 03 41 00 72 00 64 00 75 00 69 00 6E 00 6F 00   ".A.r.d.u.i.n.o.
                           20 00 4C 00 65 00 6F 00 6E 00 61 00 72 00 64 00    .L.e.o.n.a.r.d.
                           6F 00                                             o.
added 1229 characters in body
Source Link
struct DS4Report {
  uint8_t reportId;reportID;
  uint8_t leftStickX;
  uint8_t leftStickY;
  uint8_t rightStickX;
  uint8_t rightStickY;
  uint8_t dpadButtons;dpad : 4;
  uint8_tuint16_t buttons;buttonWest : 1;
  uint16_t buttonSouth : 1;
  uint16_t buttonEast : 1;
  uint16_t buttonNorth : 1;
  uint16_t buttonL1 : 1;
  uint16_t buttonR1 : 1;
  uint16_t buttonL2 : 1;
  uint16_t buttonR2 : 1;
  uint16_t buttonSelect : 1;
  uint16_t buttonStart : 1;
  uint16_t buttonL3 : 1;
  uint16_t buttonR3 : 1;
  uint16_t buttonHome : 1;
  uint16_t buttonTouchpad : 1;
  uint8_t psButton;reportCounter : 6;
  uint8_t triggerLeft;leftTrigger;
  uint8_t triggerRight;rightTrigger;
  uint16_t axisTiming;
  uint8_t timestamp[3];battery;
  uint8_t batteryLevel;reserved0;
  int16_t gyroX;gyrox;
  int16_t gyroY;gyroy;
  int16_t gyroZ;gyroz;
  int16_t accelX;accx;
  int16_t accelY;accy;
  int16_t accelZ;accz;
  uint8_t reserved[5];misc[4];
  uint8_t touchpad[33];powerLevel : 4;
  uint8_t charging : 1;
  uint8_t headphones : 1;
  uint8_t microphone : 1;
  uint8_t extension : 1;
  uint8_t extData0 : 1;
  uint8_t extData1 : 1;
  uint8_t notConnected : 1;
  uint8_t extData3 : 5;
  uint8_t misc2;
  uint8_t tpadIncrement;
  uint8_t touchpad_counter_p1 : 7;
  uint8_t touchpad_unpressed_p1 : 1;
  uint8_t touch1_pos1;
  uint8_t touch1_pos2;
  uint8_t touch1_pos3;
  uint8_t touchpad_counter_p2 : 7;
  uint8_t touchpad_unpressed_p2 : 1;
  uint8_t touch2_pos1;
  uint8_t touch2_pos2;
  uint8_t touch2_pos3;
  uint8_t mystery2[22];
} __attribute__((packed));

DS4Report report;
volatile bool psPressed = false;
volatile uint32_t timestamp = 0;
volatile uint8_t reportCounter = 0;
unsigned long lastToggle = 0;
unsigned long lastReport = 0;

void writeToEndpoint(const uint8_t* data, uint8_t len) {
  for (uint8_t i = 0; i < len; i++) {
    UEDATX = data[i];
  }
}

void txInterruptCallback() {
  reportCounter = (reportCounter + 1) & 0x3F;
  report.psButtonbuttonHome = (psPressed ? 0x01 : 0x00) | (reportCounter << 2);
  
  timestamp++;
  report.timestamp[0] = writeToEndpoint(timestamp(const >>uint8_t*)&report, 0sizeof(report));
 & 0xFF;
  report.timestamp[1]UEINTX =&= ~(timestamp1 >><< 8FIFOCON) & 0xFF;;
  report.timestamp[2] =}

void ds4OutHandler(timestamp >> 16) & 0xFF;
  {
  writeToEndpoint((const uint8_t*)&report,uint8_t sizeof(report));buf[64];
  
   UEINTXint &=n ~= USB_Recv(1ARDUINODS4_RX_ENDPOINT, <<buf, FIFOCONUSB_Available(ARDUINODS4_RX_ENDPOINT));
}

void setup() {
  memset(&report, 0, sizeof(report));
  
  report.reportIdreportID = 0x01;
  report.leftStickX = 0x80;
  report.leftStickY = 0x80;
  report.rightStickX = 0x80;
  report.rightStickY = 0x80;
  report.dpadButtonsdpad = 0x08;
  report.buttonsbuttonNorth = 0x00;
  report.psButtonbuttonSouth = 0x00;
  report.triggerLeftbuttonEast = 0x00;
  report.triggerRightbuttonWest = 0x00;
  report.batteryLevelbuttonHome = 0x11;0x00;
  report.leftTrigger = 0x00;
  report.gyroXrightTrigger = 0x0000;0x00;
  report.gyroYbattery = 0x0000;0x11;
  
  report.gyroZgyrox = 0x0000;
  report.accelXgyroy = 0x0000;
  report.accelYgyroz = 0x0000;
  report.accelZaccx = 0x2000;0x0000;
  report.accy = 0x0000;
  report.touchpad[0]accz = 0x00;0x2000;
  
  delay(2000);
  
  ArduinoDS4USB::setSendCallback(txInterruptCallback);
  ArduinoDS4USB::setRecvCallback(ds4OutHandler);
  
  cli();
  UENUM = 4;1;
  if (UEINTX & (1 << RWAL)) {
    writeToEndpoint((const uint8_t*)&report, sizeof(report));
    UEINTX &= ~(1 << FIFOCON);
  }
  sei();
}

void loop() {
  unsigned long currentTime = millis();
  
  if (currentTime - lastToggle >= 500) {
    noInterrupts();psPressed = !psPressed;
    psPressedlastToggle = !psPressed;currentTime;
  }

  interruptsif (currentTime - lastReport >= 5); {
    lastTogglenoInterrupts();
 = currentTime;  interrupts();
  }

  delay(101);
}

Weirdly, whenWhat am I plug it into my computermissing?

EDIT: I have tried to take the approach used for GP2040-CE, with the RX LED blinks on every button presssame descriptors and the VID/releasePID of the Razer controller, but onI just get the exact same result, even after adding handling for every possible feature request by the PS4 it just blinks once and never again(other than authentication, of course).

What am I missing?

struct DS4Report {
  uint8_t reportId;
  uint8_t leftStickX;
  uint8_t leftStickY;
  uint8_t rightStickX;
  uint8_t rightStickY;
  uint8_t dpadButtons;
  uint8_t buttons;
  uint8_t psButton;
  uint8_t triggerLeft;
  uint8_t triggerRight;
  uint8_t timestamp[3];
  uint8_t batteryLevel;
  int16_t gyroX;
  int16_t gyroY;
  int16_t gyroZ;
  int16_t accelX;
  int16_t accelY;
  int16_t accelZ;
  uint8_t reserved[5];
  uint8_t touchpad[33];
} __attribute__((packed));

DS4Report report;
volatile bool psPressed = false;
volatile uint32_t timestamp = 0;
volatile uint8_t reportCounter = 0;
unsigned long lastToggle = 0;

void writeToEndpoint(const uint8_t* data, uint8_t len) {
  for (uint8_t i = 0; i < len; i++) {
    UEDATX = data[i];
  }
}

void txInterruptCallback() {
  reportCounter = (reportCounter + 1) & 0x3F;
  report.psButton = (psPressed ? 0x01 : 0x00) | (reportCounter << 2);
  
  timestamp++;
  report.timestamp[0] = (timestamp >> 0) & 0xFF;
  report.timestamp[1] = (timestamp >> 8) & 0xFF;
  report.timestamp[2] = (timestamp >> 16) & 0xFF;
  
  writeToEndpoint((const uint8_t*)&report, sizeof(report));
  
   UEINTX &= ~(1 << FIFOCON);
}

void setup() {
  memset(&report, 0, sizeof(report));
  
  report.reportId = 0x01;
  report.leftStickX = 0x80;
  report.leftStickY = 0x80;
  report.rightStickX = 0x80;
  report.rightStickY = 0x80;
  report.dpadButtons = 0x08;
  report.buttons = 0x00;
  report.psButton = 0x00;
  report.triggerLeft = 0x00;
  report.triggerRight = 0x00;
  report.batteryLevel = 0x11;
  
  report.gyroX = 0x0000;
  report.gyroY = 0x0000;
  report.gyroZ = 0x0000;
  report.accelX = 0x0000;
  report.accelY = 0x0000;
  report.accelZ = 0x2000;
  
  report.touchpad[0] = 0x00;
  
  delay(2000);
  
  ArduinoDS4USB::setSendCallback(txInterruptCallback);
  
  cli();
  UENUM = 4;
  if (UEINTX & (1 << RWAL)) {
    writeToEndpoint((const uint8_t*)&report, sizeof(report));
    UEINTX &= ~(1 << FIFOCON);
  }
  sei();
}

void loop() {
  unsigned long currentTime = millis();
  
  if (currentTime - lastToggle >= 500) {
    noInterrupts();
    psPressed = !psPressed;
    interrupts();
    lastToggle = currentTime;
  }

  delay(10);
}

Weirdly, when I plug it into my computer, the RX LED blinks on every button press/release, but on the PS4 it just blinks once and never again.

What am I missing?

struct DS4Report {
  uint8_t reportID;
  uint8_t leftStickX;
  uint8_t leftStickY;
  uint8_t rightStickX;
  uint8_t rightStickY;
  uint8_t dpad : 4;
  uint16_t buttonWest : 1;
  uint16_t buttonSouth : 1;
  uint16_t buttonEast : 1;
  uint16_t buttonNorth : 1;
  uint16_t buttonL1 : 1;
  uint16_t buttonR1 : 1;
  uint16_t buttonL2 : 1;
  uint16_t buttonR2 : 1;
  uint16_t buttonSelect : 1;
  uint16_t buttonStart : 1;
  uint16_t buttonL3 : 1;
  uint16_t buttonR3 : 1;
  uint16_t buttonHome : 1;
  uint16_t buttonTouchpad : 1;
  uint8_t reportCounter : 6;
  uint8_t leftTrigger;
  uint8_t rightTrigger;
  uint16_t axisTiming;
  uint8_t battery;
  uint8_t reserved0;
  int16_t gyrox;
  int16_t gyroy;
  int16_t gyroz;
  int16_t accx;
  int16_t accy;
  int16_t accz;
  uint8_t misc[4];
  uint8_t powerLevel : 4;
  uint8_t charging : 1;
  uint8_t headphones : 1;
  uint8_t microphone : 1;
  uint8_t extension : 1;
  uint8_t extData0 : 1;
  uint8_t extData1 : 1;
  uint8_t notConnected : 1;
  uint8_t extData3 : 5;
  uint8_t misc2;
  uint8_t tpadIncrement;
  uint8_t touchpad_counter_p1 : 7;
  uint8_t touchpad_unpressed_p1 : 1;
  uint8_t touch1_pos1;
  uint8_t touch1_pos2;
  uint8_t touch1_pos3;
  uint8_t touchpad_counter_p2 : 7;
  uint8_t touchpad_unpressed_p2 : 1;
  uint8_t touch2_pos1;
  uint8_t touch2_pos2;
  uint8_t touch2_pos3;
  uint8_t mystery2[22];
} __attribute__((packed));

DS4Report report;
volatile bool psPressed = false;
volatile uint32_t timestamp = 0;
volatile uint8_t reportCounter = 0;
unsigned long lastToggle = 0;
unsigned long lastReport = 0;

void writeToEndpoint(const uint8_t* data, uint8_t len) {
  for (uint8_t i = 0; i < len; i++) {
    UEDATX = data[i];
  }
}

void txInterruptCallback() {
  reportCounter = (reportCounter + 1) & 0x3F;
  report.buttonHome = (psPressed ? 0x01 : 0x00) | (reportCounter << 2);
  
  writeToEndpoint((const uint8_t*)&report, sizeof(report));
  
  UEINTX &= ~(1 << FIFOCON);
}

void ds4OutHandler()
{
  uint8_t buf[64];
    int n = USB_Recv(ARDUINODS4_RX_ENDPOINT, buf, USB_Available(ARDUINODS4_RX_ENDPOINT));
}

void setup() {
  memset(&report, 0, sizeof(report));
  
  report.reportID = 0x01;
  report.leftStickX = 0x80;
  report.leftStickY = 0x80;
  report.rightStickX = 0x80;
  report.rightStickY = 0x80;
  report.dpad = 0x08;
  report.buttonNorth = 0x00;
  report.buttonSouth = 0x00;
  report.buttonEast = 0x00;
  report.buttonWest = 0x00;
  report.buttonHome = 0x00;
  report.leftTrigger = 0x00;
  report.rightTrigger = 0x00;
  report.battery = 0x11;
  
  report.gyrox = 0x0000;
  report.gyroy = 0x0000;
  report.gyroz = 0x0000;
  report.accx = 0x0000;
  report.accy = 0x0000;
  report.accz = 0x2000;
  
  delay(2000);
  
  ArduinoDS4USB::setSendCallback(txInterruptCallback);
  ArduinoDS4USB::setRecvCallback(ds4OutHandler);
  
  cli();
  UENUM = 1;
  if (UEINTX & (1 << RWAL)) {
    writeToEndpoint((const uint8_t*)&report, sizeof(report));
    UEINTX &= ~(1 << FIFOCON);
  }
  sei();
}

void loop() {
  unsigned long currentTime = millis();
  
  if (currentTime - lastToggle >= 500) {
    psPressed = !psPressed;
    lastToggle = currentTime;
  }

  if (currentTime - lastReport >= 5) {
    noInterrupts();
    interrupts();
  }

  delay(1);
}

What am I missing?

EDIT: I have tried to take the approach used for GP2040-CE, with the same descriptors and the VID/PID of the Razer controller, but I just get the exact same result, even after adding handling for every possible feature request by the PS4 (other than authentication, of course).

added 146 characters in body
Source Link

Weirdly, when I plug it into my computer, the RX LED blinks on every button press/release, but on the PS4 it just blinks once and never again.

What am I missing?

What am I missing?

Weirdly, when I plug it into my computer, the RX LED blinks on every button press/release, but on the PS4 it just blinks once and never again.

What am I missing?

added 10 characters in body
Source Link
the busybee
  • 2.5k
  • 10
  • 19
Loading
Source Link
Loading