;*************************************************************************** ; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY ; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR ; PURPOSE. ; Copyright (c) 1994 - 1998 Microsoft Corporation. All Rights Reserved. ; File: vjoyd.h ; Content: include file for describing VJoyD mini-driver communications ;************************************************************************* ifndef WCHAR endif ifndef UNICODE_STRING UNICODE_STRING STRUC us_Length DB SIZE WORD DUP (?) us_MaximumLength DB SIZE WORD DUP (?) us_Buffer DD ? UNICODE_STRING ENDS endif INCLUDE vjoydapi.INC Begin_Service_Table VJOYD ; * Win95 Gold services ; VJOYD_Service VJOYD_Register_Device_Driver, LOCAL VJOYD_Service VJOYD_GetPosEx_Service, LOCAL ; * DInput services (for internal use only) ; VJOYD_Service VJOYD_GetInitParams_Service, LOCAL VJOYD_Service VJOYD_Poll_Service, LOCAL VJOYD_Service VJOYD_Escape_Service, LOCAL VJOYD_Service VJOYD_CtrlMsg_Service, LOCAL VJOYD_Service VJOYD_SetGain_Service, LOCAL VJOYD_Service VJOYD_SendFFCommand_Service, LOCAL VJOYD_Service VJOYD_GetFFState_Service, LOCAL VJOYD_Service VJOYD_DownloadEffect_Service, LOCAL VJOYD_Service VJOYD_DestroyEffect_Service, LOCAL VJOYD_Service VJOYD_StartEffect_Service, LOCAL VJOYD_Service VJOYD_StopEffect_Service, LOCAL VJOYD_Service VJOYD_GetEffectStatus_Service, LOCAL ; * Interrupt polling ; * Mini-drivers should call this if they are interrupt driven at the ; * time they are notified of a change. ; VJOYD_Service VJOYD_DeviceUpdateNotify_Service, LOCAL ; * Screen saver (internal only) ; VJOYD_Service VJOYD_JoystickActivity_Service, LOCAL ; * Registry access ; VJOYD_Service VJOYD_OpenTypeKey_Service, LOCAL VJOYD_Service VJOYD_OpenConfigKey_Service, LOCAL ; * Gameport provider (not fully supported) ; VJOYD_Service VJOYD_NewGameportDevNode, LOCAL ; * Config Changed ; VJOYD_Service VJOYD_ConfigChanged_Service, LOCAL End_Service_Table VJOYD VJOYD_Init_Order EQU MAX_MSJSTICK EQU (16) S_OK EQU 00000000H S_FALSE EQU 00000001H E_FAIL EQU 80004005H E_INVALIDARG EQU 80000003H VJ_OK EQU S_OK ; A complete success VJ_FALSE EQU S_FALSE ; A success but not without some difficulties VJ_DEFAULT EQU VJ_FALSE ; Mini-driver does not understand VJ_INCOMPLETE EQU VJ_FALSE ; Some requested poll data was not returned VJERR_FAIL EQU E_FAIL VJERR_NEED_DEVNODE EQU VJERR_FAIL ; Need more resources VJERR_BAD_DEVNODE EQU VJERR_FAIL ; Last resources were insufficient VJERR_INVALIDPARAM EQU E_INVALIDARG VJERR_FAIL_HID EQU 80070052H ; The device is HID, so fail VJoyD polls: MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_DUP_NAME) VJERR_FAIL_OOM EQU ; An out of memory condition cause a failure VJERR_FAIL_DRVLOAD EQU VJERR_FAIL ; mini driver failed to load, internal error VJERR_FAIL_POWER EQU VJERR_FAIL ; the power state of the device caused a failure ; Driver Config flags ; Interface attributes (result is combination of OEM flag and VJOYD) VJDF_UNIT_ID EQU 00000001H ; unit id is valid VJDF_ISHID EQU 00000002H ; This is a HID device, so refuse polls VJDF_SENDSNOTIFY EQU 00000004H ; Driver calls VJOYD_DeviceUpdateNotify_Service VJDF_NEWIF EQU 00000080H ; use new interface (will be set by VJOYD on registration if new i/f used) VJDF_USAGES EQU 00000010H ; usages are valid VJDF_GENERICNAME EQU 00000020H ; The lpszOEMName string is generic name, not a whole string ; Interface requirements VJDF_NONVOLATILE EQU 00000100H ; This value should not be deleted on boot ; Devnode requirement flags VJDF_NODEVNODE EQU 00010000H ; does not get its resources via CFG_MGR VJDF_ISANALOGPORTDRIVER EQU 00020000H ; it plugs into a standard gameport VJDF_NOCHAINING EQU 00040000H ; one devnode per device MAX_JOYSTICKOEMVXDNAME EQU 260 ; max oem vxd name length (including NULL) POV_MIN EQU 0 POV_MAX EQU 1 ;*************************************************************************** ; @doc DDK | ; @struct JOYHWCAPS | ; The structure is defined only because previous versions of ; this file defined it. There is no reason this should be needed. ;************************************************************************** JOYHWCAPS STRUC dwMaxButtons DD ? dwMaxAxes DD ? dwNumAxes DD ? szOEMVxD DB MAX_JOYSTICKOEMVXDNAME DUP (?) JOYHWCAPS ENDS ;*************************************************************************** ; @doc DDK | ; @struct JOYPOLLDATA | ; The structure is used to collect sensor data ; from a DX5 mini-driver. ; @field DWORD | dwX | ; The X axis value. ; @field DWORD | dwY | ; The X axis value. ; @field DWORD | dwZ | ; The X axis value. ; @field DWORD | dwR | ; The X axis value. ; @field DWORD | dwU | ; The X axis value. ; @field DWORD | dwV | ; The X axis value. ; @field DWORD | dwPOV0 | ; The first point of view value. ; @field DWORD | dwPOV1 | ; The second point of view value. ; @field DWORD | dwPOV2 | ; The third point of view value. ; @field DWORD | dwPOV3 | ; The fourth point of view value. ; @field DWORD | dwBTN0 | ; The first DWORD of button bits. (Buttons 1 to 32 ) ; @field DWORD | dwBTN1 | ; The second DWORD of button bits. (Buttons 33 to 64 ) ; @field DWORD | dwBTN2 | ; The third DWORD of button bits. (Buttons 65 to 96 ) ; @field DWORD | dwBTN3 | ; The fourth DWORD of button bits. (Buttons 97 to 128 ) ; @field DWORD | dwReserved0 | ; The first reserved DWORD. ; @field DWORD | dwReserved1 | ; The second reserved DWORD. ;************************************************************************** VJPOLLDATA STRUC dwX DD ? dwY DD ? dwZ DD ? dwR DD ? dwU DD ? dwV DD ? dwPOV0 DD ? dwPOV1 DD ? dwPOV2 DD ? dwPOV3 DD ? dwBTN0 DD ? dwBTN1 DD ? dwBTN2 DD ? dwBTN3 DD ? dwReserved0 DD ? dwReserved1 DD ? VJPOLLDATA ENDS ;*************************************************************************** ; @doc DDK | ; @struct JOYOEMHWCAPS | ; The structure is used to pass driver capabilites ; @field DWORD | dwMaxButtons | ; The number of buttons supported by the device. ; @field DWORD | dwMaxAxes | ; The highest axis supported by the device. ; For example a device with X, Y and R has 3 axes but the highest ; one is axis 4 so dwMaxAxes is 4. ; @field DWORD | dwNumAxes | ; The number of axes supported by the device. ; For example a device with X, Y and R has 3 so dwNumAxes is 3. ;************************************************************************** JOYOEMHWCAPS STRUC dwMaxButtons DD ? dwMaxAxes DD ? dwNumAxes DD ? JOYOEMHWCAPS ENDS ;*************************************************************************** ; @doc DDK | ; @struct VJPOLLREG | ; The structure is used by a mini-driver to register polling ; and other general purpose callbacks with VJoyD for DX5 interface mini- ; drivers. ; @field DWORD | dwSize | ; Must be set to sizeof() ; @field JOYPOLLRTN | fpPoll | ; Poll callback. Used for all device polling. ; @field CMCONFIGHANDLER | fpCfg | ; Standard configuration manager callback. ; @field INITIALIZERTN | fpInitialize | ; Initialization callback. This callback replaces and extends the JoyId ; callback used with Win95 interface mini-drivers. ; @field ESCAPERTN | fpEscape | ; Escape callback. May be sent to a device in response to an application ; calling the Escape member. ; @field CTRLMSGRTN | fpCtrlMsg | ; Control message callback. Used to send notifications from VJoyD to mini- ; drivers. ;************************************************************************** VJPOLLREG STRUC dwSize DD ? fpPoll DD ? fpCfg DD ? fpInitialize DD ? fpEscape DD ? fpCtrlMsg DD ? VJPOLLREG ENDS ;*************************************************************************** ; @doc DDK | ; @struct VJFORCEREG | ; The structure is used by a mini-driver to register force ; feedback related callbacks with VJoyD for DX5 interface. ; @field DWORD | dwSize | ; Must be set to sizeof() ; @field SETGAINRTN | fpSetFFGain | ; Set Force Feedback Gain callback. ; @field SENDFFCOMMANDRTN | fpSendFFCommand | ; Send Force Feedback Command callback. ; @field GETFFSTATERTN | fpGetFFState | ; Get Force Feedback state callback. ; @field DOWNLOADEFFECTRTN | fpDownloadEff | ; Download effect callback. ; @field DESTROYEFFECTRTN | fpDestroyEff | ; Destroy effect callback. ; @field STARTEFFECTRTN | fpStartEff | ; Start effect callback. ; @field STOPEFFECTRTN | fpStopEff | ; Stop effect callback. ; @field GETEFFECTSTATUSRTN | fpGetStatusEff | ; Get effect status callback. ;************************************************************************** VJFORCEREG STRUC dwSize DD ? fpSetFFGain DD ? fpSendFFCommand DD ? fpGetFFState DD ? fpDownloadEff DD ? fpDestroyEff DD ? fpStartEff DD ? fpStopEff DD ? fpGetStatusEff DD ? VJFORCEREG ENDS ;*************************************************************************** ; @doc DDK ; @struct VJDEVICEDESC | ; The structure is used to describe a DX5 DDI ; device. This structure has been extended since DX5. See the ; VJDEVICEDESC_DX5 structure for the previous version. ; @field DWORD | dwSize | ; Must be set to sizeof(). ; @field LPSTR | lpszOEMType | ; Points to a null terminated string containing the text used to ; describe the device as stored in the OEMName entry in the ; registry. Renamed in Win98 (was lpszOEMName), is unused for ; DX5 drivers. ; @field DWORD | dwUnitId | ; Specifies the unit id of this device. ; @field LPJOYOEMHWCAPS | lpHWCaps | ; Points to a structure which contains the device ; hardware capabilities. ; @field LPJOYREGHWCONFIG | lpHWConfig | ; Points to a structure which contains the ; configuration and calibration data for the device. Is unused for ; DX5 drivers. ; @field UNICODE_STRING | FileName | ; An optional filename associated with the device. This is used for ; HID devices to allow them to be accessed directly through the HID ; stack without the joyGetPosEx restrictions. Added Win98. ; @field USAGE_AND_PAGE | Usages | ; An array of HID usages to describe what HID axis description has ; been used for each WinMM axis. Added Win98. The elements are: ; Usages[0] - X ; Usages[1] - Y ; Usages[2] - Z ; Usages[3] - R ; Usages[4] - U ; Usages[5] - V ; Usages[6] - POV0 ; Usages[7] - POV1 ; Usages[8] - POV2 ; Usages[9] - POV3 ; @field LPSTR | lpszOEMName | ; Points to a null terminated string containing a friendly name ; for the device. Added Win98. ;************************************************************************** VJDEVICEDESC STRUC dwSize DD ? lpszOEMType DD ? dwUnitId DD ? lpHWCaps DD ? lpHWConfig DD ? FileName DB SIZE UNICODE_STRING DUP (?) Usages DD 10 DUP (?) lpszOEMName DD ? VJDEVICEDESC ENDS ;*************************************************************************** ; @doc DDK ; @struct VJDEVICEDESC_DX5 | ; The structure is used to describe a DX5 DDI ; device. This is the DX5 version of the structure. ; @field DWORD | dwSize | ; Must be set to sizeof(). ; @field LPSTR | lpszOEMName | ; This field is ignored. ; @field DWORD | dwUnitId | ; Specifies the unit id of this device. ; @field LPJOYOEMHWCAPS | lpHWCaps | ; Points to a structure which contains the device ; hardware capabilities. ; @field LPJOYREGHWCONFIG | lpHWConfig | ; This field is unused in DX5. ;************************************************************************** VJDEVICEDESC_DX5 STRUC dwSize DD ? lpszOEMName DD ? dwUnitId DD ? lpHWCaps DD ? lpHWConfig DD ? VJDEVICEDESC_DX5 ENDS ;*************************************************************************** ; @doc DDK ; @struct VJREGDRVINFO | ; The structure is used to register a DX5 DDI ; driver with VJoyD. ; @field DWORD | dwSize | ; The size of the structure. ; @field DWORD | dwFunction | ; The type of registration to be performed ; It must be one of the values. ; @field DWORD | dwFlags | ; Flags associated with this registration ; It consists of one or more flag values. ; @field LPSTR | lpszOEMCallout | ; The name of the driver associated with this registration, ; for example "msanalog.vxd" ; @field DWORD | dwFirmwareRevision | ; Specifies the firmware revision of the device. ; If the revision is unknown a value of zero should be used. ; @field DWORD | dwHardwareRevision | ; Specifies the hardware revision of the device. ; If the revision is unknown a value of zero should be used. ; @field DWORD | dwDriverVersion | ; Specifies the version number of the device driver. ; If the revision is unknown a value of zero should be used. ; @field LPVJDEVICEDESC | lpDeviceDesc | ; Optional pointer to a structure ; that describes the configuration properties of the device. ; This allows drivers to supply the description of the device ; rather than use the registry for this purpose. ; If no description is available then the field should be ; set to . ; @field LPVJPOLLREG | lpPollReg | ; Optional pointer to a structure ; that contains the most common driver callbacks. ; Only a very strange driver would not need to register any ; of these callbacks but if that was the case, then the field ; should be set to . ; @field LPVJFORCEREG | lpForceReg | ; Optional pointer to a structure ; that contains all of the force feedback specific callbacks. ; If the ring 0 driver does not support force feedback then ; the field should be set to . ; @field DWORD | dwReserved | ; Reserved, must be set to zero. ;************************************************************************** VJREGDRVINFO STRUC dwSize DD ? dwFunction DD ? dwFlags DD ? lpszOEMCallout DD ? dwFirmwareRevision DD ? dwHardwareRevision DD ? dwDriverVersion DD ? lpDeviceDesc DD ? lpPollReg DD ? lpForceReg DD ? dwReserved DD ? VJREGDRVINFO ENDS