PS2SDK
PS2 Homebrew Libraries
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 "libpad.h"
+ Include dependency graph for libpad.c:

Go to the source code of this file.

Data Structures

struct  pad_state
 
struct  pad_data
 
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
 

Macros

#define PAD_BIND_RPC_ID1   0x8000010f
 
#define PAD_BIND_RPC_ID2   0x8000011f
 
#define PAD_RPCCMD_OPEN   0x80000100
 
#define PAD_RPCCMD_INFO_ACT   0x80000102
 
#define PAD_RPCCMD_INFO_COMB   0x80000103
 
#define PAD_RPCCMD_INFO_MODE   0x80000104
 
#define PAD_RPCCMD_SET_MMODE   0x80000105
 
#define PAD_RPCCMD_SET_ACTDIR   0x80000106
 
#define PAD_RPCCMD_SET_ACTALIGN   0x80000107
 
#define PAD_RPCCMD_GET_BTNMASK   0x80000108
 
#define PAD_RPCCMD_SET_BTNINFO   0x80000109
 
#define PAD_RPCCMD_SET_VREF   0x8000010a
 
#define PAD_RPCCMD_GET_PORTMAX   0x8000010b
 
#define PAD_RPCCMD_GET_SLOTMAX   0x8000010c
 
#define PAD_RPCCMD_CLOSE   0x8000010d
 
#define PAD_RPCCMD_END   0x8000010e
 
#define PAD_RPCCMD_INIT   0x00000100
 

Functions

static SifRpcClientData_t padsif[2] __attribute__ ((aligned(64)))
 
union { 
 
s32 command
 
   struct { 
 
s32 unknown [3]
 
s32 result
 
s32 unknown2
 
void * padBuf
 
   } padOpenResult 
 
   struct { 
 
s32 unknown [3]
 
s32 result
 
   } padResult 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 unknown
 
void * padArea
 
   } padOpenArgs 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 unknown
 
s32 mode
 
   } padCloseArgs 
 
   struct { 
 
s32 command
 
s32 port
 
   } padSlotMaxArgs 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 infoMode
 
s32 index
 
   } padInfoModeArgs 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 mode
 
s32 lock
 
   } padSetMainModeArgs 
 
   struct { 
 
s32 unknown [5]
 
s32 result
 
   } padModeResult 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
   } padGetButtonMaskArgs 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 buttonInfo
 
   } padSetButtonInfoArgs 
 
   struct { 
 
s32 unknown [4]
 
s32 result
 
   } padSetButtonInfoResult 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 actuator
 
s32 act_cmd
 
   } padInfoActArgs 
 
   struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s8 align [6]
 
   } padActDirAlignArgs 
 
char buffer [128]
 
__attribute__ ((aligned(16))) 
 
static struct pad_datapadGetDmaStr (int port, int slot)
 
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, char actAlign[6])
 
int padGetConnection (int port, int slot)
 

Variables

int _iop_reboot_count
 
static const char padStateString [8][16]
 
static const char padReqStateString [3][16] = {"COMPLETE", "FAILED", "BUSY"}
 
static int padInitialised = 0
 
s32 command
 
struct { 
 
s32 unknown [3]
 
s32 result
 
s32 unknown2
 
void * padBuf
 
padOpenResult 
 
struct { 
 
s32 unknown [3]
 
s32 result
 
padResult 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 unknown
 
void * padArea
 
padOpenArgs 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 unknown
 
s32 mode
 
padCloseArgs 
 
struct { 
 
s32 command
 
s32 port
 
padSlotMaxArgs 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 infoMode
 
s32 index
 
padInfoModeArgs 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 mode
 
s32 lock
 
padSetMainModeArgs 
 
struct { 
 
s32 unknown [5]
 
s32 result
 
padModeResult 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
padGetButtonMaskArgs 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 buttonInfo
 
padSetButtonInfoArgs 
 
struct { 
 
s32 unknown [4]
 
s32 result
 
padSetButtonInfoResult 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s32 actuator
 
s32 act_cmd
 
padInfoActArgs 
 
struct { 
 
s32 command
 
s32 port
 
s32 slot
 
s8 align [6]
 
padActDirAlignArgs 
 
char buffer [128]
 
static struct pad_state PadState [2][8]
 

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.


Data Structure Documentation

◆ pad_state

struct pad_state

Definition at line 72 of file libpad.c.

+ Collaboration diagram for pad_state:
Data Fields
int open
unsigned int port
unsigned int slot
struct pad_data * padData
unsigned char * padBuf

◆ pad_data

struct pad_data

Definition at line 120 of file libpad.c.

Data Fields
unsigned int frame
unsigned char state
unsigned char reqState
unsigned char ok
unsigned char unkn7
unsigned char data[32]
unsigned int length
unsigned char request
unsigned char CTP

CTP=1/no config; CTP=2/config, acts...

unsigned char model

1, 2 or 3

unsigned char correction

the data in the buffer is already corrected

unsigned char errorCount
unsigned char unk49[15]

◆ .padOpenResult

struct .padOpenResult

Definition at line 164 of file libpad.c.

Data Fields
s32 unknown[3]
s32 result
s32 unknown2
void * padBuf

◆ .padResult

struct .padResult

Definition at line 170 of file libpad.c.

Data Fields
s32 unknown[3]
s32 result

◆ .padOpenArgs

struct .padOpenArgs

Definition at line 174 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 unknown
void * padArea

◆ .padCloseArgs

struct .padCloseArgs

Definition at line 180 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 unknown
s32 mode

◆ .padSlotMaxArgs

struct .padSlotMaxArgs

Definition at line 186 of file libpad.c.

Data Fields
s32 command
s32 port

◆ .padInfoModeArgs

struct .padInfoModeArgs

Definition at line 190 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 infoMode
s32 index

◆ .padSetMainModeArgs

struct .padSetMainModeArgs

Definition at line 196 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 mode
s32 lock

◆ .padModeResult

struct .padModeResult

Definition at line 202 of file libpad.c.

Data Fields
s32 unknown[5]
s32 result

◆ .padGetButtonMaskArgs

struct .padGetButtonMaskArgs

Definition at line 206 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot

◆ .padSetButtonInfoArgs

struct .padSetButtonInfoArgs

Definition at line 210 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 buttonInfo

◆ .padSetButtonInfoResult

struct .padSetButtonInfoResult

Definition at line 215 of file libpad.c.

Data Fields
s32 unknown[4]
s32 result

◆ .padInfoActArgs

struct .padInfoActArgs

Definition at line 219 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s32 actuator
s32 act_cmd

◆ .padActDirAlignArgs

struct .padActDirAlignArgs

Definition at line 226 of file libpad.c.

Data Fields
s32 command
s32 port
s32 slot
s8 align[6]

Macro Definition Documentation

◆ PAD_BIND_RPC_ID1

#define PAD_BIND_RPC_ID1   0x8000010f

Definition at line 48 of file libpad.c.

◆ PAD_BIND_RPC_ID2

#define PAD_BIND_RPC_ID2   0x8000011f

Definition at line 49 of file libpad.c.

◆ PAD_RPCCMD_OPEN

#define PAD_RPCCMD_OPEN   0x80000100

Definition at line 51 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

#define PAD_RPCCMD_INFO_COMB   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_SET_MMODE

#define PAD_RPCCMD_SET_MMODE   0x80000105

Definition at line 55 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTDIR

#define PAD_RPCCMD_SET_ACTDIR   0x80000106

Definition at line 56 of file libpad.c.

◆ PAD_RPCCMD_SET_ACTALIGN

#define PAD_RPCCMD_SET_ACTALIGN   0x80000107

Definition at line 57 of file libpad.c.

◆ PAD_RPCCMD_GET_BTNMASK

#define PAD_RPCCMD_GET_BTNMASK   0x80000108

Definition at line 58 of file libpad.c.

◆ PAD_RPCCMD_SET_BTNINFO

#define PAD_RPCCMD_SET_BTNINFO   0x80000109

Definition at line 59 of file libpad.c.

◆ PAD_RPCCMD_SET_VREF

#define PAD_RPCCMD_SET_VREF   0x8000010a

Definition at line 60 of file libpad.c.

◆ PAD_RPCCMD_GET_PORTMAX

#define PAD_RPCCMD_GET_PORTMAX   0x8000010b

Definition at line 61 of file libpad.c.

◆ PAD_RPCCMD_GET_SLOTMAX

#define PAD_RPCCMD_GET_SLOTMAX   0x8000010c

Definition at line 62 of file libpad.c.

◆ PAD_RPCCMD_CLOSE

#define PAD_RPCCMD_CLOSE   0x8000010d

Definition at line 63 of file libpad.c.

◆ PAD_RPCCMD_END

#define PAD_RPCCMD_END   0x8000010e

Definition at line 64 of file libpad.c.

◆ PAD_RPCCMD_INIT

#define PAD_RPCCMD_INIT   0x00000100

Definition at line 65 of file libpad.c.

Function Documentation

◆ padGetDmaStr()

static struct pad_data * padGetDmaStr ( int  port,
int  slot 
)
static

Common helper

Definition at line 253 of file libpad.c.

References PadState.

Referenced by padGetReqState(), padGetState(), padInfoAct(), padInfoMode(), padRead(), and padSetReqState().

◆ padInit()

int padInit ( int  mode)

Initialise libpad

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

Definition at line 297 of file libpad.c.

References padPortInit().

◆ 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 338 of file libpad.c.

References PadState.

Referenced by padInit().

◆ 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 374 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 394 of file libpad.c.

References PadState.

Referenced by pad_open().

◆ padPortClose()

int padPortClose ( int  port,
int  slot 
)

Closes an opened port.

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

Definition at line 451 of file libpad.c.

References PadState.

Referenced by pad_close(), and padEnd().

◆ 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 472 of file libpad.c.

References padGetDmaStr().

Referenced by pad_get_buttons().

◆ 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 484 of file libpad.c.

References padGetDmaStr(), and padGetReqState().

Referenced by pad_get_state().

◆ padGetReqState()

unsigned char padGetReqState ( int  port,
int  slot 
)

Get pad request state

Definition at line 513 of file libpad.c.

References padGetDmaStr().

Referenced by padGetState().

◆ 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 523 of file libpad.c.

References padGetDmaStr().

Referenced by padInfoAct(), padInfoMode(), padSetActAlign(), and padSetMainMode().

◆ padStateInt2String()

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

Definition at line 534 of file libpad.c.

◆ padReqStateInt2String()

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

Definition at line 543 of file libpad.c.

◆ padGetPortMax()

int padGetPortMax ( void  )

Returns # slots on the PS2 (usally 2)

Definition at line 550 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 562 of file libpad.c.

◆ padGetModVersion()

int padGetModVersion ( )

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

Definition at line 575 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 590 of file libpad.c.

References padGetDmaStr(), and padSetReqState().

Referenced by pad_get_num_modes(), pad_get_type(), pad_has_type(), and pad_init_actuators().

◆ 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 658 of file libpad.c.

References padSetReqState().

Referenced by pad_set_mode().

◆ padInfoPressMode()

int padInfoPressMode ( int  port,
int  slot 
)

Check if the pad has pressure sensitive buttons

Definition at line 677 of file libpad.c.

Referenced by pad_set_sensitivity().

◆ padEnterPressMode()

int padEnterPressMode ( int  port,
int  slot 
)

Pressure sensitive mode ON

Definition at line 692 of file libpad.c.

Referenced by pad_set_sensitivity().

◆ padExitPressMode()

int padExitPressMode ( int  port,
int  slot 
)

Check for newer version Pressure sensitive mode OFF

Definition at line 698 of file libpad.c.

Referenced by pad_set_sensitivity().

◆ padGetButtonMask()

int padGetButtonMask ( int  port,
int  slot 
)

Definition at line 705 of file libpad.c.

◆ padSetButtonInfo()

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

Definition at line 719 of file libpad.c.

◆ padInfoAct()

unsigned char padInfoAct ( int  port,
int  slot,
int  word,
int  byte 
)

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

Definition at line 740 of file libpad.c.

References padGetDmaStr(), and padSetReqState().

Referenced by pad_init_actuators().

◆ padSetActAlign()

int padSetActAlign ( int  port,
int  slot,
const char  act_align[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 779 of file libpad.c.

References padSetReqState().

Referenced by pad_init_actuators().

◆ padSetActDirect()

int padSetActDirect ( int  port,
int  slot,
char  act_align[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 802 of file libpad.c.

Referenced by pad_set_actuators().

◆ 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 825 of file libpad.c.

Variable Documentation

◆ padStateString

const char padStateString[8][16]
static
Initial value:
= {"DISCONNECT", "FINDPAD",
"FINDCTP1", "", "", "EXECCMD",
"STABLE", "ERROR"}

Definition at line 146 of file libpad.c.

◆ padReqStateString

const char padReqStateString[3][16] = {"COMPLETE", "FAILED", "BUSY"}
static

Definition at line 149 of file libpad.c.

◆ padInitialised

int padInitialised = 0
static

Definition at line 151 of file libpad.c.

◆ command

s32 command

Definition at line 0 of file libpad.c.

◆ buffer

char buffer[128]

Definition at line 76 of file libpad.c.

◆ PadState

struct pad_state PadState[2][8]
static

Port state data

Definition at line 244 of file libpad.c.

Referenced by padGetDmaStr(), padPortClose(), padPortInit(), and padPortOpen().