/** * @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) */ }
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; } } } } }
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 }
/* * 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 }
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(); } }
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; }
void SDL2FFBDevice::close() { for (int idx = 0; idx < c_maxEffectCount; idx++) removeAndEraseEffect(idx); SDL_HapticClose(c_haptic); }
/* * Cleans up a bit. */ static void abort_execution(void) { printf("\nAborting program execution.\n"); SDL_HapticClose(haptic); SDL_Quit(); exit(1); }
inline void SDLCloseGameControllers() { if(RumbleHandle) { SDL_HapticClose(RumbleHandle); RumbleHandle = 0; } SDL_GameControllerClose(GamePadHandle); GamePadHandle = 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; } }
void Controller::free(){ SDL_JoystickClose(joystick); joystickAnalogs.clear(); joystickButtonHeld.clear(); joystickButtonPressed.clear(); joystickButtonReleased.clear(); joystickDPad.clear(); if (haptic){ SDL_HapticClose(haptic); } }
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(); }
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(); }
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); } } }
/** * @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; } }
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); }
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; } }
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; } }
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"); } }
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(); }
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; } }
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; }
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 */ }
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; } }
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); } }
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(); }
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])); }
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); }
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); } }