Ejemplo n.º 1
0
/**
 * @brief Initializes force feedback for the loaded device.
 */
static void joystick_initHaptic (void)
{
#if SDL_VERSION_ATLEAST(1,3,0)
    if (has_haptic && SDL_JoystickIsHaptic(joystick)) {

        /* Close haptic if already open. */
        if (haptic != NULL) {
            SDL_HapticClose(haptic);
            haptic = NULL;
        }

        /* Try to create haptic device. */
        haptic = SDL_HapticOpenFromJoystick(joystick);
        if (haptic == NULL) {
            WARN("Unable to initialize force feedback: %s", SDL_GetError());
            return;
        }

        /* Check to see what it supports. */
        haptic_query = SDL_HapticQuery(haptic);
        if (!(haptic_query & SDL_HAPTIC_SINE)) {
            SDL_HapticClose(haptic);
            haptic = NULL;
            return;
        }

        DEBUG("   force feedback enabled");
    }
#endif /* SDL_VERSION_ATLEAST(1,3,0) */
}
Ejemplo n.º 2
0
	void refresh_controllers()
	{
		for (s32 i = 0; i < MAX_GAMEPADS; i++)
		{
			if (haptics[i])
			{
				SDL_HapticClose(haptics[i]);
				haptics[i] = nullptr;
			}

			if (controllers[i])
			{
				SDL_GameControllerClose(controllers[i]);
				controllers[i] = nullptr;
			}
		}

		for (s32 i = 0; i < SDL_NumJoysticks(); i++)
		{
			if (SDL_IsGameController(i))
			{
				controllers[i] = SDL_GameControllerOpen(i);
				SDL_Joystick* joystick = SDL_GameControllerGetJoystick(controllers[i]);
				if (SDL_JoystickIsHaptic(joystick))
				{
					haptics[i] = SDL_HapticOpenFromJoystick(joystick);
					if (SDL_HapticRumbleInit(haptics[i])) // failed
					{
						SDL_HapticClose(haptics[i]);
						haptics[i] = nullptr;
					}
				}
			}
		}
	}
Ejemplo n.º 3
0
void JoyInitHaptic() {
#if 0
    uint8_t i;
    unsigned int haptic_query = 0;
    for (i = 0; i < 2; i++) {
        if (g.PadState[i].JoyDev && SDL_JoystickIsHaptic(g.PadState[i].JoyDev)) {
            if (g.PadState[i].haptic != NULL) {
                SDL_HapticClose(g.PadState[i].haptic);
                g.PadState[i].haptic = NULL;
            }

            g.PadState[i].haptic = SDL_HapticOpenFromJoystick(g.PadState[i].JoyDev);
            if (g.PadState[i].haptic == NULL)
                continue;

            if (SDL_HapticRumbleSupported(g.PadState[i].haptic) == SDL_FALSE) {
                printf("\nRumble not supported\n");
                g.PadState[i].haptic = NULL;
                continue;
            }

            if (SDL_HapticRumbleInit(g.PadState[i].haptic) != 0) {
                printf("\nFailed to initialize rumble: %s\n", SDL_GetError());
                g.PadState[i].haptic = NULL;
                continue;
            }
        }
    }
#endif
}
Ejemplo n.º 4
0
/*
 * Shuts the backend down
 */
void
IN_Shutdown(void)
{
	Cmd_RemoveCommand("force_centerview");
	Cmd_RemoveCommand("+mlook");
	Cmd_RemoveCommand("-mlook");

	Com_Printf("Shutting down input.\n");

#if SDL_VERSION_ATLEAST(2, 0, 0)
	if (joystick_haptic)
	{
		IN_Haptic_Effects_Shotdown();

		SDL_HapticClose(joystick_haptic);
		joystick_haptic = NULL;
	}

	if (controller)
	{
		SDL_GameControllerClose(controller);
		controller  = NULL;
	}

	if (joystick)
	{
		SDL_JoystickClose(joystick);
		joystick = NULL;
	}
#endif
}
Ejemplo n.º 5
0
void SdlJoystick::controlLoop()
{  
   if (mInitialized)
   {
      // Loop through and keep sampling until stopSampling is called.
      while(!mDone)
      {
         this->sample();

         // Limit sampling to 100 Hz
         vpr::System::msleep(10);
      }

#if SDL_VERSION_ATLEAST(1,3,0)
      if (mHaptic != NULL)
      {
         SDL_HapticClose(mHaptic);
         mHaptic = NULL;
      }
#endif

      if (mJoystick != NULL)
      {
         SDL_JoystickClose(mJoystick);
         mJoystick = NULL;
      }

      SDL_Quit();
   }
}
Ejemplo n.º 6
0
bool CSDLPad::OpenDevice()
{
	m_pSDLDevice = SDL_JoystickOpen(m_deviceNo);
	if (m_pSDLDevice)
	{
		// SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK) should skip the accelerometer when 
		// enumerating joysticks, but it doesn't seem to work.  Manually check for it here 
		// and close it.
		// FIXME: Need a more robust way of detecting this (or get SetHint() to work).
		if (strcmp(SDL_JoystickName(m_pSDLDevice), "Android Accelerometer") == 0)
		{
			SDL_JoystickClose(m_pSDLDevice);
			return false;
		}
		m_connected = true;
#if defined(SDL_USE_HAPTIC_FEEDBACK)
		m_pHapticDevice = SDL_HapticOpenFromJoystick(m_pSDLDevice);
		if (m_pHapticDevice && (SDL_HapticQuery(m_pHapticDevice) & SDL_HAPTIC_LEFTRIGHT))
		{
			m_supportsFeedback = true;
		}
		else
		{
			if (m_pHapticDevice) SDL_HapticClose(m_pHapticDevice);
			m_supportsFeedback = false;
		}
#else
		m_supportsFeedback = false;
#endif
		m_curHapticEffect = -1;
		gEnv->pLog->Log("CSDLPad - Gamepad [%d] supports feedback (Y/N): %s", m_deviceNo, m_supportsFeedback ? "Y" : "N");
	}
	return m_pSDLDevice != NULL;
}
Ejemplo n.º 7
0
void SDL2FFBDevice::close()
{
  for (int idx = 0; idx < c_maxEffectCount; idx++)
    removeAndEraseEffect(idx);

  SDL_HapticClose(c_haptic);
}
Ejemplo n.º 8
0
/*
 * Cleans up a bit.
 */
static void
abort_execution(void)
{
    printf("\nAborting program execution.\n");

    SDL_HapticClose(haptic);
    SDL_Quit();

    exit(1);
}
Ejemplo n.º 9
0
inline void
SDLCloseGameControllers() {
    if(RumbleHandle) {
        SDL_HapticClose(RumbleHandle);
        RumbleHandle = 0;
    }

    SDL_GameControllerClose(GamePadHandle);
    GamePadHandle = 0;
}
Ejemplo n.º 10
0
/*
 * Shuts the backend down
 */
static void
IN_Haptic_Shutdown(void)
{
	if (joystick_haptic)
	{
		IN_Haptic_Effects_Shutdown();

		SDL_HapticClose(joystick_haptic);
		joystick_haptic = NULL;
	}
}
Ejemplo n.º 11
0
void Controller::free(){
	SDL_JoystickClose(joystick);
	joystickAnalogs.clear();
	joystickButtonHeld.clear();
	joystickButtonPressed.clear();
	joystickButtonReleased.clear();
	joystickDPad.clear();
	if (haptic){
		SDL_HapticClose(haptic);
	}
}
Ejemplo n.º 12
0
SDLFrontend::~SDLFrontend ()
{
	if (_haptic)
		SDL_HapticClose(_haptic);

//	for (int i = 0; i < _numJoysticks; ++i)
//		SDL_JoystickClose(_joysticks[i]);
	if (_renderer)
		SDL_DestroyRenderer(_renderer);
	SDL_DestroyWindow(_window);
	IMG_Quit();
}
Ejemplo n.º 13
0
void SDL2EventHandler::inputTerminate()
{
    /* Close haptic devices and game controllers */
    if(getSDL2Context())
        for(Pair<uint8, SDL_GameController*> con :
            getSDL2Context()->controllers)
        {
            SDL_HapticClose(getSDL2Context()->haptics[con.first]);
            SDL_GameControllerClose(getSDL2Context()->controllers[con.first]);
        }
    SDL_QuitSubSystem(
        SDL_INIT_EVENTS | SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC);
}
JoystickControl::~JoystickControl() {
	personaje = NULL;
	if (joystick != NULL && SDL_JoystickGetAttached(joystick)){
		SDL_JoystickClose( joystick );
		joystick = NULL;
	}
	if (joystickHaptic != NULL){
		SDL_HapticClose(joystickHaptic);
		joystickHaptic = NULL;
	}
	if (comandos != NULL)
		comandos->clear();
}
Ejemplo n.º 15
0
internal void sdl_close_joysticks(struct sdl_event_context *ctx)
{
	unsigned int i;

	for (i = 0; i < MAX_CONTROLLERS; ++i) {
		if (ctx->players[i].controller) {
			if (ctx->players[i].rumble) {
				SDL_HapticClose(ctx->players[i].rumble);
			}
			SDL_GameControllerClose(ctx->players[i].controller);
		}
	}
}
Ejemplo n.º 16
0
/**
 * @brief Exits the joystick subsystem.
 */
void joystick_exit (void)
{
#if SDL_VERSION_ATLEAST(1,3,0)
    if (haptic != NULL) {
        SDL_HapticClose(haptic);
        haptic = NULL;
    }
#endif /* SDL_VERSION_ATLEAST(1,3,0) */

    if (joystick != NULL) {
        SDL_JoystickClose(joystick);
        joystick = NULL;
    }
}
Ejemplo n.º 17
0
Joystick::~Joystick()
{
#ifdef USE_SDL_HAPTIC
	if (m_haptic)
	{
		// stop/destroy all effects
		SDL_HapticStopAll(m_haptic);
		// close haptic first
		SDL_HapticClose(m_haptic);
	}
#endif

	// close joystick
	SDL_JoystickClose(m_joystick);
}
Ejemplo n.º 18
0
void CSDLPad::CloseDevice()
{
	if (m_pSDLDevice)
	{
#if defined(SDL_USE_HAPTIC_FEEDBACK)
		// close haptic, also deletes effect
		if (m_pHapticDevice) SDL_HapticClose(m_pHapticDevice);
#endif
		// close joystick
		SDL_JoystickClose(m_pSDLDevice);
		m_pSDLDevice = NULL;
		m_curHapticEffect = -1;
		m_connected = false;
		m_supportsFeedback = false;
	}
}
Ejemplo n.º 19
0
void JoystickInfo::Destroy()
{
	if (joy != NULL)
	{
#if SDL_VERSION_ATLEAST(1,3,0)
		// Haptic must be closed before the joystick
		if (haptic != NULL) {
			SDL_HapticClose(haptic);
			haptic = NULL;
		}
#endif

		if (SDL_JoystickOpened(_id)) SDL_JoystickClose(joy);
		joy = NULL;
	}
}
Ejemplo n.º 20
0
void SDLFrontend::initJoystickAndHaptic ()
{
	if (_haptic != nullptr) {
		SDL_HapticClose(_haptic);
		_haptic = nullptr;
	}

	const int joysticks = SDL_NumJoysticks();
	SDL_Haptic *haptic = nullptr;
	for (int i = 0; i < joysticks; i++) {
		const char *name;
		if (SDL_IsGameController(i)) {
			name = SDL_GameControllerNameForIndex(i);
		} else {
			name = SDL_JoystickNameForIndex(i);
		}
		SDL_Joystick *joystick = SDL_JoystickOpen(i);
		info(LOG_CLIENT, String::format("found joystick %s", name ? name : "Unknown Joystick"));
		info(LOG_CLIENT, String::format("joystick axes: %i", SDL_JoystickNumAxes(joystick)));
		info(LOG_CLIENT, String::format("joystick hats: %i", SDL_JoystickNumHats(joystick)));
		info(LOG_CLIENT, String::format("joystick balls: %i", SDL_JoystickNumBalls(joystick)));
		info(LOG_CLIENT, String::format("joystick buttons: %i", SDL_JoystickNumButtons(joystick)));
		if (haptic == nullptr)
			haptic = SDL_HapticOpenFromJoystick(joystick);
	}
	if (!joysticks) {
		info(LOG_CLIENT, "no joysticks found");
	}

	info(LOG_CLIENT, String::format("found %i touch device(s)", SDL_GetNumTouchDevices()));

	info(LOG_CLIENT, String::format("%i haptic devices", SDL_NumHaptics()));
	if (haptic == nullptr && SDL_MouseIsHaptic()) {
		haptic = SDL_HapticOpenFromMouse();
	}
	if (haptic != nullptr) {
		const bool rumbleSupported = SDL_HapticRumbleSupported(haptic) && SDL_HapticRumbleInit(haptic) == 0;
		if (rumbleSupported) {
			info(LOG_CLIENT, "rumble support");
			_haptic = haptic;
		}
	}
	if (_haptic == nullptr) {
		info(LOG_CLIENT, "no rumble support");
	}
}
Ejemplo n.º 21
0
void Joystick::close()
{
	if (haptic)
		SDL_HapticClose(haptic);

	if (controller)
		SDL_GameControllerClose(controller);

	if (joyhandle)
		SDL_JoystickClose(joyhandle);

	joyhandle = nullptr;
	controller = nullptr;
	haptic = nullptr;
	instanceid = -1;
	vibration = Vibration();
}
Ejemplo n.º 22
0
void FDeviceSDL::RemoveDevice(FDeviceId DeviceId)
{
	EventInterface->JoystickUnplugged(DeviceId);

	FDeviceInfoSDL &DeviceInfo = Devices[DeviceId];
	DeviceMapping.Remove(DeviceInfo.InstanceId);

	if (DeviceInfo.Haptic != nullptr)
	{
		SDL_HapticClose(DeviceInfo.Haptic);
		DeviceInfo.Haptic = nullptr;
	}

	if (DeviceInfo.Joystick != nullptr)
	{
		SDL_JoystickClose(DeviceInfo.Joystick);
		DeviceInfo.Joystick = nullptr;
	}
}
Ejemplo n.º 23
0
bool SDL2EventHandler::inputPostInit(CString*)
{
    DProfContext a(SDLEV_API "Cleaning up joystick and haptic devices");

    /* WORKAROUND: Sometimes, haptic and joystick devices are not closed
     * properly. This part ensures that they are indeed closed before starting.
     *  Everything else should be fine. */
    for(int i = 0; i < SDL_NumHaptics(); i++)
    {
        SDL_Haptic* h = SDL_HapticOpen(i);
        SDL_HapticClose(h);
    }
    for(int i = 0; i < SDL_NumJoysticks(); i++)
    {
        SDL_Joystick* h = SDL_JoystickOpen(i);
        SDL_JoystickClose(h);
    }
    return true;
}
Ejemplo n.º 24
0
void DEV_Joystick::DestroyJoystickDevice(void)
{
#ifdef WITH_SDL
	if (m_isinit) {

			if (m_private->m_haptic && SDL_CHECK(SDL_HapticClose)) {
				SDL_HapticClose(m_private->m_haptic);
				m_private->m_haptic = NULL;
			}

			if (m_private->m_gamecontroller && SDL_CHECK(SDL_GameControllerClose)) {
				CM_Debug("Game Controller (" << GetName() << ") with index " << m_joyindex << " closed");
				SDL_GameControllerClose(m_private->m_gamecontroller);
				m_private->m_gamecontroller = NULL;
			}

		m_isinit = false;
	}
#endif /* WITH_SDL */
}
Ejemplo n.º 25
0
void JoystickInfo::Destroy()
{
	if (joy != NULL)
	{
#if SDL_MAJOR_VERSION >= 2
		// Haptic must be closed before the joystick
		if (haptic != NULL) {
			SDL_HapticClose(haptic);
			haptic = NULL;
		}
#endif

#if SDL_MAJOR_VERSION >= 2
		if (joy) SDL_JoystickClose(joy);
#else
		if (SDL_JoystickOpened(_id)) SDL_JoystickClose(joy);
#endif
		joy = NULL;
	}
}
Ejemplo n.º 26
0
void shutdown()
{
	for (u32 i = 0; i < MaximumControllers; i++)
	{
		if (isControllerPresent(i))
			setControllerVibration(i, 0);
	}

	for (auto& gamepad : g_controllerHandles)
	{
		if (gamepad)
			SDL_GameControllerClose(gamepad);
	}

	for (auto& rumble : g_rumbleHandles)
	{
		if (rumble)
			SDL_HapticClose(rumble);
	}
}
Ejemplo n.º 27
0
void close() {
  //Free loaded images
  gSplashTexture.free();

  //Close game controller with haptics
  SDL_HapticClose( gControllerHaptic );
  SDL_JoystickClose( gGameController );
  gGameController = NULL;
  gControllerHaptic = NULL;

  //Destroy window
  SDL_DestroyRenderer( gRenderer );
  SDL_DestroyWindow( gWindow );
  gWindow = NULL;
  gRenderer = NULL;

  //Quit SDL subsystems
  IMG_Quit();
  SDL_Quit();
}
Ejemplo n.º 28
0
static void sdl_pad_disconnect(unsigned id)
{
#ifdef HAVE_SDL2
   if (sdl_pads[id].haptic)
      SDL_HapticClose(sdl_pads[id].haptic);

   if (sdl_pads[id].controller)
   {
      SDL_GameControllerClose(sdl_pads[id].controller);
      input_autoconfigure_disconnect(id, sdl_joypad.ident);
   }
   else
#endif
   if (sdl_pads[id].joypad)
   {
      SDL_JoystickClose(sdl_pads[id].joypad);
      input_autoconfigure_disconnect(id, sdl_joypad.ident);
   }

   memset(&sdl_pads[id], 0, sizeof(sdl_pads[id]));
}
Ejemplo n.º 29
0
Joystick::~Joystick()
{
#ifdef USE_SDL_HAPTIC
	if (m_haptic)
	{	
		// stop/destroy all effects
		SDL_HapticStopAll(m_haptic);
		std::list<EffectIDState>::iterator
			i = m_state_out.begin(),
			e = m_state_out.end();
		for ( ; i != e; ++i)
			if (i->id != -1)
				SDL_HapticDestroyEffect(m_haptic, i->id);
		// close haptic first
		SDL_HapticClose(m_haptic);
	}
#endif

	// close joystick
	SDL_JoystickClose(m_joystick);
}
Ejemplo n.º 30
0
void I_ShutdownGamepad(void)
{
    if (gamecontroller)
    {
        if (haptic)
        {
            SDL_HapticClose(haptic);
            haptic = NULL;
            barrelvibrationtics = 0;
            damagevibrationtics = 0;
            weaponvibrationtics = 0;
        }

        SDL_GameControllerClose(gamecontroller);
        gamecontroller = NULL;

        SDL_JoystickClose(joystick);
        joystick = NULL;

        SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC);
    }
}