static HRESULT WINAPI SysKeyboardAImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface, LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); DIACTIONFORMATW diafW; HRESULT hr; WCHAR *lpszUserNameW = NULL; int username_size; diafW.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW)*lpdiaf->dwNumActions); _copy_diactionformatAtoW(&diafW, lpdiaf); if (lpszUserName != NULL) { username_size = MultiByteToWideChar(CP_ACP, 0, lpszUserName, -1, NULL, 0); lpszUserNameW = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*username_size); MultiByteToWideChar(CP_ACP, 0, lpszUserName, -1, lpszUserNameW, username_size); } hr = SysKeyboardWImpl_SetActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, lpszUserNameW, dwFlags); HeapFree(GetProcessHeap(), 0, diafW.rgoAction); HeapFree(GetProcessHeap(), 0, lpszUserNameW); return hr; }
/****************************************************************************** * GetDeviceInfo : get information about a device's identity */ HRESULT WINAPI JoystickAGenericImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEINSTANCEA pdidi) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("(%p,%p)\n", iface, pdidi); if (pdidi == NULL) { WARN("invalid pointer\n"); return E_POINTER; } if ((pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3A)) && (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))) { WARN("invalid parameter: pdidi->dwSize = %d\n", pdidi->dwSize); return DIERR_INVALIDPARAM; } /* Return joystick */ pdidi->guidInstance = This->guidInstance; pdidi->guidProduct = This->guidProduct; /* we only support traditional joysticks for now */ pdidi->dwDevType = This->devcaps.dwDevType; strcpy(pdidi->tszInstanceName, "Joystick"); strcpy(pdidi->tszProductName, This->name); if (pdidi->dwSize > sizeof(DIDEVICEINSTANCE_DX3A)) { pdidi->guidFFDriver = GUID_NULL; pdidi->wUsagePage = 0; pdidi->wUsage = 0; } return DI_OK; }
static HRESULT WINAPI JoystickAImpl_SendForceFeedbackCommand(IDirectInputDevice8A *iface, DWORD flags) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("%p 0x%x\n", This, flags); return JoystickWImpl_SendForceFeedbackCommand(&This->generic.base.IDirectInputDevice8W_iface, flags); }
static HRESULT WINAPI JoystickAImpl_CreateEffect(IDirectInputDevice8A *iface, const GUID *type, const DIEFFECT *params, IDirectInputEffect **out, IUnknown *outer) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("%p %s %p %p %p\n", iface, debugstr_guid(type), params, out, outer); return JoystickWImpl_CreateEffect(&This->generic.base.IDirectInputDevice8W_iface, type, params, out, outer); }
/****************************************************************************** * GetDeviceInfo : get information about a device's identity */ static HRESULT WINAPI JoystickLinuxAImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEINSTANCEA ddi) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("(%p) %p\n", This, ddi); if (ddi == NULL) return E_POINTER; if ((ddi->dwSize != sizeof(DIDEVICEINSTANCE_DX3A)) && (ddi->dwSize != sizeof(DIDEVICEINSTANCEA))) return DIERR_INVALIDPARAM; fill_joystick_dideviceinstanceA( ddi, This->generic.base.dinput->dwVersion, get_joystick_index(&This->generic.base.guid) ); return DI_OK; }
static int KeyboardCallback( LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPARAM lparam ) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); int dik_code, ret = This->base.dwCoopLevel & DISCL_EXCLUSIVE; KBDLLHOOKSTRUCT *hook = (KBDLLHOOKSTRUCT *)lparam; BYTE new_diks; if (wparam != WM_KEYDOWN && wparam != WM_KEYUP && wparam != WM_SYSKEYDOWN && wparam != WM_SYSKEYUP) return 0; TRACE("(%p) %ld,%ld\n", iface, wparam, lparam); switch (hook->vkCode) { /* R-Shift is special - it is an extended key with separate scan code */ case VK_RSHIFT : dik_code = DIK_RSHIFT; break; case VK_PAUSE : dik_code = DIK_PAUSE; break; case VK_NUMLOCK : dik_code = DIK_NUMLOCK; break; case VK_SUBTRACT: dik_code = DIK_SUBTRACT; break; default: dik_code = map_dik_code(hook->scanCode & 0xff, hook->vkCode); if (hook->flags & LLKHF_EXTENDED) dik_code |= 0x80; } new_diks = hook->flags & LLKHF_UP ? 0 : 0x80; /* returns now if key event already known */ if (new_diks == This->DInputKeyState[dik_code]) return ret; This->DInputKeyState[dik_code] = new_diks; TRACE(" setting %02X to %02X\n", dik_code, This->DInputKeyState[dik_code]); EnterCriticalSection(&This->base.crit); queue_event(iface, DIDFT_MAKEINSTANCE(dik_code) | DIDFT_PSHBUTTON, new_diks, hook->time, This->base.dinput->evsequence++); LeaveCriticalSection(&This->base.crit); return ret; }
/****************************************************************************** * GetDeviceInfo : get information about a device's identity */ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceInfo( LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEINSTANCEA pdidi) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("(this=%p,%p)\n", This, pdidi); if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) { WARN(" dinput3 not supported yet...\n"); return DI_OK; } fill_keyboard_dideviceinstanceA(pdidi, This->base.dinput->dwVersion); return DI_OK; }
static HRESULT WINAPI JoystickAImpl_SetProperty(IDirectInputDevice8A *iface, const GUID *prop, const DIPROPHEADER *header) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("%p %s %p\n", This, debugstr_guid(prop), header); switch(LOWORD(prop)) { case (DWORD_PTR)DIPROP_AUTOCENTER: return osx_set_autocenter(This, (const DIPROPDWORD *)header); case (DWORD_PTR)DIPROP_FFGAIN: return osx_set_ffgain(This, (const DIPROPDWORD *)header); } return JoystickAGenericImpl_SetProperty(iface, prop, header); }
HRESULT WINAPI JoystickAGenericImpl_SetActionMap(LPDIRECTINPUTDEVICE8A iface, LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); DIACTIONFORMATW diafW; HRESULT hr; diafW.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW)*lpdiaf->dwNumActions); _copy_diactionformatAtoW(&diafW, lpdiaf); hr = JoystickWGenericImpl_SetActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, NULL, dwFlags); HeapFree(GetProcessHeap(), 0, diafW.rgoAction); return hr; }
static HRESULT WINAPI SysKeyboardAImpl_BuildActionMap(LPDIRECTINPUTDEVICE8A iface, LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); DIACTIONFORMATW diafW; HRESULT hr; diafW.rgoAction = HeapAlloc(GetProcessHeap(), 0, sizeof(DIACTIONW)*lpdiaf->dwNumActions); _copy_diactionformatAtoW(&diafW, lpdiaf); hr = SysKeyboardWImpl_BuildActionMap(&This->base.IDirectInputDevice8W_iface, &diafW, NULL, dwFlags); _copy_diactionformatWtoA(lpdiaf, &diafW); HeapFree(GetProcessHeap(), 0, diafW.rgoAction); return hr; }
HRESULT WINAPI JoystickAGenericImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8A iface, LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); HRESULT res; DIDEVICEOBJECTINSTANCEW didoiW; DWORD dwSize = pdidoi->dwSize; didoiW.dwSize = sizeof(didoiW); res = JoystickWGenericImpl_GetObjectInfo(IDirectInputDevice8W_from_impl(This), &didoiW, dwObj, dwHow); if (res != DI_OK) return res; memset(pdidoi, 0, pdidoi->dwSize); memcpy(pdidoi, &didoiW, FIELD_OFFSET(DIDEVICEOBJECTINSTANCEW, tszName)); pdidoi->dwSize = dwSize; WideCharToMultiByte(CP_ACP, 0, didoiW.tszName, -1, pdidoi->tszName, sizeof(pdidoi->tszName), NULL, NULL); return res; }
/* low-level mouse hook */ static int dinput_mouse_hook( LPDIRECTINPUTDEVICE8A iface, WPARAM wparam, LPARAM lparam ) { MSLLHOOKSTRUCT *hook = (MSLLHOOKSTRUCT *)lparam; SysMouseImpl* This = impl_from_IDirectInputDevice8A(iface); int wdata = 0, inst_id = -1, ret = 0; TRACE("msg %lx @ (%d %d)\n", wparam, hook->pt.x, hook->pt.y); EnterCriticalSection(&This->base.crit); switch(wparam) { case WM_MOUSEMOVE: { POINT pt, pt1; GetCursorPos(&pt); This->m_state.lX += pt.x = hook->pt.x - pt.x; This->m_state.lY += pt.y = hook->pt.y - pt.y; if (This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS) { pt1.x = This->m_state.lX; pt1.y = This->m_state.lY; } else pt1 = pt; if (pt.x) { inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_X_AXIS_INSTANCE) | DIDFT_RELAXIS; wdata = pt1.x; } if (pt.y) { /* Already have X, need to queue it */ if (inst_id != -1) queue_event(iface, inst_id, wdata, GetCurrentTime(), This->base.dinput->evsequence); inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_Y_AXIS_INSTANCE) | DIDFT_RELAXIS; wdata = pt1.y; } if (pt.x || pt.y) { if ((This->warp_override == WARP_FORCE_ON) || (This->warp_override != WARP_DISABLE && (This->base.dwCoopLevel & DISCL_EXCLUSIVE))) This->need_warp = TRUE; } break; } case WM_MOUSEWHEEL: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_Z_AXIS_INSTANCE) | DIDFT_RELAXIS; This->m_state.lZ += wdata = (short)HIWORD(hook->mouseData); /* FarCry crashes if it gets a mouse wheel message */ /* FIXME: should probably filter out other messages too */ ret = This->clipped; break; case WM_LBUTTONDOWN: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 0) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[0] = wdata = 0x80; break; case WM_LBUTTONUP: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 0) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[0] = wdata = 0x00; break; case WM_RBUTTONDOWN: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 1) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[1] = wdata = 0x80; break; case WM_RBUTTONUP: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 1) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[1] = wdata = 0x00; break; case WM_MBUTTONDOWN: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 2) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[2] = wdata = 0x80; break; case WM_MBUTTONUP: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 2) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[2] = wdata = 0x00; break; case WM_XBUTTONDOWN: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 2 + HIWORD(hook->mouseData)) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[2 + HIWORD(hook->mouseData)] = wdata = 0x80; break; case WM_XBUTTONUP: inst_id = DIDFT_MAKEINSTANCE(WINE_MOUSE_BUTTONS_INSTANCE + 2 + HIWORD(hook->mouseData)) | DIDFT_PSHBUTTON; This->m_state.rgbButtons[2 + HIWORD(hook->mouseData)] = wdata = 0x00; break; } if (inst_id != -1) { _dump_mouse_state(&This->m_state); queue_event(iface, inst_id, wdata, GetCurrentTime(), This->base.dinput->evsequence++); } LeaveCriticalSection(&This->base.crit); return ret; }
HRESULT WINAPI JoystickAGenericImpl_GetCapabilities(LPDIRECTINPUTDEVICE8A iface, LPDIDEVCAPS lpDIDevCaps) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickWGenericImpl_GetCapabilities(IDirectInputDevice8W_from_impl(This), lpDIDevCaps); }
HRESULT WINAPI JoystickAGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPCDIPROPHEADER ph) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickWGenericImpl_SetProperty(IDirectInputDevice8W_from_impl(This), rguid, ph); }
static HRESULT WINAPI SysMouseAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, LPDWORD entries, DWORD flags) { SysMouseImpl *This = impl_from_IDirectInputDevice8A(iface); return SysMouseWImpl_GetDeviceData(IDirectInputDevice8W_from_impl(This), dodsize, dod, entries, flags); }
static HRESULT WINAPI SysKeyboardAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); return SysKeyboardWImpl_GetProperty(IDirectInputDevice8W_from_impl(This), rguid, pdiph); }
static HRESULT WINAPI JoystickLinuxAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickLinuxWImpl_Unacquire(IDirectInputDevice8W_from_impl(This)); }
static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) { SysMouseImpl *This = impl_from_IDirectInputDevice8A(iface); return SysMouseWImpl_Unacquire(IDirectInputDevice8W_from_impl(This)); }
HRESULT WINAPI JoystickAGenericImpl_Poll(LPDIRECTINPUTDEVICE8A iface) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickWGenericImpl_Poll(IDirectInputDevice8W_from_impl(This)); }
static void poll_osx_device_state(LPDIRECTINPUTDEVICE8A iface) { JoystickImpl *device = impl_from_IDirectInputDevice8A(iface); IOHIDElementRef tIOHIDTopElementRef; IOHIDDeviceRef tIOHIDDeviceRef; CFArrayRef gElementCFArrayRef = device->elementCFArrayRef; TRACE("polling device %i\n",device->id); if (!gCollections) return; tIOHIDTopElementRef = (IOHIDElementRef) CFArrayGetValueAtIndex(gCollections, device->id); tIOHIDDeviceRef = IOHIDElementGetDevice(tIOHIDTopElementRef); if (!tIOHIDDeviceRef) return; if (gElementCFArrayRef) { int button_idx = 0; int pov_idx = 0; int slider_idx = 0; int inst_id; CFIndex idx, cnt = CFArrayGetCount( gElementCFArrayRef ); for ( idx = 0; idx < cnt; idx++ ) { IOHIDValueRef valueRef; int val, oldVal, newVal; IOHIDElementRef tIOHIDElementRef = ( IOHIDElementRef ) CFArrayGetValueAtIndex( gElementCFArrayRef, idx ); int eleType = IOHIDElementGetType( tIOHIDElementRef ); switch(eleType) { case kIOHIDElementTypeInput_Button: if(button_idx < 128) { IOHIDDeviceGetValue(tIOHIDDeviceRef, tIOHIDElementRef, &valueRef); val = IOHIDValueGetIntegerValue(valueRef); newVal = val ? 0x80 : 0x0; oldVal = device->generic.js.rgbButtons[button_idx]; device->generic.js.rgbButtons[button_idx] = newVal; if (oldVal != newVal) { inst_id = DIDFT_MAKEINSTANCE(button_idx) | DIDFT_PSHBUTTON; queue_event(iface,inst_id,newVal,GetCurrentTime(),device->generic.base.dinput->evsequence++); } button_idx ++; } break; case kIOHIDElementTypeInput_Misc: { uint32_t usage = IOHIDElementGetUsage( tIOHIDElementRef ); switch(usage) { case kHIDUsage_GD_Hatswitch: { IOHIDDeviceGetValue(tIOHIDDeviceRef, tIOHIDElementRef, &valueRef); val = IOHIDValueGetIntegerValue(valueRef); oldVal = device->generic.js.rgdwPOV[pov_idx]; if (val >= 8) newVal = -1; else newVal = val * 4500; device->generic.js.rgdwPOV[pov_idx] = newVal; if (oldVal != newVal) { inst_id = DIDFT_MAKEINSTANCE(pov_idx) | DIDFT_POV; queue_event(iface,inst_id,newVal,GetCurrentTime(),device->generic.base.dinput->evsequence++); } pov_idx ++; break; } case kHIDUsage_GD_X: case kHIDUsage_GD_Y: case kHIDUsage_GD_Z: case kHIDUsage_GD_Rx: case kHIDUsage_GD_Ry: case kHIDUsage_GD_Rz: case kHIDUsage_GD_Slider: { int wine_obj = -1; IOHIDDeviceGetValue(tIOHIDDeviceRef, tIOHIDElementRef, &valueRef); val = IOHIDValueGetIntegerValue(valueRef); newVal = joystick_map_axis(&device->generic.props[idx], val); switch (usage) { case kHIDUsage_GD_X: wine_obj = 0; oldVal = device->generic.js.lX; device->generic.js.lX = newVal; break; case kHIDUsage_GD_Y: wine_obj = 1; oldVal = device->generic.js.lY; device->generic.js.lY = newVal; break; case kHIDUsage_GD_Z: wine_obj = 2; oldVal = device->generic.js.lZ; device->generic.js.lZ = newVal; break; case kHIDUsage_GD_Rx: wine_obj = 3; oldVal = device->generic.js.lRx; device->generic.js.lRx = newVal; break; case kHIDUsage_GD_Ry: wine_obj = 4; oldVal = device->generic.js.lRy; device->generic.js.lRy = newVal; break; case kHIDUsage_GD_Rz: wine_obj = 5; oldVal = device->generic.js.lRz; device->generic.js.lRz = newVal; break; case kHIDUsage_GD_Slider: wine_obj = 6 + slider_idx; oldVal = device->generic.js.rglSlider[slider_idx]; device->generic.js.rglSlider[slider_idx] = newVal; slider_idx ++; break; } if ((wine_obj != -1) && (oldVal != newVal)) { inst_id = DIDFT_MAKEINSTANCE(wine_obj) | DIDFT_ABSAXIS; queue_event(iface,inst_id,newVal,GetCurrentTime(),device->generic.base.dinput->evsequence++); } break; } default: FIXME("unhandled usage %i\n",usage); } break; } default: FIXME("Unhandled type %i\n",eleType); } } } }
HRESULT WINAPI JoystickAGenericImpl_GetDeviceState(LPDIRECTINPUTDEVICE8A iface, DWORD len, LPVOID ptr) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickWGenericImpl_GetDeviceState(IDirectInputDevice8W_from_impl(This), len, ptr); }
static HRESULT WINAPI SysKeyboardAImpl_GetDeviceState(LPDIRECTINPUTDEVICE8A iface, DWORD len, LPVOID ptr) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); return SysKeyboardWImpl_GetDeviceState(IDirectInputDevice8W_from_impl(This), len, ptr); }
static HRESULT WINAPI JoystickLinuxAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) { JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); return JoystickLinuxWImpl_GetProperty(IDirectInputDevice8W_from_impl(This), rguid, pdiph); }
static HRESULT WINAPI SysKeyboardAImpl_GetCapabilities(LPDIRECTINPUTDEVICE8A iface, LPDIDEVCAPS lpDIDevCaps) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); return SysKeyboardWImpl_GetCapabilities(IDirectInputDevice8W_from_impl(This), lpDIDevCaps); }
static void joy_polldev(LPDIRECTINPUTDEVICE8A iface) { struct pollfd plfd; struct js_event jse; JoystickImpl *This = impl_from_IDirectInputDevice8A(iface); TRACE("(%p)\n", This); if (This->joyfd==-1) { WARN("no device\n"); return; } while (1) { LONG value; int inst_id = -1; plfd.fd = This->joyfd; plfd.events = POLLIN; if (poll(&plfd,1,0) != 1) return; /* we have one event, so we can read */ if (sizeof(jse)!=read(This->joyfd,&jse,sizeof(jse))) { return; } TRACE("js_event: type 0x%x, number %d, value %d\n", jse.type,jse.number,jse.value); if (jse.type & JS_EVENT_BUTTON) { if (jse.number >= This->generic.devcaps.dwButtons) return; inst_id = DIDFT_MAKEINSTANCE(jse.number) | DIDFT_PSHBUTTON; This->generic.js.rgbButtons[jse.number] = value = jse.value ? 0x80 : 0x00; } else if (jse.type & JS_EVENT_AXIS) { int number = This->generic.axis_map[jse.number]; /* wine format object index */ if (number < 0) return; inst_id = number < 8 ? DIDFT_MAKEINSTANCE(number) | DIDFT_ABSAXIS : DIDFT_MAKEINSTANCE(number - 8) | DIDFT_POV; value = joystick_map_axis(&This->generic.props[id_to_object(This->generic.base.data_format.wine_df, inst_id)], jse.value); TRACE("changing axis %d => %d\n", jse.number, number); switch (number) { case 0: This->generic.js.lX = value; break; case 1: This->generic.js.lY = value; break; case 2: This->generic.js.lZ = value; break; case 3: This->generic.js.lRx = value; break; case 4: This->generic.js.lRy = value; break; case 5: This->generic.js.lRz = value; break; case 6: This->generic.js.rglSlider[0] = value; break; case 7: This->generic.js.rglSlider[1] = value; break; case 8: case 9: case 10: case 11: { int idx = number - 8; if (jse.number % 2) This->povs[idx].y = jse.value; else This->povs[idx].x = jse.value; This->generic.js.rgdwPOV[idx] = value = joystick_map_pov(&This->povs[idx]); break; } default: WARN("axis %d not supported\n", number); } } if (inst_id >= 0) queue_event(iface, inst_id, value, jse.time, This->generic.base.dinput->evsequence++); } }
static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8A(iface); return SysKeyboardWImpl_Acquire(IDirectInputDevice8W_from_impl(This)); }