/* ZeroPAD - author: zerofrog(@gmail.com) * Copyright (C) 2006-2007 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __PAD_H__ #define __PAD_H__ #include #include #ifdef _WIN32 #include #include #else #include #include #include #endif #include #include #include using namespace std; #define PADdefs extern "C" { #include "PS2Edefs.h" } extern char libraryName[256]; #define FORIT(it, v) for(it = (v).begin(); it != (v).end(); (it)++) #define IS_KEYBOARD(key) (key < 0x10000) #define IS_JOYBUTTONS(key) (key >= 0x10000 && key < 0x20000) // buttons #define IS_JOYSTICK(key) (key >= 0x20000 && key < 0x30000) // analog #define IS_POV(key) (key >= 0x30000 && key < 0x40000) // uses analog as buttons (cares about sign) #define IS_MOUSE(key) (key >= 0x40000 && key < 0x50000) // mouse #define PAD_GETKEY(key) ((key) & 0xffff) #define PAD_GETJOYID(key) (((key) & 0xf000) >> 12) #define PAD_GETJOYBUTTON(key) ((key) & 0xff) #define PAD_GETJOYSTICK_AXIS(key) ((key) & 0xff) #define PAD_JOYBUTTON(joyid, buttonid) (0x10000 | ((joyid) << 12) | (buttonid)) #define PAD_JOYSTICK(joyid, axisid) (0x20000 | ((joyid) << 12) | (axisid)) #define PAD_POV(joyid, sign, axisid) (0x30000 | ((joyid) << 12) | ((sign) << 8) | (axisid)) #define PAD_GETPOVSIGN(key) (((key) & 0x100) >> 8) #define PADKEYS 20 #define PADOPTION_FORCEFEEDBACK 1 #define PADOPTION_REVERTLX 0x2 #define PADOPTION_REVERTLY 0x4 #define PADOPTION_REVERTRX 0x8 #define PADOPTION_REVERTRY 0x10 #ifdef _WIN32 #define PADSUBKEYS 1 #else #define PADSUBKEYS 2 #endif extern int PadEnum[2][2]; typedef struct { unsigned long keys[2 * PADSUBKEYS][PADKEYS]; int log; int options; // upper 16 bits are for pad2 } PADconf; typedef struct { u8 x, y; } PADAnalog; extern PADconf conf; extern PADAnalog g_lanalog[2], g_ranalog[2]; extern FILE *padLog; #define PAD_LOG __Log enum gamePadValues { PAD_RY = 19, PAD_LY = 18, PAD_RX = 17, PAD_LX = 16, PAD_LEFT = 15, PAD_DOWN = 14, PAD_RIGHT = 13, PAD_UP = 12, PAD_START = 11, PAD_R3 = 10, PAD_L3 = 9, PAD_SELECT = 8, PAD_SQUARE = 7, PAD_CROSS = 6, PAD_CIRCLE = 5, PAD_TRIANGLE = 4, PAD_R1 = 3, PAD_L1 = 2, PAD_R2 = 1, PAD_L2 = 0 }; // Put in the code for bolche's analog contols hack, ifdeffed out, so I don't forget to // add a gui some day and activate it. //#define ANALOG_CONTROLS_HACK // The various KEY_PAD_xxx definitions are defined as the value of whatever key is pressed. // DEF_VALUE is the strength you press the control. // Code taken from http://forums.pcsx2.net/thread-4699.html #ifdef ANALOG_CONTROLS_HACK #define KEY_PAD_RY_UP 0xff50 #define KEY_PAD_RY_DOWN 0xff57 #define KEY_PAD_LY_UP 0xff52 #define KEY_PAD_LY_DOWN 0xff54 #define KEY_PAD_RX_LEFT 0xffff #define KEY_PAD_RX_RIGHT 0xff56 #define KEY_PAD_LX_LEFT 0xff51 #define KEY_PAD_LX_RIGHT 0xff53 #define DEF_VALUE 32766 #endif /* end of pad.h */ extern keyEvent event; extern u16 status[2]; extern u32 pads; int POV(u32 direction, u32 angle); s32 _PADopen(void *pDsp); void _PADclose(); void _KeyPress(int pad, u32 key); void _KeyRelease(int pad, u32 key); void PADsetMode(int pad, int mode); void _PADupdate(int pad); void __Log(char *fmt, ...); void LoadConfig(); void SaveConfig(); void SysMessage(char *fmt, ...); inline int FindKey(int key, int pad) { for (int p = 0; p < PADSUBKEYS; p++) for (int i = 0; i < PADKEYS; i++) if (key == conf.keys[(PadEnum[pad][p])][i]) return i; return -1; } #endif