static bool sdl_joypad_init(void) { if (SDL_Init(SDL_INIT_JOYSTICK) < 0) return false; unsigned num_sticks = SDL_NumJoysticks(); if (num_sticks > MAX_PLAYERS) num_sticks = MAX_PLAYERS; for (unsigned i = 0; i < num_sticks; i++) { struct sdl_joypad *pad = &g_pads[i]; pad->joypad = SDL_JoystickOpen(i); if (!pad->joypad) { RARCH_ERR("Couldn't open SDL joystick #%u.\n", i); goto error; } RARCH_LOG("Opened Joystick: %s (#%u).\n", SDL_JoystickName(i), i); pad->num_axes = SDL_JoystickNumAxes(pad->joypad); pad->num_buttons = SDL_JoystickNumButtons(pad->joypad); pad->num_hats = SDL_JoystickNumHats(pad->joypad); RARCH_LOG("Joypad has: %u axes, %u buttons, %u hats.\n", pad->num_axes, pad->num_buttons, pad->num_hats); } return true; error: sdl_joypad_destroy(); return false; }
static bool sdl_joypad_init(void *data) { unsigned i, num_sticks; (void)data; if (SDL_WasInit(0) == 0) { if (SDL_Init(g_subsystem) < 0) return false; } else if (SDL_InitSubSystem(g_subsystem) < 0) return false; #if HAVE_SDL2 g_has_haptic = false; if (SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) RARCH_WARN("[SDL]: Failed to initialize haptic device support: %s\n", SDL_GetError()); else g_has_haptic = true; #endif memset(sdl_pads, 0, sizeof(sdl_pads)); num_sticks = SDL_NumJoysticks(); if (num_sticks > MAX_USERS) num_sticks = MAX_USERS; for (i = 0; i < num_sticks; i++) sdl_pad_connect(i); #ifndef HAVE_SDL2 /* quit if no joypad is detected. */ num_sticks = 0; for (i = 0; i < MAX_USERS; i++) if (sdl_pads[i].joypad) num_sticks++; if (num_sticks == 0) goto error; #endif return true; #ifndef HAVE_SDL2 error: sdl_joypad_destroy(); return false; #endif }