sinclude(`dimkhdr.m4')dnl This file must be preprocessed by the m4 preprocessor. sinclude(`../dimkhdr.m4')dnl Need both lines so we build on both 95 and NT. sinclude(`inc/dimkhdr.m4')dnl For \nt\private\windows nmake makefil0. /**************************************************************************** * * Copyright (C) 1996 Microsoft Corporation. All Rights Reserved.;public_dx3 * Copyright (C) 1996-1998 Microsoft Corporation. All Rights Reserved.;public_dx5 * Copyright (C) 1996-1998 Microsoft Corporation. All Rights Reserved.;public_dx5b2 * Copyright (C) 1996-1999 Microsoft Corporation. All Rights Reserved.;public_dx6 * Copyright (C) 1996-1999 Microsoft Corporation. All Rights Reserved.;public_dx7 * Copyright (C) 1996-2002 Microsoft Corporation. All Rights Reserved.;public_dx8 * * File: dinput.h * Content: DirectInput include file begindoc * History: * Date By Reason * ==== == ====== * 1996.05.07 raymondc Somebody had to * 1996.08.07 a-marcan added stray and new vjoyd definitions * for manbugs: 77, 2167 and 2184 * 1998.01.07 omsharma Version 5B2, * 1999.01.16 marcand DX7 version (1999.02.09) -> DX6.2 -> DX6.1a * * Special markers: * * Each special marker can either be applied to a single line * (appended to the end) or spread over a range. For example * suppose that ;mumble is a marker. Then you can either say * * blah blah blah ;mumble * * to apply the marker to a single line, or * * ;begin_mumble * blah blah * blah blah * blah blah * ;end_mumble * * to apply it to a range of lines. * * * Note that the command line to hsplit.exe must look like * this for these markers to work: * * hsplit -u -ta dx# -v #00 * * where the two "#"s are the version of DX that the header * file is being generated for. They had better match, too. * * * Marker: ;public_300 * * Lines tagged with this marker will appear in all header files * DX3 **and later**. There should never be a ;public_300 since * 300 is the first version of the header file. Use ;public_dx3 * for lines that are specific to version 300 and not to future * versions. * * Marker: ;public_500 * * Lines tagged with this marker will appear in all header files * DX5 **and later**. It will not appear in the DX3 header file. * * Marker: ;public_50A * * Lines tagged with this marker will appear in all header files * DX5a **and later**. It will not appear in the DX3 or DX5 * header file. * * Marker: ;public_5B2 * * Lines tagged with this marker will appear in all header files * DX5b2 **and later**. It will not appear in the DX3, DX5 or * DX5a header file. * * Marker: ;public_600 * * Lines tagged with this marker will appear in all header files * DX6 (aka DX6.1a) **and later**. It will not appear in the DX3, * DX5, DX5a or DX5b2 header file. * * Marker: ;public_700 * * Lines tagged with this marker will appear in all header files * DX7 **and later**. It will not appear in the DX3, DX5, DX5a * DX5b2 or DX6 header file. * * Marker: ;public_800 * * Lines tagged with this marker will appear in all header files * DX8 **and later**. It will not appear in the DX3, DX5, DX5a * DX5b2, DX6 or DX7 header file. * * Marker: ;public_900 * * Lines tagged with this marker will appear in all header files * DX8 **and later**. It will not appear in the DX3, DX5, DX5a * DX5b2, DX6, DX7 or DX8 header file. * * Marker: ;public_dx3 * Marker: ;public_dx5 * Marker: ;public_dx5a * Marker: ;public_dx5b2 * Marker: ;public_dx6 * Marker: ;public_dx7 * Marker: ;public_dx8 * Marker: ;public_dx9 * * Lines tagged with these markers will appear *only* in the DX3 * or DX5 or DX5a or DX5b2 or DX6.1a or DX7 or DX8 or DX9 version * of the header file. * * There should never be a ;public_dx8 since DX8 is the latest * version of the header file. Use ;public_800 for lines that * are new for version 8 and apply to all future versions. * * Marker: ;if_(DIRECTINPUT_VERSION)_500 * * Lines tagged with this marker will appear only in the DX5 * version of the header file. Furthermore, its appearance * in the header file will be bracketed with * * #if(DIRECTINPUT_VERSION) >= 0x0500 * ... * #endif * * Try to avoid using this marker, because the number _500 needs * to change as each new beta version is released. (Yuck.) * * If you choose to use this as a bracketing tag, the end * tag is ";end" and not ";end_if_(DIRECTINPUT_VERSION)_500". * enddoc * ****************************************************************************/ #ifndef __DINPUT_INCLUDED__ #define __DINPUT_INCLUDED__ #ifndef DIJ_RINGZERO #ifdef _WIN32 #define COM_NO_WINDOWS_H #include #endif #endif /* DIJ_RINGZERO */ #ifdef __cplusplus extern "C" { #endif ;begin_internal_dx5a /* * Note that the default DIRECTINPUT_VERSION for DX5a is still 0x0500. * * This is intentional. There are no interface changes between * DX5 and DX5a and we want code written with the DX5a header file * to work on DX5 also. */ ;end_internal_dx5a ;begin_public_dx5a /* * To take advantage of HID functionality, you must do a * * #define DIRECTINPUT_VERSION 0x050A * * before #include . By default, #include * will produce a DirectX 5-compatible header file. * */ ;end_public_dx5a ;begin_internal_dx5b2 /* * Note that the default DIRECTINPUT_VERSION for DX5b2 is still 0x0500. * * This is intentional. There are no interface changes between * DX5 and DX5b2 and we want code written with the DX5b2 header file * to work on DX5 also. */ ;end_internal_dx5b2 ;begin_public_dx5b2 /* * To take advantage of HID and WDM gameport functionality, you must do a * * #define DIRECTINPUT_VERSION 0x05B2 * * before #include . By default, #include * will produce a DirectX 5-compatible header file. * */ ;end_public_dx5b2 ;begin_internal_dx6 /* * Note that the default DIRECTINPUT_VERSION for DX6 is still 0x0500. * * This is intentional. There are no interface changes between * DX5 and DX6 and we want code written with the DX6 header file * to work on DX5 also. */ ;end_internal_dx6 ;begin_public_dx6 /* * To take advantage of HID and WDM gameport functionality, you must do a * * #define DIRECTINPUT_VERSION 0x061A * * before #include . By default, #include * will produce a DirectX 5-compatible header file. * */ ;end_public_dx6 ;begin_public_dx7 /* * To build applications for older versions of DirectInput * * #define DIRECTINPUT_VERSION 0x0300 * or * #define DIRECTINPUT_VERSION 0x0500 * * before #include . By default, #include * will produce a DirectX 7-compatible header file. * */ ;end_public_dx7 ;begin_public_800 /* * To build applications for older versions of DirectInput * * #define DIRECTINPUT_VERSION [ 0x0300 | 0x0500 | 0x0700 ] * * before #include . By default, #include * will produce a DirectX 8-compatible header file. * */ ;end_public_800 #define DIRECTINPUT_HEADER_VERSION 0x0800 ;public_800 #ifndef DIRECTINPUT_VERSION ;public_500 #define DIRECTINPUT_VERSION 0x0300 ;public_dx3 #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0300") ;public_dx3 #define DIRECTINPUT_VERSION 0x0500 ;public_dx5 #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0500") ;public_dx5 #define DIRECTINPUT_VERSION 0x0600 ;public_dx6 #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0600") ;public_dx6 #define DIRECTINPUT_VERSION 0x0700 ;public_dx7 #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0700") ;public_dx7 #define DIRECTINPUT_VERSION DIRECTINPUT_HEADER_VERSION ;public_800 #pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800") ;public_800 #endif ;public_500 #ifndef DIJ_RINGZERO /**************************************************************************** * * Class IDs * ****************************************************************************/ DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(CLSID_DirectInputDevice8,0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /**************************************************************************** * * Interfaces * begindoc * * We use these GUIDs for named system objects as well. * * IID_IDirectInputW - * Name of the mutex that gates access to shared memory. * * IID_IDirectInputDeviceW - * Name of the shared memory block that tracks exclusively- * acquired objects. * enddoc ****************************************************************************/ DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); //GUID_FILEEFFECT is used to establish a effect file version;internal //beta file format different from final, so have different GUID;internal DEFINE_GUID(GUID_INTERNALFILEEFFECTBETA,0X981DC402, 0X880, 0X11D3, 0X8F, 0XB2, 0X0, 0XC0, 0X4F, 0X8E, 0XC6, 0X27);;internal //final for DX7 {197E775C-34BA-11d3-ABD5-00C04F8EC627};internal DEFINE_GUID(GUID_INTERNALFILEEFFECT, 0x197e775c, 0x34ba, 0x11d3, 0xab, 0xd5, 0x0, 0xc0, 0x4f, 0x8e, 0xc6, 0x27);;internal /**************************************************************************** * * Predefined object types * ****************************************************************************/ DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RxAxis, 0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RyAxis, 0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_RzAxis, 0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Slider, 0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); ;begin_internal #if DIRECTINPUT_VERSION <= 0x0300 /* * Old GUIDs from DX3 that were never used but which we can't recycle * because we shipped them. */ DEFINE_GUID(GUID_RAxis, 0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_UAxis, 0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_VAxis, 0xA36D02E5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); #endif ;end_internal DEFINE_GUID(GUID_Button, 0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); /**************************************************************************** * * Predefined product GUIDs * ****************************************************************************/ begindoc /**************************************************************************** * * @doc EXTERNAL * * @global GUID | GUID_SysMouse | * * A pre-defined DirectInput instance GUID that always refers to the * default system mouse. * * @global GUID | GUID_SysMouseEm | * * A pre-defined DirectInput instance GUID that always refers to the * default system mouse via emulation level 1. * Since this is an alias for the , it is not * enumerated by unless the * flag is passed. * * Passing this GUID to grants * access to the system mouse through an emulation layer. * Applications are not expected to use this GUID in normal * gameplay; it exists primarily for testing. * * This instance GUID is new for DirectX 5.0a. * * @global GUID | GUID_SysMouseEm2 | * * A pre-defined DirectInput instance GUID that always refers to the * default system keyboard via emulation level 2. * Since this is an alias for the , it is not * enumerated by unless the * flag is passed. * * Passing this GUID to grants * access to the system mouse through an emulation layer. * Applications are not expected to use this GUID in normal * gameplay; it exists primarily for testing. * * This instance GUID is new for DirectX 5.0a. * * @global GUID | GUID_SysKeyboard | * * A pre-defined DirectInput instance GUID that always refers to the * default system keyboard. * * @global GUID | GUID_SysKeyboardEm | * * A pre-defined DirectInput instance GUID that always refers to the * default system keyboard via emulation level 1. * Since this is an alias for the , it is not * enumerated by unless the * flag is passed. * * Passing this GUID to grants * access to the system keyboard through an emulation layer. * Applications are not expected to use this GUID in normal * gameplay; it exists primarily for testing. * * This instance GUID is new for DirectX 5.0a. * * @global GUID | GUID_SysKeyboardEm2 | * * A pre-defined DirectInput instance GUID that always refers to the * default system keyboard via emulation level 2. * Since this is an alias for the , it is not * enumerated by unless the * flag is passed. * * Passing this GUID to grants * access to the system keyboard through an emulation layer. * Applications are not expected to use this GUID in normal * gameplay; it exists primarily for testing. * * This instance GUID is new for DirectX 5.0a. * * @global GUID | GUID_Joystick | * * A pre-defined DirectInput product (not instance) * GUID that always refers to standard joysticks. * * There are no predefined GUIDs for joystick instances. * Applications should use * to identify joysticks. * ****************************************************************************/ enddoc DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); DEFINE_GUID(GUID_Joystick ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;public_500 DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;public_50a DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;public_50a DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;public_50a DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);;public_50a ;begin_public_500 /**************************************************************************** * * Predefined force feedback effects * ****************************************************************************/ DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); ;end_public_500 ;begin_public_900 DEFINE_GUID(GUID_RandomForce, 0x13541C2C,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_MoveToPosition,0x13541C2D,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_MoveToVelocity,0x13541C2E,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_SoloBump, 0x13541C2F,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_MultipleBump, 0x13541C30,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); DEFINE_GUID(GUID_InfiniteBump, 0x13541C31,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); ;end_public_900 #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Interfaces and Structures... * ****************************************************************************/ ;begin_if_(DIRECTINPUT_VERSION)_500 /**************************************************************************** * * IDirectInputEffect * ****************************************************************************/ begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput Effect Format Types | * * Describe attributes of a single effect on a device. * * The low byte of the effect format type represents * the type of the effect. Higher-order bits represents * capability flags. * * @flag DIEFT_ALL | * * Valid only for : * Enumerate all effects, * regardless of type. This flag may not be combined * with any of the other flags. * * @flag DIEFT_CONSTANTFORCE | * * The effect represents a constant-force effect. * When creating or modifying a constant-force effect, * the field * of the must point to a * structure and the * field must * be set to * sizeof(). * * The flag can be passed to * to restrict the enumeration to constant-force effects. * * @flag DIEFT_RAMPFORCE | * * The effect represents a ramp-force effect. * When creating or modifying a ramp-force effect, * the field * of the must point to a * structure and the * field must * be set to * sizeof(). * * The flag can be passed to * to restrict the enumeration to ramp-force effects. * * @flag DIEFT_PERIODIC | * * The effect represents a periodic effect. * When creating or modifying a periodic effect, * the field * of the must point to a * structure and the * field must * be set to * sizeof(). * * The flag can be passed to * to restrict the enumeration to periodic effects. * * @flag DIEFT_CONDITION | * * The effect represents a condition. * When creating or modifying a condition, * the field * of the must point to an array of * structure (one per axis) and the * field must * be set to * cAxis * sizeof(). * * Note that not all devices support all the parameters * of conditions. Check the effect capability flags * (listed below) * to determine which capabilities are available. * * The flag can be passed to * to restrict the enumeration to conditions. * * @flag DIEFT_CUSTOMFORCE | * * The effect represents a custom-force effect. * When creating or modifying a custom-force effect, * the field * of the must point to a * structure and the * field must * be set to * sizeof(). * * The flag can be passed to * to restrict the enumeration to custom-force effects. * ;begin_public_900 * @flag DIEFT_BARRIERFORCE | * * The effect represents a barrier force effect. * When creating or modifying a barrier force effect, * the field * of the must point to an array of * structures (one per axis) and the * field must * be set to cAxis * sizeof(). * * The flag can be passed to * to restrict the enumeration to barrier force effects. * ;end_public_900 * @flag DIEFT_HARDWARE | * * The effect represents a hardware-specific effect. * For additional information on using a hardware-specific * effect, consult the hardware documentation. * * The flag can be passed to * to restrict the enumeration to hardware-specific effects. * * @flag DIEFT_FFATTACK | * * The effect generator for this effect supports * the attack envelope parameter. If the effect generator * does not support attack then the * attack level and attack time parameters of * the structure will be ignored by the effect. * * @flag DIEFT_FFFADE | * * The effect generator for this effect supports * the fade parameter. If the effect generator * does not support fade then the * fade level and fade time parameters of * the structure will be ignored by the effect. * * If neither nor * is set, then the effect does not * support an envelope, and any provided envelope * will be ignored. * * @flag DIEFT_SATURATION | * * The effect generator for this effect supports * the saturation of condition effects. * If the effect generator does not support * saturation, then the force generated by a condition * is limited only by the maximum force which the device * can generate. * * @flag DIEFT_POSNEGCOEFFICIENTS | * * The effect generator for this effect supports * two coefficient values for conditions, one * for the positive displacement of the axis and one for * the negative displacement of the axis. If the device * does not support both coefficients, then the negative * coefficient in the structure will be ignored * and the positive coefficient will be used in both directions. * * @flag DIEFT_POSNEGSATURATION | * * The effect generator for this effect supports * a maximum saturation for both positive and * negative force output. If the device does not support * both saturation values, then the negative saturation * in the structure will be ignored * and the positive saturation will be used in both directions. * * @flag DIEFT_DEADBAND | * * The effect generator for this effect supports * the parameter. * If the device does not support condition dead band * for the effect, then the dead band will be ignored. * * @flag DIEFT_STARTDELAY | * * The effect generator for this effect supports * the parameter. * If the device does not support start delay for the effect, * then the delay will be ignored. * * This flag is new for DirectX 6.1a * * @xref . * * @func BYTE | DIEFT_GETTYPE | * * Extracts the effect type code from an effect format type. * * @parm DWORD | dwType | * * DirectInput effect format type. * * @xref "DirectInput Effect Format Types". * ****************************************************************************/ /* * ISSUE-2001/03/29-timgill Need more type clarification * Which of the basic types support envelopes? * Which support duration? Which support direction? * */ enddoc #define DIEFT_ALL 0x00000000 #define DIEFT_PREDEFMIN 0x00000001;internal #define DIEFT_CONSTANTFORCE 0x00000001 #define DIEFT_RAMPFORCE 0x00000002 #define DIEFT_PERIODIC 0x00000003 #define DIEFT_CONDITION 0x00000004 #define DIEFT_CUSTOMFORCE 0x00000005 #define DIEFT_BARRIERFORCE 0x00000006;public_900 #define DIEFT_PREDEFMAX 0x00000005;internal_dx5 #define DIEFT_PREDEFMAX 0x00000005;internal_dx5a #define DIEFT_PREDEFMAX 0x00000005;internal_dx5b2 #define DIEFT_PREDEFMAX 0x00000005;internal_dx6 #define DIEFT_PREDEFMAX 0x00000005;internal_dx7 #define DIEFT_PREDEFMAX 0x00000005;internal_dx8 //#define DIEFT_PREDEFMAX 0x00000006;internal #define DIEFT_HARDWARE 0x000000FF #define DIEFT_TYPEMASK 0x000000FF;internal #define DIEFT_FORCEFEEDBACK 0x00000100;internal #define DIEFT_FFATTACK 0x00000200 #define DIEFT_FFFADE 0x00000400 #define DIEFT_SATURATION 0x00000800 #define DIEFT_POSNEGCOEFFICIENTS 0x00001000 #define DIEFT_POSNEGSATURATION 0x00002000 #define DIEFT_DEADBAND 0x00004000 #define DIEFT_STARTDELAY 0x00008000;public_600 #define DIEFT_VALIDFLAGS 0x00007E00;internal_dx3 #define DIEFT_VALIDFLAGS 0x00007E00;internal_dx5 #define DIEFT_VALIDFLAGS 0x00007E00;internal_dx5b2 #define DIEFT_VALIDFLAGS 0x0000FE00;internal_600 #define DIEFT_GETTYPE(n) LOBYTE(n) #define DIEFT_ENUMVALID 0x040000FF;internal_500 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DI_DEGREES | 100 | * * Number of DirectInput units per degree. The naming * of the symbol is to permit the use of expressions * like "90 * " to mean "90 degrees, in * DirectInput units". * * @define DI_FFNOMINALMAX | 10000 | * * Maximum value for DirectInput force and gain values. * * For example, to set a force to half of the maximum * value, use /2. * * @define DI_SECONDS | 1000000 | * * Number of DirectInput units (microseconds) per second. * The naming * of the symbol is to permit the use of expressions * like "2 * " to mean "2 seconds, in * DirectInput units". * ****************************************************************************/ enddoc #define DI_DEGREES 100 #define DI_FFNOMINALMAX 10000 #define DI_SECONDS 1000000 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DICONSTANTFORCE | * * The structure contains * type-specific information for effects * which are marked as . * * The structure describes a constant force effect. * * A pointer to a single structure * for an effect is passed in the * field of the * structure. * * @field LONG | lMagnitude | * * The magnitude of the effect, in the range -10,0000 to +10,000. * If an envelope is * applied to this effect, then the value represents * the magnitude of the sustain. If no envelope is * applied, then the value represents the amplitude * of the entire effect. * ****************************************************************************/ enddoc typedef struct DICONSTANTFORCE { LONG lMagnitude; } DICONSTANTFORCE, *LPDICONSTANTFORCE; typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIRAMPFORCE | * * The structure contains * type-specific information for effects * which are marked as . * * The structure describes a ramp force effect. * * A pointer to a single structure * for an effect is passed in the * field of the * structure. * * Note that the for a * ramp force effect cannot be . * * @field LONG | lStart | * * The magnitude at the start of the effect, in the range * -10000 to +10000. * * @field LONG | lEnd | * * The magnitude at the end of the effect, in the range * -10000 to +10000. * ****************************************************************************/ enddoc typedef struct DIRAMPFORCE { LONG lStart; LONG lEnd; } DIRAMPFORCE, *LPDIRAMPFORCE; typedef const DIRAMPFORCE *LPCDIRAMPFORCE; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPERIODIC | * * The structure contains * type-specific information for effects * which are marked as . * * The structure describes a periodic effect. * * A pointer to a single structure * for an effect is passed in the * field of the * structure. * * @field DWORD | dwMagnitude | * * The magnitude of the effect, in the range 0 to 10,000. * If an envelope is * applied to this effect, then the value represents * the magnitude of the sustain. If no envelope is * applied, then the value represents the amplitude * of the entire effect. * * @field LONG | lOffset | * * The offset of the effect. The range of forces * generated by the effect will be * - * to * +. * * The value of the field is * also the baseline for any envelope that is applied * to the effect. * * @field DWORD | dwPhase | * * The position in the periodic effect at which * playback begins, in the range 0 to 35999. * * @field DWORD | dwPeriod | * * The period of the effect in microseconds. * ****************************************************************************/ enddoc typedef struct DIPERIODIC { DWORD dwMagnitude; LONG lOffset; DWORD dwPhase; DWORD dwPeriod; } DIPERIODIC, *LPDIPERIODIC; typedef const DIPERIODIC *LPCDIPERIODIC; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DICONDITION | * * The structure contains * type-specific information for effects * which are marked as . * * A pointer to an array of structures * for an effect is passed in the * field of the * structure. The number of * elenents in the array must be equal to * the number of axes associated with the * effect. * * @field LONG | lOffest | * * The offset for the condition, in the range * -10000 to +10000. * * Each condition interprets the offset differently; * see the comments below for additional information. * * @field LONG | lPositiveCoefficient | * * The coefficient constant on the positive * side of the offset, in the range * -10000 to +10000. * * @field LONG | lNegativeCoefficient | * * The coefficient constant on the negative * side of the offset, in the range * -10000 to +10000. * * If the device does not support separate * positive and negative coefficients, then * the value of * is ignored and * the value of * is used as both the positive and negative * coefficients. * * @field DWORD | dwPositiveSaturation | * * The maximum force output on the positive side * of the offset, in the range * 0 to 10000. * * If the device does not support force saturations, * then the value of this field is ignored. * * @field LONG | lNegativeSaturation | * * The maximum force output on the negative side * of the offset, in the range * 0 to 10000. * * If the device does not support force saturations, * then the value of this field is ignored. * * If the device does not support separate * positive and negative Saturations, then * the value of * is ignored and * the value of * is used as both the positive and negative * saturations. * * @field LONG | lDeadBand | * * The region around * where the condition is not active, in the * range 0 to 10000. * In other words, the condition is not active * between * - * and * +. * * @comm * * Different types of conditions will interpret the * parameters differently, but the basic idea is * that force resulting from a condition is equal * to A(q - q0) where A is a scaling coefficient, * q is some metric, and q0 is the neutral value * for that metric. * * The simplified formula give above must be adjusted * if a nonzero dead band is provided. If the metric * is less than * -, * then the * resulting force is given by the formula * * force = * (q - * (-)) * * Similarly, if the metric is greater than * +, * then the * resulting force is given by the formula * * force = * (q - * (+)) * * A spring condition uses axis position as the metric. * * A damper condition uses axis velocity as the metric. * ISSUE-2001/03/29-timgill Need to specify units for velocity * * An inertia condition uses axis acceleration as the metric. * ISSUE-2001/03/29-timgill Need to specify units for acceleration * ****************************************************************************/ enddoc typedef struct DICONDITION { LONG lOffset; LONG lPositiveCoefficient; LONG lNegativeCoefficient; DWORD dwPositiveSaturation; DWORD dwNegativeSaturation; LONG lDeadBand; } DICONDITION, *LPDICONDITION; typedef const DICONDITION *LPCDICONDITION; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DICUSTOMFORCE | * * The structure contains * type-specific information for effects * which are marked as . * * The structure describes a custom or user-defined * force. * * A pointer to a structure * for an effect is passed in the * field of the * structure. * * @field DWORD | cChannels | * * The number of channels (axes) affected * by this force. * * The first channel is applied to the first axis * associated with the effect, the second to the * second, and so on. If there are fewer channels * than axes, then nothing is associated with the * extra axes. * * If there is but a single channel, then * the effect will be rotated in the direction * specified by the * field of the * structure. * * If there is more than one channel, then rotation * is not allowed. * * Note that not all devices support rotation of * custom effects. * * ISSUE-2001/03/29-timgill Need to enforce the rule on channels and direction. * * @field DWORD | dwSamplePeriod | * * The sample period in microseconds at which the * effect was recorded. * * @field DWORD | cSample | * * The total number of samples in the * . It must be an * integral multiple of the . * * @field LPLONG | rglForceData | * * A pointer to an array of force values representing * the custom force. If multiple channels are provided, * then the values are interleaved. * For example, if * is 3, then the first element of the array belongs to * the first channel, the second to the second, and the * third to the third. * ****************************************************************************/ enddoc typedef struct DICUSTOMFORCE { DWORD cChannels; DWORD dwSamplePeriod; DWORD cSamples; LPLONG rglForceData; } DICUSTOMFORCE, *LPDICUSTOMFORCE; typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE; ;begin_public_900 begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags ISSUE-2001/03/29-timgill Need to be complete documentation| * @flag DIBEF_OUTERLOWENABLE | * * * Set to enable the outer layer of the Valid only for : * Enumerate all effects, * regardless of type. This flag may not be combined * with any of the other flags. * * @comm * Types: * SNAP_TO -ve spring to zero * EDGE +ve spring to zero * WALL +ve force to max, end on leaving * LIMIT +ve force to max, end on returning * * overlapping -> directional * * ? use flags to determine some behaviors (where wall ends...) * @devnote * This type of effect is new for DirectX 9.0. * ****************************************************************************/ enddoc #define DIBEF_OUTERLOWENABLE 0x00000001 #define DIBEF_INNERLOWENABLE 0x00000002 #define DIBEF_OUTERHIGHENABLE 0x00000004 #define DIBEF_INNERHIGHENABLE 0x00000008 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIBARRIERFORCE | * * The structure contains * type-specific information for effects * which are marked as . * * A pointer to an array of structures for * an effect is passed in the * field of the structure. The number of elements * in the array must be equal to the number of axes associated * with the effect. * * @field DWORD | dwBarrierFlags | * * It consists of one or more flag values. * * @field LONG | lStart | * * The position at which the region starts to be active, in the * range -10000 to +10000. (The region is active at this point.) * * @field LONG | lEnd | * * The position at which the region ends being active, in the * range -10000 to +10000. (The region is active at this point.) * This value must be more positive than . * * @field DWORD | dwOuterThickness | * * The width in device units of the outer layer of the barrier. * * @field DWORD | dwOuterSaturation | * * The maximum force output used to generate the outer layer of * the boundary, in the range 0 to 10000. * * If the device does not support force saturations, * then the value of this field is ignored. * * @field DWORD | dwOuterCoefficient | * * The coefficient constant for the outer layer of the boundary, * in the range 0 to 10000. * The sign of the coefficient used is determined by the * semantics of the barrier being created. * * @field DWORD | dwInnerThickness | * * The width in device units of the inner layer of the barrier. * * @field DWORD | dwInnerSaturation | * * The maximum force output used to generate the inner layer of * the boundary, in the range 0 to 10000. * This value is ignored if * is greater than . * * If the device does not support force saturations, * then the value of this field is ignored. * * @field DWORD | dwInnerCoefficient | * * The coefficient constant for the inner layer of the boundary, * in the range 0 to 10000. * The sign of the coefficient used is determined by the * semantics of the barrier being created. * The semantics of some barriers imply that this value be treated * as zero. * * @comm * Types: * SNAP_TO -ve spring to zero * EDGE +ve spring to zero * WALL +ve force to max, end on leaving * LIMIT +ve force to max, end on returning * * overlapping -> directional * * ? use flags to determine some behaviors (where wall ends...) * @devnote * This type of effect is new for DirectX 9.0. * ****************************************************************************/ enddoc typedef struct DIBARRIERFORCE { DWORD dwBarrierFlags; LONG lStart; LONG lEnd; DWORD dwOuterThickness; DWORD dwOuterSaturation; DWORD dwOuterCoefficient; DWORD dwInnerThickness; DWORD dwInnerSaturation; DWORD dwInnerCoefficient; } DIBARRIERFORCE, *LPDIBARRIERFORCE; typedef const DIBARRIERFORCE *LPCDIBARRIERFORCE; ;end_public_900 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIENVELOPE | * * The structure is used by the * structure to specify the optional * envelope parameters for an effect. * * @field DWORD | dwSize | * * Specifies the size, in bytes, of the structure. * This field "must" be initialized by the application * before passing it to any DirectInput interface. * * @field DWORD | dwAttackLevel | * * Amplitude for the start of the envelope, relative * to the baseline, in the range 0 to 10000. * If the effect's type-specific data does not specify * a baseline, then the amplitude is relative to zero. * * @field DWORD | dwAttackTime | * * The rise time, in microseconds, to reach the sustain level. * * @field DWORD | dwFadeLevel | * * Amplitude for the end of the envelope, relative * to the baseline, in the range 0 to 10000. * If the effect's type-specific data does not specify * a baseline, then the amplitude is relative to zero. * * @field DWORD | dwFadeTime | * * The fade time, in microseconds, to reach the fade level. * ****************************************************************************/ enddoc typedef struct DIENVELOPE { DWORD dwSize; /* sizeof(DIENVELOPE) */ DWORD dwAttackLevel; DWORD dwAttackTime; /* Microseconds */ DWORD dwFadeLevel; DWORD dwFadeTime; /* Microseconds */ } DIENVELOPE, *LPDIENVELOPE; typedef const DIENVELOPE *LPCDIENVELOPE; ;begin_public_900 /**************************************************************************** * * @doc EXTERNAL * * @struct DIREGION | * * The structure is used by the * structure to specify the optional * region parameters for an effect. * * @field DWORD | dwSize | * * Specifies the size, in bytes, of the structure. * This field "must" be initialized by the application * before passing it to any DirectInput interface. * * @field LONG | lStart | * * The position at which the region starts to be active, in the * range -10000 to +10000. (The region is active at this point.) * * @field LONG | lEnd | * * The position at which the region ends being active, in the * range -10000 to +10000. (The region is active at this point.) * This value must be more positive than . * * @field LONG | lDirection | * * A containing either cartesian coordinates or polar * coordinates. The flags , * and * determine the semantics of the value. * * If cartesian, then the value * is associated with the corresponding axis in * . * * If polar, then the value is an angle * measured in hundredths of degrees. * See the definition of for details. * * * @comm * * If an effect has a multidimensional region, the effect is only * active when the position reported by all axes falls within the * area/space/segment defining the region. * * If an effect is defined on an axis but a region is not, the axis * has an implicite region of with = -10,000, * = 10,000 and = 0. * * If the DIEFF_REGIONINVERT flag is used, the associated effect * inactive within this region but active outside. * * @devnote * This parameter is new for DirectX 9.0. * ****************************************************************************/ enddoc typedef struct DIREGION { DWORD dwSize; LONG lStart; LONG lEnd; LONG lDirection; } DIREGION, *LPDIREGION; ;end_public_900 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIEFFECT | * * The structure is used by the * method * to initialize a new object. * It is also used by . * * All magnitude and gain values used by DirectInput * are uniform and linear across the range. For example, * an effect is played at magnitude will be exactly * half as strong as an effect played at magnitude . * Any nonlinearity in the physical device will be * handled out by the device driver. * * @field DWORD | dwSize | * * Specifies the size, in bytes, of the structure. * This field "must" be initialized by the application * before passing it to any DirectInput interface. * * @field DWORD | dwFlags | * * Flags associated with the effect. * * It consists of one or more flag values. * * @field DWORD | dwDuration | * * The total duration of the effect in microseconds. * * If this value is , then the effect * has infinite duration. If an envelope has been * applied to the effect, then the attack will be * applied, followed by an infinite sustain. * * @field DWORD | dwSamplePeriod | * * The period at which the device should play back * the effect, in microseconds. * A value of zero indicates that the * default playback sample rate should be used. * * If the device is not capable of playing back the * effect at the specified rate, it will choose the * supported rate that is closest to the requested * valid. * * Setting a custom * can be used for special effects. For example, * playing a sine wave at an artificially large * sample period results in a rougher texture. * * @field DWORD | dwGain | * * The gain to be applied to the effect, in the * range 0 to 10,000. The gain is a scaling factor * applied to all magnitudes of the effect and its * envelope. * * @field DWORD | dwTriggerButton | * * The identifier or offset of the button to be used * to trigger playback of the effect. * The flags * and * determines the semantics of the value. * * If this field is set to , * then no trigger button is associated with the effect. * * @field DWORD | dwTriggerRepeatInterval | * * The delay, in microseconds, before restarting the * effect when triggered by a button press. * * If this field is set to then the * effect does not auto-repeat. * * @field DWORD | cAxes | * * Number of axes involved in the effect. * This field must be filled in by the caller if * changing/setting the axis list or the direction list. * * The number of axes for an effect cannot be changed * once it has been set. * * @field LPDWORD | rgdwAxes | * * Pointer to a array (of * elements) containing identifiers * or offsets identifying the axes to which the effect * is to be applied. * The flags * and * determines the semantics of the values in the array. * * The list of axes associated with an effect cannot * be changed once it has been set. * * At most 32 axes can be associated with a single effect. * * @field LPLONG | rglDirection | * * Pointer to a array (of * elements) containing either * cartesian coordinates or polar coordinates. * The flags * and * determines the semantics of the values in the array. * * If cartesian, then each value in * is associated with the corresponding axis in * . * * If polar, then the angle is measured in hundredths of * degrees from the (0, -1) direction, rotated in the * direction of (1, 0). * The last field (which would otherwise be the magnitude) * is ignored. * * This particular choice of zero seems bizarre until you * apply it to the common scenario of X and Y, in which case * a direction of zero means "north" and a direction of * 9000 means "east". Note that these values are identical * to POV values. * * If spherical, then the first angle is * measured in hundredths of degrees from the * (1, 0) direction, rotated in the direction of (0, 1). * The second angle (if the number of axes is three or more) * is measured in hundredths of degrees * towards (0, 0, 1). * The third angle (if the number of axes is four or more) * is measured in * hundredths of degrees towards (0, 0, 0, 1), and so on. * The last field (which would otherwise be the magnitude) * is ignored. * * In particular, if the two axes are X and Y, * then a value of zero indicates "along the positive X axis" * and a value of 9000 indicates "along the positive Y axis". * * Note also that the array must * contain entries, even if polar * or spherical * coordinates are given. The last element in the * array in these cases * must be zero. * (It will be used in future versions of DirectInput.) * * @field LPDIENVELOPE | lpEnvelope | * * Optional pointer to a structure * that describes the envelope to be used by this * effect. Note that not all effect types use * envelopes. If no envelope is to be applied, * then the field should be set to . * * @field DWORD | cbTypeSpecificParams | * * Number of bytes of additional type-specific * parameters for the corresponding effect type. * * @field LPVOID | lpvTypeSpecificParams | * * Pointer to type-specific parameters, or * if there are no type-specific parameters. * * If the effect is of type , then * this field contains a pointer to an array of * * structures which define the parameters for the * condition. * * If the effect is of type , then * this field contains a pointer to a * * structure which defines the parameters for the * custom force. * * If the effect is of type , then * this field contains a pointer to a * * structure which defines the parameters for the * effect. * * If the effect is of type , then * this field contains a pointer to a * * structure which defines the parameters for the * constant force. * * If the effect is of type , then * this field contains a pointer to a * * structure which defines the parameters for the * ramp force. * ;begin_public_900 * If the effect is of type , then this * field contains a pointer to an array of * structures which define the parameters for the effect. * * This type is new for DirectX 9.0. * ;end_public_900 * @field DWORD | dwStartDelay | * * Amount of time (in microseconds) the device should wait * after a call before * physically playing the effect. If this value is zero, * then effect playback begins immediately. * * This field is new for DirectX 6.1a. * ;begin_public_900 * @field DWORD | cRegions | * * Number of regions defined for the effect. It is an error * to define more regions than axes. Since axes involved in * a region must be orthogonal, it is an error to define more * than three axes in a region. * * This field is new for DirectX 9.0. * * @field LPDIREGION | rgRegions | * * Pointer to a array (of * elements) containing the region * definition for the effect. The region elements are matched * to the elements so axes to which * regions are to be applied must be defined first. For * example if a vibration is to be applied to all force * feedback axes if the X/Y position of the joystick is inside * a particular region then the X and Y axes must be the first * axes listed in . * * This field is new for DirectX 9.0. * ;end_public_900 ****************************************************************************/ enddoc ;begin_public_600 /* This structure is defined for DirectX 5.0 compatibility */ typedef struct DIEFFECT_DX5 { DWORD dwSize; /* sizeof(DIEFFECT_DX5) */ DWORD dwFlags; /* DIEFF_* */ DWORD dwDuration; /* Microseconds */ DWORD dwSamplePeriod; /* Microseconds */ DWORD dwGain; DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ DWORD dwTriggerRepeatInterval; /* Microseconds */ DWORD cAxes; /* Number of axes */ LPDWORD rgdwAxes; /* Array of axes */ LPLONG rglDirection; /* Array of directions */ LPDIENVELOPE lpEnvelope; /* Optional */ DWORD cbTypeSpecificParams; /* Size of params */ LPVOID lpvTypeSpecificParams; /* Pointer to params */ } DIEFFECT_DX5, *LPDIEFFECT_DX5; typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5; ;end_public_600 ;begin_public_900 /* This structure is defined for DirectX 6.0 compatibility */ typedef struct DIEFFECT_DX6 { DWORD dwSize; /* sizeof(DIEFFECT_DX6) */ DWORD dwFlags; /* DIEFF_* */ DWORD dwDuration; /* Microseconds */ DWORD dwSamplePeriod; /* Microseconds */ DWORD dwGain; DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ DWORD dwTriggerRepeatInterval; /* Microseconds */ DWORD cAxes; /* Number of axes */ LPDWORD rgdwAxes; /* Array of axes */ LPLONG rglDirection; /* Array of directions */ LPDIENVELOPE lpEnvelope; /* Optional */ DWORD cbTypeSpecificParams; /* Size of params */ LPVOID lpvTypeSpecificParams; /* Pointer to params */ ;begin_if_(DIRECTINPUT_VERSION)_600 DWORD dwStartDelay; /* Microseconds */ ;end } DIEFFECT_DX6, *LPDIEFFECT_DX6; typedef const DIEFFECT_DX6 *LPCDIEFFECT_DX6; ;end_public_900 typedef struct DIEFFECT { DWORD dwSize; /* sizeof(DIEFFECT) */ DWORD dwFlags; /* DIEFF_* */ DWORD dwDuration; /* Microseconds */ DWORD dwSamplePeriod; /* Microseconds */ DWORD dwGain; DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ DWORD dwTriggerRepeatInterval; /* Microseconds */ DWORD cAxes; /* Number of axes */ LPDWORD rgdwAxes; /* Array of axes */ LPLONG rglDirection; /* Array of directions */ LPDIENVELOPE lpEnvelope; /* Optional */ DWORD cbTypeSpecificParams; /* Size of params */ LPVOID lpvTypeSpecificParams; /* Pointer to params */ ;begin_if_(DIRECTINPUT_VERSION)_600 DWORD dwStartDelay; /* Microseconds */ ;end ;begin_if_(DIRECTINPUT_VERSION)_900 DWORD cRegions; /* Number of regions */ LPDIREGION rgRegion; /* Array of Regions */ ;end } DIEFFECT, *LPDIEFFECT; #if (DIRECTINPUT_VERSION < 900) ;public_900 typedef DIEFFECT DIEFFECT_DX6; typedef LPDIEFFECT LPDIEFFECT_DX6; #endif ;public_900 typedef const DIEFFECT *LPCDIEFFECT; ;begin_internal_600 /* * Name for the latest structures, in places where we specifically care. */ #if (DIRECTINPUT_VERSION >= 900) typedef DIEFFECT DIEFFECT_DX9; typedef DIEFFECT *LPDIEFFECT_DX9; #else typedef DIEFFECT DIEFFECT_DX6; typedef DIEFFECT *LPDIEFFECT_DX6; #endif BOOL static __inline IsValidSizeDIEFFECT(DWORD cb) { return cb == sizeof(DIEFFECT_DX6) ;begin_if_(DIRECTINPUT_VERSION)_900 || cb == sizeof(DIEFFECT_DX9) ;end || cb == sizeof(DIEFFECT_DX5); } ;end_internal_600 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIFILEEFFECT | * * The structure is used by the * and * methods. * These methods are new for DirectInput7. * * The structure abstracts the information * needed in order to create/store a pre-authored effect. * * This structure is new for Dx7. * * * @field DWORD | dwSize | * * Specifies the size, in bytes, of the structure. * This field "must" be initialized by the application * before passing it to any DirectInput interface. * * @field GUID | GuidEffect | * * The GUID to uniquely identify the effect. * * @field LPDIEFFECT | lpDiEffect | * * Address of the structure. * The structure contains pointer to other * arrays and structures. If you plan to cache the * structure copy it very carefully. * * @field CHAR | szFriendlyName | * * A effect file may have multiple effects of the same type. * The FriendlyName field can be used to distuingish the effects. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_700 #ifndef DIJ_RINGZERO typedef struct DIFILEEFFECT{ DWORD dwSize; GUID GuidEffect; LPCDIEFFECT lpDiEffect; CHAR szFriendlyName[MAX_PATH]; }DIFILEEFFECT, *LPDIFILEEFFECT; typedef const DIFILEEFFECT *LPCDIFILEEFFECT; typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); #endif /* DIJ_RINGZERO */ ;end ;internal #define DIEFFECT_MAXAXES 32 ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIEFF_OBJECTIDS | 0x00000001 | * * Value for the field of the * structure indicating that the * values of and * are object identifiers * as obtained via . * * @define DIEFF_OBJECTOFFSETS | 0x00000002 | * * Value for the field of the * structure indicating that the * values of and * are data format offsets, * relative to the data format selected by * as obtained via . * * @define DIEFF_CARTESIAN | 0x00000010 | * * Value for the field of the * structure indicating that the * values of * are to be interpreted * as cartesian coordinates. * * @define DIEFF_POLAR | 0x00000020 | * * Value for the field of the * structure indicating that the * values of * are to be interpreted * as polar coordinates. * * Polar coordinates are valid only if the number * of axes is exactly two. If the two axes are * X and Y (respectively), then a direction of zero * corresponds to due north, and angles increase * clockwise. * * @define DIEFF_SPHERICAL | 0x00000040 | * * Value for the field of the * structure indicating that the * values of * are to be interpreted * as spherical coordinates. * * Let the axes of the effect be named X1, X2, etc. * Spherical coordinates begin with a vector along * the positive X1 axis. The vector is then rotated * in the direction of the positive X2 axis by * the first angle, then in the direction of the * positive X3 axis by the second angle, and so on. * ;begin_public_900 * @define DIEFF_REGIONINVERT | 0x00000100 | * * Value for the field of the * structure indicating that the effect * should only be active outside the area described by * . * * This flag is new for DirectX 9.0. * * @define DIEFF_REGIONALLAXES | 0x00000200 | * * Value for the field of the * structure indicating that orthogonal * input only axes should not be ignored. * By default, values of a region relating to axes * for which this device does not support force feedback * should be ignored so that the presence of non-force * feedback axes does not alter the playing of effects. * * This flag is new for DirectX 9.0. * * @define DIEFF_REGIONELIPLTICAL | 0x00000400 | * * Value for the field of the * structure indicating that the * values of are to be interpreted * as bounding an elptical region. * * If the region is only being evaluated in one dimension, this * flag is ignored. * If the region is being evaluated in two dimensions, the * * This flag is new for DirectX 9.0. * ;end_public_900 ****************************************************************************/ enddoc #define DIEFF_OBJECTIDS 0x00000001 #define DIEFF_OBJECTOFFSETS 0x00000002 #define DIEFF_OBJECTMASK 0x00000003;internal #define DIEFF_CARTESIAN 0x00000010 #define DIEFF_POLAR 0x00000020 #define DIEFF_SPHERICAL 0x00000040 #define DIEFF_ANGULAR 0x00000060;internal #define DIEFF_COORDMASK 0x00000070;internal #define DIEFF_REGIONINVERT 0x00000100;public_900 #define DIEFF_REGIONALLAXES 0x00000200;public_900 #define DIEFF_REGIONELIPLTICAL 0x00000400;public_900 #define DIEFF_REGIONCARTESIAN 0x00001000;public_900 #define DIEFF_REGIONPOLAR 0x00002000;public_900 #define DIEFF_REGIONSPHERICAL 0x00004000;public_900 #define DIEFF_REGIONANGULAR 0x00006000;internal #define DIEFF_REGIONCOORDMASK 0x00007000;internal ;begin_internal #define DIEFF_VALID 0x00000073 ;begin_if_(DIRECTINPUT_VERSION)_900 #define DIEFF_VALID_DX5 0x00000073 #undef DIEFF_VALID #define DIEFF_VALID 0x00007073 ;end ;end_internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIEP_DURATION | 0x00000001 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * @define DIEP_SAMPLEPERIOD | 0x00000002 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * @define DIEP_GAIN | 0x00000004 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * @define DIEP_TRIGGERBUTTON | 0x00000008 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * @define DIEP_TRIGGERREPEATINTERVAL | 0x00000010 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * @define DIEP_AXES | 0x00000020 | * * Parameter to * or * indicating * that the and * fields contain * data or should receive data. * * For , the * field on entry contains the * sizes (in s) of the buffer pointed to * by the field. * If the buffer is too small, then * * returns and sets * to the necessary size of the buffer. * * @define DIEP_DIRECTION | 0x00000040 | * * Parameter to * or * indicating * that the and * fields contain * data or should receive data. * * For , the * field on entry contains the * size (in s) of the buffer pointed to * by the field. * If the buffer is too small, then * * returns and sets * to the necessary size of the buffer. * * The field specifies * (via or ) * the coordinate system in which the values should * be interpreted. * * @define DIEP_ENVELOPE | 0x00000080 | * * Parameter to * or * indicating * that the field points to * a structure which contains * data or should receive data. * * @define DIEP_TYPESPECIFICPARAMS | 0x00000100 | * * Parameter to * or * indicating * that the and * fields contain * data or should receive data. * * Note that the buffer pointed to by * must remain valid * for the lifetime of the effect (or until the * type-specific parameter is set to a new value). * DirectInput does not make a private copy of the * buffer. * * When retrieving the type-specific parameters, DirectInput * merely returns the pointers as originally passed to * * (or implicitly via ) * * @define DIEP_STARTDELAY | 0x00000200 | * * Parameter to * or * indicating * that the field contains * data or should receive data. * * This flag is new for DirectX 6.1a. * * @define DIEP_REGION | 0x00000400 | * * Parameter to * or * indicating * that the and * fields contain * data or should receive data. * * For , the * field on entry contains the * size (in s) of the buffer pointed to * by the field. * If the buffer is too small, then * * returns and sets * to the necessary size of the buffer. * * The field specifies * (via the flags) how the values * stored in should be interpreted. * * This flag is new for DirectX 9.0. * * @define DIEP_ALLPARAMS | 0x000007FF | * * The union of all other flags, indicating that * all fields of the structure are valid * or are being requested. * * If the is set to a value less * than 0x0800, then the value of this macro is * , omitting flags not supported by earlier * versions of DirectX. * * If the is set to a value less * than 0x0600, then the value of this macro is * , omitting flags not supported by earlier * versions of DirectX. * * @define DIEP_START | 0x20000000 | * * Additional flag which may be passed to * to indicate that * after the parameters of the effect have been updated, * the effect is to be restarted from the beginning. * * Setting this flag is equivalent to immediately calling * (1, 0) after a successful * call to * . * * Note that the flag overrides the * flag. * * @define DIEP_NORESTART | 0x40000000 | * * Additional flag which may be passed to * to indicate that * if the hardware cannot update the parameters while the * effect is playing, it should return * without updating the parameters of the effect. * * If this flag is not specified, then the effect device * driver is permitted to restart the effect if doing so * is necessary in order to change the specified parameters. * * Note that the and * flags override the * flag. * * @define DIEP_NODOWNLOAD | 0x80000000 | * * Additional flag which may be passed to * to suppress the * automatic that is * normally performed after the parameters are updated. * * @define DIEB_NOTRIGGER | 0xFFFFFFFF | * * A special value for the field * of the structure, indicating that the effect * is not associated with a button. * ****************************************************************************/ /* * Note! If you add new effect parameters, you must adjust CDIEff_Reset * to initialize them to sane default values, or to set the bit in * diepUnset to make sure they get set eventually. * ****************************************************************************/ enddoc #define DIEP_DURATION 0x00000001 #define DIEP_SAMPLEPERIOD 0x00000002 #define DIEP_GAIN 0x00000004 #define DIEP_TRIGGERBUTTON 0x00000008 #define DIEP_TRIGGERREPEATINTERVAL 0x00000010 #define DIEP_AXES 0x00000020 #define DIEP_DIRECTION 0x00000040 #define DIEP_ENVELOPE 0x00000080 #define DIEP_TYPESPECIFICPARAMS 0x00000100 #if(DIRECTINPUT_VERSION >= 0x0600) ;public_600 #define DIEP_STARTDELAY 0x00000200;public_600 #if(DIRECTINPUT_VERSION >= 0x0900) ;public_900 #define DIEP_REGION 0x00000400;public_900 #endif ;public_900 #endif ;public_900 ;public_900 #if(DIRECTINPUT_VERSION >= 0x0600) ;public_900 #define DIEP_ALLPARAMS_DX5 0x000001FF;public_600 # if(DIRECTINPUT_VERSION >= 0x0900) ;public_900 #define DIEP_ALLPARAMS_DX6 0x000003FF;public_900 #define DIEP_ALLPARAMS 0x000007FF;public_900 # else ;public_900 #define DIEP_ALLPARAMS 0x000003FF;public_600 # endif ;public_900 #else /* DIRECTINPUT_VERSION < 0x0600 */ ;public_600 #define DIEP_ALLPARAMS 0x000001FF #endif /* DIRECTINPUT_VERSION < 0x0600 */ ;public_600 ;public_900 #define DIEP_START 0x20000000 #define DIEP_NORESTART 0x40000000 #define DIEP_NODOWNLOAD 0x80000000 #define DIEP_GETVALID 0x000001FF;internal_dx5 #define DIEP_SETVALID 0xE00001FF;internal_dx5 #define DIEP_GETVALID_DX5 0x000001FF;internal_600 #define DIEP_SETVALID_DX5 0xE00001FF;internal_600 #define DIEP_GETVALID 0x000003FF;internal_dx6 #define DIEP_SETVALID 0xE00003FF;internal_dx6 #define DIEP_GETVALID 0x000003FF;internal_700 #define DIEP_SETVALID 0xE00003FF;internal_700 #define DIEP_GETVALID 0x000007FF;internal_900 #define DIEP_SETVALID 0xE00007FF;internal_900 #define DIEP_USESOBJECTS 0x00000028;internal_500 #define DIEP_USESCOORDS 0x00000040;internal_500 #define DIEB_NOTRIGGER 0xFFFFFFFF begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIES_SOLO | 0x00000001 | * * Parameter to * indicating * that all other effects on the device should be * stopped before the specified effect is played. * If this flag is omitted, then the effect is * mixed with existing effects already started * on the device. * * @define DIES_NODOWNLOAD | 0x80000000 | * * Parameter to * indicating * that if the effect has not been downloaded, * then the attempt to play the effect should * fail with the error code . * If this flag is omitted, then the effect * will be downloaded if necessary. * ****************************************************************************/ enddoc #define DIES_SOLO 0x00000001 #define DIES_NODOWNLOAD 0x80000000 #define DIES_VALID 0x80000001;internal_500 #define DIES_DRIVER 0x00000001;internal_500 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIEGES_PLAYING | 0x00000001 | * * Status code produced by * indicating * that the effect is still playing. * * @define DIEGES_EMULATED | 0x00000002 | * * Status code produced by * indicating * that the effect is emulated. * ****************************************************************************/ enddoc #define DIEGES_PLAYING 0x00000001 #define DIEGES_EMULATED 0x00000002 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIEFFESCAPE | * * Structure used by the * method * to pass hardware-specific data directly to the device driver. * * Since each driver implements different escapes, * it is the application's responsibility to ensure that * it is talking to the correct driver by comparing the * in the * structure against the * value the application is expecting. * * @field DWORD | dwSize | * * Size of the structure in bytes. * * @field DWORD | dwCommand | * * Driver-specific command number. * Consult the driver * documentation for a list of valid commands. * * @field LPVOID | lpvInBuffer | * * Points to a buffer containing the data required to perform * the operation. * * @field DWORD | cbInBuffer | * * Specifies the size, in bytes, of the * buffer. * * @field LPVOID | lpvOutBuffer | * * Points to a buffer in which the operation's output data is * returned. * * @field DWORD | cbOutBuffer | * * On entry, specifies the size, in bytes, of the * * buffer. On exit, specifies the number of bytes * actually produced by the command. * ****************************************************************************/ enddoc typedef struct DIEFFESCAPE { DWORD dwSize; DWORD dwCommand; LPVOID lpvInBuffer; DWORD cbInBuffer; LPVOID lpvOutBuffer; DWORD cbOutBuffer; } DIEFFESCAPE, *LPDIEFFESCAPE; #ifndef DIJ_RINGZERO begin_interface(IDirectInputEffect) begin_methods() declare_method(Initialize, HINSTANCE, DWORD, REFGUID) declare_method(GetEffectGuid, LPGUID) declare_method(GetParameters, LPDIEFFECT, DWORD) declare_method(SetParameters, LPCDIEFFECT, DWORD) declare_method(Start, DWORD, DWORD) declare_method(Stop) declare_method(GetEffectStatus, LPDWORD) declare_method(Download) declare_method(Unload) declare_method(Escape, LPDIEFFESCAPE) end_methods() end_interface() #endif /* DIJ_RINGZERO */ ;end /**************************************************************************** * * IDirectInputDevice * ****************************************************************************/ begindoc /**************************************************************************** * * @doc EXTERNAL * * @topic DirectInput device type description codes | * * The least-significant byte of the device type description code * specifies the device type. * DInput 7 and below use one set of values DInput 8 uses a * different set. * * DInput 7 and earlier types: * * : A device which does not fall into * any of the following categories. * * : A mouse or mouse-like device (such as * a trackball). * * : A keyboard or keyboard-like device. * * : A joystick or joystick-like device (such * as a steering wheel). * * DInput 8 types: * * : A device which does not fall into * any of the following categories. * * : A mouse or mouse-like device (such as * a trackball). * * : A keyboard or keyboard-like device. * * : A generic joystick device. * * : A gamepad. * * : Some form of steering wheel and * associated controls. * * : Some form of flight controller. * * : A device optimized for control from * a first person perspective. * * : A device which reports position * in terms of screen coordinates that would not normally control * the system mouse pointer. * * : A remote control device. * * : A controller used to modify a real * world device from within the context of the application. * * : A device with functionality, * unsuitable for the main control of an application but specialized * towards control a particular type of action. * * * The next-significant byte specifies the device subtype. * DInput 7 and below use one set of values DInput 8 uses a * different set. * * DInput 7 and earlier subtypes: * For mouse type devices, the following subtypes are defined: * * : The subtype could not be * determined. * * : A traditional mouse. * * : A fingerstick. * * : The device is a touchpad. * * : The device is a trackball. * * For keyboard type devices, the following subtypes are defined: * * : IBM PC/XT 83-key keyboard. * * : Olivetti 102-key keyboard. * * : IBM PC/AT 84-key keyboard. * * : IBM PC Enhanced 101/102-key * or Microsoft Natural keyboard. * * : Nokia 1050 keyboard. * * : Nokia 9140 keyboard. * * : Japanese NEC PC98 keyboard. * * : * Japanese NEC PC98 laptop keyboard. * * : * Japanese NEC PC98 106-key keyboard. * * : Japanese 106-key keyboard. * * : Japanese AX keyboard. * * : Japanese J3100 keyboard. * ;begin_public_500 * For joystick type devices, in DInput versions 5 to 7, the * following subtypes are defined: * * : The subtype could not be * determined. * * : A traditional joystick. * * : A joystick optimized for * flight simulation. * * : A joystick whose primary * purpose is to provide button input. * * : A joystick optimized for * yaw control. * * : A joystick optimized for * use as a steering wheel. * * : A joystick designed as a * head-mounted tracking device. * ;end_public_500 ;begin_public_800 * * DInput 8 device subtypes: * For mouse type devices, the following subtypes are defined: * * : The subtype could not be * determined. * * : A traditional mouse. * * : A fingerstick. * * : The device is a touchpad. * * : The device is a trackball. * * : A mouse reporting absolute * axis values. (Note, there is no coresponding value in previous * versions.) * * For keyboard type devices, the following subtypes are defined: * * : IBM PC/XT 83-key keyboard. * * : Olivetti 102-key keyboard. * * : IBM PC/AT 84-key keyboard. * * : IBM PC Enhanced 101/102-key * or Microsoft Natural keyboard. * * : Nokia 1050 keyboard. * * : Nokia 9140 keyboard. * * : Japanese NEC PC98 keyboard. * * : * Japanese NEC PC98 laptop keyboard. * * : * Japanese NEC PC98 106-key keyboard. * * : Japanese 106-key keyboard. * * : Japanese AX keyboard. * * : Japanese J3100 keyboard. * * For joystick type devices, following subtypes are defined: * * : A joystick which does not provide * the minimal semantic mapper joystick device capabilities. * * : A joystick which provides at least * the minimal semantic mapper joystick device capabilities. * * For gamepad type devices, following subtypes are defined: * * : A gamepad which does not provide * the minimal semantic mapper gamepad device capabilities. * * : A gamepad which provides at least * the minimal semantic mapper gamepad device capabilities. * * : A gamepad which can report X and Y axes * based upon roll and pitch of the gamepad. * * * For driving type devices, following subtypes are defined: * * : A device with a steering wheel that * does not have the minimal semantic mapper wheel device capabilities. * Note, this device could be a steering wheel and nothing else or it * could be one button short of the minimum. * * : A steering wheel which * provides at least the minimal semantic mapper wheel device * capabilities including accelleration and brake pedals combined in * a single axis. * * : A steering wheel which provides * at least the minimal semantic mapper wheel device capabilities * including separate accelleration and brake pedals. * * : A steering wheel which provides * at least the minimal semantic mapper wheel device capabilities * including separate accelleration, brake and clutch pedals. * * : A hand held steering device which * provides at least the minimal semantic mapper wheel device * capabilities. * * * For flight type devices, following subtypes are defined: * * : A flight device that does not have * the minimal semantic mapper flight device capabilities. * * : A flight stick that has at least the * minimal semantic mapper flight device capabilities. * * : A flight yoke that has at least the * minimal semantic mapper flight device capabilities. * * : A flight device based on a model aircraft * remote control that has at least the minimal semantic mapper * flight device capabilities. * * * For first person type devices, following subtypes are defined: * * : A first person device which does * not provide the minimal semantic mapper device capabilities. * Note the is no spec for this ;Internal * * : A device which provides the * minimal semantic mapper device capabilities and is known to be * suitable for first person control but has not been classified * further. * * : A device which provides the * minimal semantic mapper device capabilities and has both * rotational and translational axes in all three orthogonal planes. * * : A device which provides the * minimal semantic mapper device capabilities and has been designed * specifically to suit first person shooter games. * * * For screen pointer type devices, following subtypes are defined: * * : An unknown form of screen pointing * device. * * : A light gun. * * : A light pen. * * : A touch screen. * * * For remote control type devices no subtypes are defined except: * * * * For device control type devices, following subtypes are defined: * * : An unknown form of device control. * * : A control used to make * communications selections. * * * For supplemental type devices, following subtypes are defined: * * : An unknown form of supplemental * device. The device objects should be examined to determine what * it should be used for. * * : A device designed to * be used with the player's second (usually left) hand for controls * beyond the primary game play actions. * * : A device reporting head * motions in terms of yaw, pitch and roll. * * : A device reporting hand * motions in terms of yaw, pitch and roll. * * : A device reporting gear * selection of a shift stick using only button states. * * : A device reporting gear * selection of a shift stick using an axis. * * : A device with the primary * function of reporting a single throttle value. Note it may have * other controls such as buttons, dials or hat switches. * * : A device with the primary * function of reporting at least two throttle values. Note it may * have other controls such as buttons, dials or hat switches. * * : A device with the primary * function of reporting accelleration and brake pedal values through * a single axis. Although unlikely, it may have other controls. * * : A device with the primary * function of reporting accelleration and brake pedal values using * separate axes. Although unlikely, it may have other controls. * * : A device with the primary * function of reporting accelleration, brake and clutch pedal values * using separate axes. Although unlikely, it may have other controls. * * : A device with the primary * function of reporting a rudder pedal value. Although unlikely, * it may have other controls. * ;end_public_800 ;begin_dx3 * The high-order word of the device type description code * is reserved for future use. ;end_dx3 ;begin_public_500 * The high-order word of the device type description code * contains flags which further identify the device. * * : The device uses the * Human Input Device (HID) protocol. ;end_public_500 * * @xref , * . * * @func BYTE | GET_DIDEVICE_TYPE | * * Extracts the device type code from a * device type description code. * * @parm DWORD | dwDevType | * * DirectInput device type description code. * * @xref "DirectInput device type description codes". * * @func BYTE | GET_DIDEVICE_SUBTYPE | * * Extracts the device subtype code from a * device type description code. Note that the interpretation * of the subtype code depends on the device primary type. * * @parm DWORD | dwDevType | * * DirectInput device type description code. * * @xref "DirectInput device type description codes". * ****************************************************************************/ enddoc #if DIRECTINPUT_VERSION <= 0x700 ;public_800 #define DIDEVTYPE_DEVICE 1 #define DIDEVTYPE_MOUSE 2 #define DIDEVTYPE_KEYBOARD 3 #define DIDEVTYPE_JOYSTICK 4 #define DIDEVTYPE_MAX 5 ;internal ;begin_public_800 #else #define DI8DEVCLASS_ALL 0 #define DI8DEVCLASS_DEVICE 1 #define DI8DEVCLASS_POINTER 2 #define DI8DEVCLASS_KEYBOARD 3 #define DI8DEVCLASS_GAMECTRL 4 #define DI8DEVCLASS_MAX 5 ;internal #define DI8DEVTYPE_MIN 0x11 ;internal #define DI8DEVTYPE_DEVICE 0x11 #define DI8DEVTYPE_MOUSE 0x12 #define DI8DEVTYPE_KEYBOARD 0x13 #define DI8DEVTYPE_GAMEMIN 0x14 ;internal #define DI8DEVTYPE_JOYSTICK 0x14 #define DI8DEVTYPE_GAMEPAD 0x15 #define DI8DEVTYPE_DRIVING 0x16 #define DI8DEVTYPE_FLIGHT 0x17 #define DI8DEVTYPE_1STPERSON 0x18 #define DI8DEVTYPE_GAMEMAX 0x19 ;internal #define DI8DEVTYPE_DEVICECTRL 0x19 #define DI8DEVTYPE_SCREENPOINTER 0x1A #define DI8DEVTYPE_REMOTE 0x1B #define DI8DEVTYPE_SUPPLEMENTAL 0x1C #define DI8DEVTYPE_MAX 0x1D ;internal #endif /* DIRECTINPUT_VERSION <= 0x700 */ ;end_public_800 #define DIDEVTYPE_TYPEMASK 0x000000FF ;internal #define DIDEVTYPE_SUBTYPEMASK 0x0000FF00 ;internal #define DIDEVTYPE_HID 0x00010000 ;public_500 #define DIDEVTYPE_ENUMMASK 0xFFFFFF00 ;internal #define DIDEVTYPE_ENUMVALID 0x00010000 ;internal #define DIDEVTYPE_RANDOM 0x80000000 ;internal #if DIRECTINPUT_VERSION <= 0x700 ;public_800 #define DIDEVTYPEMOUSE_UNKNOWN 1 #define DIDEVTYPEMOUSE_TRADITIONAL 2 #define DIDEVTYPEMOUSE_FINGERSTICK 3 #define DIDEVTYPEMOUSE_TOUCHPAD 4 #define DIDEVTYPEMOUSE_TRACKBALL 5 #define DIDEVTYPEKEYBOARD_UNKNOWN 0;public_500 #define DIDEVTYPEKEYBOARD_PCXT 1 #define DIDEVTYPEKEYBOARD_OLIVETTI 2 #define DIDEVTYPEKEYBOARD_PCAT 3 #define DIDEVTYPEKEYBOARD_PCENH 4 #define DIDEVTYPEKEYBOARD_NOKIA1050 5 #define DIDEVTYPEKEYBOARD_NOKIA9140 6 #define DIDEVTYPEKEYBOARD_NEC98 7 #define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DIDEVTYPEKEYBOARD_NEC98106 9 #define DIDEVTYPEKEYBOARD_JAPAN106 10 #define DIDEVTYPEKEYBOARD_JAPANAX 11 #define DIDEVTYPEKEYBOARD_J3100 12 ;begin_public_500 #define DIDEVTYPEJOYSTICK_UNKNOWN 1 #define DIDEVTYPEJOYSTICK_TRADITIONAL 2 #define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3 #define DIDEVTYPEJOYSTICK_GAMEPAD 4 #define DIDEVTYPEJOYSTICK_RUDDER 5 #define DIDEVTYPEJOYSTICK_WHEEL 6 #define DIDEVTYPEJOYSTICK_HEADTRACKER 7 ;end_public_500 ;begin_public_800 #else #define DI8DEVTYPEMOUSE_MIN 1;internal #define DI8DEVTYPEMOUSE_UNKNOWN 1 #define DI8DEVTYPEMOUSE_TRADITIONAL 2 #define DI8DEVTYPEMOUSE_FINGERSTICK 3 #define DI8DEVTYPEMOUSE_TOUCHPAD 4 #define DI8DEVTYPEMOUSE_TRACKBALL 5 #define DI8DEVTYPEMOUSE_ABSOLUTE 6 #define DI8DEVTYPEMOUSE_MAX 7;internal #define DI8DEVTYPEMOUSE_MIN_BUTTONS 0;internal #define DI8DEVTYPEMOUSE_MIN_CAPS 0;internal #define DI8DEVTYPEKEYBOARD_MIN 0;internal #define DI8DEVTYPEKEYBOARD_UNKNOWN 0 #define DI8DEVTYPEKEYBOARD_PCXT 1 #define DI8DEVTYPEKEYBOARD_OLIVETTI 2 #define DI8DEVTYPEKEYBOARD_PCAT 3 #define DI8DEVTYPEKEYBOARD_PCENH 4 #define DI8DEVTYPEKEYBOARD_NOKIA1050 5 #define DI8DEVTYPEKEYBOARD_NOKIA9140 6 #define DI8DEVTYPEKEYBOARD_NEC98 7 #define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8 #define DI8DEVTYPEKEYBOARD_NEC98106 9 #define DI8DEVTYPEKEYBOARD_JAPAN106 10 #define DI8DEVTYPEKEYBOARD_JAPANAX 11 #define DI8DEVTYPEKEYBOARD_J3100 12 #define DI8DEVTYPEKEYBOARD_MAX 13;internal #define DI8DEVTYPEKEYBOARD_MIN_BUTTONS 0;internal #define DI8DEVTYPEKEYBOARD_MIN_CAPS 0;internal #define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1 #define DI8DEVTYPEJOYSTICK_MIN DI8DEVTYPE_LIMITEDGAMESUBTYPE;internal #define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEJOYSTICK_STANDARD 2 #define DI8DEVTYPEJOYSTICK_MAX 3;internal #define DI8DEVTYPEJOYSTICK_MIN_BUTTONS 5;internal #define DI8DEVTYPEJOYSTICK_MIN_CAPS ( JOY_HWS_HASPOV | JOY_HWS_HASZ );internal #define DI8DEVTYPEGAMEPAD_MIN DI8DEVTYPE_LIMITEDGAMESUBTYPE;internal #define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEGAMEPAD_STANDARD 2 #define DI8DEVTYPEGAMEPAD_TILT 3 #define DI8DEVTYPEGAMEPAD_MAX 5;internal #define DI8DEVTYPEGAMEPAD_MIN_BUTTONS 6;internal #define DI8DEVTYPEGAMEPAD_MIN_CAPS 0;internal #define DI8DEVTYPEDRIVING_MIN DI8DEVTYPE_LIMITEDGAMESUBTYPE;internal #define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2 #define DI8DEVTYPEDRIVING_DUALPEDALS 3 #define DI8DEVTYPEDRIVING_THREEPEDALS 4 #define DI8DEVTYPEDRIVING_HANDHELD 5 #define DI8DEVTYPEDRIVING_MAX 6;internal #define DI8DEVTYPEDRIVING_MIN_BUTTONS 4;internal #define DI8DEVTYPEDRIVING_MIN_CAPS 0;internal #define DI8DEVTYPEFLIGHT_MIN DI8DEVTYPE_LIMITEDGAMESUBTYPE;internal #define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPEFLIGHT_STICK 2 #define DI8DEVTYPEFLIGHT_YOKE 3 #define DI8DEVTYPEFLIGHT_RC 4 #define DI8DEVTYPEFLIGHT_MAX 5;internal #define DI8DEVTYPEFLIGHT_MIN_BUTTONS 4;internal #define DI8DEVTYPEFLIGHT_MIN_CAPS ( JOY_HWS_HASPOV | JOY_HWS_HASZ );internal #define DI8DEVTYPE1STPERSON_MIN DI8DEVTYPE_LIMITEDGAMESUBTYPE;internal #define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE #define DI8DEVTYPE1STPERSON_UNKNOWN 2 #define DI8DEVTYPE1STPERSON_SIXDOF 3 #define DI8DEVTYPE1STPERSON_SHOOTER 4 #define DI8DEVTYPE1STPERSON_MAX 5;internal #define DI8DEVTYPE1STPERSON_MIN_BUTTONS 4;internal #define DI8DEVTYPE1STPERSON_MIN_CAPS 0;internal #define DI8DEVTYPESCREENPTR_MIN 2;internal #define DI8DEVTYPESCREENPTR_UNKNOWN 2 #define DI8DEVTYPESCREENPTR_LIGHTGUN 3 #define DI8DEVTYPESCREENPTR_LIGHTPEN 4 #define DI8DEVTYPESCREENPTR_TOUCH 5 #define DI8DEVTYPESCREENPTR_MAX 6;internal #define DI8DEVTYPESCREENPTR_MIN_BUTTONS 0;internal #define DI8DEVTYPESCREENPTR_MIN_CAPS 0;internal #define DI8DEVTYPEREMOTE_MIN 2;internal #define DI8DEVTYPEREMOTE_UNKNOWN 2 #define DI8DEVTYPEREMOTE_MAX 3;internal #define DI8DEVTYPEREMOTE_MIN_BUTTONS 0;internal #define DI8DEVTYPEREMOTE_MIN_CAPS 0;internal #define DI8DEVTYPEDEVICECTRL_MIN 2;internal #define DI8DEVTYPEDEVICECTRL_UNKNOWN 2 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3 #define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4 #define DI8DEVTYPEDEVICECTRL_MAX 5;internal #define DI8DEVTYPEDEVICECTRL_MIN_BUTTONS 0;internal #define DI8DEVTYPEDEVICECTRL_MIN_CAPS 0;internal #define DI8DEVTYPESUPPLEMENTAL_MIN 2;internal #define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2 #define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3 #define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4 #define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5 #define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6 #define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7 #define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8 #define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9 #define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10 #define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11 #define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12 #define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13 #define DI8DEVTYPESUPPLEMENTAL_MAX 14;internal #define DI8DEVTYPESUPPLEMENTAL_MIN_BUTTONS 0;internal #define DI8DEVTYPESUPPLEMENTAL_MIN_CAPS 0;internal #endif /* DIRECTINPUT_VERSION <= 0x700 */ ;end_public_800 #define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType) #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType) #define MAKE_DIDEVICE_TYPE(maj, min) MAKEWORD(maj, min) // ;internal #define GET_DIDEVICE_TYPEANDSUBTYPE(dwDevType) LOWORD(dwDevType) // ;internal begindoc /**************************************************************************** * * @doc EXTERNAL | * * @struct DIDEVCAPS | * * The structure is used by the * method * to return the capabilities of the device. * * @field DWORD | dwSize | * * (IN) Specifies the size, in bytes, of the structure. * This field "must" be initialized by the application * before calling . * * @field DWORD | dwDevType | * * (OUT) Device type specifier. Se the section titled * "DirectInput device type description codes" * for a description of this field. * * @field DWORD | dwFlags | * * Flags associated with the device. The following flags * are defined: * * : The device is physically attached. * * : At least one object on the device * requires polling. Note that HID devices frequently * contain a mixture of polled and non-polled objects. * For example, a keyboard is almost entirely non-polled, * except for the three LEDs for NumLock, CapsLock, and * ScrollLock, which must be polled. * * : Do not confuse this flag with * the flag. If you want to * decide whether polling is necessary to retrieve data * in the current data format, * check the flag instead. * The flag describes the worst-case * scenario for the device, not the actual situation. * * For example, a HID keyboard will be marked as * because the LEDs require polling. * However, the the standard keyboard data format does not * read the LEDs, so will not * be set. Polling the device under these conditions is * pointless because the data that require polling are * inaccessible from the data format anyway. * * : Device functionalty is emulated. * This flag is new for DirectX 3.0 for Windows NT. * This flag is not a reliable indication of efficiency * for data collection it only indicates whether or not * data is retrieved at kernel mode or user mode. * * * : At least one object in the * currently-selected data format requires polling. * * See the remarks under for a * comparison of the two flags. * * : The device supports force feedback. * This flag is new for DirectX 5.0. * * : The force feedback system supports * the fade parameter for at least one effect. * If the device does not support * fade then the fade level and fade time parameters of * the structure will be ignored by the device. * * Individual effects will set the flag * if fade is supported for that particular effect. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system supports * the attack envelope parameter for at least one effect. * If the device does not support * attack then the attack level and attack time parameters of * the structure will be ignored by the device. * * Individual effects will set the flag * if attack is supported for that particular effect. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system supports * the saturation of condition effects for at least one condition. * If the device does not support * saturation, then the force generated by a condition * is limited only by the maximum force which the device * can generate. * * Individual conditions will set the flag * if saturation is supported for that particular condition. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system * supports two coefficient values for conditions (one * for the positive displacement of the axis and one for * the negative displacement of the axis) for at least * one condition. If the device * does not support both coefficients, then the negative * coefficient in the structure will be ignored. * * Individual conditions will set the * flag * if separate positive and negative coefficients are * are supported for that particular condition. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system * supports a maximum saturation for both positive and * negative force output for at least one condition. * If the device does not support * both saturation values, then the negative saturation * in the structure will be ignored. * * Individual conditions will set the * flag * if separate positive and negative saturations are * are supported for that particular condition. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system * supports the dead band parameter * for at least one condition. If the device * does not support dead bands, then the * dead band value in the structure will be ignored. * * Individual conditions will set the * flag * if the dead band is supported for that particular condition. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * Individual conditions will set the * flag * if the dead band is supported for that particular condition. * * This flag is new for DirectX 5.0 and applies only to * force feedback devices. * * : The force feedback system * supports the start delay parameter * for at least one effect. If the device * does not support start delays, then the * start delay value in the structure will be ignored. * * Individual conditions will set the * flag * if start delays are supported for that particular effect. * * This flag is new for DirectX 6.1a and applies only to * force feedback devices. * * : The device is a duplicate of another * DirectInput device. * Alias devices are by default not enumerated by * . * Passing the flag forces * alias devices to be included in the enumeration. * * This flag is new for DirectX 5.0a. * * : The device does not really exist. * It is a placeholder for a device which may exist in the * future. * Phantom devices are by default not enumerated by * . * Passing the flag forces * phantom devices to be included in the enumeration. * * This flag is new for DirectX 5.0a. * * : The device has been hidden from enumeration * because it appears to be an alternate version of another * device or because using it may cause problems. * * This flag is new for DirectX 8. * * @field DWORD | dwAxes | * * (OUT) Specifies the number of axes available on the device. * * @field DWORD | dwButtons | * * Specifies the number of buttons available on the device. * * @field DWORD | dwPOVs | * * Specifies the number of point-of-view controllers * available on the device. * * @field DWORD | dwFFSamplePeriod | * * The minimum time between playback of consecutive * raw force commands. * * This field is new for DirectX 5.0. * * @field DWORD | dwFFMinTimeResolution | * * The minimum amount of time, in microseconds, * that the device can resolve. The device rounds * any times to the nearest supported increment. * For example, if the value of * is 1000, * then the device would round any times to * the nearest millisecond. * * This field is new for DirectX 5.0. * * @field DWORD | dwFirmwareRevision | * * Specifies the firmware revision of the device. * * This field is new for DirectX 5.0. * * @field DWORD | dwHardwareRevision | * * Specifies the hardware revision of the device. * * This field is new for DirectX 5.0. * * @field DWORD | dwFFDriverVersion | * * Specifies the version number of the force feedback * device driver. * * This field is new for DirectX 5.0. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_500 /* This structure is defined for DirectX 3.0 compatibility */ typedef struct DIDEVCAPS_DX3 { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3; ;end typedef struct DIDEVCAPS { DWORD dwSize; DWORD dwFlags; DWORD dwDevType; DWORD dwAxes; DWORD dwButtons; DWORD dwPOVs; ;begin_if_(DIRECTINPUT_VERSION)_500 DWORD dwFFSamplePeriod; DWORD dwFFMinTimeResolution; DWORD dwFirmwareRevision; DWORD dwHardwareRevision; DWORD dwFFDriverVersion; ;end } DIDEVCAPS, *LPDIDEVCAPS; ;begin_internal /* * Name for the 5.0 structure, in places where we specifically care. */ typedef DIDEVCAPS DIDEVCAPS_DX5; typedef DIDEVCAPS *LPDIDEVCAPS_DX5; BOOL static __inline IsValidSizeDIDEVCAPS(DWORD cb) { return cb == sizeof(DIDEVCAPS_DX5) || cb == sizeof(DIDEVCAPS_DX3); } ;end_internal #define DIDC_ATTACHED 0x00000001 #define DIDC_POLLEDDEVICE 0x00000002 #define DIDC_EMULATED 0x00000004 #define DIDC_POLLEDDATAFORMAT 0x00000008 ;begin_if_(DIRECTINPUT_VERSION)_500 /* Force feedback bits live in the high byte, to keep them together */;internal #define DIDC_FORCEFEEDBACK 0x00000100 #define DIDC_FFATTACK 0x00000200 #define DIDC_FFFADE 0x00000400 #define DIDC_SATURATION 0x00000800 #define DIDC_POSNEGCOEFFICIENTS 0x00001000 #define DIDC_POSNEGSATURATION 0x00002000 #define DIDC_DEADBAND 0x00004000 ;end #define DIDC_STARTDELAY 0x00008000;public_600 #define DIDC_FFFLAGS 0x0000FF00;internal ;begin_internal /* * Flags in the upper word mark devices normally excluded from enumeration. * To force enumeration of the device, you must pass the appropriate * DIEDFL_* flag. */ ;end_internal ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIDC_ALIAS 0x00010000 #define DIDC_PHANTOM 0x00020000 #define DIDC_EXCLUDEMASK 0x00FF0000;internal ;end ;begin_if_(DIRECTINPUT_VERSION)_800 #define DIDC_HIDDEN 0x00040000 ;end #define DIDC_RANDOM 0x80000000 //;Internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput Data Format Types | * * Describe attributes of a single object in a device. * * @flag DIDFT_ALL | * * Valid only for : * Enumerate all objects, * regardless of type. This flag may not be combined * with any of the other flags. * * @flag DIDFT_RELAXIS | * * Object is a relative axis. A relative axis is one * which reports its data as incremental * changes from the previous reported position. * * Relative axes typically support an unlimited range. * * Note that an axis need not report a continuous range * of values. * The property of an axis will * report the axis granularity. * * Note that relative axis devices do not have "absolute" * coordinates. Rather, the reported "absolute" coordinates * are simply the total of all relative coordinates * reported by the device while it has been acquired. * * As a result, the "absolute" coordinates retrieved from * a relative-axis object are meaningful only when compared * to other "absolute" coordinates. For example, an application * may record the "absolute" position of the mouse when a button * is pressed, and retrieve it when the button is released. * By subtracting the two, the application can compute the * distance between the point the button was pressed and the * point the button was released. * * Passing this flag to * restricts the enumeration to relative axis objects. * * @flag DIDFT_ABSAXIS | * * Object is an absolute axis. An absolute axis is one * reports data as absolute positions. * * Absolute axes typically support a finite range. * * Note that an axis need not report a continuous range * of values. * The property of an axis will * report the axis granularity. * * Passing this flag to * restricts the enumeration to absolute axis objects. * * @flag DIDFT_AXIS | * * Valid only for : * Object is either an * absolute axis or a relative axis. * * Passing this flag to * restricts the enumeration to axis objects. * * @flag DIDFT_PSHBUTTON | * * Object is a pushbutton. A pushbutton is reported as * down when the user presses it and as up when the user * releases it. * * Passing this flag to * restricts the enumeration to push-button objects. * * @flag DIDFT_TGLBUTTON | * * Object is a toggle button. A toggle button is reported as * down when the user presses it and remains reported as down * until the user presses the button a second time. * Note that in some cases when a toggle button is held down * it may be reported as changing state repeatedly. * * Passing this flag to * restricts the enumeration to toggle-button objects. * * @flag DIDFT_BUTTON | * * Object is a either a pushbutton or toggle button. * * Passing this flag to * restricts the enumeration to button objects. * * @flag DIDFT_POV | * * Object is a point-of-view controller. * A point-of-view controller reports either the direction the user * is pressing the controller (in thousandths of degrees clockwise * from north), or the special value * to indicate that no direction is being indicated. * The values are defined in the mmsystem.h * header file. * * Note that a point-of-view controller need not report a * continuous range of values. (In fact, most currently do not.) * The property of a point-of-view * controller will report the indicator granularity. * * Passing this flag to * restricts the enumeration to POV objects. * * This type is new for DirectX 5.0. * * @flag DIDFT_COLLECTION | * * Object is a HID link collection and does not * generate data of its own. If a HID link collection * is enumerated, you can extract the link collection * number with the macro. * You can then pass the link collection number to * the * method with the * flag * to enumerate the objects in collection , * or you can pass the link collection number * to functions in the HID parsing library (hidpi.h) * to obtain additional information. * * Passing this flag to * restricts the enumeration to HID link collections. * * This type is new for DirectX 5.0. * * @flag DIDFT_NODATA | * * Object does not generate data. Although no data * can be read from a "no data" object, the object * can be used as an output actuator in a force * feedback effect (if the flag * is set), or it can be used as a target of * (if * the flag is set). * * If the flag is set, then the value * of the field in the * structure is meaningless * and should be ignored. * * Passing this flag to * restricts the enumeration to objects that do not generate * data. * * This type is new for DirectX 5.0. * * @flag DIDFT_FFACTUATOR | * * Object contains a force feedback actuator. * In other words, forces may be applied to this object. * * Passing this flag to * * restricts enumeration to objects which * support force feedback. * * Passing this flag to * restricts the enumeration to objects which support a * force feedback actuator. * * This flag is new for DirectX 5.0. * * @flag DIDFT_FFEFFECTTRIGGER | * * Object may be used to trigger force feedback effects. * * Passing this flag to * * restricts enumeration to objects which * can be used to trigger force feedback effects. * * Passing this flag to * restricts the enumeration to objects which can be used * as force feedback triggers. * * This flag is new for DirectX 5.0. * * @flag DIDFT_OUTPUT | * * Object can be sent data with the * method. * * Passing this flag to * * restricts enumeration to objects which * can be sent data. * * This flag is new for DirectX 5.0a. * * @flag DIDFT_NOCOLLECTION | * * Special parameter to * which restricts the enumeration to objects that do not * belong to any HID link collection. * * @flag DIDFT_ALIAS | * * Some objects may have aliases ( muliple names for the same object ). * By default, Dinput will only expose the primary usage for an object. * * Passing this flag to * * alias to be enumurated. All aliases for an object will have the * same offset and object instance. * * @flag DIDFT_VENDORDEFINED | * * A device may have objects that are vendor specific. (For example: a mode button that * changes device characteristics.) By default, Dinput will only expose non vendor * specific device objects. * * Passing this flag to * * vendor specific device objects to be enumurated. * * * @xref , , * . * ****************************************************************************/ /* * @func BYTE | DIDFT_GETTYPE | * * Extracts the object type code from a data format type. * * @parm DWORD | dwType | * * DirectInput data format type. * * @xref "DirectInput Data Format Types". * * @func BYTE | DIDFT_GETINSTANCE | * * Extracts the object instance number code from a data format type. * * @parm DWORD | dwType | * * DirectInput data format type. * * @func DWORD | DIDFT_ENUMCOLLECTION | * * Special parameter to * which restricts the enumeration to objects within the * specified HID link collection. By default, objects are * enumerated regardless of the link collection number. * * @parm WORD | wCollectionNumber | * * HID link collection to which enumeration is to be restricted. * * @xref "DirectInput Data Format Types". * ****************************************************************************/ /* * Warning! These values must be in sync with the values in diloc.inc * ****************************************************************************/ enddoc #define DIDFT_ALL 0x00000000 #define DIDFT_RELAXIS 0x00000001 #define DIDFT_ABSAXIS 0x00000002 #define DIDFT_AXIS 0x00000003 #define DIDFT_PSHBUTTON 0x00000004 #define DIDFT_TGLBUTTON 0x00000008 #define DIDFT_BUTTON 0x0000000C #define DIDFT_POV 0x00000010 #define DIDFT_RESERVEDTYPES 0x00000020 // ;Internal - new types go here #define DIDFT_COLLECTION 0x00000040 #define DIDFT_NODATA 0x00000080 // ;Internal #define DIDFT_DWORDOBJS 0x00000013 // ;Internal #define DIDFT_BYTEOBJS 0x0000000C // ;Internal #define DIDFT_CONTROLOBJS 0x0000001F // ;Internal #define DIDFT_ALLOBJS 0x0000001F // ;Internal_dx3 #define DIDFT_ALLOBJS_DX3 0x0000001F // ;Internal_500 #define DIDFT_ALLOBJS 0x000000DF // ;Internal_500 #define DIDFT_TYPEMASK 0x000000FF ;internal #define DIDFT_TYPEVALID DIDFT_TYPEMASK // ;Internal #define DIDFT_ANYINSTANCE 0x0000FF00;public_dx3 #define DIDFT_ANYINSTANCE 0x00FFFF00;public_500 #define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE #define DIDFT_MAKEINSTANCE(n) ((BYTE)(n) << 8);public_dx3 #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8);public_500 #define DIDFT_GETTYPE(n) LOBYTE(n) #define DIDFT_GETINSTANCE(n) HIBYTE(n);public_dx3 #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8);public_500 #define DIDFT_FINDMASK 0x00FFFFFF // ;Internal #define DIDFT_FINDMATCH(n,m) ((((n)^(m)) & DIDFT_FINDMASK) == 0) ;internal ;internal #define DIDFT_FFACTUATOR 0x01000000 #define DIDFT_FFEFFECTTRIGGER 0x02000000 ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIDFT_OUTPUT 0x10000000 #define DIDFT_VENDORDEFINED 0x04000000 #define DIDFT_ALIAS 0x08000000 ;end // ;Internal /* // ;Internal * DIDFT_OPTIONAL means that the // ;Internal * SetDataFormat should ignore the // ;Internal * field if the device does not // ;Internal * support the object. // ;Internal */ // ;Internal #define DIDFT_OPTIONAL 0x80000000 // ;Internal #define DIDFT_BESTFIT 0x40000000 // ;Internal #define DIDFT_RANDOM 0x20000000 // ;Internal #define DIDFT_ATTRVALID 0x1f000000 ;internal_50A #if 0 // Disable the next line if building 5a ;internal_50A #define DIDFT_ATTRVALID 0x07000000 ;internal_dx5 #endif ;internal_50A #define DIDFT_ATTRMASK 0xFF000000 ;internal #define DIDFT_ALIASATTRMASK 0x0C000000 ;internal #define DIDFT_GETATTR(n) ((DWORD)(n) >> 24) ;internal #define DIDFT_MAKEATTR(n) ((BYTE)(n) << 24) ;internal #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8);public_500 #define DIDFT_NOCOLLECTION 0x00FFFF00 ;public_500 #define DIDFT_GETCOLLECTION(n) LOWORD((n) >> 8);internal_500 #define DIDFT_ENUMVALID 0x0000000F // ;Internal_dx3 #define DIDFT_ENUMVALID \;Internal_500 (DIDFT_ATTRVALID | DIDFT_ANYINSTANCE | DIDFT_ALLOBJS);Internal_500 #ifndef DIJ_RINGZERO begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIOBJECTDATAFORMAT | * * The structure is used by the * method * to set the data format for a single object within * a device. * * @field const GUID * | pguid | * * The identifier for the axis, button, or other input * source. When requesting a data format, leaving this field * NULL indicates that any type of object is permissible. * * If the flag is set in the * field, then this field * is really a * (suitably cast) * of the usage page and usage * that is desired. * * @field DWORD | dwOfs | * * Offset within the data packet where the data for the * input source will be stored. This value must be a * multiple of 4 for axes and POVs. * * @field DWORD | dwType | * * Specifies the type of object. When requesting a data format, * the instance portion can be set to * to indicate that any instance is permissible. * * @field DWORD | dwFlags | * * Zero or more of the following flags: * * An optional flag. Multiple aspect flags * cannot be combined. * * The flag , indicating that the * field is really a * (suitably cast) * of the usage page and usage * that is desired. * * @ex The following object data format specifies that DirectInput * should choose the first available axis and report its value * in the DWORD at offset 4 in the device data. * * | * * DIOBJECTDATAFORMAT dfAnyAxis = { * 0, // Wildcard * 4, // Offset * DIDFT_AXIS | DIDFT_ANYINSTANCE, // Any axis is okay * 0, // No special flags * }; * * * @ex The following object data format specifies that the X axis * of the device should be stored in the DWORD at offset 12 in the * device data. If the device has more than one X axis, * the first available one should be selected. * * | * * DIOBJECTDATAFORMAT dfAnyXAxis = { * &GUID_XAxis, // Must be an X axis * 12, // Offset * DIDFT_AXIS | DIDFT_ANYINSTANCE, // Any X axis is okay * 0, // No special flags * }; * * @ex The following object data format specifies that DirectInput * should choose the first available button and report its value * in the high bit of the BYTE at offset 16 in the device data. * * | * * DIOBJECTDATAFORMAT dfAnyButton = { * 0, // Wildcard * 16, // Offset * DIDFT_BUTTON | DIDFT_ANYINSTANCE, // Any button is okay * 0, // No special flags * }; * * @ex The following object data format specifies that DirectInput * should choose the first available "Fire" button and report * its value in the high bit of the BYTE * at offset 17 in the device data. * * If the device does not have a "Fire" button, the attempt to * set this data format will fail. * * | * * DIOBJECTDATAFORMAT dfAnyButton = { * &GUID_FireButton, // Object type * 17, // Offset * DIDFT_BUTTON | DIDFT_ANYINSTANCE, // Any button is okay * 0, // No special flags * }; * * @ex The following object data format specifies that button zero * of the device should be reported as the high bit of the * BYTE stored at offset 18 in the device data. * * If the device does not have a button zero, the attempt to * set this data format will fail. * * | * * DIOBJECTDATAFORMAT dfButton0 = { * 0, // Wildcard * 18, // Offset * DIDFT_BUTTON | DIDFT_MAKEINSTANCE(0), // Button zero * 0, // No special flags * }; * ****************************************************************************/ /* * Warning! These values must be in sync with the values in diloc.inc * * Note: pguid cannot be a REFGUID because it may be NULL. * ****************************************************************************/ enddoc typedef struct _DIOBJECTDATAFORMAT { const GUID *pguid; DWORD dwOfs; DWORD dwType; DWORD dwFlags; } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT; typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDATAFORMAT | * * The structure is used by the * method * to set the data format for a device. * a device. * * @field DWORD | dwSize | * * The size of the structure. * * @field DWORD | dwObjSize | * * The size of the structure. * * @field DWORD | dwFlags | * * Flags describing other attributes of the data format. * * The following flags are defined: * * : Set the axes into relative mode. * Setting this flag in the data format is equivalent to * manually setting the axis mode property via * . * The flag may not be combined with . * * : Set the axes into absolute mode. * Setting this flag in the data format is equivalent to * manually setting the axis mode property via * . * The flag may not be combined with . * * @field DWORD | dwDataSize | * * The size of the device data that should be returned by * the device. This value must be a multiple of four * and must exceed the value for * all objects specified in the object list. * * @field DWORD | dwNumObjs | * * The number of objects in the * array. * * @field LPDIOBJECTDATAFORMAT | rgodf | * * Pointer to an array of structures, * each of which describes how one object's data should be * reported in the device data. * * @comm * "It is an error" for the

to indicate that two * difference pieces of information be placed in the same * location. * * "It is an error" for the

to indicate that the * same piece of information be placed in two locations. * * * @ex The following declarations set a data format which can * be used for an application which is interested in two * axes (reported in absolute coordinates) and two buttons. * * | * * * // Suppose an application wishes to use the following * // structure to read device data. * * typedef struct MYDATA { * LONG lX; // X axis goes here * LONG lY; // Y axis goes here * BYTE bButtonA; // One button goes here * BYTE bButtonB; // Another button goes here * BYTE bPadding[2]; // Must be dword multiple in size * } MYDATA; * * // Then it can use the following data format. * * DIOBJECTDATAFORMAT rgodf[] = { * { &GUID_XAxis, FIELD_OFFSET(MYDATA, lX), DIDFT_AXIS | DIDFT_ANYINSTANCE, 0, }, * { &GUID_YAxis, FIELD_OFFSET(MYDATA, lY), DIDFT_AXIS | DIDFT_ANYINSTANCE, 0, }, * { &GUID_Button, FIELD_OFFSET(MYDATA, bButtonA), DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0, }, * { &GUID_Button, FIELD_OFFSET(MYDATA, bButtonB), DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0, }, * }; * #define numObjects (sizeof(rgodf) / sizeof(rgodf[0])) * * DIDATAFORMAT df = { * sizeof(DIDATAFORMAT), // this structure * sizeof(DIOBJECTDATAFORMAT), // size of object data format * DIDF_ABSAXIS, // absolute axis coordinates * sizeof(MYDATA), // device data size * numObjects, // number of objects * rgodf, // and here they are * }; * ****************************************************************************/ enddoc typedef struct _DIDATAFORMAT { DWORD dwSize; DWORD dwObjSize; DWORD dwFlags; DWORD dwDataSize; DWORD dwNumObjs; LPDIOBJECTDATAFORMAT rgodf; } DIDATAFORMAT, *LPDIDATAFORMAT; typedef const DIDATAFORMAT *LPCDIDATAFORMAT; #define DIDF_ABSAXIS 0x00000001 #define DIDF_RELAXIS 0x00000002 #define DIDF_VALID 0x00000003 //;Internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @global DIDATAFORMAT | c_dfDIMouse | * * A predefined structure which describes a * mouse device. This structure is provided in the * DINPUT.LIB library file as a convenience. * ****************************************************************************/ enddoc #ifdef __cplusplus extern "C" { #endif extern const DIDATAFORMAT c_dfDIMouse; ;begin_if_(DIRECTINPUT_VERSION)_700 extern const DIDATAFORMAT c_dfDIMouse2; ;end extern const DIDATAFORMAT c_dfDIKeyboard; ;begin_if_(DIRECTINPUT_VERSION)_500 extern const DIDATAFORMAT c_dfDIJoystick; extern const DIDATAFORMAT c_dfDIJoystick2; ;end #ifdef __cplusplus }; #endif ;begin_public_800 #if DIRECTINPUT_VERSION > 0x0700 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIACTION | * * The structure allows an application to refer * to a virtualized device and a controler. The * * The structure is used by: * to examine the * input requirements and enumerate suitable devices. * to resolve the vitual * device controls to physical device controls. * to set * to set the data format for a single object within * a device. * * @field UINT_PTR | uAppData | * * An application can specify a to assign to the to * the action. The uAppData will be returned to the application in * when the state of the * control associated with the action changes. * * @field DWORD | dwSemantic | * * One of the predefined semantics for this application genre. * * @field DWORD | dwFlags | * * Optional flags used to request specific attributes * or processing such as force feedback capabilities or application * mapped actions. * * @field OPTIONAL LPCTSTR | lptszActionName | * * The friendly name associated with the action. This field will be * the input config UI in order to display the action to control * relations. * * @field OPTIONAL DWORD | uResIdString | * * The resource ID for the string for this action within the * module hInstString. * * @field OPTIONAL GUID | guidInstance | * * The device instance GUID if a specific device is requested. * Usually set to a NULL GUID by the application. * * @field OPTIONAL DWORD | dwObjID | * * Object type identifier. See * for more details. This allows an application to bypass * DirectInput semantic mapping on a per control basis. * This element is ignored for * and unless the * flag is set in . * * @field OPTIONAL DWORD | dwHow | * * On input indicates an existing mapping. On output (if changed) * indicates the actual mapping mechanism used by DirectInput in * order to configure the action. * ****************************************************************************/ enddoc typedef struct _DIACTION% { UINT_PTR uAppData; DWORD dwSemantic; OPTIONAL DWORD dwFlags; OPTIONAL union { LPCTSTR% lptszActionName; UINT uResIdString; }; OPTIONAL GUID guidInstance; OPTIONAL DWORD dwObjID; OPTIONAL DWORD dwHow; } DIACTION%, *LPDIACTION% ; typedef const DIACTION% *LPCDIACTION%; typedef const DIACTION *LPCDIACTION; begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput | * * @flag DIA_FORCEFEEDBACK | * * The action must be an actuator or trigger. * * @flag DIA_APPMAPPED | * * Application has set the dwObjID parameter. * * @flag DIA_APPNOMAP | * * Application does not want this action to be mapped. * * @flag DIA_NORANGE | * * Application does not want the default range set for this action. * This flag currently only applies to axis actions. For other * actions it should be set to zero, * * @flag DIA_APPFIXED | * * The application does not want this action to be reconfigurable * through the default user interface. * ****************************************************************************/ enddoc #define DIA_FORCEFEEDBACK 0x00000001 #define DIA_APPMAPPED 0x00000002 #define DIA_APPNOMAP 0x00000004 #define DIA_NORANGE 0x00000008 #define DIA_APPFIXED 0x00000010 #define DIA_VALID 0x0000001F ;internal_800 begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput | * * @flag DIAH_UNMAPPED | * * The action is not mapped to any control. * * @flag DIAH_USERCONFIG | * * The user has specified this action to control mapping. * * @flag DIAH_APPREQUESTED | * * Application specified action to control map. * * @flag DIAH_HWAPP | * * The hardware vendor has suggested this action for this * application. * * @flag DIAH_HWDEFAULT | * * The hardware vendor has suggested this action for the same * semantic in similar applications. * * @flag DIAH_ERROR | * * An error was found in processing this action. * * @flag DIAH_DEFAULT | * * None of the above. * ****************************************************************************/ enddoc #define DIAH_UNMAPPED 0x00000000 #define DIAH_USERCONFIG 0x00000001 #define DIAH_APPREQUESTED 0x00000002 #define DIAH_HWAPP 0x00000004 #define DIAH_HWDEFAULT 0x00000008 #define DIAH_OTHERAPP 0x00000010 ;internal_800 #define DIAH_DEFAULT 0x00000020 #define DIAH_MAPMASK 0x0000003F ;internal_800 #define DIAH_ERROR 0x80000000 #define DIAH_VALID 0x8000003F ;internal_800 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIACTIONFORMAT | * * The structure is used by the * method * to set the data format for a device. * a device. * * @field DWORD | dwSize | * * The size of the structure. * * @field DWORD | dwActionSize | * * The size of the structure. * * @field DWORD | dwDataSize | * * The size of the device data that should be returned by * the device. * * @field DWORD | dwNumActions | * * The number of actions in the * array. * * @field LPDIACTION | rgoAction | * * Pointer to an array of structures, * each of which describes how one object's data should be * reported in the device data. * * @field GUID | guidActionMap | * * Unique GUID that identifies the action map. An application needs * one for each distinct set of semantics it uses. * * @field DWORD | dwGenre | * * Genre of the application. * * @field DWORD | dwBufferSize | * * BufferSize to set for each device to which this action map is * applied. * This value will be used as the value to * set the DIPROP_BUFFERSIZE property on the device when the action * map is applied using . * This value is ignored by all other methods. * * @field OPTIONAL LONG | lAxisMin | * * Minimum value for range of scaled data to be returned for all * axes. This value will be ignored for a specific action axis if * the flag is set in . * This value is currently only valid for axis actions and should be * set to zero for all other actions. This value will be used as * the value to set the range property on an * absolute axis when the action map is applied using * . * * @field OPTIONAL LONG | lAxisMax | * * Maximum value for range of scaled data to be returned for all * axes. This value will be ignored for a specific action axis if * the flag is set in . * This value is currently only valid for axis actions and should be * set to zero for all other actions. This value will be used as * the value to set the range property on an * absolute axis when the action map is applied using * . * * @field OPTIONAL HINSTANCE | hInstString | * * Handle of the module containing strings for these actions. * This is used if DIACTION.lptszActionName has a HIWORD of zero * in which case the LOWORD must be a resource ID for a string. * * @field FILETIME | ftTimeStamp | * * System time in FILETIME format that this action format was last * written to file. * * @field DWORD | dwCRC | * * Cyclic redundancy check value generated by * to check whether or not * a mapping needs to be saved. * If the input value of this field does not match the calculated * value, the mappings for the device are saved and the field is * updated. The input value is ignored if the * flag is set in the dwFlags parameter. * * @field TCHAR | tszActionMap[MAX_PATH] | * * Friendly name for this set of actions. May be displayed to user. * ****************************************************************************/ enddoc typedef struct _DIACTIONFORMAT% { DWORD dwSize; DWORD dwActionSize; DWORD dwDataSize; DWORD dwNumActions; LPDIACTION% rgoAction; GUID guidActionMap; DWORD dwGenre; DWORD dwBufferSize; OPTIONAL LONG lAxisMin; OPTIONAL LONG lAxisMax; OPTIONAL HINSTANCE hInstString; FILETIME ftTimeStamp; DWORD dwCRC; TCHAR% tszActionMap[MAX_PATH]; } DIACTIONFORMAT%, *LPDIACTIONFORMAT%; typedef const DIACTIONFORMAT% *LPCDIACTIONFORMAT%; typedef const DIACTIONFORMAT *LPCDIACTIONFORMAT; begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput | * * @flag DIAFTS_NEWDEVICEHIGH | * * Value in which when combined with a value of * in signifies that the * device to which this action format is being mapped is new for * this user. * * @flag DIAFTS_NEWDEVICELOW | * * Value in which when combined with a value of * in signifies that the * device to which this action format is being mapped is new for * this user. * * @flag DIAFTS_UNUSEDDEVICEHIGH | * * Value in which when combined with a value of * in signifies that the * device to which this action format is being mapped has never been * used by this user. * * @flag DIAFTS_UNUSEDDEVICELOW | * * Value in which when combined with a value of * in signifies that the * device to which this action format is being mapped has never been * used by this user. * ****************************************************************************/ enddoc #define DIAFTS_NEWDEVICELOW 0xFFFFFFFF #define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF #define DIAFTS_UNUSEDDEVICELOW 0x00000000 #define DIAFTS_UNUSEDDEVICEHIGH 0x00000000 begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags Flag passed to to control * specific behaviors of the method. * * @flag DIDBAM_DEFAULT | * * Request default mapping. * * @flag DIDBAM_PRESERVE | * * Request that any mappings already set in the action array should * be preserved rather than cleared. * * @flag DIDBAM_INITIALIZE | * * Indicate that the value of each element * needs to be initialized. * * @flag DIDBAM_HWDEFAULTS | * * Indicate that hardware default mappings rather than user mappings * should be used to map unmapped controls. * * @comm At most one of , * and may be passed to * . "It is an error" to * pass more than one. * ****************************************************************************/ enddoc #define DIDBAM_DEFAULT 0x00000000 #define DIDBAM_PRESERVE 0x00000001 #define DIDBAM_INITIALIZE 0x00000002 #define DIDBAM_HWDEFAULTS 0x00000004 #define DIDBAM_VALID 0x00000007 ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags Flag passed to to * specify map setting behavior. * * @flag DIDSAM_DEFAULT | * * Default action-to-control map setting for this user. * If the map differs from the currently set map, the new settings * are saved to disk. * * @flag DIDSAM_NOUSER | * * (Used only for default UI). Specify that user ownership for this * device in the default configuration UI should be set to no owner. * Resetting user ownership does not remove the currently set * action-to-control map. * * @flag DIDSAM_FORCESAVE | * * Specify that device mappings should be saved even if they * device in the default configuration UI should be set to no owner. * Resetting user ownership does not remove the currently set * action-to-control map. * ****************************************************************************/ enddoc #define DIDSAM_DEFAULT 0x00000000 #define DIDSAM_NOUSER 0x00000001 #define DIDSAM_FORCESAVE 0x00000002 #define DIDSAM_VALID 0x00000003 ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags Flag passed to to control * behavior of the method. * * @flag DICD_DEFAULT | * * Request default behavior. * * @flag DICD_EDIT | 0x00000001 | * * Request mode of default UI allowing editing of placements of * things on configuration dailog. * ****************************************************************************/ enddoc #define DICD_DEFAULT 0x00000000 #define DICD_EDIT 0x00000001 #define DICD_VALID 0x00000001 ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DICOLORSET | * * The structure contains colors that DirectInput * uses to draw the configuration user interface. All colors are * values. * * @field DWORD | dwSize | * * Size of the structure, in bytes. This must be * initialized before the structure can be used. * * @field D3DCOLOR | cTextFore | * * Foreground text color. * * @field D3DCOLOR | cTextHighlight | * * Foreground color for highlighted text. * * @field D3DCOLOR | cCalloutLine | * * Color used to display callout lines within the UI. * * @field D3DCOLOR | cCalloutHighlight | * * Color used to display highlighted callout lines within the UI. * * @field D3DCOLOR | cBorder | * * Border color, used to display lines around UI elements (tabs, * buttons, etc). * * @field D3DCOLOR | cControlFill | * * Fill color for UI elements (tabs, buttons, etc). Text within UI * elements is shown over this fill color. * * @field D3DCOLOR | cHighlightFill | * * Fill color for highlighted UI elements (tabs, buttons, etc). * Text within UI elements is shown over this fill color. * * @field D3DCOLOR | cAreaFill | * * Fill color for areas outside UI elements. * * ****************************************************************************/ enddoc /* * The following definition is normally defined in d3dtypes.h */ #ifndef D3DCOLOR_DEFINED typedef DWORD D3DCOLOR; #define D3DCOLOR_DEFINED #endif typedef struct _DICOLORSET{ DWORD dwSize; D3DCOLOR cTextFore; D3DCOLOR cTextHighlight; D3DCOLOR cCalloutLine; D3DCOLOR cCalloutHighlight; D3DCOLOR cBorder; D3DCOLOR cControlFill; D3DCOLOR cHighlightFill; D3DCOLOR cAreaFill; } DICOLORSET, *LPDICOLORSET; typedef const DICOLORSET *LPCDICOLORSET; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DICONFIGUREDEVICESPARAMS | * * The structure carries parameters used by the * IDirectInput8::ConfigureDevices method. * * @field DWORD | dwSize | * Size of the structure, in bytes. This must be initialized before the structure * can be used. * * @field DWORD | dwcUsers | * * Count of user names in the array at lptszUserNames. Zero is an invalid value. * If this value exceeds the number of names actually in the array at lptszUserNames, * the method fails, returning DIERR_INVALIDPARAMS. * * @field LPTSTR | lptszUserNames | * * Address of an array TCHAR buffers, each of length MAX_PATH, where each element is * a null terminated user name string. This parameter can be set to NULL to request * default names (the number of which is determined by dwcUsers). For example: * // Create an array that can hold 3 names * TCHAR szrgNameArray[n][MAX_PATH] * If the application passes more names than the count indicates, only the names within * the count are used, and remaining devices. If an application specifies names that are * different from the names currently assigned to devices, ownership is revoked for all * devices, a default name is created for the mismatched name, and the UI shows "(No User)" * for all devices. * * @field DWORD | dwcFormats | * * Count of structures in the array at lprgFormats. * * @field LPDIACTIONFORMAT | lprgFormats | * * Pointer to an array of DIACTIONFORMAT structures that contains action mapping information * for each genre the game uses, to be utilized by the control panel. On input, each action-to-control * mapping provides the desired genre semantics and the human-readable strings to be displayed as * callouts for those semantics, as mapped to the installed devices. The configuration UI displays * the genres in its drop-down list in the order they appear in the array. * * @field HWND | hwnd | * * Window handle for the top-level window of the calling application. The member is needed only * for applications that run in windowed mode. It is otherwise ignored. * * @field DICOLORSET | dics | * * A structure that describes the color scheme to be applied to the configuration * user interface. * * @field IUnknown FAR * | lpUnkDDSTarget | * * Pointer to the IUnknown interface for a DirectDraw or Direct3D target surface object for the * configuration user interface. The device image is alpha-blended over the background surface onto * the target surface. The object referred to by this interface must support either IDirect3DSurface, * or the following versions of the DirectDraw surface interface: IDirectDrawSurface4, IDirectDrawSurface7. * * ****************************************************************************/ enddoc typedef struct _DICONFIGUREDEVICESPARAMS%{ DWORD dwSize; DWORD dwcUsers; LPTSTR% lptszUserNames; DWORD dwcFormats; LPDIACTIONFORMAT% lprgFormats; HWND hwnd; DICOLORSET dics; IUnknown FAR * lpUnkDDSTarget; } DICONFIGUREDEVICESPARAMS%, *LPDICONFIGUREDEVICESPARAMS%; typedef const DICONFIGUREDEVICESPARAMS% *LPCDICONFIGUREDEVICESPARAMS%; typedef const DICONFIGUREDEVICESPARAMS *LPCDICONFIGUREDEVICESPARAMS; begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags | * * These flags are used to indicate the file format and image usage. * * @flag DIDIFT_CONFIGURATION | * * The file is for use to display the current configuration of * actions on the device. Overlay image coordinate are given * relative to the upper left corner of the configuration image. The * member is valid and identifies * view to which this image belongs. * * @flag DIDIFT_CONTROL | * * The image info is an overlay for a configuration image. The * , * , * , * , * , * and * members are valid and contain * data used to display the overlay and callout information for a * single control on the device. Note, with the exception of * , the data may be NULL data if no * data was supplied by the hardware vendor. * ****************************************************************************/ enddoc #define DIDIFT_CONFIGURATION 0x00000001 #define DIDIFT_OVERLAY 0x00000002 #define DIDIFTT_VALID 0x00000003 ;internal /*#define DIDIFT_DELETE 0x01000000 defined in dinput.w*/;internal #define DIDIFT_VALID ( DIDIFTT_VALID);internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags flags used to represent text alignment | * * @flag DIDAL_CENTERED | * * Allign to center (default). * * @flag DIDAL_LEFTALIGNED | * * Allign to left. * * @flag DIDAL_RIGHTALIGNED | * * Allign to right. * * @flag DIDAL_MIDDLE | * * Allign half way between top and bottom (default). * * @flag DIDAL_TOPALIGNED | * * Allign to top. * * @flag DIDAL_BOTTOMALIGNED | * * Allign to bottom. * ****************************************************************************/ enddoc #define DIDAL_CENTERED 0x00000000 #define DIDAL_LEFTALIGNED 0x00000001 #define DIDAL_RIGHTALIGNED 0x00000002 #define DIDAL_MIDDLE 0x00000000 #define DIDAL_TOPALIGNED 0x00000004 #define DIDAL_BOTTOMALIGNED 0x00000008 #define DIDAL_VALID 0x0000000F // ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDEVICEIMAGEINFO | * * The structure carries information required * to display a device image, or an overlay image with a callout. * This structure is used by the * method, as an array * contained within a structure. * * @field TCHAR | lptszImagePath[MAX_PATH] | * * Fully qualified path to the file that contains an image of the * device. File format is given in * . * * @field DWORD | dwFlags | * * A combination of values that describe * the file format and intended use of the image. Not all flag * combinations are valid. * * @field DWORD | dwViewID | * * View ID of the device configuration image over which this overlay * is to be displayed. * * @field RECT | rcOverlay | * * Rectangle, using coordinates relative to the top-left pixel of * the device configuration image, in which the overlay image * should be painted. * This member is only valid if the flag is * present in . * * @field DWORD | dwObjID | * * Control ID (as a combination of DIDFT_* flags and an instance * value) to which an overlay image corresponds for this device. * Applications use the DIDFT_GETINSTANCE and DIDFT_GETTYPE macros * to decode this value to its constituent parts. * This member is only valid if the flag is * present in . * * @field DWORD | dwcValidPts | * * Number of valid points in rgptCalloutLine array. * This member is only valid if the flag is * present in . * * @field POINT | rgptCalloutLine[5] | * * Coordinates for the four points that describe a line with one to * four segments that should be displayed as a callout to a game * action string from a device control. * This member is only valid if the flag is * present in . * * @field RECT | rcCalloutRect | * * Rectangle in which the game action string should be displayed. * If the string cannot fit within the rectangle, the application * is responsible for handling clipping. * This member is only valid if the flag is * present in . * * @field DWORD | dwTextAlign | * * Any combination of the text-alignment flags. * The text within the rectangle described by * should be aligned * according to these falgs. * This member is only valid if the flag is * present in . * ****************************************************************************/ enddoc typedef struct _DIDEVICEIMAGEINFO% { TCHAR% tszImagePath[MAX_PATH]; DWORD dwFlags; // These are valid if DIDIFT_OVERLAY is present in dwFlags. DWORD dwViewID; RECT rcOverlay; DWORD dwObjID; DWORD dwcValidPts; POINT rgptCalloutLine[5]; RECT rcCalloutRect; DWORD dwTextAlign; } DIDEVICEIMAGEINFO%, *LPDIDEVICEIMAGEINFO%; typedef const DIDEVICEIMAGEINFO% *LPCDIDEVICEIMAGEINFO%; typedef const DIDEVICEIMAGEINFO *LPCDIDEVICEIMAGEINFO; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDEVICEIMAGEINFOHEADER | * * The structure provides general * variable-length array of structures. * This structure is used by the * method. * * @field DWORD | dwSize | * * The size of the structure. * * @field DWORD | dwSizeImageInfo | * * The size of each element in the * array. * * @field DWORD | dwcViews | * * Count of views for this device. Each represents a unique view * of the device. * * @field DWORD | dwcButtons | * * Count of buttons for the device. * * @field DWORD | dwcAxes | * * Count of axes for the device. * * @field DWORD | dwcPOVs | * * Count of POVs for the device. * * @field DWORD | dwBufferSize | * * Size, in bytes, of the buffer pointed to by * . * * @field DWORD | dwBufferUsed | * * Size, in bytes, of the memory used within the buffer pointed to * by . * * @field LPDIDEVICEIMAGEINFO | lprgImageInfoArray | * * Buffer to be filled with an array of * structures that describe all of the device images and views, * overlay images, and callout-string coordinates. * * @comm The buffer at must be * large enough to hold all required image information structures. * Applications can query for the required size by calling the * method with the * is set to zero. * After the call, * contains the minimum buffer size required to contain all the * available image information structures. * * The dwcButtons, dwcAxes and dwcPOVs members contain data that can * be retrieved elsewhere within DirectInput, but that would require * additional code. These are included for ease-of-use for the * application developer. * ****************************************************************************/ enddoc typedef struct _DIDEVICEIMAGEINFOHEADER% { DWORD dwSize; DWORD dwSizeImageInfo; DWORD dwcViews; DWORD dwcButtons; DWORD dwcAxes; DWORD dwcPOVs; DWORD dwBufferSize; DWORD dwBufferUsed; LPDIDEVICEIMAGEINFO% lprgImageInfoArray; } DIDEVICEIMAGEINFOHEADER%, *LPDIDEVICEIMAGEINFOHEADER%; typedef const DIDEVICEIMAGEINFOHEADER% *LPCDIDEVICEIMAGEINFOHEADER%; typedef const DIDEVICEIMAGEINFOHEADER *LPCDIDEVICEIMAGEINFOHEADER; #endif /* DIRECTINPUT_VERSION > 0x0700 */ ;end_public_800 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDEVICEOBJECTINSTANCE | * * The structure is used by the * and * methods * to return information about a particular object on a device. * * @field DWORD | dwSize | * * The size of the structure in bytes. The application may * inspect this value to determine how many fields of the * structure are valid. For DirectInput 3.0, the value will * be sizeof(DIDEVICEOBJECTINSTANCE30). * For DirectInput 5.0, the value will * be sizeof(DIDEVICEOBJECTINSTANCE). * Future versions of * DirectInput may return a larger structure. * * @field GUID | guidType | * * Identifier which indicates the type of the object. * This field is optional. If present, it may be one of the * following values: * * : This is the horizontal axis of a controller. * For example, it may represent the horizontal motion of a mouse * or left-right motion of a joystick. * * : This is the forward/backwards * axis of a controller. * For example, it may represent motion of a mouse towards or * away from the user, or forward/backward motion of a joystick. * * : This is the vertical axis of a controller. * For example, it may represent rotation of the Z-wheel on * a mouse. * * : This is a button on a game controller. * * : This is a key on a keypad. * * Other object types may be defined in the future. (For example, * , , .) * * @field DWORD | dwOfs | * * Offset within the data format at which the data reported * by this object is most efficiently obtained. * * @field DWORD | dwType | * * Device type specifier which describes the object. * It is a combination of flags which describe * the object type (axis, button, etc.) and contains the * object instance number in the high byte. Use the * macro to extract the object instance * number. * * @field DWORD | dwFlags | * * Zero or more values. * * @field TCHAR | tszName[MAX_PATH] | * * Name of the object. For example, "Sine wave" * or "Spring". * * @field DWORD | dwFFMaxForce | * * Specifies the magnitude of the maximum force that can * be created by the actuator associated with this object. * Force is * expressed in Newtons and measured in relation to where * the hand would be during normal operation of the device. * * This field is new for DirectX 5.0. * * @field DWORD | dwFFForceResolution | * * Specifies the force resolution of the actuator * associated with this object. * The returned value represents * the number of gradations, or subdivisions, of the * maximum force that can be expressed by the force feedback * system from 0 (no force) to maximum force. * * This field is new for DirectX 5.0. * * @field WORD | wCollectionNumber | * * If the device is a HID device, then this field * specifies the HID link collection to which the * object belongs. To enumerate all the objects * inside a single link collection use * the * method with the * flag. * * This field is new for DirectX 5.0. * * @field WORD | wDesignatorIndex | * * An index that refers to a designator in the * HID physical descriptor. This number can be * passed to functions in the HID parsing library * (hidpi.h) to obtain additional information * about the device object. * * This field is new for DirectX 5.0. * * @field WORD | wUsagePage | * * The HID usage page code, if known, or zero if not known. * Applications can use this field to determine the semantics * associated with the object. * See the hidusage.h header file for a list of usage pages. * * HID devices will always provide a valid usage page. * Non-HID devices may or may not provide a valid usage page, * at the device's discretion. If the usage page is not * known, the value of this field is zero. * * This field is new for DirectX 5.0. * * @field WORD | wUsage | * * The HID usage code, if known, or zero if not known. * Applications can use this field to determine the semantics * associated with the object. * See the hidusage.h header file for a list of usages. * * HID devices will always provide a valid usage. * Non-HID devices may or may not provide a valid usage, * at the device's discretion. If the usage is not * known, the value of this field is zero. * * This field is new for DirectX 5.0. * * @field DWORD | dwDimension | * * The dimensional units in which the object's value is * reported, if * known, or zero if not known. * Applications can use this field to distinguish between, * for example, the position and velocity of a control. * * This field is new for DirectX 5.0. * * @field WORD | wExponent | * * The exponent to associate with the dimension, if known. * * This field is new for DirectX 5.0. * * @field WORD | wReportId | * The HID ReportId, if known. This number can be * passed to functions in the HID library * (hid.dll) to obtain features/send output to * that pertain to the report ID. * * This field is new for DirectX 6.1a. * * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_500 /* These structures are defined for DirectX 3.0 compatibility */ typedef struct DIDEVICEOBJECTINSTANCE_DX3% { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; TCHAR% tszName[MAX_PATH]; } DIDEVICEOBJECTINSTANCE_DX3%, *LPDIDEVICEOBJECTINSTANCE_DX3%; typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A; typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W; typedef const DIDEVICEOBJECTINSTANCE_DX3 *LPCDIDEVICEOBJECTINSTANCE_DX3; ;end typedef struct DIDEVICEOBJECTINSTANCE% { DWORD dwSize; GUID guidType; DWORD dwOfs; DWORD dwType; DWORD dwFlags; TCHAR% tszName[MAX_PATH]; ;begin_if_(DIRECTINPUT_VERSION)_500 DWORD dwFFMaxForce; DWORD dwFFForceResolution; WORD wCollectionNumber; WORD wDesignatorIndex; WORD wUsagePage; WORD wUsage; DWORD dwDimension; WORD wExponent; WORD wReportId; ;end } DIDEVICEOBJECTINSTANCE%, *LPDIDEVICEOBJECTINSTANCE%; typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA; typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW; typedef const DIDEVICEOBJECTINSTANCE *LPCDIDEVICEOBJECTINSTANCE; typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACK%)(LPCDIDEVICEOBJECTINSTANCE%, LPVOID); ;begin_internal #define HAVE_DIDEVICEOBJECTINSTANCE_DX5 typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE_DX5A; typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE_DX5W; typedef DIDEVICEOBJECTINSTANCE DIDEVICEOBJECTINSTANCE_DX5; typedef DIDEVICEOBJECTINSTANCEA *LPDIDEVICEOBJECTINSTANCE_DX5A; typedef DIDEVICEOBJECTINSTANCEW *LPDIDEVICEOBJECTINSTANCE_DX5W; typedef DIDEVICEOBJECTINSTANCE *LPDIDEVICEOBJECTINSTANCE_DX5; typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCE_DX5A; typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCE_DX5W; typedef const DIDEVICEOBJECTINSTANCE *LPCDIDEVICEOBJECTINSTANCE_DX5; BOOL static __inline IsValidSizeDIDEVICEOBJECTINSTANCEW(DWORD cb) { return cb == sizeof(DIDEVICEOBJECTINSTANCE_DX5W) || cb == sizeof(DIDEVICEOBJECTINSTANCE_DX3W); } BOOL static __inline IsValidSizeDIDEVICEOBJECTINSTANCEA(DWORD cb) { return cb == sizeof(DIDEVICEOBJECTINSTANCE_DX5A) || cb == sizeof(DIDEVICEOBJECTINSTANCE_DX3A); } ;end_internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIDOI_FFACTUATOR | 0x00000001 | * * Flag for which indicates * that the object can have force feedback effects * applied to it. * * This flag is new for DirectX 5.0. * * @define DIDOI_FFEFFECTTRIGGER | 0x00000002 | * * Flag for which indicates * that the object can trigger playback of * force feedback effects. * * This flag is new for DirectX 5.0. * * @define DIDOI_FFINPUT | 0x00000004 | * * Flag for which indicates * that although this object cannot have force feedback effects * applied to it, effects which specify this object should not * be failed. The effect should be passed down to the driver as * though this object had the flag set. ;begin_internal * ISSUE-2001/03/29-timgill FF Flag issue * If this flag is set, can you specify a * using a non-FF axis and apply the effect on FF axes? ;end_internal * * This flag is new for DirectX 9.0. * * @define DIDOI_ASPECTPOSITION | 0x00000100 | * * Flag for and * which indicates that * the object reports position information. * * This flag is new for DirectX 5.0. * * @define DIDOI_ASPECTVELOCITY | 0x00000200 | * * Flag for and * which indicates that * the object reports velocity information. * * This flag is new for DirectX 5.0. * * @define DIDOI_ASPECTACCEL | 0x00000300 | * * Flag for and * which indicates that * the object reports acceleration information. * * This flag is new for DirectX 5.0. * * @define DIDOI_ASPECTFORCE | 0x00000400 | * * Flag for and * which indicates that * the object reports force information. * * This flag is new for DirectX 5.0. * * @define DIDOI_ASPECTMASK | 0x00000F00 | * * Mask for and * which indicates the bits * that are used to report aspect information. * * This mask is new for DirectX 5.0. * An object can represent at most one aspect. * * @define DIDOI_POLLED | 0x00008000 | * * Flag for which indicates * that the object must be explicitly polled in order for * data to be retrieved from it. * * If this flag is not set, then data for the object is * interrupt-driven. * * This flag is new for DirectX 5.0. * * @define DIDOI_GUIDISUSAGE | 0x00010000 | * * Flag for which indicates that * the .pguid field is really a * (suitably cast) * of the usage page and usage * that is desired. * * This flag is new for DirectX 5.0a. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_500 #define DIDOI_FFACTUATOR 0x00000001 #define DIDOI_FFEFFECTTRIGGER 0x00000002 #define DIDOI_POLLED 0x00008000 #define DIDOI_NOTINPUT 0x80000000;internal #define DIDOI_ASPECTUNKNOWN 0x00000000;internal #define DIDOI_ASPECTPOSITION 0x00000100 #define DIDOI_ASPECTVELOCITY 0x00000200 #define DIDOI_ASPECTACCEL 0x00000300 #define DIDOI_ASPECTFORCE 0x00000400 #define DIDOI_ASPECTMASK 0x00000F00 ;end ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIDOI_GUIDISUSAGE 0x00010000 ;end #define DIDOI_RANDOM 0x80000000;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPHEADER | * * Generic structure which is placed at the beginning of all * property structures. * * @field DWORD | dwSize | * * (IN) "Must" be the size of the enclosing structure. * * @field DWORD | dwHeaderSize | * * (IN) "Must" be the size of the structure. * * @field DWORD | dwObj | * * Identifies the object for which the property is to be * accessed. * * If the field is * , then the field * must be zero. * * If the field is * , then the field * is the * offset into the current data format of the object * whose property is being accessed. * * If the field is * , then the field * is the object type/instance identifier as returned in * the

field of the * returned from a prior call to * . * * If the field is * , then the field * is the HID usage page and usage values, combined into * a single with the * macro. * * If more than object has the specified HID usage page * and usage, then one is selected arbitrarily. * * The value is new for DirectX 5.0a. * * @field DWORD | dwHow | * * Specifies how the * field should be interpreted. * ****************************************************************************/ enddoc typedef struct DIPROPHEADER { DWORD dwSize; DWORD dwHeaderSize; DWORD dwObj; DWORD dwHow; } DIPROPHEADER, *LPDIPROPHEADER; typedef const DIPROPHEADER *LPCDIPROPHEADER; #define DIPH_DEVICE 0 #define DIPH_BYOFFSET 1 #define DIPH_BYID 2 ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIPH_BYUSAGE 3 ;end begindoc /**************************************************************************** * @func DWORD | DIMAKEUSAGEDWORD | * * Combine a usage page and usage into a single * that can be passed in the * field of a or as the *

parameter to the * method, * provided that the corresponding

is set to * the value . * * @parm WORD | wUsagePage | * * HID usage page value. * * @parm WORD | wUsage | * * HID usage value. * * @xref . * * @devnote NOTE - this is in a different order from that in * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIMAKEUSAGEDWORD(UsagePage, Usage) \ (DWORD)MAKELONG(Usage, UsagePage) ;end begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPDWORD | * * Generic structure used to access DWORD properties. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPDWORD). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field DWORD | dwData | * * On , contains the value of the property to * be set. On , receives the value of the property. * ****************************************************************************/ enddoc typedef struct DIPROPDWORD { DIPROPHEADER diph; DWORD dwData; } DIPROPDWORD, *LPDIPROPDWORD; typedef const DIPROPDWORD *LPCDIPROPDWORD; ;begin_public_dx8 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPPOINTER | * * Generic structure used to access POINTER properties. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPPOINTER). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field UINT_PTR | uData | * * On , contains the value of the property to * be set. On , receives the value of the property. * This field contains enough bits to represent a pointer on the * intended platform; 32 bits for Win32, 64 bits for Win64. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 typedef struct DIPROPPOINTER { DIPROPHEADER diph; UINT_PTR uData; } DIPROPPOINTER, *LPDIPROPPOINTER; typedef const DIPROPPOINTER *LPCDIPROPPOINTER; ;end ;end_public_dx8 begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPRANGE | * * Generic structure used to access properties whose values * represent a range. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPRANGE). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field LONG | lMin | * * The lower limit of the range, inclusive. * * @field LONG | lMax | * * The upper limit of the range, inclusive. * * (Yes, this name is a violation of Hungarian notation. * The correct name for this would be "lMac", but that * would just create more confusion.) * * @comm * If the device has an unrestricted range, the reported * range will have = DIPROPRANGE_NOMIN * and = DIPROPRANGE_NOMAX. Note that * devices with unrestricted range will wrap around. * ****************************************************************************/ enddoc typedef struct DIPROPRANGE { DIPROPHEADER diph; LONG lMin; LONG lMax; } DIPROPRANGE, *LPDIPROPRANGE; typedef const DIPROPRANGE *LPCDIPROPRANGE; #define DIPROPRANGE_NOMIN ((LONG)0x80000000) #define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF) ;begin_if_(DIRECTINPUT_VERSION)_50A begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPCAL | * * Generic structure used to access properties whose values * represent axis calibration information. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPRANGE). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field LONG | lMin | * * The lower limit of the object's range, inclusive. * * @field LONG | lCenter | * * The object value when the device is returned to its * natural center position. * * @field LONG | lMax | * * The upper limit of the object's range, inclusive. * * (Yes, this name is a violation of Hungarian notation. * The correct name for this would be "lMac", but that * would just create more confusion.) * ****************************************************************************/ enddoc typedef struct DIPROPCAL { DIPROPHEADER diph; LONG lMin; LONG lCenter; LONG lMax; } DIPROPCAL, *LPDIPROPCAL; typedef const DIPROPCAL *LPCDIPROPCAL; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPCALPOV | * * Generic structure used to access properties whose values * represent POV calibration information. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPRANGE). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field LONG | lMin[5] | * * The lower limit of the object's ranges. * * @field LONG | lMax[5] | * * The upper limit of the object's ranges. * * @comm Although we only use four directions when calibrating POV, the extra entry * is for the centered value which we may support in the future. * ****************************************************************************/ enddoc typedef struct DIPROPCALPOV { DIPROPHEADER diph; LONG lMin[5]; LONG lMax[5]; } DIPROPCALPOV, *LPDIPROPCALPOV; typedef const DIPROPCALPOV *LPCDIPROPCALPOV; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPGUIDANDPATH | * * Generic structure used to access properties whose values * represent a GUID and path. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPGUIDANDPATH). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field GUID | guidClass | * * The class GUID for the object. * * @field WCHAR | wszPath | * * The path for the object. Note that this is a UNICODE string. * ****************************************************************************/ enddoc typedef struct DIPROPGUIDANDPATH { DIPROPHEADER diph; GUID guidClass; WCHAR wszPath[MAX_PATH]; } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPSTRING | * * Generic structure used to access properties whose values * represent a string. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPSTRING). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field WCHAR | wsz | * * The string itself. Note that this is a UNICODE string. * ****************************************************************************/ enddoc typedef struct DIPROPSTRING { DIPROPHEADER diph; WCHAR wsz[MAX_PATH]; } DIPROPSTRING, *LPDIPROPSTRING; typedef const DIPROPSTRING *LPCDIPROPSTRING; ;end ;begin_if_(DIRECTINPUT_VERSION)_800 #define MAXCPOINTSNUM 8 typedef struct _CPOINT { LONG lP; // raw value DWORD dwLog; // logical_value / max_logical_value * 10000 } CPOINT, *PCPOINT; typedef struct DIPROPCPOINTS { DIPROPHEADER diph; DWORD dwCPointsNum; CPOINT cp[MAXCPOINTSNUM]; } DIPROPCPOINTS, *LPDIPROPCPOINTS; typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS; ;end ;begin_internal_800 begindoc /**************************************************************************** * * @doc INTERNAL * * @struct DIIMAGELABEL | * * Structure used to represent a string and associated display * attributes. * * @field RECT | MaxStringExtent | * * Area into which a string may be drawn. The string is displayed * relative to this rectangle in the manner described in the * field. * * @field DWORD | dwFlags | * * A combination of flags used to describe display * attributes. * * @field POINT | Line[10] | * * Coordinates of points defining nine line segments to be drawn * from the action to the label. * * @field DWORD | dwLineCount | * * Count of number of coordinates used in above array. * * @field WCHAR | wsz | * * The string itself. Note that this is a UNICODE string. * ****************************************************************************/ enddoc typedef struct DIIMAGELABEL { RECT MaxStringExtent; DWORD dwFlags; POINT Line[10]; DWORD dwLineCount; WCHAR wsz[MAX_PATH]; } DIIMAGELABEL, *LPDIIMAGELABEL; typedef const DIIMAGELABEL *LPCDIIMAGELABEL; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIPROPGUID | * * Generic structure used to access GUID properties. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPGUID). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field GUID | guid | * * On , contains the value of the property to * be set. On , receives the value of the property. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 typedef struct DIPROPGUID { DIPROPHEADER diph; GUID guid; } DIPROPGUID, *LPDIPROPGUID; typedef const DIPROPGUID *LPCDIPROPGUID; ;end begindoc /**************************************************************************** * * @doc INTERNAL * * @struct DIPROPFILETIME | * * Not very generic structure used to access FILETIME properties. * * @field DIPROPHEADER | diph | * * (IN) "Must" be preinitialized as follows: * * = sizeof(DIPROPFILETIME). * * = sizeof(DIPROPHEADER). * * = object identifier. * * = how the * should be interpreted. * * @field GUID | guid | * * On , contains the value of the property to * be set. On , receives the value of the property. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 typedef struct DIPROPFILETIME { DIPROPHEADER diph; FILETIME time; } DIPROPFILETIME, *LPDIPROPFILETIME; typedef const DIPROPFILETIME *LPCDIPROPFILETIME; ;end ;end_internal_800 begindoc /**************************************************************************** * * @doc EXTERNAL * * @func REFGUID | MAKEDIPROP | * * Helper macro which creates an integer property. * * Integer properties are defined by Microsoft. Vendors which * wish to implement custom properties should use GUIDs. * * @parm int | prop | * * The integer property. * ****************************************************************************/ enddoc #ifdef __cplusplus #define MAKEDIPROP(prop) (*(const GUID *)(prop)) #else #define MAKEDIPROP(prop) ((REFGUID)(prop)) #endif begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_BUFFERSIZE | MAKEDIPROP(1) | * * Predefined property which sets or retrieves the device input * buffer size. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * The field may be set to zero to indicate * that no buffering is requested. * * If the buffer size is too large to be supported by the device, * then the largest possible buffer size is set. * * This property may not be altered while the device is acquired. * ****************************************************************************/ enddoc #define DIPROP_BUFFERSIZE MAKEDIPROP(1) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_AXISMODE | MAKEDIPROP(2) | * * Predefined property which sets or retrieves the axis data * mode. This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * The field may be one of the following * values: * * : Report axis positions in "absolute * coordinates". Axis motion accumulates over time. * * : Report axis positions in "relative * coordinates". Axis motion is reported as differences * from the previous request for the axis position. * * This property may not be altered while the device is acquired. * ****************************************************************************/ enddoc #define DIPROP_AXISMODE MAKEDIPROP(2) #define DIPROPAXISMODE_ABS 0 #define DIPROPAXISMODE_REL 1 #define DIPROPAXISMODE_VALID 1 //;Internal begindoc /**************************************************************************** * * @define DIPROP_GRANULARITY | MAKEDIPROP(3) | * * Predefined property which retrieves the granularity of the * object. * * The

"must" be a * pointer to the member of a * structure. * * The value of the granularity is the smallest * distance the object will report movement. Most axis * devices has a granularity of 1, meaning that all values * are possible. * * Some axes may have a larger granularity. * For example, the Z-wheel axis on a mouse may have a * graularity of 20, meaning that all reported changes in * position will be multiples of 20. In other words, when * the user turns the Z-wheel slowly, the device reports * a position of zero, then 20, then 40, etc. * * For a POV object, the granularity represents the increments * by which the object reports directions. For example, a * granularity of 9000 means that the device reports directions * in multiples of 90 degrees. * * This is a read-only property. * ****************************************************************************/ enddoc #define DIPROP_GRANULARITY MAKEDIPROP(3) begindoc /**************************************************************************** * * @define DIPROP_RANGE | MAKEDIPROP(4) | * * Predefined property which retrieves the range of values * reported by an object. * * The

"must" be a * pointer to the member of a * structure. * * Not all objects permit their ranges to be altered. * In particular, you can set the range of joystick axes, * but not on mouse axes. * * This property may not be altered while the device is acquired. * * @devnote * * The ability to alter the range on a joystick axis * is new for DX5. * * ****************************************************************************/ enddoc #define DIPROP_RANGE MAKEDIPROP(4) ;begin_public_500 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_DEADZONE | MAKEDIPROP(5) | * * Predefined property which accesses the dead zone for * the object or device. Setting the dead zone for the * entire device is equivalent to setting it for each * axis individually. * * The

"must" be a * pointer to the member of a * structure. * * You can set the dead zone property for all axes * by setting the * field of the * to and the * field to zero. * * You can set the dead zone property for a particular * axis by setting the * field of the * to or to and setting * the field to the object id * or offset (respectively). * * The field contains the dead zone * for the object. The dead zone is a value in * the range 0 through 10000, where 0 indicates that there * is no dead zone and 10000 indicates that the entire * physical range of the device is dead. * * Dead zones currently apply only to joystick devices. * Analog joysticks typically do not center themselves * consistently to the same value. As a result, a joystick * which appears to be centered from the user's * point of view may actually report a value slightly * different from center. * * The dead zone is the region around the center position * in which motion is ignored. For example, if the dead * zone is set to 500, then the axis must move five percent * from its center position before a motion will * be reported. As long as the axis remains within the dead * zone, the position is reported as equal to the center. * * Setting the dead zone to zero disables it. * * Each axis has an independent dead zone. For example, * if a joystick controller represents both an X and a Y * axis, and the user pushes the joystick directly forward, * but not left/right, then the X axis dead zone will maintain * the X coordinate as centered, even though the Y coordinate * has change significantly. This behavior allows the user * to (for example) move forward without slipping left or right. * * See the description of the property * for a diagram that illustrates how the dead zone affects * the values reported by DirectInput. * * This property may not be altered while the device is acquired. * * @devnote * * This is new for DX5. * ****************************************************************************/ enddoc #define DIPROP_DEADZONE MAKEDIPROP(5) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_SATURATION | MAKEDIPROP(6) | * * Predefined property which accesses the saturation level for * the object or device. Setting the saturation for the * entire device is equivalent to setting it for each * axis individually. * * The

"must" be a * pointer to the member of a * structure. * * You can set the saturation property for all axes * by setting the * field of the * to and the * field to zero. * * You can set the saturation property for a particular * axis by setting the * field of the * to or to and setting * the field to the object id * or offset (respectively). * * The field contains the saturation level * for the object. The saturation level is a value in * the range 0 through 10000. * * Saturation levels currently apply only to joystick devices. * Analog joysticks typically have problems reporting the full * range of values. For example, a joystick's X axis may * report "full left" only when the joystick is moved to the * upper left corner. If moved to the lower left corner, * it may report a value that is slightly above the minimum * value the axis putatively reports. * * The saturation level is the point at which the position of * the axis is considered to be at its most extreme position. * For example, if the saturation level is set to 9500, * then once the axis moves 95 percent of the distance from * its center position to its extreme position, the reported * value will be its extreme position. * * Setting the saturation level to 10000 disables it. * * The saturation level must be greater than the dead zone * for the combined effect to be meaningful. * * Each axis has an independent saturation level. * * This property may not be altered while the device is acquired. * * @ex The following crude diagram (not to scale) * illustrates the combined effects of a dead zone and * a saturation level. * * The vertical axis shows the values returned by DirectInput. * "min" and "max" are the axis range minimum and maximum values. * "ctr" is the axis center position. * * The horizontal axis represents the physical axis position. * "dmin" and "dmax" are the minimum and maximum ranges of * the dead zone, while "smin" and "smax" are the lower and * upper saturation levels. "pmin" and "pmax" are the * physical range * of the axis. pctr" is the axis physical center position. * * * * | * * . | * . max- *----* * . r | / * . e | / * . t | / * . u ctr- *------* * . r | / * . n | / * . e | / * . d min- *----* * . | * . +-|----|---|---|--|---|----|-- * . pmin smin dmin |dmax smax pmax * . | * . pctr * . * . physical position * * * @devnote * * This is new for DX5. * ****************************************************************************/ enddoc #define DIPROP_SATURATION MAKEDIPROP(6) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_FFGAIN | MAKEDIPROP(7) | * * Predefined property which accesses the gain setting for * the device. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * The field contains a gain value * that is applied to all effects created on the device. * The value is an integer in the range 0 to 10,000, * specifying the amount by which effect magnitudes should * be scaled for the device. * * For example, a value of 10,000 indicates that * all effect magnitudes are to be taken at face value. * A value of 9,000 indicates that all effect magnitudes * are to be reduced to 90% of their nominal magnitudes. * * Setting a gain value is useful when an application * wishes to scale down the strength of all force feedback * effects uniformly, based on user preferences. * * Note that the DirectInput control panel can specify * a system-wide device gain which is applied in addition * to the gain specified by the property. * * For example, if the DirectInput control panel has set * the system-wide device gain to 50%, and the application * sets the device gain to 9000 (90%), then effects * will be played at 45% of their nominal magnitudes. * * ISSUE-2001/03/29-timgill feature spec wrong * DirectInput control panel doesn't do this yet. * * @devnote * * This is new for DX5. * ****************************************************************************/ /* * @doc INTERNAL * * @func BOOL | ISVALIDGAIN | * * Internal macro used to validate that a gain value is * nominally valid. Although technically the value must * lie in the range 0 to 10,000, we actually allow it to * go as high as 65535 ("overgain") for devices which * want to be able to magnify effects as well as damp them. * * The value of 65535 is very special, because we need * to combine two gain values into a single gain, and * doesn't like it when the result of the * operation doesn't fit into 32 bits. * * @parm DWORD | dwGain | * * The gain value to check. * ****************************************************************************/ enddoc #define DIPROP_FFGAIN MAKEDIPROP(7) #define ISVALIDGAIN(n) (HIWORD(n) == 0) ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_FFLOAD | MAKEDIPROP(8) | * * Predefined property which accesses the memory load for * the device. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * The field contains a value * in the range 0 to 100, indicating the amount of * device memory in use (in percent). * A value of 0 means * that the device memory is all available; * a value of 100 means that the device is full. * * @devnote * * This is new for DX5. * ****************************************************************************/ enddoc #define DIPROP_FFLOAD MAKEDIPROP(8) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_AUTOCENTER | MAKEDIPROP(9) | * * Predefined property which allows the application to * specify whether device objects are self-centering. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * The field may be one of the following * values: * * : The device should not * automatically center when the user releases the * device. An application that uses force-feedback * should disable the auto-centering spring before * playing effects. * * : The device should automatically * center when the user releases the device. For example, * in this mode, a joystick would engage the self-centering * spring. * * Note that the use of force feedback effects may * interfere with the auto-centering spring. Some * devices disable the auto-centering spring when * a force-feedback effect is played. * * Note that not all devices support the auto-center property. * * @devnote * * This is new for DX5. * ****************************************************************************/ enddoc #define DIPROP_AUTOCENTER MAKEDIPROP(9) #define DIPROPAUTOCENTER_OFF 0 #define DIPROPAUTOCENTER_ON 1 #define DIPROPAUTOCENTER_VALID 1 ;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_CALIBRATIONMODE | MAKEDIPROP(10) | * * Predefined property which allows the application to * specify whether DirectInput should retrieve calibrated * or uncalibrated data from an axis. By default, * DirectInput retrieves * calibrated data. Control panel-type applications may * need to retrieve raw (uncalibrated) data. * * Setting the calibration mode for the entire device * is equivalent to setting it for each axis individually. * * The

"must" be a * pointer to the member of a * structure. * * You can set the calibration mode property for all axes * by setting the * field of the * to and the * field to zero. * * You can set the calibration mode property for a particular * axis by setting the * field of the * to or to and setting * the field to the object id * or offset (respectively). * * The field may be one of the following * values: * * : DirectInput should * return data after applying calibration information. * This is the default mode. * * : DirectInput should * return raw, uncalibrated data. This mode is typically * used only by control panel-type applications. * * Note that setting a device into "raw" mode causes the * dead zone, saturation, and range settings to * be ignored. * * @devnote * * This is new for DX5. * ****************************************************************************/ enddoc #define DIPROP_CALIBRATIONMODE MAKEDIPROP(10) #define DIPROPCALIBRATIONMODE_COOKED 0 #define DIPROPCALIBRATIONMODE_RAW 1 #define DIPROPCALIBRATIONMODE_VALID 1 ;internal ;end_public_500 ;begin_if_(DIRECTINPUT_VERSION)_50A begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_CALIBRATION | MAKEDIPROP(11) | * * Predefined property which allows the application to * access the information that DirectInput uses to * manipulate axes which require calibration. * * This property exists primarily for control panel-type * applications. Normal applications should have no need * to deal with calibration information. * * The

"must" be a * pointer to the member of a * structure. * * You can access the calibration mode property for a particular * axis by setting the * field of the * to or to and setting * the field to the object id * or offset (respectively). * * Control panel applications which set new calibration data * must also invoke the * method to notify other applications of the change in * calibration. * * @devnote * * The property is new for DirectX 5.0a * ****************************************************************************/ enddoc #define DIPROP_CALIBRATION MAKEDIPROP(11) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_GUIDANDPATH | MAKEDIPROP(12) | * * Predefined property which allows the application to * access the class GUID and device interface (path) * for the device. * * This property exists for advanced applications * which wish to perform operations on the device * which are not supported by DirectInput. * The application can call on the * returned path in order to access the device * directly. If an application chooses to go this * route, it is the responsibility of the application * to manage the device properly. * * Normal applications should have no need * to access the device directly. * * This property applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The property is new for DirectX 5.0a * ****************************************************************************/ enddoc #define DIPROP_GUIDANDPATH MAKEDIPROP(12) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_INSTANCENAME | MAKEDIPROP(13) | * * Predefined property which allows the application to * access the instance friendly name returned in the * structure's * field. * * This property exists for advanced applications * which wish to change the friendly name of a device * in order better to distinguish it from similar * devices which are plugged in simultaneously. * * Normal applications should have no need * to change the device friendly name. * Normal applications can retrieve the friendly name * with the method. * * This property applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The property is new for DirectX 5.0a * ****************************************************************************/ enddoc #define DIPROP_INSTANCENAME MAKEDIPROP(13) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_PRODUCTNAME | MAKEDIPROP(14) | * * Predefined property which allows the application to * access the product friendly name returned in the * structure's * field. * * This property exists for advanced applications * which wish to change the friendly name of a device * in order better to distinguish it from similar * devices which are plugged in simultaneously. * * Normal applications should have no need * to change the product name. * Normal applications can retrieve the product name * with the method. * * This property applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The property is new for DirectX 5.0a * ****************************************************************************/ enddoc #define DIPROP_PRODUCTNAME MAKEDIPROP(14) ;end ;begin_if_(DIRECTINPUT_VERSION)_5B2 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_JOYSTICKID | MAKEDIPROP(15) | * * Predefined property which retrieves the device's * joystick ID. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * * @devnote * * The property is new for DirectX 6.1a * ****************************************************************************/ enddoc #define DIPROP_JOYSTICKID MAKEDIPROP(15) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_GETPORTDISPLAYNAME | MAKEDIPROP(16) | * * Predefined property which retrieves the display name of the * port that the device is connected to. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The property is new for DirectX 6.1a * ****************************************************************************/ enddoc #define DIPROP_GETPORTDISPLAYNAME MAKEDIPROP(16) begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIPROP_ENABLEREPORTID | MAKEDIPROP(17) | * * @devnote * * * The property should not be reassigned. * The internal version of the property is documented elsewhere. * ****************************************************************************/ enddoc ;end ;begin_if_(DIRECTINPUT_VERSION)_700 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_PHYSICALRANGE | MAKEDIPROP(18) | * * Predefined property which retrieves the physical range * reported by an object. * * The

"must" be a * pointer to the member of a * structure. * * Physical ranges can't be altered. * * @devnote * * The ability to get the physical range on a joystick axis * is new for DX7. * * ****************************************************************************/ enddoc #define DIPROP_PHYSICALRANGE MAKEDIPROP(18) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_LOGICALRANGE | MAKEDIPROP(19) | * * Predefined property which retrieves the logical range * reported by an object. * * The

"must" be a * pointer to the member of a * structure. * * Logical ranges can't be altered. * * @devnote * * The ability to get the logical range on a joystick axis * is new for DX7. * * ****************************************************************************/ enddoc #define DIPROP_LOGICALRANGE MAKEDIPROP(19) ;end ;begin_if_(DIRECTINPUT_VERSION)_800 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_KEYNAME | MAKEDIPROP(20) | * * Predefined property which retrieves the text name of a key on keyboard * * The

"must" be a * pointer to the member of a * structure. * * Key name can't be altered. * * @devnote * * The ability to get the key text name is new for DX8. * * This property is only applied to object, not device. * If dwHow == DIPH_DEVICE, E_INVALIDARG will be returned. * * ****************************************************************************/ enddoc #define DIPROP_KEYNAME MAKEDIPROP(20) begindoc /**************************************************************************** * * @define DIPROP_CPOINTS | MAKEDIPROP(21) | * * Get/Set the control points for calibration. * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The ability to set/get for calibration. * New for Dinput8. * * ****************************************************************************/ enddoc #define DIPROP_CPOINTS MAKEDIPROP(21) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_APPDATA | MAKEDIPROP(22) | * * Predefined property which sets or retrieves the application data * associated with an object on a device. * An object which is not included in the current data format does * not have application data so this property cannot be accessed. * * The

"must" be a pointer to the * member of a structure. * * This property may not be altered while the device is acquired. * ****************************************************************************/ enddoc #define DIPROP_APPDATA MAKEDIPROP(22) begindoc /**************************************************************************** * @doc EXTERNAL * * @define DIPROP_SCANCODE | MAKEDIPROP(23) | * * Predefined object property which retrieves the PS/2 scan code * associated with or a keyboard key object. * Note, if the keyboard is a HID keyboard, the scan code retrieved * is the PS/2 equivalent of the HID usage for the object. * * The

"must" be a pointer to the * member of a structure. * * @devnote * * This property is only applied to object, not device. * If dwHow == DIPH_DEVICE, E_INVALIDARG will be returned. * ****************************************************************************/ enddoc #define DIPROP_SCANCODE MAKEDIPROP(23) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_VIDPID | MAKEDIPROP(24) | * * Predefined read-only device property which retrieves the vendor * ID and product ID of a HID device. * * These two WORD values are combined in the * field so the values should be extracted as follows * wVendorID = LOWORD( ); * wProductID = HIWORD( ); * * This property applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a pointer to the * member of a structure. * ****************************************************************************/ enddoc #define DIPROP_VIDPID MAKEDIPROP(24) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_USERNAME | MAKEDIPROP(25) | * * Predefined property which retrieves the name of the user * currently using the device. * This setting applies to the entire device, rather * than to any particular object, so the * field must be . * * The

"must" be a * pointer to the member of a * structure. * * @devnote * * The property is new for DirectX 8 * ****************************************************************************/ enddoc #define DIPROP_USERNAME MAKEDIPROP(25) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIPROP_TYPENAME | MAKEDIPROP(26) | * * Predefined property which retrieves the type name of a device. * For most game controllers this is the registry key name under * from which static device settings may be * retrieved but predefined joystick types have special names * consisting of a "#" character followed by a character dependent * upon the type. * This value may not be available for all devices. * This setting applies to the entire device, rather than to any * particular object, so the field must be * . * * The

"must" be a pointer to the * member of a structure. * * * @devnote * * The property is new for DirectX 8 * ****************************************************************************/ enddoc #define DIPROP_TYPENAME MAKEDIPROP(26) ;end ;begin_internal_800 begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIPROP_ENABLEREPORTID | MAKEDIPROP(0xFFFB) | * * predefined property which enables/disables * HID features/outputs associated with the * elements specified by the previous * . * * The

"must" be a * pointer to the member of a * structure. * * If is , * can be set to * 0x0 to disable polling of all report IDs contained * contained in the previous call to . * * 0x1 to enable polling of all report IDs. * * If is not and pertains to * individual elements within the specified data format, * can be set to * 0xFFFFFFFF to disable all output(s)/feature(s) that use * the same report ID. * 0x0 to disable polling of report ID associated with the feature/output * ,only if all other feature(s)/output(s) that use the same report ID have * also been disabled. * * 0x1 to enable polling of HID report ID associated with the feature/output. * * By default, Dinput will only poll for reportIds that are referenced by * elements in the previous . * * @devnote * * The property is new for DirectX 6.1a * ****************************************************************************/ enddoc #define DIPROP_ENABLEREPORTID MAKEDIPROP(0xFFFB) // now unused, may be replaced DIPROP_IMAGEFILE MAKEDIPROP(0xFFFC) ;internal begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIPROP_MAPFILE | MAKEDIPROP(0xFFFD) | * * predefined property which is used to get a * fully qualified file name for the hardware manufacturer supplied * default semantic map for the device. * * This setting applies to the entire device, rather than to any * particular object, so the field * must be . * * The

"must" be a pointer to the * member of a structure. * * @devnote * * The property is new for DirectX 8. * ****************************************************************************/ enddoc #define DIPROP_MAPFILE MAKEDIPROP(0xFFFD)//;Internal ;end_internal_800 begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIPROP_SPECIFICCALIBRATION | MAKEDIPROP(0xFFFE) | * * predefined property which acts the same * as , except that the resulting change * to the calibration is not propagated to any alias devices. * * By default, changing the calibration of one device * also changes the calibration of all its aliases, * and changing the calibration of an alias updates * the calibration of its referent. * * When a device is munging the calibration of an alias, * it uses this property instead of the regular * property, so as to avoid * infinite recursion death as each device keeps trying * to update the other. * * Also, the units of a specific calibration are always * the VJOYD-calibration values. * ****************************************************************************/ enddoc #define DIPROP_SPECIFICCALIBRATION MAKEDIPROP(0xFFFE)//;Internal ;internal begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIPROP_MAXBUFFERSIZE | MAKEDIPROP(0xFFFF) | * * predefined property which accesses the * maximum allowable buffer size for the device. * * It exists as a back-door in case somebody comes up with * an application that needs a really huge buffer size. * (The current maximum is 1023.) * * This property may not be altered while the device is acquired. * * Warning: The value of this property was originally 5 * in DX3. But nobody has needed it, so I'm moving it * to 0xFFFF to keep it out of the way. * ****************************************************************************/ enddoc #define DIPROP_MAXBUFFERSIZE MAKEDIPROP(0xFFFF) //;Internal ;internal #define DEVICE_MAXBUFFERSIZE 1023 //;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDEVICEOBJECTDATA | * * The structure is used by the * method * to return raw buffered device information. * * @field DWORD | dwOfs | * * Offset into the current data format of the object * whose data is being reported. In other words, the * location where the * would have been stored if the data had been obtained via * . * * For the predefined data formats, the * field will be as follows: * * If the device is accessed as a mouse, it will be one * of the values. * * If the device is accessed as a keyboard, it will be one * of the values. * ;begin_public_500 * If the device is accessed as a joystick, it will be one * of the values. ;end_public_500 * @field DWORD | dwData | * * The data obtained from the device. The format of this * data depends on the type of the device, but in all cases, * the data is reported in raw form. * * : If the device is in relative axis mode, * then the relative axis motion is reported. If the device * is in absolute axis mode, then the absolute axis coordinate * is reported. * * : Only the low byte of the * is significant. * The high bit of the low byte is set if the button * went down; it is clear if the button went up. * * : The direction in which the user is * pressing the device. * * @field DWORD | dwTimeStamp | * * Tick count in milliseconds at which the event was generated. * The current system tick count can be obtained by calling the * system function. Remember that this value * wraps around approximately every 50 days. * * @field DWORD | dwSequence | * * DirectInput sequence number for this event. All DirectInput * events are assigned an increasing sequence number. * This allows events from different devices to be sorted * chronologically. Since this value can wrap around, care must * be taken when comparing two sequence numbers. The * macro can be used to perform this * comparison safely. * ;begin_public_800 * @field UINT_PTR | uAppData | * * Identifier supplied by an application for this object * in the latest call. * * * @comm DIDEVICEOBJECTDATA_DX3 is defined to allow applications which * need to use the original structure to do so. ;end_public_800 * * @func BOOL | DISEQUENCE_COMPARE | * * Macro which compares two DirectInput sequence numbers, * compensating for wraparound. * * @parm DWORD | dwSequence1 | * * First sequence number to compare. * * @parm operator | cmp | * * One of the following comparison operators: * "==", "!=", "", "", "=", "=". * * @parm DWORD | dwSequence2 | * * Second sequence number to compare. * * @returns * * Returns a nonzero value iff the first sequence number is * equal to, is not equal to, chronologically precedes, * chronologically follows, chronologically precedes or is * equal to, or chronologically follows or is * equal to the second sequence number. * * @ex * * The following example checks whether

* precedes

chronologically: * * | * * if (DISEQUENCE_COMPARE(dwSequence1, <, dwSequence2)) { * ... * } * * @ex * * The following example checks whether

* chronologically follows or is equal to

: * * | * * if (DISEQUENCE_COMPARE(dwSequence1, >=, dwSequence2)) { * ... * } * ****************************************************************************/ enddoc ;begin_public_800 typedef struct DIDEVICEOBJECTDATA_DX3 { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; } DIDEVICEOBJECTDATA_DX3, *LPDIDEVICEOBJECTDATA_DX3; typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX; ;end_public_800 typedef struct DIDEVICEOBJECTDATA { DWORD dwOfs; DWORD dwData; DWORD dwTimeStamp; DWORD dwSequence; ;begin_if_(DIRECTINPUT_VERSION)_800 UINT_PTR uAppData; ;end } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA; typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA; #define DIGDD_PEEK 0x00000001 #define DIGDD_RESIDUAL 0x00000002 //;Internal #define DIGDD_VALID 0x00000003 //;Internal #define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \ ((int)((dwSequence1) - (dwSequence2)) cmp 0) begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DISCL_EXCLUSIVE | 0x00000001 | * * Parameter to to indicate that * exclusive access is desired. * If exclusive access is granted, then no other instance of * of the device * may obtain exclusive access to the device while it is * acquired. Note, however, that non-exclusive access to the device * is always permitted, even if another application has * obtained exclusive access. (The word "exclusive" is a bit * of a misnomer here, but it is employed to parallel a similar * concept in DirectDraw.) * * It is strongly recommended that an application which acquires * the mouse or keyboard device in exclusive mode unacquire * the devices upon receipt * of and messages; * otherwise, the user will not be able to manipulate the menu * or move or resize the window. * * Exactly one of or * must be passed to . "It is an error" * to pass both or neither. * * In the current version of DirectInput, * exclusive access requires foreground access. * * @define DISCL_NONEXCLUSIVE | 0x00000002 | * * Parameter to to indicate that * non-exclusive access is desired. Access to the device will * not interfere with other applications which are accessing * the same device. * * Exactly one of or * must be passed to . "It is an error" * to pass both or neither. * * @define DISCL_FOREGROUND | 0x00000004 | * * Parameter to to indicate that * foreground access is desired. * If foreground access is granted, then the device is * automatically unacquired when the associated window * loses foreground activation. * * Exactly one of or * must be passed to . "It is an error" * to pass both or neither. * * @define DISCL_BACKGROUND | 0x00000008 | * * Parameter to to indicate that * background access is desired. * If background access is granted, then the device may * be acquired at any time, even when the associated window * is not the active window. * * Exactly one of or * must be passed to . "It is an error" * to pass both or neither. * * @define DISCL_NOWINKEY | 0x00000010 | * * Parameter to to indicate that * Window Keys (LWIN and RWIN) are disable. * * Exclusive Foreground mode already disables the Window Keys. * It is only useful in NoExclusive mode. * * Note that the current version of DirectInput does not * permit exclusive background access. * ****************************************************************************/ enddoc #define DISCL_EXCLUSIVE 0x00000001 #define DISCL_NONEXCLUSIVE 0x00000002 #define DISCL_EXCLMASK 0x00000003 //;Internal #define DISCL_FOREGROUND 0x00000004 #define DISCL_BACKGROUND 0x00000008 #define DISCL_NOWINKEY 0x00000010 #define DISCL_GROUNDMASK 0x0000000C //;Internal #define DISCL_VALID 0x0000001F //;Internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIDEVICEINSTANCE | * * The structure is used by the * and * methods * to return information about a particular device instance. * * @field IN DWORD | dwSize | * * The size of the structure in bytes. * * @field IN GUID | guidInstance | * * Unique identifier which identifies the instance of the device. * An application may save the instance GUID into a configuration * file and use it at a later time. Instance GUIDs are specific * to a particular machine. An instance GUID obtained from one * machine is unrelated to instance GUIDs on another machine. * * @field IN GUID | guidProduct | * * Unique identifier which identifies the product. * This identifier is established by the manufacturer of the * device. * * @field IN DWORD | dwDevType | * * Device type specifier. Se the section titled * "DirectInput device type description codes" * for a description of this field. * * @field IN TCHAR | tszInstanceName[MAX_PATH] | * * Friendly name for the instance. For example, "Joystick 1". * * @field IN TCHAR | tszProductName[MAX_PATH] | * * Friendly name for the product. For example, * "Frobozz Industries SuperStick 5X" * * @field GUID | guidFFDriver | * * Unique identifier which identifies the the driver being * used for force feedback. This identifier is established * by the manufacturer of the force feedback driver. * * This field is new for DirectX 5.0. * * @field WORD | wUsagePage | * * If the device is a HID device, then this field contains the * HID usage page code. See the hidusage.h * header file for a list of usage pages. * * This field is new for DirectX 5.0. * * @field WORD | wUsage | * * If the device is a HID device, then this field contains the * HID usage code. See the hidusage.h * header file for a list of usages. * * This field is new for DirectX 5.0. * * @field LPDIRECTINPUTDEVICE | lpDiDev | * * Device interface pointer. * * This field is new for DirectX 8. * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_500 /* These structures are defined for DirectX 3.0 compatibility */ typedef struct DIDEVICEINSTANCE_DX3% { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; TCHAR% tszInstanceName[MAX_PATH]; TCHAR% tszProductName[MAX_PATH]; } DIDEVICEINSTANCE_DX3%, *LPDIDEVICEINSTANCE_DX3%; typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A; typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W; typedef const DIDEVICEINSTANCE_DX3 *LPCDIDEVICEINSTANCE_DX3; ;end typedef struct DIDEVICEINSTANCE% { DWORD dwSize; GUID guidInstance; GUID guidProduct; DWORD dwDevType; TCHAR% tszInstanceName[MAX_PATH]; TCHAR% tszProductName[MAX_PATH]; ;begin_if_(DIRECTINPUT_VERSION)_500 GUID guidFFDriver; WORD wUsagePage; WORD wUsage; ;end } DIDEVICEINSTANCE%, *LPDIDEVICEINSTANCE%; typedef const DIDEVICEINSTANCE% *LPCDIDEVICEINSTANCE%; typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE; ;begin_internal_500 /* * Name for the 5.0 structure, in places where we specifically care. */ typedef DIDEVICEINSTANCE% DIDEVICEINSTANCE_DX5%; typedef DIDEVICEINSTANCE DIDEVICEINSTANCE_DX5; typedef DIDEVICEINSTANCE% *LPDIDEVICEINSTANCE_DX5%; typedef DIDEVICEINSTANCE *LPDIDEVICEINSTANCE_DX5; typedef const DIDEVICEINSTANCE% *LPCDIDEVICEINSTANCE_DX5%; typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE_DX5; BOOL static __inline IsValidSizeDIDEVICEINSTANCEW(DWORD cb) { return cb == sizeof(DIDEVICEINSTANCE_DX5W) || cb == sizeof(DIDEVICEINSTANCE_DX3W); } BOOL static __inline IsValidSizeDIDEVICEINSTANCEA(DWORD cb) { return cb == sizeof(DIDEVICEINSTANCE_DX5A) || cb == sizeof(DIDEVICEINSTANCE_DX3A); } ;end_internal_500 begindoc /**************************************************************************** * * @doc INTERNAL * * @define DIRCP_MODAL | 0x00000001 | * * Parameter to to indicate that * the control panel should be displayed modally. (I.e., * that the method should not return until the user has exited * the control panel.) * * The default is to display the control panel non-modally. * * In the current version of DirectInput, * modal control panels are not supported. * ****************************************************************************/ enddoc #define DIRCP_MODAL 0x00000001 //;Internal #define DIRCP_VALID 0x00000000 //;Internal ;internal begin_interface(IDirectInputDevice%) begin_methods() declare_method(GetCapabilities, LPDIDEVCAPS) declare_method(EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACK%, LPVOID, DWORD) declare_method(GetProperty, REFGUID, LPDIPROPHEADER) declare_method(SetProperty, REFGUID, LPCDIPROPHEADER) declare_method(Acquire) declare_method(Unacquire) declare_method(GetDeviceState, DWORD, LPVOID) declare_method(GetDeviceData, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD) declare_method(SetDataFormat, LPCDIDATAFORMAT) declare_method(SetEventNotification, HANDLE) declare_method(SetCooperativeLevel, HWND, DWORD) declare_method(GetObjectInfo,LPDIDEVICEOBJECTINSTANCE%,DWORD,DWORD) declare_method(GetDeviceInfo,LPDIDEVICEINSTANCE%) declare_method(RunControlPanel, HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD, REFGUID) end_methods() end_interface() #endif /* DIJ_RINGZERO */ begindoc /**************************************************************************** * * IDirectInputDevice2 * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_500 begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DISFFC_RESET | 0x00000001 | * * Parameter to * which indicates that * playback of any active effects should be been stopped * and that all effects should be removed from the device. * Once the device has been reset, all effects are no longer * valid and must be re-created. * * @define DISFFC_STOPALL | 0x00000002 | * * Parameter to * to indicate that * playback of all effects should be stopped. * Sending the command is equivalent * to invoking the method * on all effects that are playing. * * If the device is in a paused state, sending this command * cause the paused state to be lost. * * @define DISFFC_PAUSE | 0x00000004 | * * Parameter to * to indicate that * playback of all effects should be paused. * * When effects are paused, time "stops" until the * command is sent. * For example, suppose an effect of five seconds' duration * is started. After one second, effects are paused. * After two more seconds, effects are continued. * The effect will then play for four additional seconds. * * Note that while a force feedback device is paused, * you may not start a new effect or modify existing ones. * Doing so may result * in the subsequent failing to perform * properly. * * If you wish to abandon a pause (rather than continue it), * send the or command. * * @define DISFFC_CONTINUE | 0x00000008 | * * Parameter to * to indicate that * effects whose playback was interrupt by a previous * command should be resumed at the point * at which they were interrupted. * * It is an error to send a command * when the device is not in a paused state. * * @define DISFFC_SETACTUATORSON | 0x00000010 | * * Parameter to * to indicate that the * device's force feedback actuators should be enabled. * * @define DISFFC_SETACTUATORSOFF | 0x00000020 | * * Parameter to * to indicate that the * device's force feedback actuators should be disabled. * If successful, force feedback effects are "muted". * * Note that while actuators are off, time still continues * to elapse. * For example, suppose an effect of five seconds' duration * is started. After one second, actuators are turned off. * After two more seconds, actuators are turned back on. * The effect will then play for two additional seconds. * ****************************************************************************/ enddoc #define DISFFC_NULL 0x00000000;internal #define DISFFC_RESET 0x00000001 #define DISFFC_STOPALL 0x00000002 #define DISFFC_PAUSE 0x00000004 #define DISFFC_CONTINUE 0x00000008 #define DISFFC_SETACTUATORSON 0x00000010 #define DISFFC_SETACTUATORSOFF 0x00000020 #define DISFFC_VALID 0x0000003F;internal #define DISFFC_FORCERESET 0x80000000;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIGFFS_EMPTY | 0x00000001 | * * Flag returned by * which indicates that * the force feedback device is devoid of any downloaded effects. * * @define DIGFFS_STOPPED | 0x00000002 | * * Flag returned by * to indicate that * no effects are currently playing and the device is not paused. * * @define DIGFFS_PAUSED | 0x00000004 | * * Flag returned by * to indicate that * playback of effects has been paused by a previous * command. * * @define DIGFFS_ACTUATORSON | 0x00000010 | * * Flag returned by * to indicate that the * device's force feedback actuators are enabled. * * @define DIGFFS_ACTUATORSOFF | 0x00000020 | * * Flag returned by * to indicate that the * device's force feedback actuators are disabled. * * @define DIGFFS_POWERON | 0x00000040 | * * Flag returned by * to indicate that * power to the force feedback system is currently available. * If the device cannot report the power state, * then neither nor * will be returned. * * @define DIGFFS_POWEROFF | 0x00000080 | * * Flag returned by * to indicate that * power to the force feedback system is not currently available. * If the device cannot report the power state, * then neither nor * will be returned. * * @define DIGFFS_SAFETYSWITCHON | 0x00000100 | * * Flag returned by * to indicate that * the safety switch (dead man switch) is currently on, * meaning that the device can operate. * If the device cannot report the state of the safety switch, * then neither nor * * will be returned. * * @define DIGFFS_SAFETYSWITCHOFF | 0x00000200 | * * Flag returned by * to indicate that * the safety switch (dead man switch) is currently off, * meaning that the device cannot operate. * If the device cannot report the state of the safety switch, * then neither nor * * will be returned. * * @define DIGFFS_USERFFSWITCHON | 0x00000400 | * * Flag returned by * to indicate that * the user force feedback switch is currently on, * meaning that the device can operate. * If the device cannot report the state of the * user force feedback switch, * then neither nor * * will be returned. * * @define DIGFFS_USERFFSWITCHOFF | 0x00000800 | * * Flag returned by * to indicate that * the user force feedback switch is currently off, * meaning that the device cannot operate. * If the device cannot report the state of the * user force feedback switch, * then neither nor * * will be returned. * * @define DIGFFS_DEVICELOST | 0x80000000 | * * Flag returned by * to indicate that * the device suffered an unexpected failure and is in an * indeterminate state. * It must be reset either by unacquiring and reacquiring * the device, or by explicitly sending a * command. * * For example, the device may be lost if the user suspends * the computer, causing * on-board memory on the device may have been lost. * ****************************************************************************/ enddoc #define DIGFFS_EMPTY 0x00000001 #define DIGFFS_STOPPED 0x00000002 #define DIGFFS_PAUSED 0x00000004 #define DIGFFS_ACTUATORSON 0x00000010 #define DIGFFS_ACTUATORSOFF 0x00000020 #define DIGFFS_POWERON 0x00000040 #define DIGFFS_POWEROFF 0x00000080 #define DIGFFS_SAFETYSWITCHON 0x00000100 #define DIGFFS_SAFETYSWITCHOFF 0x00000200 #define DIGFFS_USERFFSWITCHON 0x00000400 #define DIGFFS_USERFFSWITCHOFF 0x00000800 #define DIGFFS_DEVICELOST 0x80000000 #define DIGFFS_RANDOM 0x40000000;internal_500 #ifndef DIJ_RINGZERO begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIEFFECTINFO | * * The structure is used by the * and * methods * to return information about a particular effect on a device. * * @field DWORD | dwSize | * * The size of the structure in bytes. The application may * inspect this value to determine how many fields of the * structure are valid. For DirectInput 5.0, the value will * be sizeof(DIEFFECTINFO). Future versions of * DirectInput may return a larger structure. * * @field GUID | guid | * * Identifies the effect. * * @field DWORD | dwEffType | * * Zero or more values describing the effect. * * See "DirectInput Effect Format Types" for a description * of how the flags should be interpreted. * * @field DWORD | dwStaticParams | * * Zero or more values describing the * parameters supported by the effect. For example, * if is set, then the effect * supports an envelope. * * It is not an error for an application to attempt to use * effect parameters which are not supported by the device. * The unsupported parameters are merely ignored. * * This information is provided to allow the application * to tailor its use of force feedback to the capabilities * of the specific device. * * @field DWORD | dwDynamicParams | * * Zero or more values describing the * parameters of the effect which can be modified * while the effect is playing. * * If an application attempts to change a parameter * while the effect is playing, and the driver does not * support modifying that effect dynamically, then * the status code will be returned. * * This information is provided to allow the application * to tailor its use of force feedback to the capabilities * of the specific device. * * @field TCHAR | tszName[MAX_PATH] | * * Name of the effect. For example, "Sawtooth Up" * or "Constant force". * ****************************************************************************/ enddoc typedef struct DIEFFECTINFO% { DWORD dwSize; GUID guid; DWORD dwEffType; DWORD dwStaticParams; DWORD dwDynamicParams; TCHAR% tszName[MAX_PATH]; } DIEFFECTINFO%, *LPDIEFFECTINFO%; typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA; typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW; typedef const DIEFFECTINFO *LPCDIEFFECTINFO; begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DISDD_CONTINUE | 0x00000001 | * * Flag for * which indicates that * the device data sent will be overlaid upon the previously * sent device data. Otherwise, the device data sent * will start from an empty device state. * ****************************************************************************/ enddoc #define DISDD_CONTINUE 0x00000001 #define DISDD_VALID 0x00000001;internal_500 typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACK%)(LPCDIEFFECTINFO%, LPVOID); typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID); #define DIECEFL_VALID 0x00000000;internal begin_interface(IDirectInputDevice2%, IDirectInputDevice%) begin_methods() declare_method(GetCapabilities, LPDIDEVCAPS) declare_method(EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACK%, LPVOID, DWORD) declare_method(GetProperty, REFGUID, LPDIPROPHEADER) declare_method(SetProperty, REFGUID, LPCDIPROPHEADER) declare_method(Acquire) declare_method(Unacquire) declare_method(GetDeviceState, DWORD, LPVOID) declare_method(GetDeviceData, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD) declare_method(SetDataFormat, LPCDIDATAFORMAT) declare_method(SetEventNotification, HANDLE) declare_method(SetCooperativeLevel, HWND, DWORD) declare_method(GetObjectInfo,LPDIDEVICEOBJECTINSTANCE%,DWORD,DWORD) declare_method(GetDeviceInfo,LPDIDEVICEINSTANCE%) declare_method(RunControlPanel, HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD, REFGUID) end_base_class_methods() declare_method(CreateEffect, REFGUID, LPCDIEFFECT, LPDIRECTINPUTEFFECT *, LPUNKNOWN) declare_method(EnumEffects, LPDIENUMEFFECTSCALLBACK%, LPVOID, DWORD) declare_method(GetEffectInfo, LPDIEFFECTINFO%, REFGUID) declare_method(GetForceFeedbackState, LPDWORD) declare_method(SendForceFeedbackCommand, DWORD) declare_method(EnumCreatedEffectObjects,LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) declare_method(Escape, LPDIEFFESCAPE) declare_method(Poll) declare_method(SendDeviceData, DWORD, LPCDIDEVICEOBJECTDATA, LPDWORD, DWORD) end_methods() end_interface() #endif /* DIJ_RINGZERO */ ;end begindoc /**************************************************************************** * * IDirectInputDevice7 * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_700 begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags DirectInput File Effect Flags | * * Describe attributes of a effects stored in flags. * * @flag DIFEF_DEFAULT | * * When passed to , * default processing should occur when enumerating effects. * When passed to , * default processing should occur when wrinting effects. * * @flag DIFEF_INCLUDENONSTANDARD | * * When passed to , * effects not recognized as predefined may be included in the * enumeration. * When passed to , * effects not recognized as predefined may be written to file * without an error being raised. * * @flag DIFEF_MODIFYIFNEEDED | * * When passed to , * it means that the effect parameters for the enumerated effects * are to be adjusted if necessary, * so that the effect can be created on the current device. * ****************************************************************************/ enddoc #define DIFEF_DEFAULT 0x00000000 #define DIFEF_INCLUDENONSTANDARD 0x00000001 #define DIFEF_MODIFYIFNEEDED 0x00000010 #define DIFEF_ENUMVALID 0x00000011;internal #define DIFEF_WRITEVALID 0x00000001;internal #ifndef DIJ_RINGZERO begin_interface(IDirectInputDevice7%, IDirectInputDevice2%) begin_methods() declare_method(GetCapabilities, LPDIDEVCAPS) declare_method(EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACK%, LPVOID, DWORD) declare_method(GetProperty, REFGUID, LPDIPROPHEADER) declare_method(SetProperty, REFGUID, LPCDIPROPHEADER) declare_method(Acquire) declare_method(Unacquire) declare_method(GetDeviceState, DWORD, LPVOID) declare_method(GetDeviceData, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD) declare_method(SetDataFormat, LPCDIDATAFORMAT) declare_method(SetEventNotification, HANDLE) declare_method(SetCooperativeLevel, HWND, DWORD) declare_method(GetObjectInfo,LPDIDEVICEOBJECTINSTANCE%,DWORD,DWORD) declare_method(GetDeviceInfo,LPDIDEVICEINSTANCE%) declare_method(RunControlPanel, HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD, REFGUID) declare_method(CreateEffect, REFGUID, LPCDIEFFECT, LPDIRECTINPUTEFFECT *, LPUNKNOWN) declare_method(EnumEffects, LPDIENUMEFFECTSCALLBACK%, LPVOID, DWORD) declare_method(GetEffectInfo, LPDIEFFECTINFO%, REFGUID) declare_method(GetForceFeedbackState, LPDWORD) declare_method(SendForceFeedbackCommand, DWORD) declare_method(EnumCreatedEffectObjects,LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) declare_method(Escape, LPDIEFFESCAPE) declare_method(Poll) declare_method(SendDeviceData, DWORD, LPCDIDEVICEOBJECTDATA, LPDWORD, DWORD) end_base_class_methods() declare_method(EnumEffectsInFile, LPCTSTR%, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD) declare_method(WriteEffectToFile, LPCTSTR%, DWORD, LPDIFILEEFFECT, DWORD) end_methods() end_interface() #endif /* DIJ_RINGZERO */ ;end begindoc /**************************************************************************** * * IDirectInputDevice8 * ****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 #ifndef DIJ_RINGZERO begin_interface(IDirectInputDevice8%) begin_methods() declare_method(GetCapabilities, LPDIDEVCAPS) declare_method(EnumObjects, LPDIENUMDEVICEOBJECTSCALLBACK%, LPVOID, DWORD) declare_method(GetProperty, REFGUID, LPDIPROPHEADER) declare_method(SetProperty, REFGUID, LPCDIPROPHEADER) declare_method(Acquire) declare_method(Unacquire) declare_method(GetDeviceState, DWORD, LPVOID) declare_method(GetDeviceData, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD) declare_method(SetDataFormat, LPCDIDATAFORMAT) declare_method(SetEventNotification, HANDLE) declare_method(SetCooperativeLevel, HWND, DWORD) declare_method(GetObjectInfo,LPDIDEVICEOBJECTINSTANCE%,DWORD,DWORD) declare_method(GetDeviceInfo,LPDIDEVICEINSTANCE%) declare_method(RunControlPanel, HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD, REFGUID) declare_method(CreateEffect, REFGUID, LPCDIEFFECT, LPDIRECTINPUTEFFECT *, LPUNKNOWN) declare_method(EnumEffects, LPDIENUMEFFECTSCALLBACK%, LPVOID, DWORD) declare_method(GetEffectInfo, LPDIEFFECTINFO%, REFGUID) declare_method(GetForceFeedbackState, LPDWORD) declare_method(SendForceFeedbackCommand, DWORD) declare_method(EnumCreatedEffectObjects,LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) declare_method(Escape, LPDIEFFESCAPE) declare_method(Poll) declare_method(SendDeviceData, DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) declare_method(EnumEffectsInFile, LPCTSTR%, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD) declare_method(WriteEffectToFile, LPCTSTR%, DWORD, LPDIFILEEFFECT, DWORD) declare_method(BuildActionMap,LPDIACTIONFORMAT%,LPCTSTR%,DWORD); declare_method(SetActionMap,LPDIACTIONFORMAT%,LPCTSTR%,DWORD); declare_method(GetImageInfo,LPDIDEVICEIMAGEINFOHEADER%); end_methods() end_interface() #endif /* DIJ_RINGZERO */ ;end /**************************************************************************** * * Mouse * ****************************************************************************/ #ifndef DIJ_RINGZERO begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIMOUSESTATE | * * The structure is used by the * method * to return the status of a device accessed * as if it were a mouse. You must prepare the device * for mouse-style access by calling * , passing the *

data format. * * @field LONG | lX | * * Contains information about the mouse x-axis. * If the device is in relative axis mode, then this * field contains the change in mouse x-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse x-axis position. * * @field LONG | lY | * * Contains information about the mouse y-axis. * If the device is in relative axis mode, then this * field contains the change in mouse y-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse y-axis position. * * @field LONG | lZ | * * Contains information about the mouse z-axis. * If the device is in relative axis mode, then this * field contains the change in mouse z-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse z-axis position. * * If the mouse does not have a z-axis, then the value * is zero. * * @field BYTE | rgbButtons[4] | * * Array of button states. The high-order bit is set * if the corresponding button is down. * * @comm * * Remember that the mouse is a relative-axis device, * so the absolute axis positions for mouse axes are simply * accumulated relative motion. As a result, the * value of the absolute axis position is not meaningful * except in comparison with other absolute axis positions. * ****************************************************************************/ enddoc typedef struct _DIMOUSESTATE { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[4]; } DIMOUSESTATE, *LPDIMOUSESTATE; begindoc /**************************************************************************** * * @doc EXTERNAL * * @struct DIMOUSESTATE2 | * * The structure is used by the * method * to return the status of a device accessed * as if it were a mouse. You must prepare the device * for mouse-style access by calling * , passing the *

data format. * * @field LONG | lX | * * Contains information about the mouse x-axis. * If the device is in relative axis mode, then this * field contains the change in mouse x-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse x-axis position. * * @field LONG | lY | * * Contains information about the mouse y-axis. * If the device is in relative axis mode, then this * field contains the change in mouse y-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse y-axis position. * * @field LONG | lZ | * * Contains information about the mouse z-axis. * If the device is in relative axis mode, then this * field contains the change in mouse z-axis position. * If the device is in absolute axis mode, then this * field contains the absolute mouse z-axis position. * * If the mouse does not have a z-axis, then the value * is zero. * * @field BYTE | rgbButtons[8] | * * Array of button states. The high-order bit is set * if the corresponding button is down. * * @comm * * Remember that the mouse is a relative-axis device, * so the absolute axis positions for mouse axes are simply * accumulated relative motion. As a result, the * value of the absolute axis position is not meaningful * except in comparison with other absolute axis positions. * ****************************************************************************/ enddoc #if DIRECTINPUT_VERSION >= 0x0700 typedef struct _DIMOUSESTATE2 { LONG lX; LONG lY; LONG lZ; BYTE rgbButtons[8]; } DIMOUSESTATE2, *LPDIMOUSESTATE2; #endif #if DIRECTINPUT_VERSION >= 0x0700 //;internal #define DIMOUSESTATE_INT DIMOUSESTATE2 //;internal #define LPDIMOUSESTATE_INT LPDIMOUSESTATE2 //;internal #else //;internal #define DIMOUSESTATE_INT DIMOUSESTATE //;internal #define LPDIMOUSESTATE_INT LPDIMOUSESTATE //;internal #endif //;internal begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIMOFS_X | FIELD_OFFSET(DIMOUSESTATE, lX) | * * The offset of the mouse x-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the mouse x-axis position. * * @define DIMOFS_Y | FIELD_OFFSET(DIMOUSESTATE, lY) | * * The offset of the mouse y-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the mouse y-axis position. * * @define DIMOFS_Z | FIELD_OFFSET(DIMOUSESTATE, lZ) | * * The offset of the mouse z-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the mouse z-axis position. * * @define DIMOFS_BUTTON0 | FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0 | * * The offset of the mouse button 0 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 0. * * @define DIMOFS_BUTTON1 | FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1 | * * The offset of the mouse button 1 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 1. * * @define DIMOFS_BUTTON2 | FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2 | * * The offset of the mouse button 2 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 2. * * @define DIMOFS_BUTTON3 | FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3 | * * The offset of the mouse button 3 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 3. * *The following definitions are only for DINPUT_VERSION >= 0x700 * * @define DIMOFS_BUTTON4 | FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4 | * * The offset of the mouse button 4 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 4. * * @define DIMOFS_BUTTON5 | FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5 | * * The offset of the mouse button 5 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 5. * * @define DIMOFS_BUTTON6 | FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6 | * * The offset of the mouse button 6 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 6. * * @define DIMOFS_BUTTON7 | FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7 | * * The offset of the mouse button 7 state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to mouse button 7. * ****************************************************************************/ enddoc #define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX) #define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY) #define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ) #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0) #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1) #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2) #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3) #if (DIRECTINPUT_VERSION >= 0x0700) #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4) #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5) #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6) #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7) #endif #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Keyboard * ****************************************************************************/ #ifndef DIJ_RINGZERO #define DIKBD_CKEYS 256 /* Size of buffers */ //;Internal //;Internal /**************************************************************************** * * DirectInput keyboard scan codes * ****************************************************************************/ sinclude(`dinputk.w') /* * Alternate names for keys, to facilitate transition from DOS. */ #define DIK_BACKSPACE DIK_BACK /* backspace */ #define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ #define DIK_LALT DIK_LMENU /* left Alt */ #define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ #define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ #define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ #define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ #define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ #define DIK_RALT DIK_RMENU /* right Alt */ #define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ #define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ #define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ #define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ #define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ #define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ #define DIK_PRTSC DIK_SNAPSHOT /* Print Screen */;internal /* * Alternate names for keys originally not used on US keyboards. */ #define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ #endif /* DIJ_RINGZERO */ ;begin_public_500 /**************************************************************************** * * Joystick * ****************************************************************************/ #ifndef DIJ_RINGZERO begindoc /***************************************************************************** * * @doc EXTERNAL * * @struct DIJOYSTATE | * * Instantaneous joystick status information. * * @field LONG | lX | * * (OUT) If the joystick supports an x-axis, then * will fill * the field with the current joystick x-coordinate. * If the joystick does not support an x-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lY | * * (OUT) If the joystick supports a y-axis, then * will fill * the field with the current joystick y-coordinate. * If the joystick does not support a y-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lZ | * * (OUT) If the joystick supports a z-axis, then * will fill * the field with the current joystick z-coordinate. * If the joystick does not support a z-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRx | * * (OUT) If the joystick supports x-axis rotation, then * will fill * the field with the current joystick x-axis direction. * If the joystick does not support x-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRy | * * (OUT) If the joystick supports y-axis rotation, then * will fill * the field with the current joystick y-axis direction. * If the joystick does not support y-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRz | * * (OUT) If the joystick supports z-axis rotation, then * will fill * the field with the current joystick z-axis direction, * conventionally denoted as "rudder" or "twist". * If the joystick does not support z-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | rglSlider[2] | * * (OUT) Two additional axis values whose semantics * depend on the joystick. Use the * method to * obtain semantic information about these values. * * @field DWORD | rgdwPOV[4] | * * (OUT) The current position of up to four direction indicators * (point-of-view), or if no direction * is being indicated. * * @field BYTE | rgbButtons[32] | * * (OUT) Array of button states. * *****************************************************************************/ enddoc typedef struct DIJOYSTATE { LONG lX; /* x-axis position */ LONG lY; /* y-axis position */ LONG lZ; /* z-axis position */ LONG lRx; /* x-axis rotation */ LONG lRy; /* y-axis rotation */ LONG lRz; /* z-axis rotation */ LONG rglSlider[2]; /* extra axes positions */ DWORD rgdwPOV[4]; /* POV directions */ BYTE rgbButtons[32]; /* 32 buttons */ } DIJOYSTATE, *LPDIJOYSTATE; begindoc /***************************************************************************** * * @doc INTERNAL * * @struct DIJOYSTATE2 | * * Extended instantaneous joystick status information * suitable for force-feedback joysticks or * joysticks with more than 32 buttons. * * @field LONG | lX | * * (OUT) If the joystick supports an x-axis, then * will fill * the field with the current joystick x-coordinate. * If the joystick does not support an x-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lY | * * (OUT) If the joystick supports a y-axis, then * will fill * the field with the current joystick y-coordinate. * If the joystick does not support a y-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lZ | * * (OUT) If the joystick supports a z-axis, then * will fill * the field with the current joystick z-coordinate. * If the joystick does not support a z-axis, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRx | * * (OUT) If the joystick supports x-axis rotation, then * will fill * the field with the current joystick x-axis direction. * If the joystick does not support x-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRy | * * (OUT) If the joystick supports y-axis rotation, then * will fill * the field with the current joystick y-axis direction. * If the joystick does not support y-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lRz | * * (OUT) If the joystick supports z-axis rotation, then * will fill * the field with the current joystick z-axis direction, * conventionally denoted as "rudder" or "twist". * If the joystick does not support z-axis rotation, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | rglSlider[2] | * * (OUT) Two additional axis values whose semantics * depend on the joystick. Use the * method to * obtain semantic information about these values. * * @field DWORD | rgdwPOV[4] | * * (OUT) The current position of up to four direction indicators * (point-of-view), or if no direction * is being indicated. * * @field BYTE | rgbButtons[128] | * * (OUT) Array of button states. * * @field LONG | lVX | * * (OUT) If the joystick supports x-axis velocity, then * will fill * the field with the current joystick x-velocity. * If the joystick does not support x-axis velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lVY | * * (OUT) If the joystick supports y-axis velocity, then * will fill * the field with the current joystick y-velocity. * If the joystick does not support y-axis velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lVZ | * * (OUT) If the joystick supports z-axis velocity, then * will fill * the field with the current joystick z-velocity. * If the joystick does not support z-axis velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lVRx | * * (OUT) If the joystick supports x-axis angular velocity, then * will fill * the field with the current joystick x-axis angular velocity. * If the joystick does not support x-axis angular velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lVRy | * * (OUT) If the joystick supports y-axis angular velocity, then * will fill * the field with the current joystick y-axis angular velocity. * If the joystick does not support y-axis angular velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lVRz | * * (OUT) If the joystick supports z-axis angular velocity, then * will fill * the field with the current joystick z-axis angular velocity. * If the joystick does not support z-axis angular velocity, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | rglVSlider[2] | * * (OUT) Velocities of two additional axis values whose semantics * depend on the joystick. Use the * method to * obtain semantic information about these values. * * @field LONG | lAX | * * (OUT) If the joystick supports x-axis acceleration, then * will fill * the field with the current joystick x-acceleration. * If the joystick does not support x-axis acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lAY | * * (OUT) If the joystick supports y-axis acceleration, then * will fill * the field with the current joystick y-acceleration. * If the joystick does not support y-axis acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lAZ | * * (OUT) If the joystick supports z-axis acceleration, then * will fill * the field with the current joystick z-acceleration. * If the joystick does not support z-axis acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lARx | * * (OUT) If the joystick supports x-axis angular acceleration, then * will fill * the field with the current joystick x-axis angular acceleration. * If the joystick does not support x-axis angular acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lARy | * * (OUT) If the joystick supports y-axis angular acceleration, then * will fill * the field with the current joystick y-axis angular acceleration. * If the joystick does not support y-axis angular acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lARz | * * (OUT) If the joystick supports z-axis angular acceleration, then * will fill * the field with the current joystick z-axis angular acceleration. * If the joystick does not support z-axis angular acceleration, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | rglASlider[2] | * * (OUT) Accelerations of two additional axis values whose semantics * depend on the joystick. Use the * method to * obtain semantic information about these values. * * @field LONG | lFX | * * (OUT) If the joystick supports reporting x-axis force, then * will fill * the field with the current joystick x-force. * If the joystick does not support x-axis force, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lFY | * * (OUT) If the joystick supports reporting y-axis force, then * will fill * the field with the current joystick y-force. * If the joystick does not support y-axis force, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lFZ | * * (OUT) If the joystick supports reporting z-axis force, then * will fill * the field with the current joystick z-force. * If the joystick does not support z-axis force, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lFRx | * * (OUT) If the joystick supports reporting x-axis torque, then * will fill * the field with the current joystick x-axis angular force. * If the joystick does not support x-axis angular force, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lFRy | * * (OUT) If the joystick supports reporting y-axis torque, then * will fill * the field with the current joystick y-axis torque. * If the joystick does not support y-axis torque, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | lFRz | * * (OUT) If the joystick supports z-reporting axis torque, then * will fill * the field with the current joystick z-axis torque. * If the joystick does not support z-axis torque, then * the value of this field will be garbage and should * not be consulted by the application. * * @field LONG | rglFSlider[2] | * * (OUT) Forces of two additional axis values whose semantics * depend on the joystick. Use the * method to * obtain semantic information about these values. * *****************************************************************************/ enddoc typedef struct DIJOYSTATE2 { LONG lX; /* x-axis position */ LONG lY; /* y-axis position */ LONG lZ; /* z-axis position */ LONG lRx; /* x-axis rotation */ LONG lRy; /* y-axis rotation */ LONG lRz; /* z-axis rotation */ LONG rglSlider[2]; /* extra axes positions */ DWORD rgdwPOV[4]; /* POV directions */ BYTE rgbButtons[128]; /* 128 buttons */ LONG lVX; /* x-axis velocity */ LONG lVY; /* y-axis velocity */ LONG lVZ; /* z-axis velocity */ LONG lVRx; /* x-axis angular velocity */ LONG lVRy; /* y-axis angular velocity */ LONG lVRz; /* z-axis angular velocity */ LONG rglVSlider[2]; /* extra axes velocities */ LONG lAX; /* x-axis acceleration */ LONG lAY; /* y-axis acceleration */ LONG lAZ; /* z-axis acceleration */ LONG lARx; /* x-axis angular acceleration */ LONG lARy; /* y-axis angular acceleration */ LONG lARz; /* z-axis angular acceleration */ LONG rglASlider[2]; /* extra axes accelerations */ LONG lFX; /* x-axis force */ LONG lFY; /* y-axis force */ LONG lFZ; /* z-axis force */ LONG lFRx; /* x-axis torque */ LONG lFRy; /* y-axis torque */ LONG lFRz; /* z-axis torque */ LONG rglFSlider[2]; /* extra axes forces */ } DIJOYSTATE2, *LPDIJOYSTATE2; begindoc /**************************************************************************** * * @doc EXTERNAL * * @define DIJOFS_X | FIELD_OFFSET(DIJOYSTATE, lX) | * * The offset of the joystick x-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick x-axis position. * * @define DIJOFS_Y | FIELD_OFFSET(DIJOYSTATE, lY) | * * The offset of the joystick y-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick y-axis position. * * @define DIJOFS_Z | FIELD_OFFSET(DIJOYSTATE, lZ) | * * The offset of the joystick z-axis position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick z-axis position. * * @define DIJOFS_RX | FIELD_OFFSET(DIJOYSTATE, lRx) | * * The offset of the joystick x-axis rotation relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick x-axis rotation. * * @define DIJOFS_RY | FIELD_OFFSET(DIJOYSTATE, lRy) | * * The offset of the joystick y-axis rotation relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick y-axis rotation. * * @define DIJOFS_RZ | FIELD_OFFSET(DIJOYSTATE, lRx) | * * The offset of the joystick z-axis rotation relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick z-axis rotation. * * @define DIJOFS_SLIDER(n) | * FIELD_OFFSET(DIJOYSTATE, rglSlider) + n * sizeof(LONG) | * * The offset of the joystick slider position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick slider position. * * @define DIJOFS_POV(n) | * FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + n * sizeof(DWORD) | * * The offset of the joystick POV position relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to the joystick POV position. * * @define DIJOFS_BUTTON(n) | FIELD_OFFSET(DIJOYSTATE, rgbButtons) + n | * * The offset of the joystick button state relative * to the beginning of the structure. * This value is returned as the

field * in the structure to indicate * that the data applies to joystick button . * * For convenience, the first 32 buttons can also be accessed * with the names with the macros * through . * ****************************************************************************/ enddoc #define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX) #define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY) #define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ) #define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx) #define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy) #define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz) #define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \ (n) * sizeof(LONG)) #define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \ (n) * sizeof(DWORD)) #define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n)) #define DIJOFS_BUTTON0 DIJOFS_BUTTON(0) #define DIJOFS_BUTTON1 DIJOFS_BUTTON(1) #define DIJOFS_BUTTON2 DIJOFS_BUTTON(2) #define DIJOFS_BUTTON3 DIJOFS_BUTTON(3) #define DIJOFS_BUTTON4 DIJOFS_BUTTON(4) #define DIJOFS_BUTTON5 DIJOFS_BUTTON(5) #define DIJOFS_BUTTON6 DIJOFS_BUTTON(6) #define DIJOFS_BUTTON7 DIJOFS_BUTTON(7) #define DIJOFS_BUTTON8 DIJOFS_BUTTON(8) #define DIJOFS_BUTTON9 DIJOFS_BUTTON(9) #define DIJOFS_BUTTON10 DIJOFS_BUTTON(10) #define DIJOFS_BUTTON11 DIJOFS_BUTTON(11) #define DIJOFS_BUTTON12 DIJOFS_BUTTON(12) #define DIJOFS_BUTTON13 DIJOFS_BUTTON(13) #define DIJOFS_BUTTON14 DIJOFS_BUTTON(14) #define DIJOFS_BUTTON15 DIJOFS_BUTTON(15) #define DIJOFS_BUTTON16 DIJOFS_BUTTON(16) #define DIJOFS_BUTTON17 DIJOFS_BUTTON(17) #define DIJOFS_BUTTON18 DIJOFS_BUTTON(18) #define DIJOFS_BUTTON19 DIJOFS_BUTTON(19) #define DIJOFS_BUTTON20 DIJOFS_BUTTON(20) #define DIJOFS_BUTTON21 DIJOFS_BUTTON(21) #define DIJOFS_BUTTON22 DIJOFS_BUTTON(22) #define DIJOFS_BUTTON23 DIJOFS_BUTTON(23) #define DIJOFS_BUTTON24 DIJOFS_BUTTON(24) #define DIJOFS_BUTTON25 DIJOFS_BUTTON(25) #define DIJOFS_BUTTON26 DIJOFS_BUTTON(26) #define DIJOFS_BUTTON27 DIJOFS_BUTTON(27) #define DIJOFS_BUTTON28 DIJOFS_BUTTON(28) #define DIJOFS_BUTTON29 DIJOFS_BUTTON(29) #define DIJOFS_BUTTON30 DIJOFS_BUTTON(30) #define DIJOFS_BUTTON31 DIJOFS_BUTTON(31) ;end_public_500 #endif /* DIJ_RINGZERO */ /**************************************************************************** * * IDirectInput * ****************************************************************************/ #ifndef DIJ_RINGZERO #define DIENUM_STOP 0 #define DIENUM_CONTINUE 1 typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACK%)(LPCDIDEVICEINSTANCE%, LPVOID); typedef BOOL (FAR PASCAL * LPDICONFIGUREDEVICESCALLBACK)(IUnknown FAR *, LPVOID); #define DIEDFL_ALLDEVICES 0x00000000 #define DIEDFL_ATTACHEDONLY 0x00000001 ;begin_if_(DIRECTINPUT_VERSION)_500 #define DIEDFL_FORCEFEEDBACK 0x00000100 ;end ;begin_if_(DIRECTINPUT_VERSION)_50A #define DIEDFL_INCLUDEALIASES 0x00010000 #define DIEDFL_INCLUDEPHANTOMS 0x00020000 ;end ;begin_if_(DIRECTINPUT_VERSION)_800 #define DIEDFL_INCLUDEHIDDEN 0x00040000 ;end #define DIEDFL_INCLUDEMASK 0x00FF0000;internal_50A #define DIEDFL_VALID 0x00030101;internal ;begin_internal_800 #if DIRECTINPUT_VERSION > 0x700 #define DIEDFL_VALID_DX5 0x00030101 #undef DIEDFL_VALID #define DIEDFL_VALID 0x00070101 #endif /* DIRECTINPUT_VERSION > 0x700 */ ;end_internal_800 ;begin_if_(DIRECTINPUT_VERSION)_800 typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCB%)(LPCDIDEVICEINSTANCE%, LPDIRECTINPUTDEVICE8%, DWORD, DWORD, LPVOID); ;end begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags Flags provides information about why the devie is being enumerated. * This can be a combination of any action-mapping flag, and one usage flag. * At least one action-mapping flag will always be present. * * Action Mapping Flags: * * @flag DIEDBS_MAPPEDPRI1 | * * This device is being enumerated because priority 1 actions can be mapped * to the device. * * @flag DIEDBS_MAPPEDPRI2 | * * This device is being enumerated because priority 2 actions can be mapped * to the device. * * Usage Flags: * * @flag DIEDBS_RECENTDEVICE | * * The device is being enumerated because the commands described by the * Action Mapping Flags were recently used. * * @flag DIEDBS_NEWDEVICE | * * The device is being enumerated because the device was installed recently * (sometime after the last set of commands were applied to another device). * Devices described by this flag have not been used with this game before. * *****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 #define DIEDBS_MAPPEDPRI1 0x00000001 #define DIEDBS_MAPPEDPRI2 0x00000002 #define DIEDBS_RECENTDEVICE 0x00000010 #define DIEDBS_NEWDEVICE 0x00000020 ;end begindoc /**************************************************************************** * * @doc EXTERNAL * * @flags Flag passed to to * specify which devices will be enumerated. * * @flag DIEDBSFL_ATTACHEDONLY | * * All appropriate installed devices are enumerated, even those * in use by another user. This is the default behavior. * With this flag, HID keyboards/mice, and non-gaming devices, * such as HID speakers/monitors, won't be enumerated. * * @flag DIEDBSFL_AVAILABLEDEVICES | * * Only unowned installed devices are enumerated. * * @flag DIEDBSFL_THISUSER | * * All installed devices owned by the user identified by ptszUserName * are enumerated. * * @flag DIEDBSFL_FORCEFEEDBACK | * * Only devices that support force feedback. * * @flag DIEDBSFL_MULTIMICEKEYBOARDS | * * HID mice, and HID keyboards are enumerated. * * @flag DIEDBSFL_NONGAMINGDEVICES | * * Non-gaming devices, such as HID speakers, HID monitors, are enumerated. * * Note: * All these flags can be combined. * For example: if you want to enumerate all available devices and the devices * owned by a user, you can use flag: DIEDBSFL_THISUSER | DIEDBSFL_AVAILABLEDEVICES. * *****************************************************************************/ enddoc ;begin_if_(DIRECTINPUT_VERSION)_800 #define DIEDBSFL_ATTACHEDONLY 0x00000000 #define DIEDBSFL_THISUSER 0x00000010 #define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK #define DIEDBSFL_AVAILABLEDEVICES 0x00001000 #define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000 #define DIEDBSFL_NONGAMINGDEVICES 0x00004000 #define DIEDBSFL_VALID 0x00007110 ;end begin_interface(IDirectInput%) begin_methods() declare_method(CreateDevice,REFGUID, LPDIRECTINPUTDEVICE% *, LPUNKNOWN) declare_method(EnumDevices,DWORD, LPDIENUMDEVICESCALLBACK%, LPVOID, DWORD) declare_method(GetDeviceStatus, REFGUID) declare_method(RunControlPanel,HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD) end_methods() end_interface() ;begin_public_500 begin_interface(IDirectInput2%, IDirectInput%) begin_methods() declare_method(CreateDevice,REFGUID, LPDIRECTINPUTDEVICE% *, LPUNKNOWN) declare_method(EnumDevices,DWORD, LPDIENUMDEVICESCALLBACK%, LPVOID, DWORD) declare_method(GetDeviceStatus, REFGUID) declare_method(RunControlPanel,HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD) end_base_class_methods() declare_method(FindDevice,REFGUID, LPCTSTR%, LPGUID) end_methods() end_interface() ;end_public_500 ;begin_public_700 begin_interface(IDirectInput7%, IDirectInput2%) begin_methods() declare_method(CreateDevice,REFGUID, LPDIRECTINPUTDEVICE% *, LPUNKNOWN) declare_method(EnumDevices,DWORD, LPDIENUMDEVICESCALLBACK%, LPVOID, DWORD) declare_method(GetDeviceStatus, REFGUID) declare_method(RunControlPanel,HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD) declare_method(FindDevice,REFGUID, LPCTSTR%, LPGUID) end_base_class_methods() declare_method(CreateDeviceEx, REFGUID, REFIID, LPVOID *, LPUNKNOWN) end_methods() end_interface() ;end_public_700 ;begin_public_800 ;begin_if_(DIRECTINPUT_VERSION)_800 begin_interface(IDirectInput8%) begin_methods() declare_method(CreateDevice,REFGUID, LPDIRECTINPUTDEVICE8% *, LPUNKNOWN) declare_method(EnumDevices,DWORD, LPDIENUMDEVICESCALLBACK%, LPVOID, DWORD) declare_method(GetDeviceStatus, REFGUID) declare_method(RunControlPanel,HWND, DWORD) declare_method(Initialize, HINSTANCE, DWORD) declare_method(FindDevice,REFGUID, LPCTSTR%, LPGUID) declare_method(EnumDevicesBySemantics,LPCTSTR%,LPDIACTIONFORMAT%,LPDIENUMDEVICESBYSEMANTICSCB%,LPVOID,DWORD) declare_method(ConfigureDevices, LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMS%, DWORD, LPVOID) end_methods() end_interface() ;end ;end_public_800 #if DIRECTINPUT_VERSION > 0x0700 extern HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); #else extern HRESULT WINAPI DirectInputCreate%(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUT% *ppDI, LPUNKNOWN punkOuter); ;begin_public_700 extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); ;end_public_700 #endif /* DIRECTINPUT_VERSION > 0x700 */ #endif /* DIJ_RINGZERO */ /**************************************************************************** * * Return Codes * ****************************************************************************/ /* * The operation completed successfully. */ #define DI_OK S_OK /* * The device exists but is not currently attached. */ #define DI_NOTATTACHED S_FALSE /* * The device buffer overflowed. Some input was lost. */ #define DI_BUFFEROVERFLOW S_FALSE /* * The change in device properties had no effect. */ #define DI_PROPNOEFFECT S_FALSE /* * The operation had no effect. */ #define DI_NOEFFECT S_FALSE /* * The device is a polled device. As a result, device buffering * will not collect any data and event notifications will not be * signalled until GetDeviceState is called. */ #define DI_POLLEDDEVICE ((HRESULT)0x00000002L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but the effect was not * downloaded because the device is not exclusively acquired * or because the DIEP_NODOWNLOAD flag was passed. */ #define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but in order to change * the parameters, the effect needed to be restarted. */ #define DI_EFFECTRESTARTED ((HRESULT)0x00000004L) /* * The parameters of the effect were successfully updated by * IDirectInputEffect::SetParameters, but some of them were * beyond the capabilities of the device and were truncated. */ #define DI_TRUNCATED ((HRESULT)0x00000008L) ;begin_public_800 /* * The settings have been successfully applied but could not be * persisted. */ #define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000BL) ;end_public_800 /* * Equal to DI_EFFECTRESTARTED | DI_TRUNCATED. */ #define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000CL) ;begin_public_800 /* * A SUCCESS code indicating that settings cannot be modified. */ #define DI_WRITEPROTECT ((HRESULT)0x00000013L) ;end_public_800 /* * The application requires a newer version of DirectInput. */ #define DIERR_OLDDIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION) /* * The application was written for an unsupported prerelease version * of DirectInput. */ #define DIERR_BETADIRECTINPUTVERSION \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP) /* * The object could not be created due to an incompatible driver version * or mismatched or incomplete driver components. */ #define DIERR_BADDRIVERVER \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL) /* * The device or device instance is not registered with DirectInput.;public_dx3 * The device or device instance or effect is not registered with DirectInput.;public_500 */ #define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG ;begin_public_500 /* * The requested object does not exist. */ #define DIERR_NOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) ;end_public_500 /* * The requested object does not exist. */ #define DIERR_OBJECTNOTFOUND \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) /* * An invalid parameter was passed to the returning function, * or the object was not in a state that admitted the function * to be called. */ #define DIERR_INVALIDPARAM E_INVALIDARG /* * The specified interface is not supported by the object */ #define DIERR_NOINTERFACE E_NOINTERFACE /* * An undetermined error occured inside the DInput subsystem */ #define DIERR_GENERIC E_FAIL /* * The DInput subsystem couldn't allocate sufficient memory to complete the * caller's request. */ #define DIERR_OUTOFMEMORY E_OUTOFMEMORY /* * The function called is not supported at this time */ #define DIERR_UNSUPPORTED E_NOTIMPL /* * This object has not been initialized */ #define DIERR_NOTINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY) /* * This object is already initialized */ #define DIERR_ALREADYINITIALIZED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED) /* * This object does not support aggregation */ #define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION /* * Another app has a higher priority level, preventing this call from * succeeding. */ #define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED /* ;begin_public_dx3 * Access to the input device has been lost. It must be re-acquired. ;end_public_dx3 ;begin_public_500 * Access to the device has been lost. It must be re-acquired. ;end_public_500 */ #define DIERR_INPUTLOST \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT) /* * The operation cannot be performed while the device is acquired. */ #define DIERR_ACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY) /* * The operation cannot be performed unless the device is acquired. */ #define DIERR_NOTACQUIRED \ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS) /* * The specified property cannot be changed. */ #define DIERR_READONLY E_ACCESSDENIED /* * The device already has an event notification associated with it. */ #define DIERR_HANDLEEXISTS E_ACCESSDENIED /* * Data is not yet available. */ #ifndef E_PENDING #define E_PENDING 0x8000000AL #endif ;begin_public_500 /* * Unable to IDirectInputJoyConfig_Acquire because the user * does not have sufficient privileges to change the joystick * configuration. */ #define DIERR_INSUFFICIENTPRIVS 0x80040200L /* * The device is full. */ #define DIERR_DEVICEFULL 0x80040201L /* * Not all the requested information fit into the buffer. */ #define DIERR_MOREDATA 0x80040202L /* * The effect is not downloaded. */ #define DIERR_NOTDOWNLOADED 0x80040203L /* * The device cannot be reinitialized because there are still effects * attached to it. */ #define DIERR_HASEFFECTS 0x80040204L /* * The operation cannot be performed unless the device is acquired * in DISCL_EXCLUSIVE mode. */ #define DIERR_NOTEXCLUSIVEACQUIRED 0x80040205L /* * The effect could not be downloaded because essential information * is missing. For example, no axes have been associated with the * effect, or no type-specific information has been created. */ #define DIERR_INCOMPLETEEFFECT 0x80040206L /* * Attempted to read buffered device data from a device that is * not buffered. */ #define DIERR_NOTBUFFERED 0x80040207L /* * An attempt was made to modify parameters of an effect while it is * playing. Not all hardware devices support altering the parameters * of an effect while it is playing. */ #define DIERR_EFFECTPLAYING 0x80040208L /* * The operation could not be completed because the device is not * plugged in. */ #define DIERR_UNPLUGGED 0x80040209L /* * SendDeviceData failed because more information was requested * to be sent than can be sent to the device. Some devices have * restrictions on how much data can be sent to them. (For example, * there might be a limit on the number of buttons that can be * pressed at once.) */ #define DIERR_REPORTFULL 0x8004020AL ;end_public_500 ;begin_public_800 /* * A mapper file function failed because reading or writing the user or IHV * settings file failed. */ #define DIERR_MAPFILEFAIL 0x8004020BL ;end_public_800 sinclude(semdef.w) sinclude(semantic.w) #ifdef __cplusplus }; #endif #endif /* __DINPUT_INCLUDED__ */ /**************************************************************************** * * Definitions for non-IDirectInput (VJoyD) features defined more recently * than the current sdk files * ****************************************************************************/ #ifdef _INC_MMSYSTEM #ifndef MMNOJOY #ifndef __VJOYDX_INCLUDED__ #define __VJOYDX_INCLUDED__ #ifdef __cplusplus extern "C" { #endif /* * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure * contains mini-driver specific data to be passed by VJoyD to the mini- * driver instead of doing a poll. */ #define JOY_PASSDRIVERDATA 0x10000000l /* * Informs the joystick driver that the configuration has been changed * and should be reloaded from the registery. * dwFlags is reserved and should be set to zero */ WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags ); #ifndef DIJ_RINGZERO /* * Invoke the joystick control panel directly, using the passed window handle * as the parent of the dialog. This API is only supported for compatibility * purposes; new applications should use the RunControlPanel method of a * device interface for a game controller. * The API is called by using the function pointer returned by * GetProcAddress( hCPL, TEXT("ShowJoyCPL") ) where hCPL is a HMODULE returned * by LoadLibrary( TEXT("joy.cpl") ). The typedef is provided to allow * declaration and casting of an appropriately typed variable. */ void WINAPI ShowJoyCPL( HWND hWnd ); typedef void (WINAPI* LPFNSHOWJOYCPL)( HWND hWnd ); #endif /* * Hardware Setting indicating that the device is a headtracker */ #define JOY_HWS_ISHEADTRACKER 0x02000000l /* * Hardware Setting indicating that the VxD is used to replace * the standard analog polling */ #define JOY_HWS_ISGAMEPORTDRIVER 0x04000000l /* * Hardware Setting indicating that the driver needs a standard * gameport in order to communicate with the device. */ #define JOY_HWS_ISANALOGPORTDRIVER 0x08000000l /* * Hardware Setting indicating that VJoyD should not load this * driver, it will be loaded externally and will register with * VJoyD of it's own accord. */ #define JOY_HWS_AUTOLOAD 0x10000000l /* * Hardware Setting indicating that the driver acquires any * resources needed without needing a devnode through VJoyD. */ #define JOY_HWS_NODEVNODE 0x20000000l ;begin_public_dx5 /* * Hardware Setting indicating that the VxD can be used as * a port 201h emulator. */ #define JOY_HWS_ISGAMEPORTEMULATOR 0x40000000l ;end_public_dx5 ;begin_public_5B2 /* * Hardware Setting indicating that the device is a gameport bus */ #define JOY_HWS_ISGAMEPORTBUS 0x80000000l #define JOY_HWS_GAMEPORTBUSBUSY 0x00000001l ;end_public_5B2 /* * Usage Setting indicating that the settings are volatile and * should be removed if still present on a reboot. */ #define JOY_US_VOLATILE 0x00000008L #ifdef __cplusplus }; #endif #endif /* __VJOYDX_INCLUDED__ */ #endif /* not MMNOJOY */ #endif /* _INC_MMSYSTEM */ /**************************************************************************** * * Definitions for non-IDirectInput (VJoyD) features defined more recently * than the current ddk files * ****************************************************************************/ #ifndef DIJ_RINGZERO #ifdef _INC_MMDDK #ifndef MMNOJOYDEV #ifndef __VJOYDXD_INCLUDED__ #define __VJOYDXD_INCLUDED__ /* * Poll type in which the do_other field of the JOYOEMPOLLDATA * structure contains mini-driver specific data passed from an app. */ #define JOY_OEMPOLL_PASSDRIVERDATA 7 #endif /* __VJOYDXD_INCLUDED__ */ #endif /* not MMNOJOYDEV */ #endif /* _INC_MMDDK */ #endif /* DIJ_RINGZERO */