Circle Pad Pro: Difference between revisions

Elisherer (talk | contribs)
No edit summary
Wwylele (talk | contribs)
(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.


Apperantly 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].
 
Pictures of its contents... [http://what-games.golog.jp/archives/1350330.html Link].


== 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
| ?
|}