Difference between revisions of "DualShock 3"
From Eleccelerator Wiki
(→External Resources) |
(→USB) |
||
Line 2: | Line 2: | ||
==USB== | ==USB== | ||
+ | |||
+ | ===Device Descriptor=== | ||
+ | <pre> | ||
+ | 0x12, // bLength | ||
+ | 0x01, // bDescriptorType (Device) | ||
+ | 0x00, 0x02, // bcdUSB 2.00 | ||
+ | 0x00, // bDeviceClass (Use class information in the Interface Descriptors) | ||
+ | 0x00, // bDeviceSubClass | ||
+ | 0x00, // bDeviceProtocol | ||
+ | 0x40, // bMaxPacketSize0 64 | ||
+ | 0x4C, 0x05, // idVendor 0x054C | ||
+ | 0x68, 0x02, // idProduct 0x0268 | ||
+ | 0x00, 0x01, // bcdDevice 1.00 | ||
+ | 0x01, // iManufacturer (String Index) | ||
+ | 0x02, // iProduct (String Index) | ||
+ | 0x00, // iSerialNumber (String Index) | ||
+ | 0x01, // bNumConfigurations 1 | ||
+ | </pre> | ||
+ | |||
+ | ===Interface, Endpoints, HID=== | ||
+ | <pre> | ||
+ | 0x09, // bLength | ||
+ | 0x02, // bDescriptorType (Configuration) | ||
+ | 0x29, 0x00, // wTotalLength 41 | ||
+ | 0x01, // bNumInterfaces 1 | ||
+ | 0x01, // bConfigurationValue | ||
+ | 0x00, // iConfiguration (String Index) | ||
+ | 0x80, // bmAttributes | ||
+ | 0xFA, // bMaxPower 500mA | ||
+ | |||
+ | 0x09, // bLength | ||
+ | 0x04, // bDescriptorType (Interface) | ||
+ | 0x00, // bInterfaceNumber 0 | ||
+ | 0x00, // bAlternateSetting | ||
+ | 0x02, // bNumEndpoints 2 | ||
+ | 0x03, // bInterfaceClass | ||
+ | 0x00, // bInterfaceSubClass | ||
+ | 0x00, // bInterfaceProtocol | ||
+ | 0x00, // iInterface (String Index) | ||
+ | |||
+ | 0x09, // bLength | ||
+ | 0x21, // bDescriptorType (HID) | ||
+ | 0x11, 0x01, // bcdHID 1.17 | ||
+ | 0x00, // bCountryCode | ||
+ | 0x01, // bNumDescriptors | ||
+ | 0x22, // bDescriptorType[0] (HID) | ||
+ | 0x94, 0x00, // wDescriptorLength[0] 148 | ||
+ | |||
+ | 0x07, // bLength | ||
+ | 0x05, // bDescriptorType (Endpoint) | ||
+ | 0x02, // bEndpointAddress (OUT/H2D) | ||
+ | 0x03, // bmAttributes (Interrupt) | ||
+ | 0x40, 0x00, // wMaxPacketSize 64 | ||
+ | 0x01, // bInterval 1 (unit depends on device speed) | ||
+ | |||
+ | 0x07, // bLength | ||
+ | 0x05, // bDescriptorType (Endpoint) | ||
+ | 0x81, // bEndpointAddress (IN/D2H) | ||
+ | 0x03, // bmAttributes (Interrupt) | ||
+ | 0x40, 0x00, // wMaxPacketSize 64 | ||
+ | 0x01, // bInterval 1 (unit depends on device speed) | ||
+ | </pre> | ||
+ | |||
+ | ===HID Report Descriptor=== | ||
+ | <pre> | ||
+ | 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | ||
+ | 0x09, 0x04, // Usage (Joystick) | ||
+ | 0xA1, 0x01, // Collection (Physical) | ||
+ | 0xA1, 0x02, // Collection (Application) | ||
+ | 0x85, 0x01, // Report ID (1) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x01, // Report Count (1) | ||
+ | 0x15, 0x00, // Logical Minimum (0) | ||
+ | 0x26, 0xFF, 0x00, // Logical Maximum (255) | ||
+ | 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | ||
+ | 0x75, 0x01, // Report Size (1) | ||
+ | 0x95, 0x13, // Report Count (19) | ||
+ | 0x15, 0x00, // Logical Minimum (0) | ||
+ | 0x25, 0x01, // Logical Maximum (1) | ||
+ | 0x35, 0x00, // Physical Minimum (0) | ||
+ | 0x45, 0x01, // Physical Maximum (1) | ||
+ | 0x05, 0x09, // Usage Page (Button) | ||
+ | 0x19, 0x01, // Usage Minimum (0x01) | ||
+ | 0x29, 0x13, // Usage Maximum (0x13) | ||
+ | 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | ||
+ | 0x75, 0x01, // Report Size (1) | ||
+ | 0x95, 0x0D, // Report Count (13) | ||
+ | 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) | ||
+ | 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | ||
+ | 0x15, 0x00, // Logical Minimum (0) | ||
+ | 0x26, 0xFF, 0x00, // Logical Maximum (255) | ||
+ | 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0xA1, 0x00, // Collection (Undefined) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x04, // Report Count (4) | ||
+ | 0x35, 0x00, // Physical Minimum (0) | ||
+ | 0x46, 0xFF, 0x00, // Physical Maximum (255) | ||
+ | 0x09, 0x30, // Usage (X) | ||
+ | 0x09, 0x31, // Usage (Y) | ||
+ | 0x09, 0x32, // Usage (Z) | ||
+ | 0x09, 0x35, // Usage (Rz) | ||
+ | 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | ||
+ | 0xC0, // End Collection | ||
+ | 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x27, // Report Count (39) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x30, // Report Count (48) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x30, // Report Count (48) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | ||
+ | 0xC0, // End Collection | ||
+ | 0xA1, 0x02, // Collection (Application) | ||
+ | 0x85, 0x02, // Report ID (2) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x30, // Report Count (48) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | ||
+ | 0xC0, // End Collection | ||
+ | 0xA1, 0x02, // Collection (Application) | ||
+ | 0x85, 0xEE, // Report ID (238) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x30, // Report Count (48) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | ||
+ | 0xC0, // End Collection | ||
+ | 0xA1, 0x02, // Collection (Application) | ||
+ | 0x85, 0xEF, // Report ID (239) | ||
+ | 0x75, 0x08, // Report Size (8) | ||
+ | 0x95, 0x30, // Report Count (48) | ||
+ | 0x09, 0x01, // Usage (Pointer) | ||
+ | 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) | ||
+ | 0xC0, // End Collection | ||
+ | 0xC0, // End Collection | ||
+ | |||
+ | // 148 bytes | ||
+ | </pre> | ||
==Bluetooth== | ==Bluetooth== |
Revision as of 13:08, 8 August 2013
This page will document reverse engineering notes for the DualShock 3
Contents |
USB
Device Descriptor
0x12, // bLength 0x01, // bDescriptorType (Device) 0x00, 0x02, // bcdUSB 2.00 0x00, // bDeviceClass (Use class information in the Interface Descriptors) 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol 0x40, // bMaxPacketSize0 64 0x4C, 0x05, // idVendor 0x054C 0x68, 0x02, // idProduct 0x0268 0x00, 0x01, // bcdDevice 1.00 0x01, // iManufacturer (String Index) 0x02, // iProduct (String Index) 0x00, // iSerialNumber (String Index) 0x01, // bNumConfigurations 1
Interface, Endpoints, HID
0x09, // bLength 0x02, // bDescriptorType (Configuration) 0x29, 0x00, // wTotalLength 41 0x01, // bNumInterfaces 1 0x01, // bConfigurationValue 0x00, // iConfiguration (String Index) 0x80, // bmAttributes 0xFA, // bMaxPower 500mA 0x09, // bLength 0x04, // bDescriptorType (Interface) 0x00, // bInterfaceNumber 0 0x00, // bAlternateSetting 0x02, // bNumEndpoints 2 0x03, // bInterfaceClass 0x00, // bInterfaceSubClass 0x00, // bInterfaceProtocol 0x00, // iInterface (String Index) 0x09, // bLength 0x21, // bDescriptorType (HID) 0x11, 0x01, // bcdHID 1.17 0x00, // bCountryCode 0x01, // bNumDescriptors 0x22, // bDescriptorType[0] (HID) 0x94, 0x00, // wDescriptorLength[0] 148 0x07, // bLength 0x05, // bDescriptorType (Endpoint) 0x02, // bEndpointAddress (OUT/H2D) 0x03, // bmAttributes (Interrupt) 0x40, 0x00, // wMaxPacketSize 64 0x01, // bInterval 1 (unit depends on device speed) 0x07, // bLength 0x05, // bDescriptorType (Endpoint) 0x81, // bEndpointAddress (IN/D2H) 0x03, // bmAttributes (Interrupt) 0x40, 0x00, // wMaxPacketSize 64 0x01, // bInterval 1 (unit depends on device speed)
HID Report Descriptor
0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x04, // Usage (Joystick) 0xA1, 0x01, // Collection (Physical) 0xA1, 0x02, // Collection (Application) 0x85, 0x01, // Report ID (1) 0x75, 0x08, // Report Size (8) 0x95, 0x01, // Report Count (1) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x95, 0x13, // Report Count (19) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x35, 0x00, // Physical Minimum (0) 0x45, 0x01, // Physical Maximum (1) 0x05, 0x09, // Usage Page (Button) 0x19, 0x01, // Usage Minimum (0x01) 0x29, 0x13, // Usage Maximum (0x13) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x01, // Report Size (1) 0x95, 0x0D, // Report Count (13) 0x06, 0x00, 0xFF, // Usage Page (Vendor Defined 0xFF00) 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x01, // Usage (Pointer) 0xA1, 0x00, // Collection (Undefined) 0x75, 0x08, // Report Size (8) 0x95, 0x04, // Report Count (4) 0x35, 0x00, // Physical Minimum (0) 0x46, 0xFF, 0x00, // Physical Maximum (255) 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) 0x09, 0x32, // Usage (Z) 0x09, 0x35, // Usage (Rz) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x75, 0x08, // Report Size (8) 0x95, 0x27, // Report Count (39) 0x09, 0x01, // Usage (Pointer) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x75, 0x08, // Report Size (8) 0x95, 0x30, // Report Count (48) 0x09, 0x01, // Usage (Pointer) 0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0x75, 0x08, // Report Size (8) 0x95, 0x30, // Report Count (48) 0x09, 0x01, // Usage (Pointer) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0xA1, 0x02, // Collection (Application) 0x85, 0x02, // Report ID (2) 0x75, 0x08, // Report Size (8) 0x95, 0x30, // Report Count (48) 0x09, 0x01, // Usage (Pointer) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0xA1, 0x02, // Collection (Application) 0x85, 0xEE, // Report ID (238) 0x75, 0x08, // Report Size (8) 0x95, 0x30, // Report Count (48) 0x09, 0x01, // Usage (Pointer) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0xA1, 0x02, // Collection (Application) 0x85, 0xEF, // Report ID (239) 0x75, 0x08, // Report Size (8) 0x95, 0x30, // Report Count (48) 0x09, 0x01, // Usage (Pointer) 0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile) 0xC0, // End Collection 0xC0, // End Collection // 148 bytes
Bluetooth
There appears to be a ALPS module on the circuit. Unable to obtain any good datasheets or manuals at this time.