Circle Pad Pro: Difference between revisions
No edit summary |
|||
(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 | |||
| ? | |||
|} |