G27 PS3

From GIMX

Revision as of 23:29, 9 January 2015 by Matlo (talk | contribs) (Created page with " This is a reverse engineering of the USB interface of the G27 when connected to a PS3. =Enumeration= ==Device descriptor== {| class="wikitable" |- |bLength |18 |- |bDescri...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This is a reverse engineering of the USB interface of the G27 when connected to a PS3.

Enumeration

Device descriptor

bLength 18
bDescriptorType DEVICE (0x01)
bcdUSB 2.00 (0x0200)
bDeviceClass Defined in Interface (0x00)
bDeviceSubClass Defined in Interface (0x00)
bDeviceProtocol Defined in Interface (0x00)
bMaxPacketSize0 16
idVendor 0x046d
idProduct 0xc294
bcdDevice 12.38 (0x1238)
iManufacturer None (0)
iProduct Not Requested (2)
iSerialNumber None (0)
bNumConfigurations 1

Configuration descriptor

Configuration Descriptor

bLength 9
bDescriptorType CONFIGURATION (0x02)
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration None (0)
bmAttributes.Reserved 0
bmAttributes.RemoteWakeup RemoteWakeup Not Supported (0b0)
bmAttributes.SelfPowered Bus Powered (0b0)
bMaxPower 98mA (0x31)

Interface Descriptor

bLength 9
bDescriptorType INTERFACE (0x04)
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass Human Interface Device (0x03)
bInterfaceSubClass None (0x00)
bInterfaceProtocol None (0x00)
iInterface None (0)

HID Descriptor

bLength 9
bDescriptorType HID(33)
bcdHID 1.00 (0x0100)
bCountryCode 0x21
bNumDescriptors 1
bDescriptorType REPORT (34)
wDescriptorLength 130

Endpoint Descriptor

bLength 7
bDescriptorType ENDPOINT (0x05)
bEndpointAddress 1 IN (0b10000001)
bmAttributes.TransferType Interrupt (0b11)
wMaxPacketSize.PacketSize 8
wMaxPacketSize.Transactions One transaction per microframe if HS (0b00)
bInterval 10

Endpoint Descriptor

bLength 7
bDescriptorType ENDPOINT (0x05)
bEndpointAddress 1 OUT (0b00000001)
bmAttributes.TransferType Interrupt (0b11)
wMaxPacketSize.PacketSize 8
wMaxPacketSize.Transactions One transaction per microframe if HS (0b00)
bInterval 10

Report descriptor

Usage Page Generic Desktop Controls (0x01)
Usage Joystick (0x04)
Collection Application (0x01)
Collection Logical (0x02)
Report Count 1
Report Size 10
Logical Minimum 0
Logical Maximum 1023
Physical Minimum 0
Physical Maximum 1023
Usage X (0x30)
Input Data (0x02)
Report Count 12
Report Size 1
Logical Maximum 1
Physical Maximum 1
Usage Page Button (0x09)
Usage Minimum Button 1 (primary/trigger) (0x01)
Usage Maximum Button 12 (0x0c)
Input Data (0x02)
Report Count 2
Usage Page Vendor-defined (0xff00)
Usage Undefined (0x01)
Input Data (0x02)
Usage Page Generic Desktop Controls (0x01)
Usage Y (0x31)
Logical Maximum 255
Physical Maximum 255
Report Count 1
Report Size 8
Input Data (0x02)
Logical Maximum 7
Physical Maximum 315
Report Size 4
Unit 20
Usage Hat switch (0x39)
Input Data (0x42)
Report Size 1
Report Count 4
Unit 0
Usage Page Vendor-defined (0xff00)
Usage Undefined (0x01)
Logical Maximum 1
Physical Maximum 1
Input Data (0x02)
Report Count 2
Report Size 8
Logical Maximum 255
Physical Maximum 255
Usage Undefined (0x02)
Input Data (0x02)
End Collection
Collection Logical (0x02)
Logical Maximum 255
Physical Maximum 255
Report Count 7
Report Size 8
Usage Undefined (0x03)
Output Data (0x02)
End Collection
End Collection

Get Reports (control endpoint)

FFB reports

Set Reports (control endpoint)

Interrupt IN report

byte index bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
[0] Wheel axis LSB (unsigned, min = 0, max = 0x03ff, center = 0x0200)
[1] left shift right shift triangle circle rectangle cross Wheel axis MSB
[2] 1 0 top-mid-bottom right top-mid-bottom left oxoo ooxo ooox xooo
[3] pedals (signed, center = 0x7f)
[4] 1 0 0 0 hat switch (Released=8, N=0, NE=1, E=2, SE=3, S=4, SW=5, W=6, NW=7)
[5-6] 0xffff

Interrupt OUT reports

TODO