sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
libpad.c File Reference
#include <tamtypes.h>
#include <kernel.h>
#include <stdio.h>
#include <string.h>
#include <sifrpc.h>
#include <sifcmd.h>
#include <iopcontrol.h>
#include "libpad.h"

Go to the source code of this file.

Classes

struct  pad_data_new
struct  pad_data_old
union  pad_data_u
struct  pad_state
struct  open_slot
struct  [struct].padInitArgs
struct  [struct].padOpenResult
struct  [struct].padResult
struct  [struct].padOpenArgs
struct  [struct].padCloseArgs
struct  [struct].padSlotMaxArgs
struct  [struct].padInfoModeArgs
struct  [struct].padSetMainModeArgs
struct  [struct].padModeResult
struct  [struct].padGetButtonMaskArgs
struct  [struct].padSetButtonInfoArgs
struct  [struct].padSetButtonInfoResult
struct  [struct].padInfoActArgs
struct  [struct].padActDirAlignArgs

Macros

#define PAD_BIND_RPC_ID1_NEW   0x80000100
#define PAD_BIND_RPC_ID2_NEW   0x80000101
#define PAD_BIND_RPC_ID1_OLD   0x8000010f
#define PAD_BIND_RPC_ID2_OLD   0x8000011f
#define PAD_RPCCMD_OPEN_NEW   0x01
#define PAD_RPCCMD_SET_MMODE_NEW   0x06
#define PAD_RPCCMD_SET_ACTDIR_NEW   0x07
#define PAD_RPCCMD_SET_ACTALIGN_NEW   0x08
#define PAD_RPCCMD_GET_BTNMASK_NEW   0x09
#define PAD_RPCCMD_SET_BTNINFO_NEW   0x0A
#define PAD_RPCCMD_SET_VREF_NEW   0x0B
#define PAD_RPCCMD_GET_PORTMAX_NEW   0x0C
#define PAD_RPCCMD_GET_SLOTMAX_NEW   0x0D
#define PAD_RPCCMD_CLOSE_NEW   0x0E
#define PAD_RPCCMD_END_NEW   0x0F
#define PAD_RPCCMD_INIT   0x10
#define PAD_RPCCMD_GET_MODVER   0x12
#define PAD_RPCCMD_OPEN_OLD   0x80000100
#define PAD_RPCCMD_INFO_ACT   0x80000102
#define PAD_RPCCMD_INFO_COMB_OLD   0x80000103
#define PAD_RPCCMD_INFO_MODE   0x80000104
#define PAD_RPCCMD_SET_MMODE_OLD   0x80000105
#define PAD_RPCCMD_SET_ACTDIR_OLD   0x80000106
#define PAD_RPCCMD_SET_ACTALIGN_OLD   0x80000107
#define PAD_RPCCMD_GET_BTNMASK_OLD   0x80000108
#define PAD_RPCCMD_SET_BTNINFO_OLD   0x80000109
#define PAD_RPCCMD_SET_VREF_OLD   0x8000010a
#define PAD_RPCCMD_GET_PORTMAX_OLD   0x8000010b
#define PAD_RPCCMD_GET_SLOTMAX_OLD   0x8000010c
#define PAD_RPCCMD_CLOSE_OLD   0x8000010d
#define PAD_RPCCMD_END_OLD   0x8000010e

Functions

int padInit (int mode)
int padPortInit (int mode)
int padEnd (void)
int padPortOpen (int port, int slot, void *padArea)
int padPortClose (int port, int slot)
unsigned char padRead (int port, int slot, struct padButtonStatus *data)
int padGetState (int port, int slot)
unsigned char padGetReqState (int port, int slot)
int padSetReqState (int port, int slot, int state)
void padStateInt2String (int state, char buf[16])
void padReqStateInt2String (int state, char buf[16])
int padGetPortMax (void)
int padGetSlotMax (int port)
int padGetModVersion ()
int padInfoMode (int port, int slot, int infoMode, int index)
int padSetMainMode (int port, int slot, int mode, int lock)
int padInfoPressMode (int port, int slot)
int padEnterPressMode (int port, int slot)
int padExitPressMode (int port, int slot)
int padGetButtonMask (int port, int slot)
int padSetButtonInfo (int port, int slot, int buttonInfo)
unsigned char padInfoAct (int port, int slot, int actuator, int cmd)
int padSetActAlign (int port, int slot, const char actAlign[6])
int padSetActDirect (int port, int slot, const char actAlign[6])
int padGetConnection (int port, int slot)

Variables

s32 command
struct  padInitArgs
struct  padOpenResult
struct  padResult
struct  padOpenArgs
struct  padCloseArgs
struct  padSlotMaxArgs
struct  padInfoModeArgs
struct  padSetMainModeArgs
struct  padModeResult
struct  padGetButtonMaskArgs
struct  padSetButtonInfoArgs
struct  padSetButtonInfoResult
struct  padInfoActArgs
struct  padActDirAlignArgs
char buffer [128]

Detailed Description

Pad library functions Quite easy rev engineered from util demos.. Find any bugs? Mail me: pukko.nosp@m.@hom.nosp@m.e.se

Definition in file libpad.c.

Macro Definition Documentation

◆ PAD_BIND_RPC_ID1_NEW

#define PAD_BIND_RPC_ID1_NEW   0x80000100

Definition at line 31 of file libpad.c.

◆ PAD_BIND_RPC_ID1_OLD

#define PAD_BIND_RPC_ID1_OLD   0x8000010f

Definition at line 34 of file libpad.c.

◆ PAD_BIND_RPC_ID2_NEW

#define PAD_BIND_RPC_ID2_NEW   0x80000101

Definition at line 32 of file libpad.c.

◆ PAD_BIND_RPC_ID2_OLD

#define PAD_BIND_RPC_ID2_OLD   0x8000011f

Definition at line 35 of file libpad.c.

◆ PAD_RPCCMD_CLOSE_NEW

#define PAD_RPCCMD_CLOSE_NEW   0x0E

Definition at line 46 of file libpad.c.

◆ PAD_RPCCMD_CLOSE_OLD

#define PAD_RPCCMD_CLOSE_OLD   0x8000010d

Definition at line 63 of file libpad.c.

◆ PAD_RPCCMD_END_NEW

#define PAD_RPCCMD_END_NEW   0x0F

Definition at line 47 of file libpad.c.

◆ PAD_RPCCMD_END_OLD

#define PAD_RPCCMD_END_OLD   0x8000010e

Definition at line 64 of file libpad.c.

◆ PAD_RPCCMD_GET_BTNMASK_NEW

#define PAD_RPCCMD_GET_BTNMASK_NEW   0x09

Definition at line 41 of file libpad.c.

◆ PAD_RPCCMD_GET_BTNMASK_OLD

#define PAD_RPCCMD_GET_BTNMASK_OLD   0x80000108

Definition at line 58 of file libpad.c.

◆ PAD_RPCCMD_GET_MODVER

#define PAD_RPCCMD_GET_MODVER   0x12

Definition at line 49 of file libpad.c.

◆ PAD_RPCCMD_GET_PORTMAX_NEW

#define PAD_RPCCMD_GET_PORTMAX_NEW   0x0C

Definition at line 44 of file libpad.c.

◆ PAD_RPCCMD_GET_PORTMAX_OLD

#define PAD_RPCCMD_GET_PORTMAX_OLD   0x8000010b

Definition at line 61 of file libpad.c.

◆ PAD_RPCCMD_GET_SLOTMAX_NEW

#define PAD_RPCCMD_GET_SLOTMAX_NEW   0x0D

Definition at line 45 of file libpad.c.

◆ PAD_RPCCMD_GET_SLOTMAX_OLD

#define PAD_RPCCMD_GET_SLOTMAX_OLD   0x8000010c

Definition at line 62 of file libpad.c.

◆ PAD_RPCCMD_INFO_ACT

#define PAD_RPCCMD_INFO_ACT   0x80000102

Definition at line 52 of file libpad.c.

◆ PAD_RPCCMD_INFO_COMB_OLD

#define PAD_RPCCMD_INFO_COMB_OLD   0x80000103

Definition at line 53 of file libpad.c.

◆ PAD_RPCCMD_INFO_MODE

#define PAD_RPCCMD_INFO_MODE   0x80000104

Definition at line 54 of file libpad.c.

◆ PAD_RPCCMD_INIT

#define PAD_RPCCMD_INIT   0x10

Definition at line 48 of file libpad.c.

◆ PAD_RPCCMD_OPEN_NEW

#define PAD_RPCCMD_OPEN_NEW   0x01

Definition at line 37 of file libpad.c.

◆ PAD_RPCCMD_OPEN_OLD

#define PAD_RPCCMD_OPEN_OLD   0x80000100

Definition at line 51 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTALIGN_NEW

#define PAD_RPCCMD_SET_ACTALIGN_NEW   0x08

Definition at line 40 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTALIGN_OLD

#define PAD_RPCCMD_SET_ACTALIGN_OLD   0x80000107

Definition at line 57 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTDIR_NEW

#define PAD_RPCCMD_SET_ACTDIR_NEW   0x07

Definition at line 39 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTDIR_OLD

#define PAD_RPCCMD_SET_ACTDIR_OLD   0x80000106

Definition at line 56 of file libpad.c.

◆ PAD_RPCCMD_SET_BTNINFO_NEW

#define PAD_RPCCMD_SET_BTNINFO_NEW   0x0A

Definition at line 42 of file libpad.c.

◆ PAD_RPCCMD_SET_BTNINFO_OLD

#define PAD_RPCCMD_SET_BTNINFO_OLD   0x80000109

Definition at line 59 of file libpad.c.

◆ PAD_RPCCMD_SET_MMODE_NEW

#define PAD_RPCCMD_SET_MMODE_NEW   0x06

Definition at line 38 of file libpad.c.

◆ PAD_RPCCMD_SET_MMODE_OLD

#define PAD_RPCCMD_SET_MMODE_OLD   0x80000105

Definition at line 55 of file libpad.c.

◆ PAD_RPCCMD_SET_VREF_NEW

#define PAD_RPCCMD_SET_VREF_NEW   0x0B

Definition at line 43 of file libpad.c.

◆ PAD_RPCCMD_SET_VREF_OLD

#define PAD_RPCCMD_SET_VREF_OLD   0x8000010a

Definition at line 60 of file libpad.c.

Function Documentation

◆ padEnd()

int padEnd ( void )

Ends all pad communication Note: PADMAN from release 1.3.4 does not have padPortInit implemented. As a result, it is impossible to reinitialize libpad after calling padEnd(). This was known as padClose in the really early official SDK releases.

Returns
== 1 => OK

Definition at line 434 of file libpad.c.

◆ padEnterPressMode()

int padEnterPressMode ( int port,
int slot )

Pressure sensitive mode ON

Definition at line 906 of file libpad.c.

◆ padExitPressMode()

int padExitPressMode ( int port,
int slot )

Check for newer version Pressure sensitive mode OFF

Definition at line 912 of file libpad.c.

◆ padGetButtonMask()

int padGetButtonMask ( int port,
int slot )

Definition at line 918 of file libpad.c.

◆ padGetConnection()

int padGetConnection ( int port,
int slot )

Returns whether the device at port,slot is connected (1 = connected) Appears to have been removed very early during the PS2's lifetime. If possible, use the documented padGetState instead.

NOT SUPPORTED with module rom0:padman

Definition at line 1091 of file libpad.c.

◆ padGetModVersion()

int padGetModVersion ( )

Returns the padman.irx version NOT SUPPORTED on module rom0:padman

Definition at line 795 of file libpad.c.

◆ padGetPortMax()

int padGetPortMax ( void )

Returns # slots on the PS2 (usally 2)

Definition at line 744 of file libpad.c.

◆ padGetReqState()

unsigned char padGetReqState ( int port,
int slot )

Get pad request state

Definition at line 690 of file libpad.c.

◆ padGetSlotMax()

int padGetSlotMax ( int port)

Returns # slots the port has (usually 1) probably 4 if using a multi tap (not tested)

Definition at line 769 of file libpad.c.

◆ padGetState()

int padGetState ( int port,
int slot )

Get current pad state Wait until state == 6 (Ready) before trying to access the pad

Definition at line 648 of file libpad.c.

◆ padInfoAct()

unsigned char padInfoAct ( int port,
int slot,
int actuator,
int cmd )

Get actuator status for this controller If padInfoAct(port, slot, -1, 0) != 0, the controller has actuators (i think ;) )

Definition at line 975 of file libpad.c.

◆ padInfoMode()

int padInfoMode ( int port,
int slot,
int infoMode,
int index )

Get pad info (digital (4), dualshock (7), etc..)

Returns
3 - KONAMI GUN; 4 - DIGITAL PAD; 5 - JOYSTICK; 6 - NAMCO GUN; 7 - DUAL SHOCK

Definition at line 808 of file libpad.c.

◆ padInfoPressMode()

int padInfoPressMode ( int port,
int slot )

Check if the pad has pressure sensitive buttons

Definition at line 900 of file libpad.c.

◆ padInit()

int padInit ( int mode)

Initialise libpad

Parameters
modeMust be set to 0.
Returns
== 1 => OK

Definition at line 307 of file libpad.c.

◆ padPortClose()

int padPortClose ( int port,
int slot )

Closes an opened port.

Parameters
portPort to close
slotSlot to close
Returns
!= 0 => OK

Definition at line 577 of file libpad.c.

◆ padPortInit()

int padPortInit ( int mode)

Initialise pad ports. Automatically called by padInit(), there is no need to call this function directly.

Parameters
modeMust be set to 0.
Returns
== 1 => OK

Note: PADMAN from release 1.3.4 does not have this function implemented. As a result, it is impossible to reinitialize libpad after calling padEnd().

Returns
== 1 => OK

Definition at line 389 of file libpad.c.

◆ padPortOpen()

int padPortOpen ( int port,
int slot,
void * padArea )
Parameters
portPort to open
slotSlot to open
padAreaThe address of the buffer for storing the pad status. Must be a 256-byte region (2xsizeof(struct pad_data). Must be a 64-byte aligned address. For the old libpad, at least 16-bytes alignment.
Returns
!= 0 => OK

Definition at line 465 of file libpad.c.

◆ padRead()

unsigned char padRead ( int port,
int slot,
struct padButtonStatus * data )

Read pad data

Parameters
portPort number of the pad to get the status for.
slotSlot number of the pad to get the status for.
dataA pointer to a 32 byte array where the result is stored
Returns
!= 0 => OK

Definition at line 615 of file libpad.c.

◆ padReqStateInt2String()

void padReqStateInt2String ( int state,
char buf[16] )

Definition at line 737 of file libpad.c.

◆ padSetActAlign()

int padSetActAlign ( int port,
int slot,
const char actAlign[6] )

Initalise actuators. On dual shock controller: act_align[0] = 0 enables 'small' engine act_align[1] = 1 enables 'big' engine set act_align[2-5] to 0xff (disable)

Definition at line 1028 of file libpad.c.

◆ padSetActDirect()

int padSetActDirect ( int port,
int slot,
const char actAlign[6] )

Set actuator status on dual shock controller, act_align[0] = 0/1 turns off/on 'small' engine act_align[1] = 0-255 sets 'big' engine speed

Definition at line 1059 of file libpad.c.

◆ padSetButtonInfo()

int padSetButtonInfo ( int port,
int slot,
int buttonInfo )

Definition at line 945 of file libpad.c.

◆ padSetMainMode()

int padSetMainMode ( int port,
int slot,
int mode,
int lock )

mode = 1, -> Analog/dual shock enabled; mode = 0 -> Digital lock = 3 -> Mode not changeable by user

Definition at line 869 of file libpad.c.

◆ padSetReqState()

int padSetReqState ( int port,
int slot,
int state )

Set pad request state (after a param setting) No need to export this one perhaps..

Definition at line 709 of file libpad.c.

◆ padStateInt2String()

void padStateInt2String ( int state,
char buf[16] )

Definition at line 730 of file libpad.c.

Variable Documentation

◆ buffer

char buffer[128]

Definition at line 72 of file libpad.c.

◆ command

s32 command

Definition at line 0 of file libpad.c.