Circle Pad Pro: Difference between revisions

Wwylele (talk | contribs)
Line 9: Line 9:
== IR Protocol ==
== 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.
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.
=== Read Input ===
Request (3 bytes):
{| class="wikitable" border="1"
|-
!  offset
!  Size
!  Description
|-
| 0x0
| 0x1
| Request ID? Fixed value 1
|-
| 0x1
| 0x1
| Unknown
|-
| 0x2
| 0x1
| Unknown
|}
Response (6 bytes):
{| class="wikitable" border="1"
|-
!  offset
!  Size
!  Description
|-
| 0x0
| 0x1
| Response ID? Fixed value 0x11
|-
| 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
|}
=== Read Calibration Data? ===
Request (6 bytes):
{| class="wikitable" border="1"
|-
!  offset
!  Size
!  Description
|-
| 0x0
| 0x1
| Request ID? Fixed value 2
|-
| 0x1
| 0x1
| Unknown
|-
| 0x2
| 0x2
| Unknown.
|-
| 0x4
| 0x2
| Data size
|}
Response (5 bytes + requested size)
{| class="wikitable" border="1"
|-
!  offset
!  Size
!  Description
|-
| 0x0
| 0x1
| Response ID? Fixed value 0x11
|-
| 0x1
| 0x2
| Unknown. Same as request+0x2
|-
| 0x2
| 0x2
| Data size
|-
| 0x4
| data size
| calibration data?
|}