X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fgamepad.cpp;h=873e3b5ad9a81d2efc0f3f7c186a256336fa2d22;hb=a8b48a094d7d3f16abe643ebf46c35483ffc2da2;hp=93989eed7ae7a975ecdec6d39469f23e06809da6;hpb=69effddb777c2009d32f70e3315d5570973446ef;p=virtualjaguar diff --git a/src/gui/gamepad.cpp b/src/gui/gamepad.cpp index 93989ee..873e3b5 100644 --- a/src/gui/gamepad.cpp +++ b/src/gui/gamepad.cpp @@ -7,7 +7,7 @@ // JLH = James Hammons // // Who When What -// --- ---------- ------------------------------------------------------------- +// --- ---------- ------------------------------------------------------------ // JLH 01/05/2013 Created this file // @@ -18,7 +18,7 @@ // Class member initialization /*static*/ int Gamepad::numJoysticks = 0; /*static*/ SDL_Joystick * Gamepad::pad[8]; -/*static*/ const char * Gamepad::padName[8]; +/*static*/ char Gamepad::padName[8][128]; /*static*/ int Gamepad::numButtons[8]; /*static*/ int Gamepad::numHats[8]; /*static*/ int Gamepad::numAxes[8]; @@ -51,18 +51,36 @@ void Gamepad::AllocateJoysticks(void) for(int i=0; i 127 if (pad[i]) { numButtons[i] = SDL_JoystickNumButtons(pad[i]); numHats[i] = SDL_JoystickNumHats(pad[i]); numAxes[i] = SDL_JoystickNumAxes(pad[i]); + WriteLog("Gamepad: Joystick #%i: %s\n", i, padName[i]); + + // Ick, kludges already!!! + if (strcmp(padName[i], "Sony PLAYSTATION(R)3 Controller") == 0) + { + // We do this because these axes stay stuck on -32000 (buttons) + // or come on and stay on (D-pad). :-P + numAxes[i] = 8; + WriteLog("Gamepad: Blacklisting PS3 controller axes 8 on up...\n"); + } } } WriteLog("Gamepad: Found %u joystick%s.\n", numJoysticks, (numJoysticks == 1 ? "" : "s")); +#if 0 +for(int i=0; i= 8) return NULL; +//printf("GAMEPAD: Getting name (%s) for joystick #%i...\n", padName[joystickID], joystickID); return padName[joystickID]; } @@ -129,6 +148,8 @@ bool Gamepad::GetState(int joystickID, int buttonID) int Gamepad::CheckButtonPressed(void) { + DumpJoystickStatesToLog(); + // This translates the hat direction to a mask index. int hatNum[16] = { -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1 }; @@ -165,6 +186,7 @@ int Gamepad::CheckButtonPressed(void) } +// UNUSED int Gamepad::GetButtonID(void) { // Return single button ID being pressed (if any) @@ -172,6 +194,7 @@ int Gamepad::GetButtonID(void) } +// UNUSED int Gamepad::GetJoystickID(void) { // Return joystick ID of button being pressed (if any) @@ -198,6 +221,84 @@ void Gamepad::Update(void) } +void Gamepad::DumpJoystickStatesToLog(void) +{ + bool pressed = false; + + for(int i=0; i 32000) + { + pressed = true; + break; + break; + } + + if (axis[i][j] < -32000) + { + pressed = true; + break; + break; + } + } + } + + if (!pressed) + return; + + WriteLog("Gamepad: CheckButtonPressed...\n"); + + for(int i=0; i 32000) + WriteLog("Gamepad: Pad #%i, axis %i pushed down...\n", i, j); + + if (axis[i][j] < -32000) + WriteLog("Gamepad: Pad #%i, axis %i pushed up...\n", i, j); + } + } +} + + +// However, SDL 2 *does* support hot-plugging! :-D #if 0 // Need to test this. It may be that the only time joysticks are detected is // when the program is first run. That would suck.