PAD low-level specs by [RO]man / (v1.0, 2004, Florin Sasu) ---------------------------------------------------------- [Big thanks to Pukko for his lib] DEVICE MODES 0 5 3+2*1 01 UNUSED 1 7 3+2*2 12 MOUSE 4 5 3+2*1 41 STANDARD(DIGITAL) 7 9,21 3+2*3 73/79 ANALOG 2 9 3+2*3 23 NEGI-CON(NEGICON/NASKA/VOLUME) 5 9 3+2*3 53 JOY STICK(ANALOGJOYSTICK) 3 5 3+2*1 31 KONAMI-GUN 6 9 3+2*3 63 NAMCO-GUN E 9,13 3+2*3 E3/E5 JOGCON F 9 3+2*3 F3 CONFIG 8 80 MULTITAP | | | | +------------ name | | | +----------------------- modeId | | +------------------------- lo-nibble of modeId | +---------------------------------- size of command +------------------------------------ hi-nibble of modeId COMMANDS Notes: 1. 0x5A in send commands clears the corresponding positions in recv buffer as they will be filled with requested data (see cmd=0x43) ================================================================================ @ 0x40 // SET_VREF_PARAM +------------------- ith (0->11) | +---------------- vref[ith] (2 or vrefBuffer[idx]) 01,40,00,02,02,xx,xx,xx,xx (xx=00) FF,F3,5A,00,00,02,00,00,5A ================================================================================ A 0x41 // QUERY_BUTTON_MASK 0 1 2 3 4 5 6 7 8 01,41,00,5A,5A,5A,5A,5A,5A FF,F3,5A,FF,FF,03,00,xx,5A (xx=00) | | | | +---- (must be pressent here!!!) | | | +---------- bmask3 | | +------------- bmask2 | +---------------- bmask1 +------------------- bmask0 ================================================================================ B 0x42 // READ_DATA 01 42 00 xx xx FF 41 5A FF FF --------------------- 04/digital +--+----------------------- buttons status (1released/0pushed) 01 42 00 xx xx FF 41 5A FF FF --------------------- 04/digital +--+----------------------- buttons status ================================================================================ C 0x43 // ENTER/EXIT_CONFIG_MODE; i.e. exit device mode and enter config mode +-------------------------- 00 - exit config / 01 enter config 01 43 00 00 5A 5A 5A 5A 5A FF F3 5A 00 00 00 00 00 00 --------- new data (6 bytes) 01 43 00 01 00 FF 41 5A FF FF --------------------- old data (2 bytes) 01 43 00 01 00 00 00 00 00 FF 73 5A FF FF 69 78 77 84 --------- old data (6 bytes) 01 43 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 79 5A FF FF 69 78 77 84 00 00 00 00 00 00 00 00 00 00 00 00 old data (18 bytes) ================================================================================ D 0x44 // SET_MAIN_MODE; i.e. set mode and lock +------------------- mode | +---------------- lock 01,44,00,MM,LL,xx,xx,xx,xx (xx=00) FF,F3,5A,00,00,00,00,00,00 ================================================================================ E 0x45 // QUERY_MODEL; i.e. query model and mode 01,45,00,5A,5A,5A,5A,5A,5A FF,F3,5A,01,02,00,02,01,00 | | | | | +---- ??? | | | | +------- noOfComb: 01 | | | +---------- noOfAct: 02 - DUALSHOCK / 01 - JOYSTICK | | +------------- modeCurOffs: 00 - digital / 01 - analog/joystickmode | +---------------- noOfmodes: 02 +------------------- model: 01 - dualshock / 03 - dualshock2 ================================================================================ F 0x46 // QUERY_ACT +------------------- idx of act 01,46,00,00,5A,5A,5A,5A,5A FF,F3,5A,00,xx,01,02,00,0A DUALSHOCK small motor (100mA, xx=00) FF,F3,5A,00,xx,04,03,01,1E JOYSTICK (300mA, xx=00) 01,46,00,01,5A,5A,5A,5A,5A FF,F3,5A,00,xx,01,01,01,14 DUALSHOCK big motor (200mA, xx=00) | | | | +---- curr (10mA units) | | | +------- length (0: 1 bit (on/off only), | | | 1 or more: number of bytes) | | +---------- subfunction (1: low-speed rotation, | | 2: high-speed rotation) | +------------- function (1: continuous rotation vibration) ================================================================================ G 0x47 // QUERY_COMB +------------------- idx of comb 01,47,00,00,5A,5A,5A,5A,5A FF,F3,5A,00,xx,02,00,01,xx DUALSHOCK (xx=00) FF,F3,5A,00,xx,01,00,xx,xx JOYSTICK (xx=00) | | | | +---- act2 in comb | | | +------- act1 in comb | | +---------- act0 in comb | +------------- noOfAct in comb ================================================================================ L 0x4C // QUERY_MODE +------------------- idx of mode 01,4C,00,00,5A,5A,5A,5A,5A FF,F3,5A,00,xx,00,04,xx,xx DIGITAL DUALSHOCK (mode=0x0004, xx=00) FF,F3,5A,00,xx,00,04,xx,xx DIGITAL JOYSTICK (mode=0x0004, xx=00) 01,4C,00,01,5A,5A,5A,5A,5A FF,F3,5A,00,xx,00,07,xx,xx ANALOG DUALSHOCK (mode=0x0007, xx=00) FF,F3,5A,00,xx,03,00,xx,xx ANALOG JOYSTICK (mode=0x0300, xx=00) | | +---------- lo of mode (mode is u_short) | +------------- hi of mode ================================================================================ M 0x4D // SET_ACT_ALIGN; i.e. vibration enable +--+--+--+--+--+---- act align buffer of 6 bytes 01,4D,00,00,01,FF,FF,FF,FF FF,F3,5A,FF,FF,FF,FF,FF,FF ================================================================================ O 0x4F // SET_BUTTON_INFO +--+--+--+---------- button info buffer of 4 bytes 01,4F,00,FF,0F,00,00,00,00 mask for 12 buttons (w/o SELECT/START/L3/R3) FF,F3,5A,00,00,00,00,00,5A ================================================================================