Skip to content

Feature report 0xE0

Alexander Nitsch edited this page Aug 25, 2018 · 3 revisions

Note: This information applies only to the old CECH-ZCM1 models, not the newer CECH-ZCM2 models.

Extension devices initially send config data which, among other things, contains a device ID for identifying the different possible extension devices. This feature report lets you retrieve this data. Extension devices that accept input data (currently only the Racing Wheel's rumble motors) can be fed data using this report, too.

Retrieving data

Retrieving data from an extension device requires two steps: sending report 0xE0 with the desired read configuration, and then reading report 0xE0 to get the actual data.

Sending the report

Byte offset Length (in bytes) Description
0x00 1 HID Report ID (always 0xE0)
0x01 1 Mode selector
0x02 1 Target extension device's I²C slave address
0x03 1 Offset
0x04 1 Length
0x05 44 unused (set it to zeros)

Setting the Mode selector != 0 sets up a read operation of Length bytes starting at Offset in the 256 bytes of the extension device's config data. The I²C slave address for Sony's official extension devices is always 0xA0.

Since the data buffer in the read result (see next section) is limited to 40 bytes, it does not make any sense to specify Length > 40. If you do, it will internally be limited to 40.

Reading the report

Byte offset Length (in bytes) Description
0x00 1 HID Report ID (always 0xE0)
0x01 1 Error flag
0x02 1 Target extension device's I²C slave address
0x03 1 Offset
0x04 1 Length
0x05 4 unknown
0x09 40 Data

The Error flag will be zero if the operation was successful, otherwise it will be non-zero (if no extension device is connected, for example). The Slave address, Offset, and Length fields will contain the values specified in the previous sending of this report. Starting at offset 0x09 is the actual data retrieved from the extension device. If less than 40 bytes have been requested, the remaining bytes will be zero.

Sending data

Feeding data to an Extension device works by simply sending report 0xE0. The fields in the report are slightly different from the usage for setting up a read operation though:

Byte offset Length (in bytes) Description
0x00 1 HID Report ID (always 0xE0)
0x01 1 Mode selector
0x02 1 Target extension device's I²C slave address
0x03 1 Control byte
0x04 1 Length
0x05 4 unused (set it to zeros)
0x09 40 Data

Setting the Mode selector = 1 sets up a write operation of Length+1 bytes of data. The I²C slave address for Sony's official extension devices is always 0xA0.

The Control byte and the specified number of bytes from the Data buffer will be transmitted to the Extension device via I²C as soon as the Move receives the feature report. The Move will copy the Control byte to the first byte of its I²C send buffer and then append the first Length number of bytes from Data. What this data does is entirely up to the Extension device to decide.