示例#1
0
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;
}
示例#2
0
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
}