176 lines
6.6 KiB
C
176 lines
6.6 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Mupen64plus-input-sdl - plugin.h *
|
|
* Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ *
|
|
* Copyright (C) 2008-2009 Richard Goedeken *
|
|
* Copyright (C) 2008 Tillin9 *
|
|
* Copyright (C) 2002 Blight *
|
|
* *
|
|
* 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., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
#ifndef __PLUGIN_H__
|
|
#define __PLUGIN_H__
|
|
|
|
#include <SDL.h>
|
|
#if ! SDL_VERSION_ATLEAST(1,3,0)
|
|
|
|
#define SDL_GetKeyboardState SDL_GetKeyState
|
|
#define SDL_SCANCODE_UNKNOWN SDLK_UNKNOWN
|
|
#define SDL_NUM_SCANCODES SDLK_LAST
|
|
#define SDL_SCANCODE_RCTRL SDLK_RCTRL
|
|
#define SDL_SCANCODE_RSHIFT SDLK_RSHIFT
|
|
#define SDL_SCANCODE_LCTRL SDLK_LCTRL
|
|
#define SDL_SCANCODE_LALT SDLK_LALT
|
|
#define SDL_Scancode SDLKey
|
|
|
|
#endif
|
|
|
|
#if SDL_VERSION_ATLEAST(2,0,0)
|
|
|
|
static inline const char* _SDL_JoystickName(int device_index)
|
|
{
|
|
SDL_Joystick *joystick;
|
|
const char *name;
|
|
static char JoyName[256];
|
|
|
|
joystick = SDL_JoystickOpen(device_index);
|
|
if (!joystick)
|
|
return NULL;
|
|
|
|
name = SDL_JoystickName(joystick);
|
|
if (name)
|
|
{
|
|
strncpy(JoyName, name, 255);
|
|
JoyName[255] = 0;
|
|
}
|
|
SDL_JoystickClose(joystick);
|
|
|
|
return JoyName;
|
|
}
|
|
|
|
#define SDL_JoystickName(device_index) _SDL_JoystickName(device_index)
|
|
|
|
#endif
|
|
|
|
#define M64P_PLUGIN_PROTOTYPES 1
|
|
#include "m64p_plugin.h"
|
|
#include "m64p_config.h"
|
|
|
|
#define DEVICE_AUTO (-1)
|
|
#define DEVICE_NOT_JOYSTICK (-2)
|
|
|
|
// Some stuff from n-rage plugin
|
|
#define RD_GETSTATUS 0x00 // get status
|
|
#define RD_READKEYS 0x01 // read button values
|
|
#define RD_READPAK 0x02 // read from controllerpack
|
|
#define RD_WRITEPAK 0x03 // write to controllerpack
|
|
#define RD_RESETCONTROLLER 0xff // reset controller
|
|
#define RD_READEEPROM 0x04 // read eeprom
|
|
#define RD_WRITEEPROM 0x05 // write eeprom
|
|
|
|
#define PAK_IO_RUMBLE 0xC000 // the address where rumble-commands are sent to
|
|
|
|
enum EButton
|
|
{
|
|
R_DPAD = 0,
|
|
L_DPAD,
|
|
D_DPAD,
|
|
U_DPAD,
|
|
START_BUTTON,
|
|
Z_TRIG,
|
|
B_BUTTON,
|
|
A_BUTTON,
|
|
R_CBUTTON,
|
|
L_CBUTTON,
|
|
D_CBUTTON,
|
|
U_CBUTTON,
|
|
R_TRIG,
|
|
L_TRIG,
|
|
MEMPAK,
|
|
RUMBLEPAK,
|
|
X_AXIS,
|
|
Y_AXIS,
|
|
NUM_BUTTONS
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
int button; // button index; -1 if notassigned
|
|
SDL_Scancode key; // sdl keysym; SDL_SCANCODE_UNKNOWN if not assigned
|
|
int axis, axis_dir; // aixs + direction (i.e. 0, 1 = X Axis +; 0, -1 = X Axis -); -1 if notassigned
|
|
int axis_deadzone; // -1 for default, or >= 0 for custom value
|
|
int hat, hat_pos; // hat + hat position; -1 if not assigned
|
|
int mouse; // mouse button
|
|
} SButtonMap;
|
|
|
|
typedef struct
|
|
{
|
|
int button_a, button_b; // up/down or left/right; -1 if not assigned
|
|
SDL_Scancode key_a, key_b; // up/down or left/right; SDL_SCANCODE_UNKNOWN if not assigned
|
|
int axis_a, axis_b; // axis index; -1 if not assigned
|
|
int axis_dir_a, axis_dir_b; // direction (1 = X+, 0, -1 = X-)
|
|
int hat, hat_pos_a, hat_pos_b; // hat + hat position up/down and left/right; -1 if not assigned
|
|
} SAxisMap;
|
|
|
|
typedef struct
|
|
{
|
|
CONTROL *control; // pointer to CONTROL struct in Core library
|
|
BUTTONS buttons;
|
|
|
|
// mappings
|
|
SButtonMap button[16]; // 14 buttons; in the order of EButton + mempak/rumblepak switches
|
|
SAxisMap axis[2]; // 2 axis
|
|
int device; // joystick device; -1 = keyboard; -2 = none
|
|
int mouse; // mouse enabled: 0 = no; 1 = yes
|
|
SDL_Joystick *joystick; // SDL joystick device
|
|
int event_joystick; // the /dev/input/eventX device for force feeback
|
|
int axis_deadzone[2]; // minimum absolute value before analog movement is recognized
|
|
int axis_peak[2]; // highest analog value returned by SDL, used for scaling
|
|
float mouse_sens[2]; // mouse sensitivity
|
|
} SController;
|
|
|
|
/* global data definitions */
|
|
extern SController controller[4]; // 4 controllers
|
|
|
|
/* global function definitions */
|
|
extern void DebugMessage(int level, const char *message, ...);
|
|
|
|
/* declarations of pointers to Core config functions */
|
|
extern ptr_ConfigListSections ConfigListSections;
|
|
extern ptr_ConfigOpenSection ConfigOpenSection;
|
|
extern ptr_ConfigDeleteSection ConfigDeleteSection;
|
|
extern ptr_ConfigListParameters ConfigListParameters;
|
|
extern ptr_ConfigSaveFile ConfigSaveFile;
|
|
extern ptr_ConfigSetParameter ConfigSetParameter;
|
|
extern ptr_ConfigGetParameter ConfigGetParameter;
|
|
extern ptr_ConfigGetParameterHelp ConfigGetParameterHelp;
|
|
extern ptr_ConfigSetDefaultInt ConfigSetDefaultInt;
|
|
extern ptr_ConfigSetDefaultFloat ConfigSetDefaultFloat;
|
|
extern ptr_ConfigSetDefaultBool ConfigSetDefaultBool;
|
|
extern ptr_ConfigSetDefaultString ConfigSetDefaultString;
|
|
extern ptr_ConfigGetParamInt ConfigGetParamInt;
|
|
extern ptr_ConfigGetParamFloat ConfigGetParamFloat;
|
|
extern ptr_ConfigGetParamBool ConfigGetParamBool;
|
|
extern ptr_ConfigGetParamString ConfigGetParamString;
|
|
|
|
extern ptr_ConfigGetSharedDataFilepath ConfigGetSharedDataFilepath;
|
|
extern ptr_ConfigGetUserConfigPath ConfigGetUserConfigPath;
|
|
extern ptr_ConfigGetUserDataPath ConfigGetUserDataPath;
|
|
extern ptr_ConfigGetUserCachePath ConfigGetUserCachePath;
|
|
|
|
#endif // __PLUGIN_H__
|
|
|