In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Wiimote/Extension Controllers/Classic Controller Pro"

From WiiBrew
Jump to navigation Jump to search
m (Fixed leftover text)
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
The Classic Controller Pro likes non-Pro, but Nintendo replaced 2 analog triggers(LT and LR) with 2 digital button.
+
The '''Classic Controller Pro''' functions near-identically to the original classic controller. In terms of hardware, the major difference is the replacement of the two analog triggers (LT and LR) with two digital buttons.
 
== Data Format ==
 
== Data Format ==
The Classic Controller Pro reports its information as 6 bytes of data, readable at 0xa40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows ('''after decryption'''):
+
The Classic Controller Pro supports three versions of data format: 0x01, 0x02 and 0x03 (register at address 0x(4)A400FE). This register is writable, so you can select data format. The default data format code is 0x01.
 +
 
 +
=== Data Format 0x01 ===
 +
The Classic Controller Pro reports its information as 6 bytes of data, readable at 0x(4)A40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows ('''after decryption'''):
  
 
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
Line 58: Line 61:
  
 
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Data Format 0x02 ===
 +
The main difference from the data format 0x01 is that the Analog Sticks and Triggers have much higher precision: 10 bits (0-1023) and 8 bits (0-255). The Classic Controller Pro reports its information as 9 bytes of data, readable at 0x(4)A40008 ('''after decryption'''):
 +
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 +
|- style="background-color: #ddd;"
 +
| style="background-color: #fff;" |  
 +
| style="border: 1px solid #ccc; padding: 0.2em; text-align: center;" colspan="8"| '''Bit'''
 +
|- style="background-color: #cdc;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | '''Byte'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''7'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''6'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''5'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''4'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''3'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''2'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''1'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''0'''
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 0
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LX'''<span style="color: #777;">&lt;<span style="color: #c00;">9:2</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 1
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RX'''<span style="color: #777;">&lt;<span style="color: #c00;">9:2</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LY'''<span style="color: #777;">&lt;<span style="color: #c00;">9:2</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RY'''<span style="color: #777;">&lt;<span style="color: #c00;">9:2</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="2" | '''RY'''<span style="color: #777;">&lt;<span style="color: #c00;">1:0</span>&gt;</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="2" | '''LY'''<span style="color: #777;">&lt;<span style="color: #c00;">1:0</span>&gt;</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="2" | '''RX'''<span style="color: #777;">&lt;<span style="color: #c00;">1:0</span>&gt;</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="2" | '''LX'''<span style="color: #777;">&lt;<span style="color: #c00;">1:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 6
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 7
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DD</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">LT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">-</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">H</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">RT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color: #888;" | 1
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 8
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">B</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">Y</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">A</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">X</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DU</span>
 +
|}
 +
LX,LY are the left Analog Stick X and Y (0-1023), RX and RY are the right Analog Stick X and Y (0-1023), and LT and RT are the Left and Right Buttons (0 **OR** 255).
 +
 +
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Data Format 0x03 ===
 +
Data format 0x03 is the same as 0x02 but there is no byte #4, e.g. analog sticks have 8 bits precision (0-255). So, the Classic Controller Pro reports its information as 8 bytes of data, readable at 0x(4)A40008 ('''after decryption'''):
 +
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 +
|- style="background-color: #ddd;"
 +
| style="background-color: #fff;" | &nbsp;
 +
| style="border: 1px solid #ccc; padding: 0.2em; text-align: center;" colspan="8"| '''Bit'''
 +
|- style="background-color: #cdc;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | '''Byte'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''7'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''6'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''5'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''4'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''3'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''2'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''1'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''0'''
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 0
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 1
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 6
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DD</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">LT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">-</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">H</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">RT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color: #888;" | 1
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 7
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">B</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">Y</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">A</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">X</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DU</span>
 +
|}
 +
LX,LY are the left Analog Stick X and Y (0-255), RX and RY are the right Analog Stick X and Y (0-255), and LT and RT are the Left and Right Buttons (0 **OR** 255).
 +
 +
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Calibration ===
  
 
Nintendo games calibrate the center position of the Analog Sticks upon power-up or insertion of the Classic Controller Pro.
 
Nintendo games calibrate the center position of the Analog Sticks upon power-up or insertion of the Classic Controller Pro.
Line 147: Line 276:
 
|}
 
|}
  
[[Category:Hardware]]
+
[[Category:Peripherals]]

Latest revision as of 23:33, 28 April 2024

The Classic Controller Pro functions near-identically to the original classic controller. In terms of hardware, the major difference is the replacement of the two analog triggers (LT and LR) with two digital buttons.

Data Format

The Classic Controller Pro supports three versions of data format: 0x01, 0x02 and 0x03 (register at address 0x(4)A400FE). This register is writable, so you can select data format. The default data format code is 0x01.

Data Format 0x01

The Classic Controller Pro reports its information as 6 bytes of data, readable at 0x(4)A40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows (after decryption):

  Bit
Byte 7 6 5 4 3 2 1 0
0 RX<4:3> LX<5:0>
1 RX<2:1> LY<5:0>
2 RX<0> LT<4:3> RY<4:0>
3 LT<2:0> RT<4:0>
4 BDR BDD BLT B- BH B+ BRT 1
5 BZL BB BY BA BX BZR BDL BDU

LX,LY are the left Analog Stick X and Y (0-63), RX and RY are the right Analog Stick X and Y (0-31), and LT and RT are the Left and Right Buttons (0 **OR** 31). The left Analog Stick has twice the precision of the other analog values.

BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.

Data Format 0x02

The main difference from the data format 0x01 is that the Analog Sticks and Triggers have much higher precision: 10 bits (0-1023) and 8 bits (0-255). The Classic Controller Pro reports its information as 9 bytes of data, readable at 0x(4)A40008 (after decryption):

  Bit
Byte 7 6 5 4 3 2 1 0
0 LX<9:2>
1 RX<9:2>
2 LY<9:2>
3 RY<9:2>
4 RY<1:0> LY<1:0> RX<1:0> LX<1:0>
5 LT<7:0>
6 RT<7:0>
7 BDR BDD BLT B- BH B+ BRT 1
8 BZL BB BY BA BX BZR BDL BDU

LX,LY are the left Analog Stick X and Y (0-1023), RX and RY are the right Analog Stick X and Y (0-1023), and LT and RT are the Left and Right Buttons (0 **OR** 255).

BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.

Data Format 0x03

Data format 0x03 is the same as 0x02 but there is no byte #4, e.g. analog sticks have 8 bits precision (0-255). So, the Classic Controller Pro reports its information as 8 bytes of data, readable at 0x(4)A40008 (after decryption):

  Bit
Byte 7 6 5 4 3 2 1 0
0 LX<7:0>
1 RX<7:0>
2 LY<7:0>
3 RY<7:0>
4 LT<7:0>
5 RT<7:0>
6 BDR BDD BLT B- BH B+ BRT 1
7 BZL BB BY BA BX BZR BDL BDU

LX,LY are the left Analog Stick X and Y (0-255), RX and RY are the right Analog Stick X and Y (0-255), and LT and RT are the Left and Right Buttons (0 **OR** 255).

BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.

Calibration

Nintendo games calibrate the center position of the Analog Sticks upon power-up or insertion of the Classic Controller Pro.

Hardware

The classic controller pro uses several different hardware parts for its various inputs.

Input Hardware Circuit board surface and mounting
A membrane switch top
B membrane switch top
- microswitch top
Home microswitch top
+ microswitch top
X membrane switch top
Y membrane switch top
Up membrane switch top
Down membrane switch top
Left membrane switch top
Right membrane switch top
Left joystick X axial potentiometer, 30KΩ daughterboard, through-hole
Left joystick Y axial potentiometer, 30KΩ daughterboard, through-hole
Right joystick X axial potentiometer, 30KΩ linear daughterboard, through-hole
Right joystick Y axial potentiometer, 30KΩ linear daughterboard, through-hole
L switch
R switch
ZL
ZR