Also known as CTR-009, it sends the commands to the console through the IR interface on the back of the console.
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.
Request (3 bytes):
|0x0||0x1||Request ID (fixed value 1)|
|0x1||0x1||Response period in ms|
Response (6 bytes): This Response will be sent repeatedly by the specified period.
|0x0||0x1||Response ID? Fixed value 0x11 (Really 0x11? Should be 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||0x2||bit[0:4] battery level?
bit ZL button
bit ZR button
bit R button
Note that for the three button fields, the bit is set when the button is NOT pressed.
Read Calibration Data?
Request (6 bytes):
|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)
|0x0||0x1||Response ID? Fixed value 0x11|
|0x1||0x2||Unknown. Same as request+0x2|
|0x4||data size||calibration data?|