1 /* 2 * Copyright 2000 Lionel Ulmer 3 * Copyright 2000-2001 TransGaming Technologies Inc. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 18 */ 19 20 #ifndef __WINE_DLLS_DINPUT_DINPUTDEVICE_PRIVATE_H 21 #define __WINE_DLLS_DINPUT_DINPUTDEVICE_PRIVATE_H 22 23 #include <stdarg.h> 24 25 #include "windef.h" 26 #include "winbase.h" 27 #include "dinput.h" 28 #include "wine/list.h" 29 #include "dinput_private.h" 30 31 typedef struct 32 { 33 int size; 34 int offset_in; 35 int offset_out; 36 int value; 37 } DataTransform; 38 39 typedef struct 40 { 41 int size; 42 int internal_format_size; 43 DataTransform *dt; 44 45 int *offsets; /* object offsets */ 46 LPDIDATAFORMAT wine_df; /* wine internal data format */ 47 LPDIDATAFORMAT user_df; /* user defined data format */ 48 } DataFormat; 49 50 typedef struct 51 { 52 unsigned int offset; 53 UINT_PTR uAppData; 54 } ActionMap; 55 56 /* Device implementation */ 57 typedef struct IDirectInputDeviceImpl IDirectInputDeviceImpl; 58 struct IDirectInputDeviceImpl 59 { 60 IDirectInputDevice8A IDirectInputDevice8A_iface; 61 IDirectInputDevice8W IDirectInputDevice8W_iface; 62 LONG ref; 63 GUID guid; 64 CRITICAL_SECTION crit; 65 IDirectInputImpl *dinput; 66 struct list entry; /* entry into IDirectInput devices list */ 67 HANDLE hEvent; 68 DWORD dwCoopLevel; 69 HWND win; 70 int acquired; 71 DI_EVENT_PROC event_proc; /* function to receive mouse & keyboard events */ 72 73 LPDIDEVICEOBJECTDATA data_queue; /* buffer for 'GetDeviceData'. */ 74 int queue_len; /* size of the queue - set in 'SetProperty' */ 75 int queue_head; /* position to write new event into queue */ 76 int queue_tail; /* next event to read from queue */ 77 BOOL overflow; /* return DI_BUFFEROVERFLOW in 'GetDeviceData' */ 78 79 DataFormat data_format; /* user data format and wine to user format converter */ 80 81 /* Action mapping */ 82 int num_actions; /* number of actions mapped */ 83 ActionMap *action_map; /* array of mappings */ 84 }; 85 86 extern BOOL get_app_key(HKEY*, HKEY*) DECLSPEC_HIDDEN; 87 extern DWORD get_config_key(HKEY, HKEY, const char*, char*, DWORD) DECLSPEC_HIDDEN; 88 89 /* Routines to do DataFormat / WineFormat conversions */ 90 extern void fill_DataFormat(void *out, DWORD size, const void *in, const DataFormat *df) DECLSPEC_HIDDEN; 91 extern void release_DataFormat(DataFormat *df) DECLSPEC_HIDDEN; 92 extern void queue_event(LPDIRECTINPUTDEVICE8A iface, int inst_id, DWORD data, DWORD time, DWORD seq) DECLSPEC_HIDDEN; 93 /* Helper functions to work with data format */ 94 extern int id_to_object(LPCDIDATAFORMAT df, int id) DECLSPEC_HIDDEN; 95 extern int find_property(const DataFormat *df, LPCDIPROPHEADER ph) DECLSPEC_HIDDEN; 96 97 /* Common joystick stuff */ 98 typedef struct 99 { 100 LONG lDevMin; 101 LONG lDevMax; 102 LONG lMin; 103 LONG lMax; 104 LONG lDeadZone; 105 LONG lSaturation; 106 } ObjProps; 107 108 extern DWORD joystick_map_pov(const POINTL *p) DECLSPEC_HIDDEN; 109 extern LONG joystick_map_axis(ObjProps *props, int val) DECLSPEC_HIDDEN; 110 111 typedef struct 112 { 113 struct list entry; 114 LPDIRECTINPUTEFFECT ref; 115 } effect_list_item; 116 117 extern const GUID DInput_PIDVID_Product_GUID DECLSPEC_HIDDEN; 118 119 /* Various debug tools */ 120 extern void _dump_DIPROPHEADER(LPCDIPROPHEADER diph) DECLSPEC_HIDDEN; 121 extern void _dump_OBJECTINSTANCEA(const DIDEVICEOBJECTINSTANCEA *ddoi) DECLSPEC_HIDDEN; 122 extern void _dump_OBJECTINSTANCEW(const DIDEVICEOBJECTINSTANCEW *ddoi) DECLSPEC_HIDDEN; 123 extern void _dump_DIDATAFORMAT(const DIDATAFORMAT *df) DECLSPEC_HIDDEN; 124 extern const char *_dump_dinput_GUID(const GUID *guid) DECLSPEC_HIDDEN; 125 126 extern LPDIOBJECTDATAFORMAT dataformat_to_odf_by_type(LPCDIDATAFORMAT df, int n, DWORD type) DECLSPEC_HIDDEN; 127 128 extern HRESULT save_mapping_settings(IDirectInputDevice8W *iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUsername) DECLSPEC_HIDDEN; 129 extern BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdiaf, const WCHAR *username) DECLSPEC_HIDDEN; 130 131 extern HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, DWORD devMask, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN; 132 extern HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN; 133 134 /* And the stubs */ 135 extern HRESULT WINAPI IDirectInputDevice2AImpl_Acquire(LPDIRECTINPUTDEVICE8A iface) DECLSPEC_HIDDEN; 136 extern HRESULT WINAPI IDirectInputDevice2WImpl_Acquire(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_HIDDEN; 137 extern HRESULT WINAPI IDirectInputDevice2AImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface) DECLSPEC_HIDDEN; 138 extern HRESULT WINAPI IDirectInputDevice2WImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_HIDDEN; 139 extern HRESULT WINAPI IDirectInputDevice2AImpl_SetDataFormat(LPDIRECTINPUTDEVICE8A iface, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN; 140 extern HRESULT WINAPI IDirectInputDevice2WImpl_SetDataFormat(LPDIRECTINPUTDEVICE8W iface, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN; 141 extern HRESULT WINAPI IDirectInputDevice2AImpl_SetCooperativeLevel(LPDIRECTINPUTDEVICE8A iface, HWND hwnd, DWORD dwflags) DECLSPEC_HIDDEN; 142 extern HRESULT WINAPI IDirectInputDevice2WImpl_SetCooperativeLevel(LPDIRECTINPUTDEVICE8W iface, HWND hwnd, DWORD dwflags) DECLSPEC_HIDDEN; 143 extern HRESULT WINAPI IDirectInputDevice2AImpl_SetEventNotification(LPDIRECTINPUTDEVICE8A iface, HANDLE hnd) DECLSPEC_HIDDEN; 144 extern HRESULT WINAPI IDirectInputDevice2WImpl_SetEventNotification(LPDIRECTINPUTDEVICE8W iface, HANDLE hnd) DECLSPEC_HIDDEN; 145 extern ULONG WINAPI IDirectInputDevice2AImpl_Release(LPDIRECTINPUTDEVICE8A iface) DECLSPEC_HIDDEN; 146 extern ULONG WINAPI IDirectInputDevice2WImpl_Release(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_HIDDEN; 147 extern HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface(LPDIRECTINPUTDEVICE8A iface, REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; 148 extern HRESULT WINAPI IDirectInputDevice2WImpl_QueryInterface(LPDIRECTINPUTDEVICE8W iface, REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN; 149 extern ULONG WINAPI IDirectInputDevice2AImpl_AddRef(LPDIRECTINPUTDEVICE8A iface) DECLSPEC_HIDDEN; 150 extern ULONG WINAPI IDirectInputDevice2WImpl_AddRef(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_HIDDEN; 151 extern HRESULT WINAPI IDirectInputDevice2AImpl_EnumObjects( 152 LPDIRECTINPUTDEVICE8A iface, 153 LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, 154 LPVOID lpvRef, 155 DWORD dwFlags) DECLSPEC_HIDDEN; 156 extern HRESULT WINAPI IDirectInputDevice2WImpl_EnumObjects( 157 LPDIRECTINPUTDEVICE8W iface, 158 LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, 159 LPVOID lpvRef, 160 DWORD dwFlags) DECLSPEC_HIDDEN; 161 extern HRESULT WINAPI IDirectInputDevice2AImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPDIPROPHEADER pdiph) DECLSPEC_HIDDEN; 162 extern HRESULT WINAPI IDirectInputDevice2WImpl_GetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPDIPROPHEADER pdiph) DECLSPEC_HIDDEN; 163 extern HRESULT WINAPI IDirectInputDevice2AImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPCDIPROPHEADER pdiph) DECLSPEC_HIDDEN; 164 extern HRESULT WINAPI IDirectInputDevice2WImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPCDIPROPHEADER pdiph) DECLSPEC_HIDDEN; 165 extern HRESULT WINAPI IDirectInputDevice2AImpl_GetObjectInfo( 166 LPDIRECTINPUTDEVICE8A iface, 167 LPDIDEVICEOBJECTINSTANCEA pdidoi, 168 DWORD dwObj, 169 DWORD dwHow) DECLSPEC_HIDDEN; 170 extern HRESULT WINAPI IDirectInputDevice2WImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8W iface, 171 LPDIDEVICEOBJECTINSTANCEW pdidoi, 172 DWORD dwObj, 173 DWORD dwHow) DECLSPEC_HIDDEN; 174 extern HRESULT WINAPI IDirectInputDevice2AImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, 175 LPDWORD entries, DWORD flags) DECLSPEC_HIDDEN; 176 extern HRESULT WINAPI IDirectInputDevice2WImpl_GetDeviceData(LPDIRECTINPUTDEVICE8W iface, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, 177 LPDWORD entries, DWORD flags) DECLSPEC_HIDDEN; 178 extern HRESULT WINAPI IDirectInputDevice2AImpl_RunControlPanel(LPDIRECTINPUTDEVICE8A iface, HWND hwndOwner, DWORD dwFlags) DECLSPEC_HIDDEN; 179 extern HRESULT WINAPI IDirectInputDevice2WImpl_RunControlPanel(LPDIRECTINPUTDEVICE8W iface, HWND hwndOwner, DWORD dwFlags) DECLSPEC_HIDDEN; 180 extern HRESULT WINAPI IDirectInputDevice2AImpl_Initialize(LPDIRECTINPUTDEVICE8A iface, HINSTANCE hinst, DWORD dwVersion, 181 REFGUID rguid) DECLSPEC_HIDDEN; 182 extern HRESULT WINAPI IDirectInputDevice2WImpl_Initialize(LPDIRECTINPUTDEVICE8W iface, HINSTANCE hinst, DWORD dwVersion, 183 REFGUID rguid) DECLSPEC_HIDDEN; 184 extern HRESULT WINAPI IDirectInputDevice2AImpl_CreateEffect(LPDIRECTINPUTDEVICE8A iface, REFGUID rguid, LPCDIEFFECT lpeff, 185 LPDIRECTINPUTEFFECT *ppdef, LPUNKNOWN pUnkOuter) DECLSPEC_HIDDEN; 186 extern HRESULT WINAPI IDirectInputDevice2WImpl_CreateEffect(LPDIRECTINPUTDEVICE8W iface, REFGUID rguid, LPCDIEFFECT lpeff, 187 LPDIRECTINPUTEFFECT *ppdef, LPUNKNOWN pUnkOuter) DECLSPEC_HIDDEN; 188 extern HRESULT WINAPI IDirectInputDevice2AImpl_EnumEffects( 189 LPDIRECTINPUTDEVICE8A iface, 190 LPDIENUMEFFECTSCALLBACKA lpCallback, 191 LPVOID lpvRef, 192 DWORD dwFlags) DECLSPEC_HIDDEN; 193 extern HRESULT WINAPI IDirectInputDevice2WImpl_EnumEffects( 194 LPDIRECTINPUTDEVICE8W iface, 195 LPDIENUMEFFECTSCALLBACKW lpCallback, 196 LPVOID lpvRef, 197 DWORD dwFlags) DECLSPEC_HIDDEN; 198 extern HRESULT WINAPI IDirectInputDevice2AImpl_GetEffectInfo( 199 LPDIRECTINPUTDEVICE8A iface, 200 LPDIEFFECTINFOA lpdei, 201 REFGUID rguid) DECLSPEC_HIDDEN; 202 extern HRESULT WINAPI IDirectInputDevice2WImpl_GetEffectInfo( 203 LPDIRECTINPUTDEVICE8W iface, 204 LPDIEFFECTINFOW lpdei, 205 REFGUID rguid) DECLSPEC_HIDDEN; 206 extern HRESULT WINAPI IDirectInputDevice2AImpl_GetForceFeedbackState(LPDIRECTINPUTDEVICE8A iface, LPDWORD pdwOut) DECLSPEC_HIDDEN; 207 extern HRESULT WINAPI IDirectInputDevice2WImpl_GetForceFeedbackState(LPDIRECTINPUTDEVICE8W iface, LPDWORD pdwOut) DECLSPEC_HIDDEN; 208 extern HRESULT WINAPI IDirectInputDevice2AImpl_SendForceFeedbackCommand(LPDIRECTINPUTDEVICE8A iface, DWORD dwFlags) DECLSPEC_HIDDEN; 209 extern HRESULT WINAPI IDirectInputDevice2WImpl_SendForceFeedbackCommand(LPDIRECTINPUTDEVICE8W iface, DWORD dwFlags) DECLSPEC_HIDDEN; 210 extern HRESULT WINAPI IDirectInputDevice2AImpl_EnumCreatedEffectObjects(LPDIRECTINPUTDEVICE8A iface, 211 LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, 212 LPVOID lpvRef, DWORD dwFlags) DECLSPEC_HIDDEN; 213 extern HRESULT WINAPI IDirectInputDevice2WImpl_EnumCreatedEffectObjects(LPDIRECTINPUTDEVICE8W iface, 214 LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, 215 LPVOID lpvRef, DWORD dwFlags) DECLSPEC_HIDDEN; 216 extern HRESULT WINAPI IDirectInputDevice2AImpl_Escape(LPDIRECTINPUTDEVICE8A iface, LPDIEFFESCAPE lpDIEEsc) DECLSPEC_HIDDEN; 217 extern HRESULT WINAPI IDirectInputDevice2WImpl_Escape(LPDIRECTINPUTDEVICE8W iface, LPDIEFFESCAPE lpDIEEsc) DECLSPEC_HIDDEN; 218 extern HRESULT WINAPI IDirectInputDevice2AImpl_Poll(LPDIRECTINPUTDEVICE8A iface) DECLSPEC_HIDDEN; 219 extern HRESULT WINAPI IDirectInputDevice2WImpl_Poll(LPDIRECTINPUTDEVICE8W iface) DECLSPEC_HIDDEN; 220 extern HRESULT WINAPI IDirectInputDevice2AImpl_SendDeviceData(LPDIRECTINPUTDEVICE8A iface, DWORD cbObjectData, 221 LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) DECLSPEC_HIDDEN; 222 extern HRESULT WINAPI IDirectInputDevice2WImpl_SendDeviceData(LPDIRECTINPUTDEVICE8W iface, DWORD cbObjectData, 223 LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) DECLSPEC_HIDDEN; 224 extern HRESULT WINAPI IDirectInputDevice7AImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8A iface, 225 LPCSTR lpszFileName, 226 LPDIENUMEFFECTSINFILECALLBACK pec, 227 LPVOID pvRef, 228 DWORD dwFlags) DECLSPEC_HIDDEN; 229 extern HRESULT WINAPI IDirectInputDevice7WImpl_EnumEffectsInFile(LPDIRECTINPUTDEVICE8W iface, 230 LPCWSTR lpszFileName, 231 LPDIENUMEFFECTSINFILECALLBACK pec, 232 LPVOID pvRef, 233 DWORD dwFlags) DECLSPEC_HIDDEN; 234 extern HRESULT WINAPI IDirectInputDevice7AImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8A iface, 235 LPCSTR lpszFileName, 236 DWORD dwEntries, 237 LPDIFILEEFFECT rgDiFileEft, 238 DWORD dwFlags) DECLSPEC_HIDDEN; 239 extern HRESULT WINAPI IDirectInputDevice7WImpl_WriteEffectToFile(LPDIRECTINPUTDEVICE8W iface, 240 LPCWSTR lpszFileName, 241 DWORD dwEntries, 242 LPDIFILEEFFECT rgDiFileEft, 243 DWORD dwFlags) DECLSPEC_HIDDEN; 244 extern HRESULT WINAPI IDirectInputDevice8WImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface, 245 LPDIACTIONFORMATW lpdiaf, 246 LPCWSTR lpszUserName, 247 DWORD dwFlags) DECLSPEC_HIDDEN; 248 extern HRESULT WINAPI IDirectInputDevice8AImpl_GetImageInfo(LPDIRECTINPUTDEVICE8A iface, 249 LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) DECLSPEC_HIDDEN; 250 extern HRESULT WINAPI IDirectInputDevice8WImpl_GetImageInfo(LPDIRECTINPUTDEVICE8W iface, 251 LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) DECLSPEC_HIDDEN; 252 253 #endif /* __WINE_DLLS_DINPUT_DINPUTDEVICE_PRIVATE_H */ 254