/****************************************************************************** * GetProperty : get input device properties */ static HRESULT WINAPI JoystickLinuxWImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPDIPROPHEADER pdiph) { JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(this=%p,%s,%p)\n", iface, debugstr_guid(rguid), pdiph); _dump_DIPROPHEADER(pdiph); if (!IS_DIPROP(rguid)) return DI_OK; switch (LOWORD(rguid)) { case (DWORD_PTR) DIPROP_JOYSTICKID: { LPDIPROPDWORD pd = (LPDIPROPDWORD)pdiph; pd->dwData = get_joystick_index(&This->generic.base.guid); TRACE("DIPROP_JOYSTICKID(%d)\n", pd->dwData); break; } default: return JoystickWGenericImpl_GetProperty(iface, rguid, pdiph); } return DI_OK; }
static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev) { unsigned short index; find_joydevs(); if ((index = get_joystick_index(rguid)) < MAX_JOYDEV && have_joydevs && index < have_joydevs) { if ((riid == NULL) || IsEqualGUID(&IID_IDirectInputDeviceW, riid) || IsEqualGUID(&IID_IDirectInputDevice2W, riid) || IsEqualGUID(&IID_IDirectInputDevice7W, riid) || IsEqualGUID(&IID_IDirectInputDevice8W, riid)) { *pdev = (IDirectInputDeviceW*) alloc_device(rguid, &JoystickWvt, dinput, index); TRACE("Created a Joystick device (%p)\n", *pdev); if (*pdev == NULL) { ERR("out of memory\n"); return DIERR_OUTOFMEMORY; } return DI_OK; } WARN("no interface\n"); return DIERR_NOINTERFACE; } WARN("invalid device GUID\n"); return DIERR_DEVICENOTREG; }
static HRESULT joydev_create_deviceW(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEW* pdev) { unsigned short index; int joystick_devices_count; TRACE("%p %s %p %p\n",dinput, debugstr_guid(rguid), riid, pdev); *pdev = NULL; if ((joystick_devices_count = find_joystick_devices()) == 0) return DIERR_DEVICENOTREG; if ((index = get_joystick_index(rguid)) < 0xffff && joystick_devices_count && index < joystick_devices_count) { if ((riid == NULL) || IsEqualGUID(&IID_IDirectInputDeviceW, riid) || IsEqualGUID(&IID_IDirectInputDevice2W, riid) || IsEqualGUID(&IID_IDirectInputDevice7W, riid) || IsEqualGUID(&IID_IDirectInputDevice8W, riid)) { return alloc_device(rguid, &JoystickWvt, dinput, (LPDIRECTINPUTDEVICEA *)pdev, index); } WARN("no interface\n"); return DIERR_NOINTERFACE; } WARN("invalid device GUID %s\n",debugstr_guid(rguid)); return DIERR_DEVICENOTREG; }
static HRESULT joydev_create_deviceA(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPDIRECTINPUTDEVICEA* pdev) { unsigned short index; TRACE("%p %s %p %p\n",dinput, debugstr_guid(rguid), riid, pdev); find_joystick_devices(); *pdev = NULL; if ((index = get_joystick_index(rguid)) < MAX_JOYSTICKS && joystick_devices_count && index < joystick_devices_count) { if ((riid == NULL) || IsEqualGUID(&IID_IDirectInputDeviceA, riid) || IsEqualGUID(&IID_IDirectInputDevice2A, riid) || IsEqualGUID(&IID_IDirectInputDevice7A, riid) || IsEqualGUID(&IID_IDirectInputDevice8A, riid)) { return alloc_device(rguid, &JoystickAvt, dinput, pdev, index); } WARN("no interface\n"); return DIERR_NOINTERFACE; } return DIERR_DEVICENOTREG; }
static HRESULT joydev_create_device(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPVOID *pdev, int unicode) { unsigned short index; int joystick_devices_count; TRACE("%p %s %s %p %i\n", dinput, debugstr_guid(rguid), debugstr_guid(riid), pdev, unicode); *pdev = NULL; if ((joystick_devices_count = find_joystick_devices()) == 0) return DIERR_DEVICENOTREG; if ((index = get_joystick_index(rguid)) < 0xffff && joystick_devices_count && index < joystick_devices_count) { JoystickImpl *This; HRESULT hr; if (riid == NULL) ;/* nothing */ else if (IsEqualGUID(&IID_IDirectInputDeviceA, riid) || IsEqualGUID(&IID_IDirectInputDevice2A, riid) || IsEqualGUID(&IID_IDirectInputDevice7A, riid) || IsEqualGUID(&IID_IDirectInputDevice8A, riid)) { unicode = 0; } else if (IsEqualGUID(&IID_IDirectInputDeviceW, riid) || IsEqualGUID(&IID_IDirectInputDevice2W, riid) || IsEqualGUID(&IID_IDirectInputDevice7W, riid) || IsEqualGUID(&IID_IDirectInputDevice8W, riid)) { unicode = 1; } else { WARN("no interface\n"); return DIERR_NOINTERFACE; } hr = alloc_device(rguid, dinput, &This, index); if (!This) return hr; if (unicode) *pdev = &This->generic.base.IDirectInputDevice8W_iface; else *pdev = &This->generic.base.IDirectInputDevice8A_iface; return hr; } return DIERR_DEVICENOTREG; }
static HRESULT WINAPI JoystickLinuxWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface, LPDIDEVICEINSTANCEW ddi) { JoystickImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(%p) %p\n", This, ddi); if (ddi == NULL) return E_POINTER; if ((ddi->dwSize != sizeof(DIDEVICEINSTANCE_DX3W)) && (ddi->dwSize != sizeof(DIDEVICEINSTANCEW))) return DIERR_INVALIDPARAM; fill_joystick_dideviceinstanceW( ddi, This->generic.base.dinput->dwVersion, get_joystick_index(&This->generic.base.guid) ); return DI_OK; }