SBSPSS/source/pad/pads.h

145 lines
3.0 KiB
C
Raw Normal View History

2000-08-29 21:54:22 +02:00
/*****************/
/*** Pad Stuff ***/
/*****************/
2000-09-18 17:33:19 +02:00
#ifndef __PAD_PADS_H__
#define __PAD_PADS_H__
2000-08-29 21:54:22 +02:00
2000-11-02 18:16:10 +01:00
#ifndef _GLOBAL_HEADER_
#include "system\global.h"
#endif
2000-08-29 21:54:22 +02:00
/*****************************************************************************/
#define DUALSHOCKMODE ((u_long *)0x80010000)
/*****************************************************************************/
#define PsxPadTypeNone 0
#define PsxPadTypeMouse 1
#define PsxPadTypeNegiCon 2
#define PsxPadTypeKonamiGun 3
#define PsxPadTypeStandard 4
#define PsxPadTypeAnalogStick 5
#define PsxPadTypeNamcoGun 6
#define PsxPadTypeAnalogController 7
#define PAD_UP PADLup
#define PAD_DOWN PADLdown
#define PAD_LEFT PADLleft
#define PAD_RIGHT PADLright
#define PAD_SELECT PADselect
#define PAD_START PADstart
#define PAD_CROSS PADRdown
#define PAD_SQUARE PADRleft
#define PAD_CIRCLE PADRright
#define PAD_TRIANGLE PADRup
#define PAD_L1 PADL1
#define PAD_L2 PADL2
#define PAD_R1 PADR1
#define PAD_R2 PADR2
#define PAD_BUTTONS (PAD_CROSS|PAD_SQUARE|PAD_CIRCLE|PAD_TRIANGLE|PAD_L1|PAD_L2|PAD_R1|PAD_R2)
#define PAD_ALL_DIRS (PAD_UP|PAD_DOWN|PAD_LEFT|PAD_RIGHT)
#define PAD_DIR_SHIFT 12
#define BUTTON_SELECT PAD_CROSS
#define BUTTON_BACK PAD_TRIANGLE
/*****************************************************************************/
typedef struct
{
2000-10-26 17:45:09 +02:00
u16 Up,Held,Down,Old,Repeat;
2000-08-29 21:54:22 +02:00
int XPos, YPos, XPos1, YPos1; // For analog
int Dx,Dy, Dx1,Dy1;
u8 Status; // These 8 values are obtained
u8 Type; // directly from the controller
u8 Button1; // buffer we installed with InitPAD.
u8 Button2;
u8 Analog0;
u8 Analog1;
u8 Analog2;
u8 Analog3;
u8 Motor0,Motor1; // Analog
u8 Send;
u8 IsAnalogue;
bool Active;
} sPadData;
struct VIBE_DATA
{
int frame;
int amplitude;
};
#define VIBE( a, b ) { a, b }
/*****************************************************************************/
void PadsInit();
void PadClear(int Port);
void PadUpdate();
sPadData *PadGet(int Port);
u16 PadGetUp(int Port);
u16 PadGetDown(int Port);
u16 PadGetHeld(int Port);
2000-10-26 17:45:09 +02:00
u16 PadGetRepeat(int Port);
2000-08-29 21:54:22 +02:00
int PadIsDualShock(int Port);
u16 PadGetPadAngle(u16 Pad, s16 angleAdjust);
bool PadIsConnected(int port);
bool PAD_IsRumbling( int port );
void PAD_SetVibrationEnvelope( int Port, int count, const VIBE_DATA * data, int ferocity=255 );
/*****************************************************************************/
2000-11-23 20:55:33 +01:00
class CPadConfig
2000-08-29 21:54:22 +02:00
{
2000-11-23 20:55:33 +01:00
public:
enum
{
NUM_PAD_CONFIGS=4,
};
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
enum PAD_CFG
{
PAD_CFG_NONE=0,
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
PAD_CFG_LEFT,
PAD_CFG_RIGHT,
PAD_CFG_UP,
PAD_CFG_DOWN,
2000-08-29 21:54:22 +02:00
2001-05-10 00:12:00 +02:00
PAD_CFG_FIRE,
PAD_CFG_CATCH,
2000-11-23 20:55:33 +01:00
PAD_CFG_JUMP,
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
PAD_CFG_MAX
};
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
static void setConfig(int _config);
static int getConfig();
static int getButton(PAD_CFG _but);
2000-08-29 21:54:22 +02:00
private:
2000-11-23 20:55:33 +01:00
struct sPadConfigTable
{
u16 m_buttons[PAD_CFG_MAX];
};
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
static int s_configNumber;
static sPadConfigTable *s_cfg;
static sPadConfigTable s_padConfigs[NUM_PAD_CONFIGS];
2000-08-29 21:54:22 +02:00
2000-11-23 20:55:33 +01:00
};
2000-08-29 21:54:22 +02:00
/*****************************************************************************/
#endif