SDL Input : Changed the keymap codes to 32 bits values because the GDK keyboard syms are 16bit (as opposed to 8bits for SDL) + we still have to store the device number. Configuration changes are needed.

This commit is contained in:
bgk 2008-09-01 19:51:07 +00:00
parent 63fba2be26
commit 7cf772ea6c
3 changed files with 69 additions and 68 deletions

View File

@ -4,38 +4,39 @@
# #
# Key configuration (all numbers are in hexadecimal!) # Key configuration (all numbers are in hexadecimal!)
# #
# Keys values are in the format YXXX where Y is the device number. 0 means # Keys values are in the format YYYYXXXX where YYYY is the device number.
# keyborad and XXX is the SDL define for the desired key (read SDL_keysym.h). # 0 means keyboard and XXXX is the SDL define for the desired key
# (read SDL_keysym.h).
# #
# If Y is greater than 0, it means joystick number Y-1 and it uses the # If YYYY is greater than 0, it means joystick number YYYY-1 and it uses the
# following format for XXX: # following format for XXXX:
# #
# - if XXX < 20, XXX is the axis number multiplied by 2. An even number means # - if XXXX < 20, XXXX is the axis number multiplied by 2. An even number means
# movement to the negative side (on the X axis, it means left). An odd # movement to the negative side (on the X axis, it means left). An odd
# number means movement to the positive side (on the X axis, it mean # number means movement to the positive side (on the X axis, it mean
# right). For the Y axis, negative means up and positive means down. # right). For the Y axis, negative means up and positive means down.
# X axis is usally axis number 0 and Y is axis number 1. # X axis is usally axis number 0 and Y is axis number 1.
# - if 20 >= XXX > 30, then XXX is the HAT number multiplied by 4 plus the # - if 20 >= XXXX > 30, then XXXX is the HAT number multiplied by 4 plus the
# direction: 0 for up, 1 for down, 2 for right and 3 for left. Example: # direction: 0 for up, 1 for down, 2 for right and 3 for left. Example:
# 0021 is HAT 0 down, 0026 is HAT 1 right. # 0021 is HAT 0 down, 0026 is HAT 1 right.
# - if 80 >= XXX > 100, XXX is the joystick button number (XXX-080). # - if 80 >= XXXX > 100, XXXX is the joystick button number (XXXX-0080).
# #
# Default key configuration is (value in parenthesis): # Default key configuration is (value in parenthesis):
# #
# Left Left Arrow (0114) # Left Left Arrow (00000114)
# Right Right Arrow (0113) # Right Right Arrow (00000113)
# Up Up Arrow (0111) # Up Up Arrow (00000111)
# Down Down Arrow (0112) # Down Down Arrow (00000112)
# A Z (007a) # A Z (0000007a)
# B X (0078) # B X (00000078)
# L A (0061) # L A (00000061)
# R S (0073) # R S (00000073)
# Start ENTER (000d) # Start ENTER (0000000d)
# Select BACKSPACE (0008) # Select BACKSPACE (00000008)
# Speed up SPACE (0020) # Speed up SPACE (00000020)
# Capture F12 (0125) # Capture F12 (00000125)
# Auto A Q (0071) # Auto A Q (00000071)
# Auto B W (0077) # Auto B W (00000077)
# #
Joy0_Left=0114 Joy0_Left=0114
Joy0_Right=0113 Joy0_Right=0113

View File

@ -19,13 +19,13 @@
#define SDLBUTTONS_NUM 14 #define SDLBUTTONS_NUM 14
static void sdlUpdateKey(int key, bool down); static void sdlUpdateKey(uint32_t key, bool down);
static void sdlUpdateJoyButton(int which, int button, bool pressed); static void sdlUpdateJoyButton(int which, int button, bool pressed);
static void sdlUpdateJoyHat(int which, int hat, int value); static void sdlUpdateJoyHat(int which, int hat, int value);
static void sdlUpdateJoyAxis(int which, int axis, int value); static void sdlUpdateJoyAxis(int which, int axis, int value);
static bool sdlCheckJoyKey(int key); static bool sdlCheckJoyKey(int key);
bool sdlButtons[4][SDLBUTTONS_NUM] = { static bool sdlButtons[4][SDLBUTTONS_NUM] = {
{ false, false, false, false, false, false, { false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false, false, false, false,
false, false false, false
@ -44,17 +44,17 @@ bool sdlButtons[4][SDLBUTTONS_NUM] = {
} }
}; };
bool sdlMotionButtons[4] = { false, false, false, false }; static bool sdlMotionButtons[4] = { false, false, false, false };
int sdlNumDevices = 0; static int sdlNumDevices = 0;
SDL_Joystick **sdlDevices = NULL; static SDL_Joystick **sdlDevices = NULL;
int sdlDefaultJoypad = 0; static int sdlDefaultJoypad = 0;
int autoFire = 0; static int autoFire = 0;
bool autoFireToggle = false; static bool autoFireToggle = false;
uint16_t joypad[4][SDLBUTTONS_NUM] = { static uint32_t joypad[4][SDLBUTTONS_NUM] = {
{ SDLK_LEFT, SDLK_RIGHT, { SDLK_LEFT, SDLK_RIGHT,
SDLK_UP, SDLK_DOWN, SDLK_UP, SDLK_DOWN,
SDLK_z, SDLK_x, SDLK_z, SDLK_x,
@ -68,7 +68,7 @@ uint16_t joypad[4][SDLBUTTONS_NUM] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
}; };
uint16_t defaultJoypad[SDLBUTTONS_NUM] = { static uint32_t defaultJoypad[SDLBUTTONS_NUM] = {
SDLK_LEFT, SDLK_RIGHT, SDLK_LEFT, SDLK_RIGHT,
SDLK_UP, SDLK_DOWN, SDLK_UP, SDLK_DOWN,
SDLK_z, SDLK_x, SDLK_z, SDLK_x,
@ -78,21 +78,21 @@ uint16_t defaultJoypad[SDLBUTTONS_NUM] = {
SDLK_q, SDLK_w SDLK_q, SDLK_w
}; };
uint16_t motion[4] = { static uint32_t motion[4] = {
SDLK_KP4, SDLK_KP6, SDLK_KP8, SDLK_KP2 SDLK_KP4, SDLK_KP6, SDLK_KP8, SDLK_KP2
}; };
uint16_t defaultMotion[4] = { static uint32_t defaultMotion[4] = {
SDLK_KP4, SDLK_KP6, SDLK_KP8, SDLK_KP2 SDLK_KP4, SDLK_KP6, SDLK_KP8, SDLK_KP2
}; };
int sensorX = 2047; static int sensorX = 2047;
int sensorY = 2047; static int sensorY = 2047;
static uint16_t sdlGetHatCode(const SDL_Event &event) static uint32_t sdlGetHatCode(const SDL_Event &event)
{ {
return ( return (
((event.jhat.which + 1) << 12) | ((event.jhat.which + 1) << 16) |
(event.jhat.hat << 2) | (event.jhat.hat << 2) |
( (
event.jhat.value & SDL_HAT_UP ? 0 : event.jhat.value & SDL_HAT_UP ? 0 :
@ -103,18 +103,18 @@ static uint16_t sdlGetHatCode(const SDL_Event &event)
); );
} }
static uint16_t sdlGetButtonCode(const SDL_Event &event) static uint32_t sdlGetButtonCode(const SDL_Event &event)
{ {
return ( return (
((event.jbutton.which + 1) << 12) | ((event.jbutton.which + 1) << 16) |
(event.jbutton.button + 0x80) (event.jbutton.button + 0x80)
); );
} }
static uint16_t sdlGetAxisCode(const SDL_Event &event) static uint32_t sdlGetAxisCode(const SDL_Event &event)
{ {
return ( return (
((event.jaxis.which + 1) << 12) | ((event.jaxis.which + 1) << 16) |
(event.jaxis.axis << 1) | (event.jaxis.axis << 1) |
( (
event.jaxis.value > 16384 ? 1 : event.jaxis.value > 16384 ? 1 :
@ -123,7 +123,7 @@ static uint16_t sdlGetAxisCode(const SDL_Event &event)
); );
} }
uint16_t inputGetEventCode(const SDL_Event &event) uint32_t inputGetEventCode(const SDL_Event &event)
{ {
switch(event.type) switch(event.type)
{ {
@ -147,12 +147,12 @@ uint16_t inputGetEventCode(const SDL_Event &event)
} }
} }
void inputSetKeymap(int joy, EKey key, uint16_t code) void inputSetKeymap(int joy, EKey key, uint32_t code)
{ {
joypad[joy][key] = code; joypad[joy][key] = code;
} }
void inputSetMotionKeymap(EKey key, uint16_t code) void inputSetMotionKeymap(EKey key, uint32_t code)
{ {
motion[key] = code; motion[key] = code;
} }
@ -160,7 +160,7 @@ void inputSetMotionKeymap(EKey key, uint16_t code)
bool inputToggleAutoFire(EKey key) bool inputToggleAutoFire(EKey key)
{ {
int mask = 0; int mask = 0;
switch (key) switch (key)
{ {
case KEY_BUTTON_A: case KEY_BUTTON_A:
@ -191,19 +191,19 @@ bool inputToggleAutoFire(EKey key)
} }
} }
static void sdlUpdateKey(int key, bool down) static void sdlUpdateKey(uint32_t key, bool down)
{ {
int i; int i;
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
for(i = 0 ; i < SDLBUTTONS_NUM; i++) { for(i = 0 ; i < SDLBUTTONS_NUM; i++) {
if((joypad[j][i] & 0xf000) == 0) { if((joypad[j][i] & 0xffff0000) == 0) {
if(key == joypad[j][i]) if(key == joypad[j][i])
sdlButtons[j][i] = down; sdlButtons[j][i] = down;
} }
} }
} }
for(i = 0 ; i < 4; i++) { for(i = 0 ; i < 4; i++) {
if((motion[i] & 0xf000) == 0) { if((motion[i] & 0xffff0000) == 0) {
if(key == motion[i]) if(key == motion[i])
sdlMotionButtons[i] = down; sdlMotionButtons[i] = down;
} }
@ -217,8 +217,8 @@ static void sdlUpdateJoyButton(int which,
int i; int i;
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
for(i = 0; i < SDLBUTTONS_NUM; i++) { for(i = 0; i < SDLBUTTONS_NUM; i++) {
int dev = (joypad[j][i] >> 12); int dev = (joypad[j][i] >> 16);
int b = joypad[j][i] & 0xfff; int b = joypad[j][i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -229,8 +229,8 @@ static void sdlUpdateJoyButton(int which,
} }
} }
for(i = 0; i < 4; i++) { for(i = 0; i < 4; i++) {
int dev = (motion[i] >> 12); int dev = (motion[i] >> 16);
int b = motion[i] & 0xfff; int b = motion[i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -248,8 +248,8 @@ static void sdlUpdateJoyHat(int which,
int i; int i;
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
for(i = 0; i < SDLBUTTONS_NUM; i++) { for(i = 0; i < SDLBUTTONS_NUM; i++) {
int dev = (joypad[j][i] >> 12); int dev = (joypad[j][i] >> 16);
int a = joypad[j][i] & 0xfff; int a = joypad[j][i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -276,8 +276,8 @@ static void sdlUpdateJoyHat(int which,
} }
} }
for(i = 0; i < 4; i++) { for(i = 0; i < 4; i++) {
int dev = (motion[i] >> 12); int dev = (motion[i] >> 16);
int a = motion[i] & 0xfff; int a = motion[i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -311,8 +311,8 @@ static void sdlUpdateJoyAxis(int which,
int i; int i;
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
for(i = 0; i < SDLBUTTONS_NUM; i++) { for(i = 0; i < SDLBUTTONS_NUM; i++) {
int dev = (joypad[j][i] >> 12); int dev = (joypad[j][i] >> 16);
int a = joypad[j][i] & 0xfff; int a = joypad[j][i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -323,8 +323,8 @@ static void sdlUpdateJoyAxis(int which,
} }
} }
for(i = 0; i < 4; i++) { for(i = 0; i < 4; i++) {
int dev = (motion[i] >> 12); int dev = (motion[i] >> 16);
int a = motion[i] & 0xfff; int a = motion[i] & 0xffff;
if(dev) { if(dev) {
dev--; dev--;
@ -337,8 +337,8 @@ static void sdlUpdateJoyAxis(int which,
static bool sdlCheckJoyKey(int key) static bool sdlCheckJoyKey(int key)
{ {
int dev = (key >> 12) - 1; int dev = (key >> 16) - 1;
int what = key & 0xfff; int what = key & 0xffff;
if(what >= 128) { if(what >= 128) {
// joystick button // joystick button
@ -376,7 +376,7 @@ void inputInitJoysticks()
for(int j = 0; j < 4; j++) { for(int j = 0; j < 4; j++) {
for(i = 0; i < SDLBUTTONS_NUM; i++) { for(i = 0; i < SDLBUTTONS_NUM; i++) {
int dev = joypad[j][i] >> 12; int dev = joypad[j][i] >> 16;
if(dev) { if(dev) {
dev--; dev--;
bool ok = false; bool ok = false;
@ -401,7 +401,7 @@ void inputInitJoysticks()
} }
for(i = 0; i < 4; i++) { for(i = 0; i < 4; i++) {
int dev = motion[i] >> 12; int dev = motion[i] >> 16;
if(dev) { if(dev) {
dev--; dev--;
bool ok = false; bool ok = false;

View File

@ -49,19 +49,19 @@ void inputInitJoysticks();
* @param key Emulated joypad button * @param key Emulated joypad button
* @param code Code defining an actual joypad / keyboard button * @param code Code defining an actual joypad / keyboard button
*/ */
void inputSetKeymap(int joy, EKey key, uint16_t code); void inputSetKeymap(int joy, EKey key, uint32_t code);
/** /**
* Define which keys control motion detection emulation * Define which keys control motion detection emulation
* @param key Emulated joypad button * @param key Emulated joypad button
* @param code Code defining an actual joypad / keyboard button * @param code Code defining an actual joypad / keyboard button
*/ */
void inputSetMotionKeymap(EKey key, uint16_t code); void inputSetMotionKeymap(EKey key, uint32_t code);
/** /**
* Toggle Auto fire for the specified button. Only A, B, R, L are supported. * Toggle Auto fire for the specified button. Only A, B, R, L are supported.
* @param key Emulated joypad button * @param key Emulated joypad button
* @return Auto fire enabled * @return Auto fire enabled
*/ */
bool inputToggleAutoFire(EKey key); bool inputToggleAutoFire(EKey key);
@ -76,7 +76,7 @@ void inputProcessSDLEvent(const SDL_Event &event);
* @param SDL_Event An event that has just occured * @param SDL_Event An event that has just occured
* @return Keymap code * @return Keymap code
*/ */
uint16_t inputGetEventCode(const SDL_Event &event); uint32_t inputGetEventCode(const SDL_Event &event);
/** /**
* Read the state of an emulated joypad * Read the state of an emulated joypad