Mercurial > sdl-ios-xcode
diff src/joystick/win32/SDL_dxjoystick.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 281d3f4870e5 |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/joystick/win32/SDL_dxjoystick.c Sun May 21 17:27:13 2006 +0000 +++ b/src/joystick/win32/SDL_dxjoystick.c Sun May 28 13:04:16 2006 +0000 @@ -45,162 +45,171 @@ #define DIRECTINPUT_VERSION 0x0500 #include <dinput.h> -#define INPUT_QSIZE 32 /* Buffer up to 32 input messages */ +#define INPUT_QSIZE 32 /* Buffer up to 32 input messages */ extern HINSTANCE SDL_Instance; -extern int DX5_Load(); -extern void DX5_Unload(); -extern HRESULT (WINAPI *DInputCreate)(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUT *ppDI, LPUNKNOWN punkOuter); +extern int DX5_Load (); +extern void DX5_Unload (); +extern HRESULT (WINAPI * DInputCreate) (HINSTANCE hinst, DWORD dwVersion, + LPDIRECTINPUT * ppDI, + LPUNKNOWN punkOuter); static LPDIRECTINPUT dinput = NULL; #define MAX_JOYSTICKS 8 -#define MAX_INPUTS 256 /* each joystick can have up to 256 inputs */ +#define MAX_INPUTS 256 /* each joystick can have up to 256 inputs */ #define AXIS_MIN -32768 /* minimum value for axis coordinate */ #define AXIS_MAX 32767 /* maximum value for axis coordinate */ -#define JOY_AXIS_THRESHOLD (((AXIS_MAX)-(AXIS_MIN))/100) /* 1% motion */ +#define JOY_AXIS_THRESHOLD (((AXIS_MAX)-(AXIS_MIN))/100) /* 1% motion */ -typedef enum Type { BUTTON, AXIS, HAT } Type; +typedef enum Type +{ BUTTON, AXIS, HAT } Type; /* array to hold joystick ID values */ static DIDEVICEINSTANCE SYS_Joystick[MAX_JOYSTICKS]; -static int SYS_NumJoysticks; +static int SYS_NumJoysticks; extern HWND SDL_Window; typedef struct input_t { - /* DirectInput offset for this input type: */ - DWORD ofs; + /* DirectInput offset for this input type: */ + DWORD ofs; - /* Button, axis or hat: */ - Type type; + /* Button, axis or hat: */ + Type type; - /* SDL input offset: */ - Uint8 num; + /* SDL input offset: */ + Uint8 num; } input_t; /* The private structure used to keep track of a joystick */ struct joystick_hwdata { - LPDIRECTINPUTDEVICE2 InputDevice; - int buffered; + LPDIRECTINPUTDEVICE2 InputDevice; + int buffered; - input_t Inputs[MAX_INPUTS]; - int NumInputs; + input_t Inputs[MAX_INPUTS]; + int NumInputs; }; /* Convert a DirectInput return code to a text message */ -static void SetDIerror(char *function, int code) +static void +SetDIerror (char *function, int code) { - static char *error; - static char errbuf[1024]; + static char *error; + static char errbuf[1024]; - errbuf[0] = 0; - switch (code) { - case DIERR_GENERIC: - error = "Undefined error!"; - break; - case DIERR_OLDDIRECTINPUTVERSION: - error = "Your version of DirectInput needs upgrading"; - break; - case DIERR_INVALIDPARAM: - error = "Invalid parameters"; - break; - case DIERR_OUTOFMEMORY: - error = "Out of memory"; - break; - case DIERR_DEVICENOTREG: - error = "Device not registered"; - break; - case DIERR_NOINTERFACE: - error = "Interface not supported"; - break; - case DIERR_NOTINITIALIZED: - error = "Device not initialized"; - break; - default: - sprintf(errbuf, "%s: Unknown DirectInput error: 0x%x", - function, code); - break; - } - if ( ! errbuf[0] ) { - sprintf(errbuf, "%s: %s", function, error); - } - SDL_SetError("%s", errbuf); - return; + errbuf[0] = 0; + switch (code) { + case DIERR_GENERIC: + error = "Undefined error!"; + break; + case DIERR_OLDDIRECTINPUTVERSION: + error = "Your version of DirectInput needs upgrading"; + break; + case DIERR_INVALIDPARAM: + error = "Invalid parameters"; + break; + case DIERR_OUTOFMEMORY: + error = "Out of memory"; + break; + case DIERR_DEVICENOTREG: + error = "Device not registered"; + break; + case DIERR_NOINTERFACE: + error = "Interface not supported"; + break; + case DIERR_NOTINITIALIZED: + error = "Device not initialized"; + break; + default: + sprintf (errbuf, "%s: Unknown DirectInput error: 0x%x", + function, code); + break; + } + if (!errbuf[0]) { + sprintf (errbuf, "%s: %s", function, error); + } + SDL_SetError ("%s", errbuf); + return; } -BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, - VOID* pContext ) +BOOL CALLBACK +EnumJoysticksCallback (const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) { - memcpy(&SYS_Joystick[SYS_NumJoysticks], pdidInstance, sizeof(DIDEVICEINSTANCE)); - SYS_NumJoysticks++; + memcpy (&SYS_Joystick[SYS_NumJoysticks], pdidInstance, + sizeof (DIDEVICEINSTANCE)); + SYS_NumJoysticks++; - if( SYS_NumJoysticks >= MAX_JOYSTICKS ) - return DIENUM_STOP; + if (SYS_NumJoysticks >= MAX_JOYSTICKS) + return DIENUM_STOP; - return DIENUM_CONTINUE; + return DIENUM_CONTINUE; } -static BOOL CALLBACK DIJoystick_EnumDevObjectsProc(LPCDIDEVICEOBJECTINSTANCE dev, - LPVOID pvRef) +static BOOL CALLBACK +DIJoystick_EnumDevObjectsProc (LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) { - SDL_Joystick *joystick = (SDL_Joystick*)pvRef; - HRESULT result; - input_t *in = &joystick->hwdata->Inputs[joystick->hwdata->NumInputs]; - const int SupportedMask = DIDFT_BUTTON | DIDFT_POV | DIDFT_AXIS; - if(!(dev->dwType & SupportedMask)) - return DIENUM_CONTINUE; /* unsupported */ + SDL_Joystick *joystick = (SDL_Joystick *) pvRef; + HRESULT result; + input_t *in = &joystick->hwdata->Inputs[joystick->hwdata->NumInputs]; + const int SupportedMask = DIDFT_BUTTON | DIDFT_POV | DIDFT_AXIS; + if (!(dev->dwType & SupportedMask)) + return DIENUM_CONTINUE; /* unsupported */ + + in->ofs = dev->dwOfs; - in->ofs = dev->dwOfs; + if (dev->dwType & DIDFT_BUTTON) { + in->type = BUTTON; + in->num = joystick->nbuttons; + joystick->nbuttons++; + } else if (dev->dwType & DIDFT_POV) { + in->type = HAT; + in->num = joystick->nhats; + joystick->nhats++; + } else { /* dev->dwType & DIDFT_AXIS */ + DIPROPRANGE diprg; + DIPROPDWORD dilong; + + in->type = AXIS; + in->num = joystick->naxes; - if(dev->dwType & DIDFT_BUTTON) { - in->type = BUTTON; - in->num = joystick->nbuttons; - joystick->nbuttons++; - } else if(dev->dwType & DIDFT_POV) { - in->type = HAT; - in->num = joystick->nhats; - joystick->nhats++; - } else { /* dev->dwType & DIDFT_AXIS */ - DIPROPRANGE diprg; - DIPROPDWORD dilong; - - in->type = AXIS; - in->num = joystick->naxes; - - diprg.diph.dwSize = sizeof(diprg); - diprg.diph.dwHeaderSize = sizeof(diprg.diph); - diprg.diph.dwObj = dev->dwOfs; - diprg.diph.dwHow = DIPH_BYOFFSET; - diprg.lMin = AXIS_MIN; - diprg.lMax = AXIS_MAX; + diprg.diph.dwSize = sizeof (diprg); + diprg.diph.dwHeaderSize = sizeof (diprg.diph); + diprg.diph.dwObj = dev->dwOfs; + diprg.diph.dwHow = DIPH_BYOFFSET; + diprg.lMin = AXIS_MIN; + diprg.lMax = AXIS_MAX; + + result = + IDirectInputDevice2_SetProperty (joystick->hwdata->InputDevice, + DIPROP_RANGE, &diprg.diph); + if (result != DI_OK) + return DIENUM_CONTINUE; /* don't use this axis */ - result = IDirectInputDevice2_SetProperty(joystick->hwdata->InputDevice, DIPROP_RANGE, &diprg.diph); - if ( result != DI_OK ) - return DIENUM_CONTINUE; /* don't use this axis */ - - /* Set dead zone to 0. */ - dilong.diph.dwSize = sizeof(dilong); - dilong.diph.dwHeaderSize = sizeof(dilong.diph); - dilong.diph.dwObj = dev->dwOfs; - dilong.diph.dwHow = DIPH_BYOFFSET; - dilong.dwData = 0; - result = IDirectInputDevice2_SetProperty(joystick->hwdata->InputDevice, DIPROP_DEADZONE, &dilong.diph); - if ( result != DI_OK ) - return DIENUM_CONTINUE; /* don't use this axis */ + /* Set dead zone to 0. */ + dilong.diph.dwSize = sizeof (dilong); + dilong.diph.dwHeaderSize = sizeof (dilong.diph); + dilong.diph.dwObj = dev->dwOfs; + dilong.diph.dwHow = DIPH_BYOFFSET; + dilong.dwData = 0; + result = + IDirectInputDevice2_SetProperty (joystick->hwdata->InputDevice, + DIPROP_DEADZONE, &dilong.diph); + if (result != DI_OK) + return DIENUM_CONTINUE; /* don't use this axis */ - joystick->naxes++; - } + joystick->naxes++; + } - joystick->hwdata->NumInputs++; + joystick->hwdata->NumInputs++; - if(joystick->hwdata->NumInputs == MAX_INPUTS) - return DIENUM_STOP; /* too many */ + if (joystick->hwdata->NumInputs == MAX_INPUTS) + return DIENUM_STOP; /* too many */ - return DIENUM_CONTINUE; + return DIENUM_CONTINUE; } /* Function to scan the system for joysticks. @@ -208,39 +217,39 @@ * 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) +int +SDL_SYS_JoystickInit (void) { - HRESULT result; + HRESULT result; - SYS_NumJoysticks = 0; + SYS_NumJoysticks = 0; - /* Create the DirectInput object */ - if ( DX5_Load() < 0 ) { - SDL_SetError("Couldn't load DirectInput"); - return(-1); - } - result = DInputCreate(SDL_Instance, DIRECTINPUT_VERSION, - &dinput, NULL); - if ( result != DI_OK ) { - DX5_Unload(); - SetDIerror("DirectInputCreate", result); - return(-1); - } + /* Create the DirectInput object */ + if (DX5_Load () < 0) { + SDL_SetError ("Couldn't load DirectInput"); + return (-1); + } + result = DInputCreate (SDL_Instance, DIRECTINPUT_VERSION, &dinput, NULL); + if (result != DI_OK) { + DX5_Unload (); + SetDIerror ("DirectInputCreate", result); + return (-1); + } - result = IDirectInput_EnumDevices(dinput, - DIDEVTYPE_JOYSTICK, - EnumJoysticksCallback, - NULL, - DIEDFL_ATTACHEDONLY ); + result = IDirectInput_EnumDevices (dinput, + DIDEVTYPE_JOYSTICK, + EnumJoysticksCallback, + NULL, DIEDFL_ATTACHEDONLY); - return SYS_NumJoysticks; + return SYS_NumJoysticks; } /* Function to get the device-dependent name of a joystick */ -const char *SDL_SYS_JoystickName(int index) +const char * +SDL_SYS_JoystickName (int index) { - /***-> test for invalid index ? */ - return(SYS_Joystick[index].tszProductName); + /***-> test for invalid index ? */ + return (SYS_Joystick[index].tszProductName); } /* Function to open a joystick for use. @@ -248,127 +257,143 @@ This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ -int SDL_SYS_JoystickOpen(SDL_Joystick *joystick) +int +SDL_SYS_JoystickOpen (SDL_Joystick * joystick) { - HRESULT result; - LPDIRECTINPUTDEVICE device; + HRESULT result; + LPDIRECTINPUTDEVICE device; + + /* allocate memory for system specific hardware data */ + joystick->hwdata = + (struct joystick_hwdata *) malloc (sizeof (*joystick->hwdata)); + if (joystick->hwdata == NULL) { + SDL_OutOfMemory (); + return (-1); + } + memset (joystick->hwdata, 0, sizeof (*joystick->hwdata)); + joystick->hwdata->buffered = 1; - /* allocate memory for system specific hardware data */ - joystick->hwdata = (struct joystick_hwdata *) malloc(sizeof(*joystick->hwdata)); - if (joystick->hwdata == NULL) - { - SDL_OutOfMemory(); - return(-1); - } - memset(joystick->hwdata, 0, sizeof(*joystick->hwdata)); - joystick->hwdata->buffered = 1; - - result = IDirectInput_CreateDevice(dinput, &SYS_Joystick[joystick->index].guidInstance, - &device, NULL); - if ( result != DI_OK ) { - SetDIerror("DirectInput::CreateDevice", result); - return(-1); - } + result = + IDirectInput_CreateDevice (dinput, + &SYS_Joystick[joystick->index]. + guidInstance, &device, NULL); + if (result != DI_OK) { + SetDIerror ("DirectInput::CreateDevice", result); + return (-1); + } - result = IDirectInputDevice_QueryInterface(device, - &IID_IDirectInputDevice2, (LPVOID *)&joystick->hwdata->InputDevice); - IDirectInputDevice_Release(device); - if ( result != DI_OK ) { - SetDIerror("DirectInputDevice::QueryInterface", result); - return(-1); - } + result = IDirectInputDevice_QueryInterface (device, + &IID_IDirectInputDevice2, + (LPVOID *) & joystick-> + hwdata->InputDevice); + IDirectInputDevice_Release (device); + if (result != DI_OK) { + SetDIerror ("DirectInputDevice::QueryInterface", result); + return (-1); + } - result = IDirectInputDevice2_SetCooperativeLevel(joystick->hwdata->InputDevice, SDL_Window, - DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); - if ( result != DI_OK ) { - SetDIerror("DirectInputDevice::SetCooperativeLevel", result); - return(-1); - } + result = + IDirectInputDevice2_SetCooperativeLevel (joystick->hwdata-> + InputDevice, SDL_Window, + DISCL_NONEXCLUSIVE | + DISCL_BACKGROUND); + if (result != DI_OK) { + SetDIerror ("DirectInputDevice::SetCooperativeLevel", result); + return (-1); + } - result = IDirectInputDevice2_SetDataFormat(joystick->hwdata->InputDevice, &c_dfDIJoystick); - if ( result != DI_OK ) { - SetDIerror("DirectInputDevice::SetDataFormat", result); - return(-1); - } + result = + IDirectInputDevice2_SetDataFormat (joystick->hwdata->InputDevice, + &c_dfDIJoystick); + if (result != DI_OK) { + SetDIerror ("DirectInputDevice::SetDataFormat", result); + return (-1); + } - IDirectInputDevice2_EnumObjects(joystick->hwdata->InputDevice, - DIJoystick_EnumDevObjectsProc, - joystick, - DIDFT_BUTTON | DIDFT_AXIS | DIDFT_POV); + IDirectInputDevice2_EnumObjects (joystick->hwdata->InputDevice, + DIJoystick_EnumDevObjectsProc, + joystick, + DIDFT_BUTTON | DIDFT_AXIS | DIDFT_POV); - { - DIPROPDWORD dipdw; - memset(&dipdw, 0, sizeof(dipdw)); - dipdw.diph.dwSize = sizeof(dipdw); - dipdw.diph.dwHeaderSize = sizeof(dipdw.diph); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = INPUT_QSIZE; - result = IDirectInputDevice2_SetProperty(joystick->hwdata->InputDevice, - DIPROP_BUFFERSIZE, &dipdw.diph); + { + DIPROPDWORD dipdw; + memset (&dipdw, 0, sizeof (dipdw)); + dipdw.diph.dwSize = sizeof (dipdw); + dipdw.diph.dwHeaderSize = sizeof (dipdw.diph); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = INPUT_QSIZE; + result = + IDirectInputDevice2_SetProperty (joystick->hwdata->InputDevice, + DIPROP_BUFFERSIZE, &dipdw.diph); - if ( result == DI_POLLEDDEVICE ) - { - /* This device doesn't support buffering, so we're forced - * to use less reliable polling. */ - joystick->hwdata->buffered = 0; - } else if ( result != DI_OK ) { - SetDIerror("DirectInputDevice::SetProperty", result); - return(-1); - } - } + if (result == DI_POLLEDDEVICE) { + /* This device doesn't support buffering, so we're forced + * to use less reliable polling. */ + joystick->hwdata->buffered = 0; + } else if (result != DI_OK) { + SetDIerror ("DirectInputDevice::SetProperty", result); + return (-1); + } + } - return(0); + return (0); } -static Uint8 TranslatePOV(DWORD value) +static Uint8 +TranslatePOV (DWORD value) { - const int HAT_VALS[] = { - SDL_HAT_UP, - SDL_HAT_UP | SDL_HAT_RIGHT, - SDL_HAT_RIGHT, - SDL_HAT_DOWN | SDL_HAT_RIGHT, - SDL_HAT_DOWN, - SDL_HAT_DOWN | SDL_HAT_LEFT, - SDL_HAT_LEFT, - SDL_HAT_UP | SDL_HAT_LEFT - }; + const int HAT_VALS[] = { + SDL_HAT_UP, + SDL_HAT_UP | SDL_HAT_RIGHT, + SDL_HAT_RIGHT, + SDL_HAT_DOWN | SDL_HAT_RIGHT, + SDL_HAT_DOWN, + SDL_HAT_DOWN | SDL_HAT_LEFT, + SDL_HAT_LEFT, + SDL_HAT_UP | SDL_HAT_LEFT + }; - if(LOWORD(value) == 0xFFFF) - return SDL_HAT_CENTERED; + if (LOWORD (value) == 0xFFFF) + return SDL_HAT_CENTERED; - /* Round the value up: */ - value += 4500 / 2; - value %= 36000; - value /= 4500; + /* Round the value up: */ + value += 4500 / 2; + value %= 36000; + value /= 4500; - if(value >= 8) - return SDL_HAT_CENTERED; /* shouldn't happen */ - - return HAT_VALS[value]; + if (value >= 8) + return SDL_HAT_CENTERED; /* shouldn't happen */ + + return HAT_VALS[value]; } /* SDL_PrivateJoystick* doesn't discard duplicate events, so we need to * do it. */ -static int SDL_PrivateJoystickAxis_Int(SDL_Joystick *joystick, Uint8 axis, Sint16 value) +static int +SDL_PrivateJoystickAxis_Int (SDL_Joystick * joystick, Uint8 axis, + Sint16 value) { - if(joystick->axes[axis] != value) - return SDL_PrivateJoystickAxis(joystick, axis, value); - return 0; + if (joystick->axes[axis] != value) + return SDL_PrivateJoystickAxis (joystick, axis, value); + return 0; } -static int SDL_PrivateJoystickHat_Int(SDL_Joystick *joystick, Uint8 hat, Uint8 value) +static int +SDL_PrivateJoystickHat_Int (SDL_Joystick * joystick, Uint8 hat, Uint8 value) { - if(joystick->hats[hat] != value) - return SDL_PrivateJoystickHat(joystick, hat, value); - return 0; + if (joystick->hats[hat] != value) + return SDL_PrivateJoystickHat (joystick, hat, value); + return 0; } -static int SDL_PrivateJoystickButton_Int(SDL_Joystick *joystick, Uint8 button, Uint8 state) +static int +SDL_PrivateJoystickButton_Int (SDL_Joystick * joystick, Uint8 button, + Uint8 state) { - if(joystick->buttons[button] != state) - return SDL_PrivateJoystickButton(joystick, button, state); - return 0; + if (joystick->buttons[button] != state) + return SDL_PrivateJoystickButton (joystick, button, state); + return 0; } /* Function to update the state of a joystick - called as a device poll. @@ -376,138 +401,180 @@ * but instead should call SDL_PrivateJoystick*() to deliver events * and update joystick device state. */ -void SDL_SYS_JoystickUpdate_Polled(SDL_Joystick *joystick) +void +SDL_SYS_JoystickUpdate_Polled (SDL_Joystick * joystick) { - DIJOYSTATE state; - HRESULT result; - int i; + DIJOYSTATE state; + HRESULT result; + int i; - result = IDirectInputDevice2_GetDeviceState(joystick->hwdata->InputDevice, sizeof(state), &state); - if ( result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED ) { - IDirectInputDevice2_Acquire(joystick->hwdata->InputDevice); - result = IDirectInputDevice2_GetDeviceState(joystick->hwdata->InputDevice, sizeof(state), &state); - } + result = + IDirectInputDevice2_GetDeviceState (joystick->hwdata->InputDevice, + sizeof (state), &state); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice2_Acquire (joystick->hwdata->InputDevice); + result = + IDirectInputDevice2_GetDeviceState (joystick->hwdata-> + InputDevice, sizeof (state), + &state); + } - /* Set each known axis, button and POV. */ - for(i = 0; i < joystick->hwdata->NumInputs; ++i) - { - const input_t *in = &joystick->hwdata->Inputs[i]; + /* Set each known axis, button and POV. */ + for (i = 0; i < joystick->hwdata->NumInputs; ++i) { + const input_t *in = &joystick->hwdata->Inputs[i]; - switch(in->type) - { - case AXIS: - switch(in->ofs) - { - case DIJOFS_X: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lX); break; - case DIJOFS_Y: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lY); break; - case DIJOFS_Z: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lZ); break; - case DIJOFS_RX: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lRx); break; - case DIJOFS_RY: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lRy); break; - case DIJOFS_RZ: SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.lRz); break; - case DIJOFS_SLIDER(0): SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.rglSlider[0]); break; - case DIJOFS_SLIDER(1): SDL_PrivateJoystickAxis_Int(joystick, in->num, (Sint16)state.rglSlider[0]); break; - } + switch (in->type) { + case AXIS: + switch (in->ofs) { + case DIJOFS_X: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lX); + break; + case DIJOFS_Y: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lY); + break; + case DIJOFS_Z: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lZ); + break; + case DIJOFS_RX: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lRx); + break; + case DIJOFS_RY: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lRy); + break; + case DIJOFS_RZ: + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.lRz); + break; + case DIJOFS_SLIDER (0): + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.rglSlider[0]); + break; + case DIJOFS_SLIDER (1): + SDL_PrivateJoystickAxis_Int (joystick, in->num, + (Sint16) state.rglSlider[0]); + break; + } - break; + break; - case BUTTON: - SDL_PrivateJoystickButton_Int(joystick, in->num, (Uint8) (state.rgbButtons[in->ofs - DIJOFS_BUTTON0]?SDL_PRESSED:SDL_RELEASED)); - break; - case HAT: - { - Uint8 pos = TranslatePOV(state.rgdwPOV[in->ofs - DIJOFS_POV(0)]); - SDL_PrivateJoystickHat_Int(joystick, in->num, pos); - break; - } - } - } + case BUTTON: + SDL_PrivateJoystickButton_Int (joystick, in->num, + (Uint8) (state. + rgbButtons[in->ofs - + DIJOFS_BUTTON0] + ? SDL_PRESSED : + SDL_RELEASED)); + break; + case HAT: + { + Uint8 pos = + TranslatePOV (state.rgdwPOV[in->ofs - DIJOFS_POV (0)]); + SDL_PrivateJoystickHat_Int (joystick, in->num, pos); + break; + } + } + } } -void SDL_SYS_JoystickUpdate_Buffered(SDL_Joystick *joystick) +void +SDL_SYS_JoystickUpdate_Buffered (SDL_Joystick * joystick) { - int i; - HRESULT result; - DWORD numevents; - DIDEVICEOBJECTDATA evtbuf[INPUT_QSIZE]; + int i; + HRESULT result; + DWORD numevents; + DIDEVICEOBJECTDATA evtbuf[INPUT_QSIZE]; - numevents = INPUT_QSIZE; - result = IDirectInputDevice2_GetDeviceData( - joystick->hwdata->InputDevice, sizeof(DIDEVICEOBJECTDATA), - evtbuf, &numevents, 0); - if ( result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED ) { - IDirectInputDevice2_Acquire(joystick->hwdata->InputDevice); - result = IDirectInputDevice2_GetDeviceData( - joystick->hwdata->InputDevice, sizeof(DIDEVICEOBJECTDATA), - evtbuf, &numevents, 0); - } + numevents = INPUT_QSIZE; + result = + IDirectInputDevice2_GetDeviceData (joystick->hwdata->InputDevice, + sizeof (DIDEVICEOBJECTDATA), + evtbuf, &numevents, 0); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice2_Acquire (joystick->hwdata->InputDevice); + result = + IDirectInputDevice2_GetDeviceData (joystick->hwdata-> + InputDevice, + sizeof (DIDEVICEOBJECTDATA), + evtbuf, &numevents, 0); + } - /* Handle the events */ - if ( result != DI_OK ) - return; + /* Handle the events */ + if (result != DI_OK) + return; - for(i = 0; i < (int) numevents; ++i) - { - int j; + for (i = 0; i < (int) numevents; ++i) { + int j; - for(j = 0; j < joystick->hwdata->NumInputs; ++j) - { - const input_t *in = &joystick->hwdata->Inputs[j]; + for (j = 0; j < joystick->hwdata->NumInputs; ++j) { + const input_t *in = &joystick->hwdata->Inputs[j]; + + if (evtbuf[i].dwOfs != in->ofs) + continue; - if(evtbuf[i].dwOfs != in->ofs) - continue; - - switch(in->type) - { - case AXIS: - SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)evtbuf[i].dwData); - break; - case BUTTON: - SDL_PrivateJoystickButton(joystick, in->num, (Uint8) (evtbuf[i].dwData?SDL_PRESSED:SDL_RELEASED)); - break; - case HAT: - { - Uint8 pos = TranslatePOV(evtbuf[i].dwData); - SDL_PrivateJoystickHat(joystick, in->num, pos); - } - } - } - } + switch (in->type) { + case AXIS: + SDL_PrivateJoystickAxis (joystick, in->num, + (Sint16) evtbuf[i].dwData); + break; + case BUTTON: + SDL_PrivateJoystickButton (joystick, in->num, + (Uint8) (evtbuf[i]. + dwData ? SDL_PRESSED + : SDL_RELEASED)); + break; + case HAT: + { + Uint8 pos = TranslatePOV (evtbuf[i].dwData); + SDL_PrivateJoystickHat (joystick, in->num, pos); + } + } + } + } } -void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) +void +SDL_SYS_JoystickUpdate (SDL_Joystick * joystick) { - HRESULT result; + HRESULT result; - result = IDirectInputDevice2_Poll(joystick->hwdata->InputDevice); - if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { - IDirectInputDevice2_Acquire(joystick->hwdata->InputDevice); - IDirectInputDevice2_Poll(joystick->hwdata->InputDevice); - } + result = IDirectInputDevice2_Poll (joystick->hwdata->InputDevice); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice2_Acquire (joystick->hwdata->InputDevice); + IDirectInputDevice2_Poll (joystick->hwdata->InputDevice); + } - if(joystick->hwdata->buffered) - SDL_SYS_JoystickUpdate_Buffered(joystick); - else - SDL_SYS_JoystickUpdate_Polled(joystick); + if (joystick->hwdata->buffered) + SDL_SYS_JoystickUpdate_Buffered (joystick); + else + SDL_SYS_JoystickUpdate_Polled (joystick); } /* Function to close a joystick after use */ -void SDL_SYS_JoystickClose(SDL_Joystick *joystick) +void +SDL_SYS_JoystickClose (SDL_Joystick * joystick) { - IDirectInputDevice2_Unacquire(joystick->hwdata->InputDevice); - IDirectInputDevice2_Release(joystick->hwdata->InputDevice); + IDirectInputDevice2_Unacquire (joystick->hwdata->InputDevice); + IDirectInputDevice2_Release (joystick->hwdata->InputDevice); - if (joystick->hwdata != NULL) { - /* free system specific hardware data */ - free(joystick->hwdata); - } + if (joystick->hwdata != NULL) { + /* free system specific hardware data */ + free (joystick->hwdata); + } } /* Function to perform any system-specific joystick related cleanup */ -void SDL_SYS_JoystickQuit(void) +void +SDL_SYS_JoystickQuit (void) { - IDirectInput_Release(dinput); - dinput = NULL; - DX5_Unload(); + IDirectInput_Release (dinput); + dinput = NULL; + DX5_Unload (); } #endif /* SDL_JOYSTICK_DINPUT */ +/* vi: set ts=4 sw=4 expandtab: */