/* Function to scan the system for joysticks. * This function should set SDL_numjoysticks to the number of available * joysticks. Joystick 0 should be the system default joystick. * It should return 0, or -1 on an unrecoverable fatal error. */ int SDL_SYS_JoystickInit(void) { HRESULT result; HINSTANCE instance; SYS_NumJoysticks = 0; result = WIN_CoInitialize(); if (FAILED(result)) { SetDIerror("CoInitialize", result); return (-1); } coinitialized = SDL_TRUE; result = CoCreateInstance(&CLSID_DirectInput, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectInput, (LPVOID)&dinput); if (FAILED(result)) { SDL_SYS_JoystickQuit(); SetDIerror("CoCreateInstance", result); return (-1); } /* Because we used CoCreateInstance, we need to Initialize it, first. */ instance = GetModuleHandle(NULL); if (instance == NULL) { SDL_SYS_JoystickQuit(); SDL_SetError("GetModuleHandle() failed with error code %d.", GetLastError()); return (-1); } result = IDirectInput_Initialize(dinput, instance, DIRECTINPUT_VERSION); if (FAILED(result)) { SDL_SYS_JoystickQuit(); SetDIerror("IDirectInput::Initialize", result); return (-1); } /* Look for joysticks, wheels, head trackers, gamepads, etc.. */ result = IDirectInput_EnumDevices(dinput, DIDEVTYPE_JOYSTICK, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY); return SYS_NumJoysticks; }
void SDL_JoystickQuit(void) { /* Make sure we're not getting called in the middle of updating joysticks */ SDL_assert(!SDL_updating_joystick); SDL_LockJoystickList(); /* Stop the event polling */ while (SDL_joysticks) { SDL_joysticks->ref_count = 1; SDL_JoystickClose(SDL_joysticks); } /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); SDL_UnlockJoystickList(); #if !SDL_EVENTS_DISABLED SDL_QuitSubSystem(SDL_INIT_EVENTS); #endif if (SDL_joystick_lock) { SDL_DestroyMutex(SDL_joystick_lock); SDL_joystick_lock = NULL; } }
void SDL_JoystickQuit(void) { const int numsticks = SDL_numjoysticks; int i; SDL_Lock_EventThread(); SDL_numjoysticks = 0; SDL_Unlock_EventThread(); if (SDL_joysticks != NULL) { for (i = 0; i < numsticks; i++) { SDL_Joystick *stick = SDL_joysticks[i]; if (stick && (stick->ref_count >= 1)) { stick->ref_count = 1; SDL_JoystickClose(stick); } } } SDL_SYS_JoystickQuit(); if ( SDL_joysticks ) { SDL_free(SDL_joysticks); SDL_joysticks = NULL; SDL_allocatedjoysticks = 0; } }
void SDL_JoystickQuit(void) { /* Make sure we're not getting called in the middle of updating joysticks */ SDL_assert(!SDL_updating_joystick); SDL_LockJoysticks(); /* Stop the event polling */ while (SDL_joysticks) { SDL_joysticks->ref_count = 1; SDL_JoystickClose(SDL_joysticks); } /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); SDL_UnlockJoysticks(); #if !SDL_EVENTS_DISABLED SDL_QuitSubSystem(SDL_INIT_EVENTS); #endif SDL_DelHintCallback(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, SDL_JoystickAllowBackgroundEventsChanged, NULL); if (SDL_joystick_lock) { SDL_DestroyMutex(SDL_joystick_lock); SDL_joystick_lock = NULL; } SDL_GameControllerQuitMappings(); }
/* Function to scan the system for joysticks. * It should return 0, or -1 on an unrecoverable fatal error. */ int SDL_SYS_JoystickInit(void) { int retval, i, numjs; EmscriptenGamepadEvent gamepadState; numjoysticks = 0; numjs = emscripten_get_num_gamepads(); /* Check if gamepad is supported by browser */ if (numjs == EMSCRIPTEN_RESULT_NOT_SUPPORTED) { return SDL_SetError("Gamepads not supported"); } /* handle already connected gamepads */ if (numjs > 0) { for(i = 0; i < numjs; i++) { retval = emscripten_get_gamepad_status(i, &gamepadState); if (retval == EMSCRIPTEN_RESULT_SUCCESS) { Emscripten_JoyStickConnected(EMSCRIPTEN_EVENT_GAMEPADCONNECTED, &gamepadState, NULL); } } } retval = emscripten_set_gamepadconnected_callback(NULL, 0, Emscripten_JoyStickConnected); if(retval != EMSCRIPTEN_RESULT_SUCCESS) { SDL_SYS_JoystickQuit(); return SDL_SetError("Could not set gamepad connect callback"); } retval = emscripten_set_gamepaddisconnected_callback(NULL, 0, Emscripten_JoyStickDisconnected); if(retval != EMSCRIPTEN_RESULT_SUCCESS) { SDL_SYS_JoystickQuit(); return SDL_SetError("Could not set gamepad disconnect callback"); } return 0; }
void SDL_JoystickQuit(void) { /* Stop the event polling */ SDL_numjoysticks = 0; /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); if (SDL_joysticks) { SDL_free(SDL_joysticks); SDL_joysticks = NULL; } }
void SDL_JoystickQuit(void) { /* Stop the event polling */ SDL_Lock_EventThread(); SDL_numjoysticks = 0; SDL_Unlock_EventThread(); /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); if ( SDL_joysticks ) { free(SDL_joysticks); SDL_joysticks = NULL; } }
void SDL_JoystickQuit(void) { const int numsticks = SDL_numjoysticks; int i; /* Stop the event polling */ SDL_numjoysticks = 0; for (i = numsticks; i--; ) { SDL_Joystick *stick = SDL_joysticks[i]; if (stick && (stick->ref_count >= 1)) { stick->ref_count = 1; SDL_JoystickClose(stick); } } /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); if (SDL_joysticks) { SDL_free(SDL_joysticks); SDL_joysticks = NULL; } }