Mercurial > sdl-ios-xcode
diff src/haptic/win32/SDL_syshaptic.c @ 2612:63ea27a96a96 gsoc2008_force_feedback
Check for capabilities at init.
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Wed, 06 Aug 2008 07:51:30 +0000 |
parents | cdea9a70dade |
children | b081c72b739c |
line wrap: on
line diff
--- a/src/haptic/win32/SDL_syshaptic.c Wed Aug 06 07:42:42 2008 +0000 +++ b/src/haptic/win32/SDL_syshaptic.c Wed Aug 06 07:51:30 2008 +0000 @@ -57,6 +57,7 @@ { DIDEVICEINSTANCE instance; SDL_Haptic *haptic; + DIDEVCAPS capabilities; } SDL_hapticlist[MAX_HAPTICS]; @@ -67,7 +68,6 @@ { LPDIRECTINPUTDEVICE2 device; DWORD axes[3]; - DIDEVCAPS capabilities; }; @@ -169,10 +169,36 @@ static BOOL CALLBACK EnumHapticsCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) { + HRESULT ret; + LPDIRECTINPUTDEVICE device; + + /* Copy the instance over, useful for creating devices. */ SDL_memcpy(&SDL_hapticlist[SDL_numhaptics].instance, pdidInstance, sizeof(DIDEVICEINSTANCE)); + + /* Open the device */ + ret = IDirectInput_CreateDevice( dinput, &instance.guidInstance, + &device, NULL ); + if (FAILED(ret)) { + /* DI_SetError("Creating DirectInput device",ret); */ + return DIENUM_CONTINUE; + } + + /* Get capabilities. */ + SDL_hapticlist[SDL_numhaptics].capabilities.dwSize = sizeof(DIDEVCAPS); + ret = IDirectInputDevice_GetCapabilities( device, + &SDL_hapticlist[SDL_numhaptics].capabilities ); + if (FAILED(ret)) { + /* DI_SetError("Getting device capabilities",ret); */ + IDirectInputDevice_Release(device); + return DIENUM_CONTINUE; + } + + /* Close up device and count it. */ + IDirectInputDevice_Release(device); SDL_numhaptics++; + /* Watch out for hard limit. */ if (SDL_numhaptics >= MAX_HAPTICS) return DIENUM_STOP; @@ -256,7 +282,6 @@ * - Release DirectInputDevice interface. * - Set cooperative level. * - Set data format. - * - Get capabilities. * - Acquire exclusiveness. * - Reset actuators. * - Get supported featuers. @@ -313,15 +338,6 @@ goto query_err; } - /* Get capabilities. */ - haptic->hwdata->capabilities.dwSize = sizeof(DIDEVCAPS); - ret = IDirectInputDevice2_GetCapabilities( haptic->hwdata->device, - &haptic->hwdata->capabilities ); - if (FAILED(ret)) { - DI_SetError("Getting device capabilities",ret); - goto acquire_err; - } - /* Get number of axes. */ ret = IDirectInputDevice2_EnumObjects( haptic->hwdata->device, DI_DeviceObjectCallback, @@ -435,6 +451,10 @@ int SDL_SYS_HapticMouse(void) { + int i; + + for (i=0; i<SDL_numhaptics; i++) { + } return -1; }