1 /* 2 * Copyright 2000 Lionel Ulmer 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #ifndef __WINE_DLLS_DINPUT_DINPUT_PRIVATE_H 20 #define __WINE_DLLS_DINPUT_DINPUT_PRIVATE_H 21 22 #include <wine/config.h> 23 24 #include <stdarg.h> 25 26 #define WIN32_NO_STATUS 27 #define _INC_WINDOWS 28 #define COM_NO_WINDOWS_H 29 30 #define COBJMACROS 31 #define NONAMELESSUNION 32 33 #include <windef.h> 34 #include <winbase.h> 35 #include <winreg.h> 36 #include <winuser.h> 37 #include <dinput.h> 38 #include <dinputd.h> 39 40 #include <wine/debug.h> 41 #include <wine/list.h> 42 #include <wine/unicode.h> 43 44 WINE_DEFAULT_DEBUG_CHANNEL(dinput); 45 46 /* Implementation specification */ 47 typedef struct IDirectInputImpl IDirectInputImpl; 48 struct IDirectInputImpl 49 { 50 IDirectInput7A IDirectInput7A_iface; 51 IDirectInput7W IDirectInput7W_iface; 52 IDirectInput8A IDirectInput8A_iface; 53 IDirectInput8W IDirectInput8W_iface; 54 IDirectInputJoyConfig8 IDirectInputJoyConfig8_iface; 55 56 LONG ref; 57 58 BOOL initialized; 59 CRITICAL_SECTION crit; 60 struct list entry; /* entry into list of all IDirectInputs */ 61 62 DWORD evsequence; /* unique sequence number for events */ 63 DWORD dwVersion; /* direct input version number */ 64 struct list devices_list; /* list of all created dinput devices */ 65 struct list device_players; /* device instance guid to player name */ 66 }; 67 68 /* Function called by all devices that Wine supports */ 69 struct dinput_device { 70 const char *name; 71 HRESULT (*enum_deviceA)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEA lpddi, DWORD version, int id); 72 HRESULT (*enum_deviceW)(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINSTANCEW lpddi, DWORD version, int id); 73 HRESULT (*create_device)(IDirectInputImpl *dinput, REFGUID rguid, REFIID riid, LPVOID *pdev, int unicode); 74 }; 75 76 struct DevicePlayer { 77 GUID instance_guid; 78 WCHAR username[MAX_PATH]; 79 struct list entry; 80 }; 81 82 extern const struct dinput_device mouse_device DECLSPEC_HIDDEN; 83 extern const struct dinput_device keyboard_device DECLSPEC_HIDDEN; 84 extern const struct dinput_device joystick_linux_device DECLSPEC_HIDDEN; 85 extern const struct dinput_device joystick_linuxinput_device DECLSPEC_HIDDEN; 86 extern const struct dinput_device joystick_osx_device DECLSPEC_HIDDEN; 87 88 extern void check_dinput_hooks(LPDIRECTINPUTDEVICE8W, BOOL) DECLSPEC_HIDDEN; 89 extern void check_dinput_events(void) DECLSPEC_HIDDEN; 90 typedef int (*DI_EVENT_PROC)(LPDIRECTINPUTDEVICE8A, WPARAM, LPARAM); 91 92 extern void _copy_diactionformatAtoW(LPDIACTIONFORMATW, LPDIACTIONFORMATA) DECLSPEC_HIDDEN; 93 extern void _copy_diactionformatWtoA(LPDIACTIONFORMATA, LPDIACTIONFORMATW) DECLSPEC_HIDDEN; 94 95 extern HRESULT _configure_devices(IDirectInput8W *iface, LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) DECLSPEC_HIDDEN; 96 97 extern WCHAR* get_mapping_path(const WCHAR *device, const WCHAR *username) DECLSPEC_HIDDEN; 98 99 #define IS_DIPROP(x) (((ULONG_PTR)(x) >> 16) == 0) 100 101 #define DIKEYBOARD_MASK 0x81000000 102 #define DIMOUSE_MASK 0x82000000 103 #define DIGENRE_ANY 0xFF000000 104 105 #include "device_private.h" 106 107 #endif /* __WINE_DLLS_DINPUT_DINPUT_PRIVATE_H */ 108