Difference between revisions of "Circle Pad Pro"
(9 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | Also known as CTR-009 | + | Also known as CTR-009, it sends the commands to the console through the IR interface on the back of the console. |
− | + | [http://what-games.golog.jp/archives/1350330.html Pictures of its contents]. | |
− | |||
− | |||
== Usage Instructions == | == Usage Instructions == | ||
[[File:Circle pad pro instructions.jpg]] | [[File:Circle pad pro instructions.jpg]] | ||
+ | |||
+ | == IR Protocol == | ||
+ | Communications with this device is done via the [[IR_Services|ir:USER]] service, which uses obfuscation implemented in software. The [[IRU:SetBitRate|bitrate-value]] passed to IRUSER is 0x04, hence the actual bps is 96000. | ||
+ | |||
+ | The application sends requests via [[IRUSER:SendIrnop]] and receives response from Circle Pad Pro via [[IRUSER:ReceiveIrnop]] (or read data from the [[IRUSER_Shared_Memory|shared memory]]). The request and response data structures below are payloads in packets. Each request begins with a one-byte ID that determines the request type. | ||
+ | |||
+ | === Request 1: Read Input === | ||
+ | |||
+ | Request (3 bytes): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Request ID (fixed value 1) | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | Response period in ms | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | 0x1 | ||
+ | | Unknown | ||
+ | |} | ||
+ | |||
+ | Response (6 bytes): | ||
+ | This Response will be sent repeatedly by the specified period. | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Response ID? Fixed value 0x10 | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x3 | ||
+ | | Right circle pad position. | ||
+ | This three bytes are two little-endian 12-bit fields. The first one is for x-axis and the second one is for y-axis. | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x1 | ||
+ | | bit[0:4] battery level? | ||
+ | bit[5] ZL button | ||
+ | |||
+ | bit[6] ZR button | ||
+ | |||
+ | bit[7] R button | ||
+ | |||
+ | Note that for the three button fields, the bit is set when the button is NOT pressed. | ||
+ | |- | ||
+ | | 0x5 | ||
+ | | 0x1 | ||
+ | | Unknown | ||
+ | |} | ||
+ | |||
+ | === Request 2: Read Calibration Data? === | ||
+ | |||
+ | Request (6 bytes): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Request ID (fixed value 2) | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | Expected response time in ms? | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | 0x2 | ||
+ | | Data offset? (aligned to 0x10?) | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x2 | ||
+ | | Data size (aligned to 0x10?) | ||
+ | |} | ||
+ | |||
+ | Response (5 bytes + requested size) | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Response ID? Fixed value 0x11 | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x2 | ||
+ | | Data offset? Same as Request+0x2 | ||
+ | |- | ||
+ | | 0x3 | ||
+ | | 0x2 | ||
+ | | Data size. Same as Request+0x4 | ||
+ | |- | ||
+ | | 0x5 | ||
+ | | data size | ||
+ | | calibration data? | ||
+ | |} | ||
+ | |||
+ | === Request 3 === | ||
+ | Request (22 bytes?): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Request ID (fixed value 3) | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | Expected response time in ms? | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | ... | ||
+ | | ? | ||
+ | |} | ||
+ | |||
+ | Response (2 bytes?): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Response ID? Fixed value 0x12 | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | 0? | ||
+ | |} | ||
+ | |||
+ | === Request 4: Reset Calibration Data? === | ||
+ | Request (3 bytes?): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Request ID (fixed value 4) | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | Expected response time in ms? | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | 0x1 | ||
+ | | ? | ||
+ | |} | ||
+ | |||
+ | |||
+ | Response (2 bytes?): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Response ID? Fixed value 0x13 | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | 0? | ||
+ | |} | ||
+ | |||
+ | === Request 5 === | ||
+ | Request (2 bytes): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Request ID (fixed value 5) | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | Expected response time in ms? | ||
+ | |} | ||
+ | |||
+ | |||
+ | Response (2 bytes?): | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x1 | ||
+ | | Response ID? Fixed value 0x14 | ||
+ | |- | ||
+ | | 0x1 | ||
+ | | 0x1 | ||
+ | | ? | ||
+ | |} |
Latest revision as of 18:31, 1 May 2017
Also known as CTR-009, it sends the commands to the console through the IR interface on the back of the console.
Usage Instructions[edit]
IR Protocol[edit]
Communications with this device is done via the ir:USER service, which uses obfuscation implemented in software. The bitrate-value passed to IRUSER is 0x04, hence the actual bps is 96000.
The application sends requests via IRUSER:SendIrnop and receives response from Circle Pad Pro via IRUSER:ReceiveIrnop (or read data from the shared memory). The request and response data structures below are payloads in packets. Each request begins with a one-byte ID that determines the request type.
Request 1: Read Input[edit]
Request (3 bytes):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Request ID (fixed value 1) |
0x1 | 0x1 | Response period in ms |
0x2 | 0x1 | Unknown |
Response (6 bytes): This Response will be sent repeatedly by the specified period.
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Response ID? Fixed value 0x10 |
0x1 | 0x3 | Right circle pad position.
This three bytes are two little-endian 12-bit fields. The first one is for x-axis and the second one is for y-axis. |
0x4 | 0x1 | bit[0:4] battery level?
bit[5] ZL button bit[6] ZR button bit[7] R button Note that for the three button fields, the bit is set when the button is NOT pressed. |
0x5 | 0x1 | Unknown |
Request 2: Read Calibration Data?[edit]
Request (6 bytes):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Request ID (fixed value 2) |
0x1 | 0x1 | Expected response time in ms? |
0x2 | 0x2 | Data offset? (aligned to 0x10?) |
0x4 | 0x2 | Data size (aligned to 0x10?) |
Response (5 bytes + requested size)
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Response ID? Fixed value 0x11 |
0x1 | 0x2 | Data offset? Same as Request+0x2 |
0x3 | 0x2 | Data size. Same as Request+0x4 |
0x5 | data size | calibration data? |
Request 3[edit]
Request (22 bytes?):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Request ID (fixed value 3) |
0x1 | 0x1 | Expected response time in ms? |
0x2 | ... | ? |
Response (2 bytes?):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Response ID? Fixed value 0x12 |
0x1 | 0x1 | 0? |
Request 4: Reset Calibration Data?[edit]
Request (3 bytes?):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Request ID (fixed value 4) |
0x1 | 0x1 | Expected response time in ms? |
0x2 | 0x1 | ? |
Response (2 bytes?):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Response ID? Fixed value 0x13 |
0x1 | 0x1 | 0? |
Request 5[edit]
Request (2 bytes):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Request ID (fixed value 5) |
0x1 | 0x1 | Expected response time in ms? |
Response (2 bytes?):
offset | Size | Description |
---|---|---|
0x0 | 0x1 | Response ID? Fixed value 0x14 |
0x1 | 0x1 | ? |