Difference between revisions of "Circle Pad Pro"

From 3dbrew
Jump to navigation Jump to search
 
(5 intermediate revisions by 2 users not shown)
Line 10: Line 10:
 
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.
+
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.
  
=== Read Input ===
+
=== Request 1: Read Input ===
  
 
Request (3 bytes):
 
Request (3 bytes):
Line 23: Line 23:
 
| 0x0
 
| 0x0
 
| 0x1
 
| 0x1
| Request ID? Fixed value 1
+
| Request ID (fixed value 1)
 
|-
 
|-
 
| 0x1
 
| 0x1
 
| 0x1
 
| 0x1
| Unknown
+
| Response period in ms
 
|-
 
|-
 
| 0x2
 
| 0x2
Line 35: Line 35:
  
 
Response (6 bytes):
 
Response (6 bytes):
 +
This Response will be sent repeatedly by the specified period.
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 43: Line 44:
 
| 0x0
 
| 0x0
 
| 0x1
 
| 0x1
| Response ID? Fixed value 0x11
+
| Response ID? Fixed value 0x10
 
|-
 
|-
 
| 0x1
 
| 0x1
Line 66: Line 67:
 
|}
 
|}
  
=== Read Calibration Data? ===
+
=== Request 2: Read Calibration Data? ===
  
 
Request (6 bytes):
 
Request (6 bytes):
Line 77: Line 78:
 
| 0x0
 
| 0x0
 
| 0x1
 
| 0x1
| Request ID? Fixed value 2
+
| Request ID (fixed value 2)
 
|-
 
|-
 
| 0x1
 
| 0x1
 
| 0x1
 
| 0x1
| Unknown
+
| Expected response time in ms?
 
|-
 
|-
 
| 0x2
 
| 0x2
 
| 0x2
 
| 0x2
| Unknown.
+
| Data offset? (aligned to 0x10?)
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x2
 
| 0x2
| Data size
+
| Data size (aligned to 0x10?)
 
|}
 
|}
  
Line 105: Line 106:
 
| 0x1
 
| 0x1
 
| 0x2
 
| 0x2
| Unknown. Same as request+0x2
+
| Data offset? Same as Request+0x2
 
|-
 
|-
 +
| 0x3
 
| 0x2
 
| 0x2
| 0x2
+
| Data size. Same as Request+0x4
| Data size
 
 
|-
 
|-
| 0x4
+
| 0x5
 
| data size
 
| data size
 
| calibration data?
 
| 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.

Pictures of its contents.

Usage Instructions[edit]

Circle pad pro instructions.jpg

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 ?