Lephisto/src/joystick.c

69 lines
1.8 KiB
C

#include <SDL.h>
#include <string.h>
#include "lephisto.h"
#include "log.h"
#include "joystick.h"
static SDL_Joystick* joystick = NULL;
int joystick_get(char* namjoystick) {
int i;
for(i = 0; i < SDL_NumJoysticks(); i++)
if(strstr(SDL_JoystickName(i), namjoystick))
return i;
WARN("Joystick '%s' not found, using default joystick '%s'",
namjoystick, SDL_JoystickName(0));
return 0;
}
int joystick_use(int indjoystick) {
if(indjoystick < 0 || indjoystick >= SDL_NumJoysticks()) {
WARN("Joystick of index number %d does not exist. Switching to default (0)",
indjoystick);
indjoystick = 0;
}
if(joystick)
// Might as well close it if it is open already.
SDL_JoystickClose(joystick);
// Start using the joystick.
LOG("Using joystick %d", indjoystick);
joystick = SDL_JoystickOpen(indjoystick);
if(joystick == NULL) {
WARN("Error opening joystick %d [%s]",
indjoystick, SDL_JoystickName(indjoystick));
return -1;
}
DEBUG("\t\tWith %d axes, %d buttons, %d balls, and %d hats",
SDL_JoystickNumAxes(joystick), SDL_JoystickNumButtons(joystick),
SDL_JoystickNumBalls(joystick), SDL_JoystickNumHats(joystick));
return 0;
}
int joystick_init(void) {
int numjoysticks, i;
// Init the SDL subsys.
if(SDL_InitSubSystem(SDL_INIT_JOYSTICK)) {
WARN("Unable to init the joystick subsystem.");
return -1;
}
// Figure out how many joysticks there are.
numjoysticks = SDL_NumJoysticks();
LOG("%d joystick%s detected", numjoysticks, (numjoysticks==1)?"":"s");
for(i = 0; i < numjoysticks; i++)
LOG("\t\t%d. %s", i, SDL_JoystickName(i));
// Enable joystick events.
SDL_JoystickEventState(SDL_ENABLE);
return 0;
}
void joystick_exit(void) {
SDL_JoystickClose(joystick);
}