Circle Pad Pro: Difference between revisions
| 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?  | |||
|}  | |||
Revision as of 21:35, 23 February 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
IR Protocol
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.
Read Input
Request (3 bytes):
| offset | Size | Description | 
|---|---|---|
| 0x0 | 0x1 | Request ID? Fixed value 1 | 
| 0x1 | 0x1 | Unknown | 
| 0x2 | 0x1 | Unknown | 
Response (6 bytes):
| 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):
| 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)
| 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? | 
