mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9132 lines
333 KiB
9132 lines
333 KiB
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 <objbase.h>
|
|
#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 <dinput.h>. By default, #include <dinput.h>
|
|
* 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 <dinput.h>. By default, #include <dinput.h>
|
|
* 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 <dinput.h>. By default, #include <dinput.h>
|
|
* 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 <dinput.h>. By default, #include <dinput.h>
|
|
* 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 <dinput.h>. By default, #include <dinput.h>
|
|
* 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 <c GUID_SysMouse>, it is not
|
|
* enumerated by <mf IDirectInput::EnumDevices> unless the
|
|
* <c DIEDFL_INCLUDEALIASES> flag is passed.
|
|
*
|
|
* Passing this GUID to <mf IDirectInput::CreateDevice> 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 <c GUID_SysMouse>, it is not
|
|
* enumerated by <mf IDirectInput::EnumDevices> unless the
|
|
* <c DIEDFL_INCLUDEALIASES> flag is passed.
|
|
*
|
|
* Passing this GUID to <mf IDirectInput::CreateDevice> 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 <c GUID_SysKeyboard>, it is not
|
|
* enumerated by <mf IDirectInput::EnumDevices> unless the
|
|
* <c DIEDFL_INCLUDEALIASES> flag is passed.
|
|
*
|
|
* Passing this GUID to <mf IDirectInput::CreateDevice> 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 <c GUID_SysKeyboard>, it is not
|
|
* enumerated by <mf IDirectInput::EnumDevices> unless the
|
|
* <c DIEDFL_INCLUDEALIASES> flag is passed.
|
|
*
|
|
* Passing this GUID to <mf IDirectInput::CreateDevice> 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 <mf IDirectInput::EnumDevices>
|
|
* 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 <mf IDirectInputDevice2::EnumEffects>:
|
|
* 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 <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to a <t DICONSTANTFORCE>
|
|
* structure and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to
|
|
* sizeof(<t DICONSTANTFORCE>).
|
|
*
|
|
* The flag can be passed to <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to a <t DIRAMPFORCE>
|
|
* structure and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to
|
|
* sizeof(<t DIRAMPFORCE>).
|
|
*
|
|
* The flag can be passed to <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to a <t DIPERIODIC>
|
|
* structure and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to
|
|
* sizeof(<t DIPERIODIC>).
|
|
*
|
|
* The flag can be passed to <mf IDirectInputDevice2::EnumEffects>
|
|
* to restrict the enumeration to periodic effects.
|
|
*
|
|
* @flag DIEFT_CONDITION |
|
|
*
|
|
* The effect represents a condition.
|
|
* When creating or modifying a condition,
|
|
* the <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to an array of
|
|
* <t DICONDITION> structure (one per axis) and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to
|
|
* cAxis * sizeof(<t DICONDITION>).
|
|
*
|
|
* 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 <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to a <t DICUSTOMFORCE>
|
|
* structure and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to
|
|
* sizeof(<t DICUSTOMFORCE>).
|
|
*
|
|
* The flag can be passed to <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <e DIEFFECT.lpvTypeSpecificParams> field
|
|
* of the <t DIEFFECT> must point to an array of
|
|
* <t DIBARRIERFORCE> structures (one per axis) and the
|
|
* <e DIEFFECT.cbTypeSpecificParams> field must
|
|
* be set to cAxis * sizeof(<t DIBARRIERFORCE>).
|
|
*
|
|
* The flag can be passed to <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <mf IDirectInputDevice2::EnumEffects>
|
|
* 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 <t DIENVELOPE> 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 <t DIENVELOPE> structure will be ignored by the effect.
|
|
*
|
|
* If neither <c DIEFT_FFATTACK> nor
|
|
* <c DIEFT_FFFADE> 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 <t DICONDITION> 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 <t DICONDITON> 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 <e DICONDITION.lDeadBand> 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 <e DIEFFECT.dwStartDelay> 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 <f DIEFT_GETTYPE>.
|
|
*
|
|
* @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 * <c DI_DEGREES>" 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 <c DI_FFNOMINAL>/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 * <c DI_SECONDS>" 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 <t DICONSTANTFORCE> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_CONSTANTFORCE>.
|
|
*
|
|
* The structure describes a constant force effect.
|
|
*
|
|
* A pointer to a single <t DICONSTANTFORCE> structure
|
|
* for an effect is passed in the
|
|
* <e DIEFFECT.lpConstantForce> field of the
|
|
* <t DIEFFECT> 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 <t DIRAMPFORCE> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_RAMPFORCE>.
|
|
*
|
|
* The structure describes a ramp force effect.
|
|
*
|
|
* A pointer to a single <t DIRAMPFORCE> structure
|
|
* for an effect is passed in the
|
|
* <e DIEFFECT.lpRampForce> field of the
|
|
* <t DIEFFECT> structure.
|
|
*
|
|
* Note that the <e DIEFFECT.dwDuration> for a
|
|
* ramp force effect cannot be <c INFINITE>.
|
|
*
|
|
* @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 <t DIPERIODIC> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_PERIODIC>.
|
|
*
|
|
* The structure describes a periodic effect.
|
|
*
|
|
* A pointer to a single <t DIPERIODIC> structure
|
|
* for an effect is passed in the
|
|
* <e DIEFFECT.lpPeriodic> field of the
|
|
* <t DIEFFECT> 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
|
|
* <e DIPERIODIC.lOffset>-<e DIPERIODIC.dwMagnitude>
|
|
* to
|
|
* <e DIPERIODIC.lOffset>+<e DIPERIODIC.dwMagnitude>.
|
|
*
|
|
* The value of the <e DIPERIODIC.lOffset> 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 <t DICONDITION> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_CONDITION>.
|
|
*
|
|
* A pointer to an array of <t DICONDITION> structures
|
|
* for an effect is passed in the
|
|
* <e DIEFFECT.lpCondition> field of the
|
|
* <t DIEFFECT> 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 <e DICONDITION.lNegativeCoefficient>
|
|
* is ignored and
|
|
* the value of <e DICONDITION.lPositiveCoefficient>
|
|
* 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 <e DICONDITION.lNegativeSaturation>
|
|
* is ignored and
|
|
* the value of <e DICONDITION.lPositiveSaturation>
|
|
* is used as both the positive and negative
|
|
* saturations.
|
|
*
|
|
* @field LONG | lDeadBand |
|
|
*
|
|
* The region around <e DICONDITION.lOffset>
|
|
* where the condition is not active, in the
|
|
* range 0 to 10000.
|
|
* In other words, the condition is not active
|
|
* between
|
|
* <e DICONDITION.lOffset>-<e DICONDITION.lDeadBand>
|
|
* and
|
|
* <e DICONDITION.lOffset>+<e DICONDITION.lDeadBand>.
|
|
*
|
|
* @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
|
|
* <e DICONDITION.lOffset>-<e DICONDITION.lDeadBand>,
|
|
* then the
|
|
* resulting force is given by the formula
|
|
*
|
|
* force = <e DICONDITION.lNegativeCoefficient> * (q -
|
|
* (<e DICONDITION.lOffset>-<e DICONDITION.lDeadBand>))
|
|
*
|
|
* Similarly, if the metric is greater than
|
|
* <e DICONDITION.lOffset>+<e DICONDITION.lDeadBand>,
|
|
* then the
|
|
* resulting force is given by the formula
|
|
*
|
|
* force = <e DICONDITION.lPositiveCoefficient> * (q -
|
|
* (<e DICONDITION.lOffset>+<e DICONDITION.lDeadBand>))
|
|
*
|
|
* 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 <t DICUSTOMFORCE> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_CUSTOMFORCE>.
|
|
*
|
|
* The structure describes a custom or user-defined
|
|
* force.
|
|
*
|
|
* A pointer to a <t DICUSTOMFORCE> structure
|
|
* for an effect is passed in the
|
|
* <e DIEFFECT.lpCustomForce> field of the
|
|
* <t DIEFFECT> 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
|
|
* <e DIEFFECT.rglDirection> field of the
|
|
* <t DIEFFECT> 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
|
|
* <e DICUSTOMFORCE.rglForceData>. It must be an
|
|
* integral multiple of the <e DICUSTOMFORCE.cChannels>.
|
|
*
|
|
* @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 <e DICUSTOMFORCE.cChannels>
|
|
* 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 <mf IDirectInputDevice2::EnumEffects>:
|
|
* 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 <t DIBARRIERFORCE> structure contains
|
|
* type-specific information for effects
|
|
* which are marked as <c DIEFT_BARRIERFORCE>.
|
|
*
|
|
* A pointer to an array of <t DIBARRIERFORCE> structures for
|
|
* an effect is passed in the <e DIEFFECT.lpvTypeSpecificParams>
|
|
* field of the <t DIEFFECT> 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 <c DIBEF_*> 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 <e DIREGION.lStart>.
|
|
*
|
|
* @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 <e DIBARRIERFORCE.lOuterCoefficient>
|
|
* is greater than <e DIBARRIERFORCE.lInnerCoefficient>.
|
|
*
|
|
* 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 <t DIENVELOPE> structure is used by the
|
|
* <t DIEFFECT> 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 <t DIREGION> structure is used by the
|
|
* <t DIEFFECT> 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 <e DIREGION.lStart>.
|
|
*
|
|
* @field LONG | lDirection |
|
|
*
|
|
* A <t LONG> containing either cartesian coordinates or polar
|
|
* coordinates. The flags <c DIEFF_REGIONCARTESIAN>,
|
|
* <c DIEFF_REGIONPOLAR> and <c DIEFF_REGIONSPERICAL>
|
|
* determine the semantics of the value.
|
|
*
|
|
* If cartesian, then the <e DIREGION.lDirection> value
|
|
* is associated with the corresponding axis in
|
|
* <e DIEFFECT.rgdwAxes>.
|
|
*
|
|
* If polar, then the <e DIREGION.lDirection> value is an angle
|
|
* measured in hundredths of degrees.
|
|
* See the definition of <e DIEFFECT.rglDirection> 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 <e DIREGION.lStart> = -10,000,
|
|
* <e DIREGION.lEnd> = 10,000 and <e DIREGION.lDirection> = 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 <t DIEFFECT> structure is used by the
|
|
* <mf IDirectInputDevice2::CreateEffect> method
|
|
* to initialize a new <i IDirectInputEffect> object.
|
|
* It is also used by <mf IDirectInputEffect::SetParameters>.
|
|
*
|
|
* All magnitude and gain values used by DirectInput
|
|
* are uniform and linear across the range. For example,
|
|
* an effect is played at magnitude <y n> will be exactly
|
|
* half as strong as an effect played at magnitude <y 2n>.
|
|
* 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 <c DIEFF_*> flag values.
|
|
*
|
|
* @field DWORD | dwDuration |
|
|
*
|
|
* The total duration of the effect in microseconds.
|
|
*
|
|
* If this value is <c INFINITE>, 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 <e DIEFFECT.dwSamplePeriod>
|
|
* 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
|
|
* <c DIEFF_OBJECTIDS> and <c DIEFF_OBJECTOFFSETS>
|
|
* determines the semantics of the value.
|
|
*
|
|
* If this field is set to <c DIEB_NOTRIGGER>,
|
|
* 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 <c INFINITE> 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 <t DWORD> array (of <e DIEFFECT.cAxes>
|
|
* elements) containing identifiers
|
|
* or offsets identifying the axes to which the effect
|
|
* is to be applied.
|
|
* The flags
|
|
* <c DIEFF_OBJECTIDS> and <c DIEFF_OBJECTOFFSETS>
|
|
* 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 <t LONG> array (of
|
|
* <e DIEFFECT.cAxes> elements) containing either
|
|
* cartesian coordinates or polar coordinates.
|
|
* The flags
|
|
* <c DIEFF_CARTESIAN> and <c DIEFF_POLAR>
|
|
* determines the semantics of the values in the array.
|
|
*
|
|
* If cartesian, then each value in <e DIEFFECT.rglDirection>
|
|
* is associated with the corresponding axis in
|
|
* <e DIEFFECT.rgdwAxes>.
|
|
*
|
|
* 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 <e DIEFFECT.rglDirection> array must
|
|
* contain <e DIEFFECT.cAxes> entries, even if polar
|
|
* or spherical
|
|
* coordinates are given. The last element in the
|
|
* <e DIEFFECT.rglDirection> array in these cases
|
|
* must be zero.
|
|
* (It will be used in future versions of DirectInput.)
|
|
*
|
|
* @field LPDIENVELOPE | lpEnvelope |
|
|
*
|
|
* Optional pointer to a <t DIENVELOPE> 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 <c NULL>.
|
|
*
|
|
* @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 <c NULL>
|
|
* if there are no type-specific parameters.
|
|
*
|
|
* If the effect is of type <c DIEFT_CONDITION>, then
|
|
* this field contains a pointer to an array of
|
|
* <t DICONDITION>
|
|
* structures which define the parameters for the
|
|
* condition.
|
|
*
|
|
* If the effect is of type <c DIEFT_CUSTOMFORCE>, then
|
|
* this field contains a pointer to a
|
|
* <t DICUSTOMFORCE>
|
|
* structure which defines the parameters for the
|
|
* custom force.
|
|
*
|
|
* If the effect is of type <c DIEFT_PERIODIC>, then
|
|
* this field contains a pointer to a
|
|
* <t DIPERIODIC>
|
|
* structure which defines the parameters for the
|
|
* effect.
|
|
*
|
|
* If the effect is of type <c DIEFT_CONSTANTFORCE>, then
|
|
* this field contains a pointer to a
|
|
* <t DICONSTANTFORCE>
|
|
* structure which defines the parameters for the
|
|
* constant force.
|
|
*
|
|
* If the effect is of type <c DIEFT_RAMPFORCE>, then
|
|
* this field contains a pointer to a
|
|
* <t DIRAMPFORCE>
|
|
* structure which defines the parameters for the
|
|
* ramp force.
|
|
*
|
|
;begin_public_900
|
|
* If the effect is of type <c DIBARRIER>, then this
|
|
* field contains a pointer to an array of <t DIBARRIER>
|
|
* 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 <mf IDirectInputEffect::Start> 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 <t DIREGION> array (of
|
|
* <e DIEFFECT.cRegions> elements) containing the region
|
|
* definition for the effect. The region elements are matched
|
|
* to the <e DIEFFECT.rgdwAxes> 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 <e DIEFFECT.rgdwAxes>.
|
|
*
|
|
* 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 <t DIFILEEFFECT> structure is used by the
|
|
* <mf IDirectInputDevice7::EnumEffectFromFile> and
|
|
* <mf IDirectInputDevuce7::WriteEffectToFile> methods.
|
|
* These methods are new for DirectInput7.
|
|
*
|
|
* The <t DIFILEEFFECT> 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 <t DIEFFECT> structure.
|
|
* The <t DIEFFECT> structure contains pointer to other
|
|
* arrays and structures. If you plan to cache the <t DIEFFECT>
|
|
* 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 <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of <e DIEFFECT.dwTriggerButton> and
|
|
* <e DIEFFECT.rgdwAxes> are object identifiers
|
|
* as obtained via <mf IDirectInput::EnumObjects>.
|
|
*
|
|
* @define DIEFF_OBJECTOFFSETS | 0x00000002 |
|
|
*
|
|
* Value for the <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of <e DIEFFECT.dwTriggerButton> and
|
|
* <e DIEFFECT.rgdwAxes> are data format offsets,
|
|
* relative to the data format selected by
|
|
* as obtained via <mf IDirectInput::SetDataFormat>.
|
|
*
|
|
* @define DIEFF_CARTESIAN | 0x00000010 |
|
|
*
|
|
* Value for the <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of
|
|
* <e DIEFFECT.rglDirection> are to be interpreted
|
|
* as cartesian coordinates.
|
|
*
|
|
* @define DIEFF_POLAR | 0x00000020 |
|
|
*
|
|
* Value for the <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of
|
|
* <e DIEFFECT.rglDirection> 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 <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of
|
|
* <e DIEFFECT.rglDirection> 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 <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the effect
|
|
* should only be active outside the area described by
|
|
* <e DIEFFECT.rgRegion>.
|
|
*
|
|
* This flag is new for DirectX 9.0.
|
|
*
|
|
* @define DIEFF_REGIONALLAXES | 0x00000200 |
|
|
*
|
|
* Value for the <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> 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 <e DIEFFECT.dwFlags> field of the
|
|
* <t DIEFFECT> structure indicating that the
|
|
* values of <e DIEFFECT.rgRegion> 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
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwDuration> field contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_SAMPLEPERIOD | 0x00000002 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwSamplePeriod> field contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_GAIN | 0x00000004 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwGain> field contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_TRIGGERBUTTON | 0x00000008 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwTriggerButton> field contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_TRIGGERREPEATINTERVAL | 0x00000010 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwTriggerRepeatInterval> field contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_AXES | 0x00000020 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.cAxes> and
|
|
* <e DIEFFECT.rgdwAxes> fields contain
|
|
* data or should receive data.
|
|
*
|
|
* For <mf IDirectInputEffect::GetParameters>, the
|
|
* <e DIEFFECT.cAxes> field on entry contains the
|
|
* sizes (in <t DWORD>s) of the buffer pointed to
|
|
* by the <e DIEFFECT.rgdwAxes> field.
|
|
* If the buffer is too small, then
|
|
* <mf IDirectInputEffect::GetParameters>
|
|
* returns <c DIERR_MOREDATA> and sets
|
|
* <e DIEFFECT.cAxes> to the necessary size of the buffer.
|
|
*
|
|
* @define DIEP_DIRECTION | 0x00000040 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.cAxes> and
|
|
* <e DIEFFECT.rglDirection> fields contain
|
|
* data or should receive data.
|
|
*
|
|
* For <mf IDirectInputEffect::GetParameters>, the
|
|
* <e DIEFFECT.cAxes> field on entry contains the
|
|
* size (in <t DWORD>s) of the buffer pointed to
|
|
* by the <e DIEFFECT.rglDirection> field.
|
|
* If the buffer is too small, then
|
|
* <mf IDirectInputEffect::GetParameters>
|
|
* returns <c DIERR_MOREDATA> and sets
|
|
* <e DIEFFECT.cAxes> to the necessary size of the buffer.
|
|
*
|
|
* The <e DIEFFECT.dwFlags> field specifies
|
|
* (via <c DIEFF_CARTESIAN> or <c DIEFF_POLAR>)
|
|
* the coordinate system in which the values should
|
|
* be interpreted.
|
|
*
|
|
* @define DIEP_ENVELOPE | 0x00000080 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.lpEnvelope> field points to
|
|
* a <t DIENVELOPE> structure which contains
|
|
* data or should receive data.
|
|
*
|
|
* @define DIEP_TYPESPECIFICPARAMS | 0x00000100 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.cbTypeSpecificParams> and
|
|
* <e DIEFFECT.lpTypeSpecificParams> fields contain
|
|
* data or should receive data.
|
|
*
|
|
* Note that the buffer pointed to by
|
|
* <e DIEFFECT.lpTypeSpecificParams> 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
|
|
* <mf IDirectInputEffect::SetParameters>
|
|
* (or implicitly via <mf IDirectInputDevice2::CreateEffect>)
|
|
*
|
|
* @define DIEP_STARTDELAY | 0x00000200 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.dwStartDelay> field contains
|
|
* data or should receive data.
|
|
*
|
|
* This flag is new for DirectX 6.1a.
|
|
*
|
|
* @define DIEP_REGION | 0x00000400 |
|
|
*
|
|
* Parameter to
|
|
* <mf IDirectInputEffect::GetParameters> or
|
|
* <mf IDirectInputEffect::SetParameters> indicating
|
|
* that the <e DIEFFECT.cRegions> and
|
|
* <e DIEFFECT.rgRegion > fields contain
|
|
* data or should receive data.
|
|
*
|
|
* For <mf IDirectInputEffect::GetParameters>, the
|
|
* <e DIEFFECT.cRegions> field on entry contains the
|
|
* size (in <t DIREGION>s) of the buffer pointed to
|
|
* by the <e DIEFFECT.rgRegion> field.
|
|
* If the buffer is too small, then
|
|
* <mf IDirectInputEffect::GetParameters>
|
|
* returns <c DIERR_MOREDATA> and sets
|
|
* <e DIEFFECT.cRegions> to the necessary size of the buffer.
|
|
*
|
|
* The <e DIEFFECT.dwFlags> field specifies
|
|
* (via the <c DIEFF_REGION*> flags) how the values
|
|
* stored in <e DIEFFECT.rgRegion> should be interpreted.
|
|
*
|
|
* This flag is new for DirectX 9.0.
|
|
*
|
|
* @define DIEP_ALLPARAMS | 0x000007FF |
|
|
*
|
|
* The union of all other <c DIEP_*> flags, indicating that
|
|
* all fields of the <t DIEFFECT> structure are valid
|
|
* or are being requested.
|
|
*
|
|
* If the <c DIRECTINPUT_VERSION> is set to a value less
|
|
* than 0x0800, then the value of this macro is
|
|
* <c 0x000003FF>, omitting flags not supported by earlier
|
|
* versions of DirectX.
|
|
*
|
|
* If the <c DIRECTINPUT_VERSION> is set to a value less
|
|
* than 0x0600, then the value of this macro is
|
|
* <c 0x000001FF>, omitting flags not supported by earlier
|
|
* versions of DirectX.
|
|
*
|
|
* @define DIEP_START | 0x20000000 |
|
|
*
|
|
* Additional flag which may be passed to
|
|
* <mf IDirectInputEffect::SetParameters> 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
|
|
* <mf IDirectInputEffect::Start>(1, 0) after a successful
|
|
* call to
|
|
* <mf IDirectInputEffect::SetParameters>.
|
|
*
|
|
* Note that the <c DIEP_NODOWNLOAD> flag overrides the
|
|
* <c DIEP_NORESTART> flag.
|
|
*
|
|
* @define DIEP_NORESTART | 0x40000000 |
|
|
*
|
|
* Additional flag which may be passed to
|
|
* <mf IDirectInputEffect::SetParameters> to indicate that
|
|
* if the hardware cannot update the parameters while the
|
|
* effect is playing, it should return <c DIERR_EFFECTPLAYING>
|
|
* 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 <c DIEP_NODOWNLOAD> and
|
|
* <c DIEP_START> flags override the
|
|
* <c DIEP_NORESTART> flag.
|
|
*
|
|
* @define DIEP_NODOWNLOAD | 0x80000000 |
|
|
*
|
|
* Additional flag which may be passed to
|
|
* <mf IDirectInputEffect::SetParameters> to suppress the
|
|
* automatic <mf IDirectInputEffect::Download> that is
|
|
* normally performed after the parameters are updated.
|
|
*
|
|
* @define DIEB_NOTRIGGER | 0xFFFFFFFF |
|
|
*
|
|
* A special value for the <e DIEFFECT.dwTriggerButton> field
|
|
* of the <t DIEFFECT> 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
|
|
* <mf IDirectInputEffect::Start> 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
|
|
* <mf IDirectInputEffect::Start> indicating
|
|
* that if the effect has not been downloaded,
|
|
* then the attempt to play the effect should
|
|
* fail with the error code <c DIERR_NOTDOWNLOADED>.
|
|
* 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
|
|
* <mf IDirectInputEffect::GetEffectStatus> indicating
|
|
* that the effect is still playing.
|
|
*
|
|
* @define DIEGES_EMULATED | 0x00000002 |
|
|
*
|
|
* Status code produced by
|
|
* <mf IDirectInputEffect::GetEffectStatus> indicating
|
|
* that the effect is emulated.
|
|
*
|
|
****************************************************************************/
|
|
enddoc
|
|
#define DIEGES_PLAYING 0x00000001
|
|
#define DIEGES_EMULATED 0x00000002
|
|
|
|
begindoc
|
|
/****************************************************************************
|
|
*
|
|
* @doc EXTERNAL
|
|
*
|
|
* @struct DIEFFESCAPE |
|
|
*
|
|
* Structure used by the
|
|
* <mf IDirectInputEffect::Escape> 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
|
|
* <e DIDEVICEINSTANCE.guidFFDriver> in the
|
|
* <t DIDEVICEINSTANCE> 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 <e DIEFFESCAPE.lpvInBuffer>
|
|
* 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
|
|
* <e DIEFFESCAPE.lpvOutBuffer>
|
|
* 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:
|
|
*
|
|
* <c DIDEVTYPE_DEVICE>: A device which does not fall into
|
|
* any of the following categories.
|
|
*
|
|
* <c DIDEVTYPE_MOUSE>: A mouse or mouse-like device (such as
|
|
* a trackball).
|
|
*
|
|
* <c DIDEVTYPE_KEYBOARD>: A keyboard or keyboard-like device.
|
|
*
|
|
* <c DIDEVTYPE_JOYSTICK>: A joystick or joystick-like device (such
|
|
* as a steering wheel).
|
|
*
|
|
* DInput 8 types:
|
|
*
|
|
* <c DI8DEVTYPE_DEVICE>: A device which does not fall into
|
|
* any of the following categories.
|
|
*
|
|
* <c DI8DEVTYPE_MOUSE>: A mouse or mouse-like device (such as
|
|
* a trackball).
|
|
*
|
|
* <c DI8DEVTYPE_KEYBOARD>: A keyboard or keyboard-like device.
|
|
*
|
|
* <c DI8DEVTYPE_JOYSTICK>: A generic joystick device.
|
|
*
|
|
* <c DI8DEVTYPE_GAMEPAD>: A gamepad.
|
|
*
|
|
* <c DI8DEVTYPE_DRIVING>: Some form of steering wheel and
|
|
* associated controls.
|
|
*
|
|
* <c DI8DEVTYPE_FLIGHT>: Some form of flight controller.
|
|
*
|
|
* <c DI8DEVTYPE_1STPERSON>: A device optimized for control from
|
|
* a first person perspective.
|
|
*
|
|
* <c DI8DEVTYPE_SCREENPOINTER>: A device which reports position
|
|
* in terms of screen coordinates that would not normally control
|
|
* the system mouse pointer.
|
|
*
|
|
* <c DI8DEVTYPE_REMOTE>: A remote control device.
|
|
*
|
|
* <c DI8DEVTYPE_DEVICECTRL>: A controller used to modify a real
|
|
* world device from within the context of the application.
|
|
*
|
|
* <c DI8DEVTYPE_SUPPLEMENTAL>: 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:
|
|
*
|
|
* <c DIDEVTYPEMOUSE_UNKNOWN>: The subtype could not be
|
|
* determined.
|
|
*
|
|
* <c DIDEVTYPEMOUSE_TRADITIONAL>: A traditional mouse.
|
|
*
|
|
* <c DIDEVTYPEMOUSE_FINGERSTICK>: A fingerstick.
|
|
*
|
|
* <c DIDEVTYPEMOUSE_TOUCHPAD>: The device is a touchpad.
|
|
*
|
|
* <c DIDEVTYPEMOUSE_TRACKBALL>: The device is a trackball.
|
|
*
|
|
* For keyboard type devices, the following subtypes are defined:
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_PCXT>: IBM PC/XT 83-key keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_OLIVETTI>: Olivetti 102-key keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_PCAT>: IBM PC/AT 84-key keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_PCENH>: IBM PC Enhanced 101/102-key
|
|
* or Microsoft Natural keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_NOKIA1050>: Nokia 1050 keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_NOKIA9140>: Nokia 9140 keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_NEC98>: Japanese NEC PC98 keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_NEC98LAPTOP>:
|
|
* Japanese NEC PC98 laptop keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_NEC98106>:
|
|
* Japanese NEC PC98 106-key keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_JAPAN106>: Japanese 106-key keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_JAPANAX>: Japanese AX keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_J3100>: Japanese J3100 keyboard.
|
|
*
|
|
;begin_public_500
|
|
* For joystick type devices, in DInput versions 5 to 7, the
|
|
* following subtypes are defined:
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_UNKNOWN>: The subtype could not be
|
|
* determined.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_TRADITIONAL>: A traditional joystick.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_FLIGHTSTICK>: A joystick optimized for
|
|
* flight simulation.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_GAMEPAD>: A joystick whose primary
|
|
* purpose is to provide button input.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_RUDDER>: A joystick optimized for
|
|
* yaw control.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_WHEEL>: A joystick optimized for
|
|
* use as a steering wheel.
|
|
*
|
|
* <c DIDEVTYPEJOYSTICK_HEADTRACKER>: 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:
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_UNKNOWN>: The subtype could not be
|
|
* determined.
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_TRADITIONAL>: A traditional mouse.
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_FINGERSTICK>: A fingerstick.
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_TOUCHPAD>: The device is a touchpad.
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_TRACKBALL>: The device is a trackball.
|
|
*
|
|
* <c DI8DEVTYPEMOUSE_ABSOLUTE>: A mouse reporting absolute
|
|
* axis values. (Note, there is no coresponding value in previous
|
|
* versions.)
|
|
*
|
|
* For keyboard type devices, the following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_PCXT>: IBM PC/XT 83-key keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_OLIVETTI>: Olivetti 102-key keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_PCAT>: IBM PC/AT 84-key keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_PCENH>: IBM PC Enhanced 101/102-key
|
|
* or Microsoft Natural keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_NOKIA1050>: Nokia 1050 keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_NOKIA9140>: Nokia 9140 keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_NEC98>: Japanese NEC PC98 keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_NEC98LAPTOP>:
|
|
* Japanese NEC PC98 laptop keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_NEC98106>:
|
|
* Japanese NEC PC98 106-key keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_JAPAN106>: Japanese 106-key keyboard.
|
|
*
|
|
* <c DI8DEVTYPEKEYBOARD_JAPANAX>: Japanese AX keyboard.
|
|
*
|
|
* <c DIDEVTYPEKEYBOARD_J3100>: Japanese J3100 keyboard.
|
|
*
|
|
* For joystick type devices, following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPEJOYSTICK_LIMITED>: A joystick which does not provide
|
|
* the minimal semantic mapper joystick device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEJOYSTICK_STANDARD>: A joystick which provides at least
|
|
* the minimal semantic mapper joystick device capabilities.
|
|
*
|
|
* For gamepad type devices, following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPEGAMEPAD_LIMITED>: A gamepad which does not provide
|
|
* the minimal semantic mapper gamepad device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEGAMEPAD_STANDARD>: A gamepad which provides at least
|
|
* the minimal semantic mapper gamepad device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEGAMEPAD_TILT>: 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:
|
|
*
|
|
* <c DI8DEVTYPEDRIVING_LIMITED>: 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.
|
|
*
|
|
* <c DI8DEVTYPEDRIVING_COMBINEDPEDALS>: A steering wheel which
|
|
* provides at least the minimal semantic mapper wheel device
|
|
* capabilities including accelleration and brake pedals combined in
|
|
* a single axis.
|
|
*
|
|
* <c DI8DEVTYPEDRIVING_DUALPEDALS>: A steering wheel which provides
|
|
* at least the minimal semantic mapper wheel device capabilities
|
|
* including separate accelleration and brake pedals.
|
|
*
|
|
* <c DI8DEVTYPEDRIVING_THREEPEDALS>: A steering wheel which provides
|
|
* at least the minimal semantic mapper wheel device capabilities
|
|
* including separate accelleration, brake and clutch pedals.
|
|
*
|
|
* <c DI8DEVTYPEDRIVING_HANDHELD>: A hand held steering device which
|
|
* provides at least the minimal semantic mapper wheel device
|
|
* capabilities.
|
|
*
|
|
*
|
|
* For flight type devices, following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPEFLIGHT_LIMITED>: A flight device that does not have
|
|
* the minimal semantic mapper flight device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEFLIGHT_STICK>: A flight stick that has at least the
|
|
* minimal semantic mapper flight device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEFLIGHT_YOKE>: A flight yoke that has at least the
|
|
* minimal semantic mapper flight device capabilities.
|
|
*
|
|
* <c DI8DEVTYPEFLIGHT_RC>: 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:
|
|
*
|
|
* <c DI8DEVTYPE1STPERSON_LIMITED>: A first person device which does
|
|
* not provide the minimal semantic mapper device capabilities.
|
|
* Note the is no spec for this ;Internal
|
|
*
|
|
* <c DI8DEVTYPE1STPERSON_UNKNOWN>: 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.
|
|
*
|
|
* <c DI8DEVTYPE1STPERSON_SIXDOF>: A device which provides the
|
|
* minimal semantic mapper device capabilities and has both
|
|
* rotational and translational axes in all three orthogonal planes.
|
|
*
|
|
* <c DI8DEVTYPE1STPERSON_SHOOTER>: 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:
|
|
*
|
|
* <c DI8DEVTYPESCREENPTR_UNKNOWN>: An unknown form of screen pointing
|
|
* device.
|
|
*
|
|
* <c DI8DEVTYPESCREENPTR_LIGHTGUN>: A light gun.
|
|
*
|
|
* <c DI8DEVTYPESCREENPTR_LIGHTPEN>: A light pen.
|
|
*
|
|
* <c DI8DEVTYPESCREENPTR_TOUCH>: A touch screen.
|
|
*
|
|
*
|
|
* For remote control type devices no subtypes are defined except:
|
|
* <c DI8DEVTYPEREMOTE_UNKNOWN>
|
|
*
|
|
*
|
|
* For device control type devices, following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPEDEVICECTRL_UNKNOWN>: An unknown form of device control.
|
|
*
|
|
* <c DI8DEVTYPEDEVICECTRL_COMMSSELECTION>: A control used to make
|
|
* communications selections.
|
|
*
|
|
*
|
|
* For supplemental type devices, following subtypes are defined:
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_UNKNOWN>: An unknown form of supplemental
|
|
* device. The device objects should be examined to determine what
|
|
* it should be used for.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER>: A device designed to
|
|
* be used with the player's second (usually left) hand for controls
|
|
* beyond the primary game play actions.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_HEADTRACKER>: A device reporting head
|
|
* motions in terms of yaw, pitch and roll.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_HANDTRACKER>: A device reporting hand
|
|
* motions in terms of yaw, pitch and roll.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE>: A device reporting gear
|
|
* selection of a shift stick using only button states.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_SHIFTER>: A device reporting gear
|
|
* selection of a shift stick using an axis.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_THROTTLE>: 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.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE>: 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.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS>: A device with the primary
|
|
* function of reporting accelleration and brake pedal values through
|
|
* a single axis. Although unlikely, it may have other controls.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_DUALPEDALS>: A device with the primary
|
|
* function of reporting accelleration and brake pedal values using
|
|
* separate axes. Although unlikely, it may have other controls.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_THREEPEDALS>: A device with the primary
|
|
* function of reporting accelleration, brake and clutch pedal values
|
|
* using separate axes. Although unlikely, it may have other controls.
|
|
*
|
|
* <c DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS>: 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.
|
|
*
|
|
* <c DIDEVTYPE_HID>: The device uses the
|
|
* Human Input Device (HID) protocol.
|
|
;end_public_500
|
|
*
|
|
* @xref <f GET_DIDEVICE_TYPE>,
|
|
* <f GET_DIDEVICE_SUBTYPE>.
|
|
*
|
|
* @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 <t DIDEVCAPS> structure is used by the
|
|
* <mf IDirectInputDevice::GetCapabilities> 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 <mf IDirectInputDevice::GetCapabilities>.
|
|
*
|
|
* @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:
|
|
*
|
|
* <c DIDC_ATTACHED>: The device is physically attached.
|
|
*
|
|
* <c DIDC_POLLEDDEVICE>: 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.
|
|
*
|
|
* <y Note>: Do not confuse this flag with
|
|
* the <c DIDC_POLLEDDATAFORMAT> flag. If you want to
|
|
* decide whether polling is necessary to retrieve data
|
|
* in the current data format,
|
|
* check the <c DIDC_POLLEDDATAFORMAT> flag instead.
|
|
* The <c DIDC_POLLEDDEVICE> flag describes the worst-case
|
|
* scenario for the device, not the actual situation.
|
|
*
|
|
* For example, a HID keyboard will be marked as
|
|
* <c DIDC_POLLEDDEVICE> because the LEDs require polling.
|
|
* However, the the standard keyboard data format does not
|
|
* read the LEDs, so <c DIDC_POLLEDDATAFORMAT> 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.
|
|
*
|
|
* <c DIDC_EMULATED>: 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.
|
|
*
|
|
*
|
|
* <c DIDC_POLLEDDATAFORMAT>: At least one object in the
|
|
* currently-selected data format requires polling.
|
|
*
|
|
* See the remarks under <c DIDC_POLLEDDEVICE> for a
|
|
* comparison of the two flags.
|
|
*
|
|
* <c DIDC_FORCEFEEDBACK>: The device supports force feedback.
|
|
* This flag is new for DirectX 5.0.
|
|
*
|
|
* <c DIDC_FFFADE>: 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 <t DIENVELOPE> structure will be ignored by the device.
|
|
*
|
|
* Individual effects will set the <c DIEFT_FFFADE> flag
|
|
* if fade is supported for that particular effect.
|
|
*
|
|
* This flag is new for DirectX 5.0 and applies only to
|
|
* force feedback devices.
|
|
*
|
|
* <c DIDC_FFATTACK>: 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 <t DIENVELOPE> structure will be ignored by the device.
|
|
*
|
|
* Individual effects will set the <c DIEFT_FFATTACK> flag
|
|
* if attack is supported for that particular effect.
|
|
*
|
|
* This flag is new for DirectX 5.0 and applies only to
|
|
* force feedback devices.
|
|
*
|
|
* <c DIDC_SATURATION>: 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 <c DIEFT_SATURATION> flag
|
|
* if saturation is supported for that particular condition.
|
|
*
|
|
* This flag is new for DirectX 5.0 and applies only to
|
|
* force feedback devices.
|
|
*
|
|
* <c DIDC_POSNEGCOEFFICIENTS>: 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 <t DICONDITION> structure will be ignored.
|
|
*
|
|
* Individual conditions will set the
|
|
* <c DIEFT_POSNEGCOEFFICIENTS> 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.
|
|
*
|
|
* <c DIDC_POSNEGSATURATION>: 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 <t DICONDITON> structure will be ignored.
|
|
*
|
|
* Individual conditions will set the
|
|
* <c DIEFT_POSNEGSATURATION> 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.
|
|
*
|
|
* <c DIDC_DEADBAND>: 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 <t DICONDITION> structure will be ignored.
|
|
*
|
|
* Individual conditions will set the
|
|
* <c DIEFT_DEADBAND> 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
|
|
* <c DIEFT_DEADBAND> 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.
|
|
*
|
|
* <c DIDC_STARTDELAY>: 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 <t DIEFFECT> structure will be ignored.
|
|
*
|
|
* Individual conditions will set the
|
|
* <c DIEFT_STARTDELAY> 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.
|
|
*
|
|
* <c DIDC_ALIAS>: The device is a duplicate of another
|
|
* DirectInput device.
|
|
* Alias devices are by default not enumerated by
|
|
* <mf IDirectInput::EnumDevices>.
|
|
* Passing the <c DIEDFL_INCLUDEALIASES> flag forces
|
|
* alias devices to be included in the enumeration.
|
|
*
|
|
* This flag is new for DirectX 5.0a.
|
|
*
|
|
* <c DIDC_PHANTOM>: 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
|
|
* <mf IDirectInput::EnumDevices>.
|
|
* Passing the <c DIEDFL_INCLUDEPHANTOMS> flag forces
|
|
* phantom devices to be included in the enumeration.
|
|
*
|
|
* This flag is new for DirectX 5.0a.
|
|
*
|
|
* <c DIDC_HIDDEN>: 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
|
|
* <e DIDEVCAPS.dwFFMinTimeResolution> 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 <mf IDirectInputDevice::EnumObjects>:
|
|
* 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 <c DIPROP_GRANULARITY> 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 <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <c DIPROP_GRANULARITY> property of an axis will
|
|
* report the axis granularity.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* restricts the enumeration to absolute axis objects.
|
|
*
|
|
* @flag DIDFT_AXIS |
|
|
*
|
|
* Valid only for <mf IDirectInputDevice::EnumObjects>:
|
|
* Object is either an
|
|
* absolute axis or a relative axis.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <mf IDirectInputDevice::EnumObjects>
|
|
* restricts the enumeration to toggle-button objects.
|
|
*
|
|
* @flag DIDFT_BUTTON |
|
|
*
|
|
* Object is a either a pushbutton or toggle button.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <c JOY_POVCENTERED>
|
|
* to indicate that no direction is being indicated.
|
|
* The <c JOY_POV*> 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 <c DIPROP_GRANULARITY> property of a point-of-view
|
|
* controller will report the indicator granularity.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <f DIDFT_GETINSTANCE> macro.
|
|
* You can then pass the link collection number to
|
|
* the <mf IDirectInputDevice2::EnumObjects>
|
|
* method with the
|
|
* <c DIDFT_ENUMCOLLECTION(n)> flag
|
|
* to enumerate the objects in collection <c n>,
|
|
* 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 <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <c DIDFT_FFACTUATOR> flag
|
|
* is set), or it can be used as a target of
|
|
* <mf IDirectInputDevice2::SendDeviceData> (if
|
|
* the <c DIDFT_OUTPUT> flag is set).
|
|
*
|
|
* If the <c DIDFT_NODATA> flag is set, then the value
|
|
* of the <e DIDEVICEOBJECTINSTANCE.dwOfs> field in the
|
|
* <t DIDEVICEOBJECTINSTANCE> structure is meaningless
|
|
* and should be ignored.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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
|
|
* <mf IDirectInputDevice::EnumObjects>
|
|
* restricts enumeration to objects which
|
|
* support force feedback.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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
|
|
* <mf IDirectInputDevice::EnumObjects>
|
|
* restricts enumeration to objects which
|
|
* can be used to trigger force feedback effects.
|
|
*
|
|
* Passing this flag to <mf IDirectInputDevice::EnumObjects>
|
|
* 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
|
|
* <mf IDirectInputDevice2::SendDeviceData> method.
|
|
*
|
|
* Passing this flag to
|
|
* <mf IDirectInputDevice::EnumObjects>
|
|
* restricts enumeration to objects which
|
|
* can be sent data.
|
|
*
|
|
* This flag is new for DirectX 5.0a.
|
|
*
|
|
* @flag DIDFT_NOCOLLECTION |
|
|
*
|
|
* Special parameter to <mf IDirectInputDevice::EnumObjects>
|
|
* 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
|
|
* <mf IDirectInputDevice::EnumObjects>
|
|
* <f enables> 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
|
|
* <mf IDirectInputDevice::EnumObjects>
|
|
* <f enables> vendor specific device objects to be enumurated.
|
|
*
|
|
*
|
|
* @xref <f DIDFT_GETTYPE>, <f DIDFT_GETINSTANCE>,
|
|
* <f DIDFT_ENUMCOLLECTION>.
|
|
*
|
|
****************************************************************************/
|
|
/*
|
|
* @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 <mf IDirectInputDevice::EnumObjects>
|
|
* 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 <t DIOBJECTDATAFORMAT> structure is used by the
|
|
* <mf IDirectInputDevice::SetDataFormat> 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 <c DIDOI_GUIDISUSAGE> flag is set in the
|
|
* <e DIOBJECTDATAFORMAT.dwFlags> field, then this field
|
|
* is really a
|
|
* (suitably cast)
|
|
* <c DIMAKEUSAGEDWORD> 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 <c DIDFT_ANYINSTANCE>
|
|
* to indicate that any instance is permissible.
|
|
*
|
|
* @field DWORD | dwFlags |
|
|
*
|
|
* Zero or more of the following flags:
|
|
*
|
|
* An optional <c DIDOI_ASPECT*> flag. Multiple aspect flags
|
|
* cannot be combined.
|
|
*
|
|
* The flag <c DIDOI_GUIDISUSAGE>, indicating that the
|
|
* <e DIOBJECTDATAFORMAT.pguid> field is really a
|
|
* (suitably cast)
|
|
* <c DIMAKEUSAGEDWORD> 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 <t DIDATAFORMAT> structure is used by the
|
|
* <mf IDirectInputDevice::SetDataFormat> method
|
|
* to set the data format for a device.
|
|
* a device.
|
|
*
|
|
* @field DWORD | dwSize |
|
|
*
|
|
* The size of the <t DIDATAFORMAT> structure.
|
|
*
|
|
* @field DWORD | dwObjSize |
|
|
*
|
|
* The size of the <t DIOBJECTDATAFORMAT> structure.
|
|
*
|
|
* @field DWORD | dwFlags |
|
|
*
|
|
* Flags describing other attributes of the data format.
|
|
*
|
|
* The following flags are defined:
|
|
*
|
|
* <c DIDF_RELAXIS>: Set the axes into relative mode.
|
|
* Setting this flag in the data format is equivalent to
|
|
* manually setting the axis mode property via
|
|
* <mf IDirectInputDevice::SetProperty>.
|
|
* The flag may not be combined with <c DIDF_ABSAXIS>.
|
|
*
|
|
* <c DIDF_ABSAXIS>: Set the axes into absolute mode.
|
|
* Setting this flag in the data format is equivalent to
|
|
* manually setting the axis mode property via
|
|
* <mf IDirectInputDevice::SetProperty>.
|
|
* The flag may not be combined with <c DIDF_RELAXIS>.
|
|
*
|
|
* @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 <e DIDATAFORMAT.dwOfs> value for
|
|
* all objects specified in the object list.
|
|
*
|
|
* @field DWORD | dwNumObjs |
|
|
*
|
|
* The number of objects in the <e DIOBJECTDATAFORMAT.rgdf>
|
|
* array.
|
|
*
|
|
* @field LPDIOBJECTDATAFORMAT | rgodf |
|
|
*
|
|
* Pointer to an array of <t DIOBJECTDATAFORMAT> structures,
|
|
* each of which describes how one object's data should be
|
|
* reported in the device data.
|
|
*
|
|
* @comm
|
|
* "It is an error" for the <p rgdf> to indicate that two
|
|
* difference pieces of information be placed in the same
|
|
* location.
|
|
*
|
|
* "It is an error" for the <p rgdf> 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 <t DIDATAFORMAT> 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 <t DIACTION> structure allows an application to refer
|
|
* to a virtualized device and a controler. The
|
|
*
|
|
* The <t DIACTION> structure is used by:
|
|
* <mf IDirectInput::EnumDevicesBySemantics> to examine the
|
|
* input requirements and enumerate suitable devices.
|
|
* <mf IDirectInputDevice::BuildActionMap> to resolve the vitual
|
|
* device controls to physical device controls.
|
|
* <mf IDirectInputDevice::SetActionMap> to set
|
|
* to set the data format for a single object within
|
|
* a device.
|
|
*
|
|
* @field UINT_PTR | uAppData |
|
|
*
|
|
* An application can specify a <t UINT_PTR> to assign to the to
|
|
* the action. The uAppData will be returned to the application in
|
|
* <mf IDirectInputDevice::GetDeviceState> 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 <c DIA_*> 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 <e DIDEVICEOBJECTINSTANCE.dwType>
|
|
* for more details. This allows an application to bypass
|
|
* DirectInput semantic mapping on a per control basis.
|
|
* This element is ignored for <mf IDirectInputDevice::BuildActionMap>
|
|
* and <mf IDirectInputDevice::SetActionMap> unless the
|
|
* <c DIA_APPMAPPED> flag is set in <e DIACTION.dwFlags>.
|
|
*
|
|
* @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 <e DIACTION.dwFlags> |
|
|
*
|
|
* @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 <e DIACTION.dwHow> |
|
|
*
|
|
* @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 <t DIACTIONFORMAT> structure is used by the
|
|
* <mf IDirectInputDevice::SetDataFormat> method
|
|
* to set the data format for a device.
|
|
* a device.
|
|
*
|
|
* @field DWORD | dwSize |
|
|
*
|
|
* The size of the <t DIACTIONFORMAT> structure.
|
|
*
|
|
* @field DWORD | dwActionSize |
|
|
*
|
|
* The size of the <t DIACTION> 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 <e DIACTIONFORMAT.rgoAction>
|
|
* array.
|
|
*
|
|
* @field LPDIACTION | rgoAction |
|
|
*
|
|
* Pointer to an array of <t DIACTION> 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 <e DIPROPDWORD.dwData> value to
|
|
* set the DIPROP_BUFFERSIZE property on the device when the action
|
|
* map is applied using <mf IDirectInputDevice::SetActionMap>.
|
|
* 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 <c DIA_NORANGE> flag is set in <e DIACTION.dwFlags>.
|
|
* 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 <e DIPROPRANGE.lMin> value to set the range property on an
|
|
* absolute axis when the action map is applied using
|
|
* <mf IDirectInputDevice::SetActionMap>.
|
|
*
|
|
* @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 <c DIA_NORANGE> flag is set in <e DIACTION.dwFlags>.
|
|
* 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 <e DIPROPRANGE.lMax> value to set the range property on an
|
|
* absolute axis when the action map is applied using
|
|
* <mf IDirectInputDevice::SetActionMap>.
|
|
*
|
|
* @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
|
|
* <mf IDirectInputDevice::SetActionMap> 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 <f DIDSAM_FORCESAVE>
|
|
* 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 <e DIACTIONFORMAT.ftTimeStamp> |
|
|
*
|
|
* @flag DIAFTS_NEWDEVICEHIGH |
|
|
*
|
|
* Value in <e dwHighDateTime> which when combined with a value of
|
|
* <c DIAFTS_NEWDEVICELOW> in <e dwLowDateTime> signifies that the
|
|
* device to which this action format is being mapped is new for
|
|
* this user.
|
|
*
|
|
* @flag DIAFTS_NEWDEVICELOW |
|
|
*
|
|
* Value in <e dwHighDateLow> which when combined with a value of
|
|
* <c DIAFTS_NEWDEVICEHIGH> in <e dwHighDateTime> signifies that the
|
|
* device to which this action format is being mapped is new for
|
|
* this user.
|
|
*
|
|
* @flag DIAFTS_UNUSEDDEVICEHIGH |
|
|
*
|
|
* Value in <e dwHighDateTime> which when combined with a value of
|
|
* <c DIAFTS_UNUSEDDEVICELOW> in <e dwLowDateTime> signifies that the
|
|
* device to which this action format is being mapped has never been
|
|
* used by this user.
|
|
*
|
|
* @flag DIAFTS_UNUSEDDEVICELOW |
|
|
*
|
|
* Value in <e dwHighDateLow> which when combined with a value of
|
|
* <c DIAFTS_NEWDEVICEHIGH> in <e dwHighDateTime> 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 <mf IDirectInputDevice::BuildActionMap> 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 <e DIACTION.dwFlags> 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 <c DIDBAM_PRESERVE>, <c DIDBAM_INITIALIZE>
|
|
* and <c DIDBAM_HWDEFAULTS> may be passed to
|
|
* <mf IDirectInputDevice::BuildActionMap>. "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 <mf IDirectInputDevice::SetActionMap> 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 <mf IDirectInput::ConfigureDevices> 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 <t DICOLORSET> structure contains colors that DirectInput
|
|
* uses to draw the configuration user interface. All colors are
|
|
* <t D3DCOLOR> values.
|
|
*
|
|
* @field DWORD | dwSize |
|
|
*
|
|
* Size of the <t DICOLORSET> 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 <t DICONFIGUREDEVICESPARAMS> 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 <t DICOLORSET> 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 <e DIDEVICEIMAGEINFO.dwFlags> |
|
|
*
|
|
* 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
|
|
* <e DIDEVICEIMAGEINFO.rcOverlay> 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
|
|
* <e DIDEVICEIMAGEINFO.dwViewID>,
|
|
* <e DIDEVICEIMAGEINFO.rcOverlay>,
|
|
* <e DIDEVICEIMAGEINFO.dwObjID>,
|
|
* <e DIDEVICEIMAGEINFO.dwcValidPts>,
|
|
* <e DIDEVICEIMAGEINFO.rgptCalloutLine>,
|
|
* <e DIDEVICEIMAGEINFO.rcCalloutRect> and
|
|
* <e DIDEVICEIMAGEINFO.dwTextAlign> 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
|
|
* <e DIDEVICEIMAGEINFO.dwObjID>, 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 <t DIDEVICEIMAGEINFO> 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 <t DIDEVICEIMAGEINFO> structure carries information required
|
|
* to display a device image, or an overlay image with a callout.
|
|
* This structure is used by the
|
|
* <mf IDirectInputDevice8::GetImageInfo> method, as an array
|
|
* contained within a <t DIDEVICEIMAGEINFOHEADER> structure.
|
|
*
|
|
* @field TCHAR | lptszImagePath[MAX_PATH] |
|
|
*
|
|
* Fully qualified path to the file that contains an image of the
|
|
* device. File format is given in
|
|
* <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @field DWORD | dwFlags |
|
|
*
|
|
* A combination of <c DIDIFT_*> 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 <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @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 <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @field DWORD | dwcValidPts |
|
|
*
|
|
* Number of valid points in rgptCalloutLine array.
|
|
* This member is only valid if the <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @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 <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @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 <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
* @field DWORD | dwTextAlign |
|
|
*
|
|
* Any combination of the <c DIDAL_* > text-alignment flags.
|
|
* The text within the rectangle described by
|
|
* <e DIDEVICEIMAGEINFO.rcCalloutRect> should be aligned
|
|
* according to these falgs.
|
|
* This member is only valid if the <c DIDIFT_OVERLAY> flag is
|
|
* present in <e DIDEVICEIMAGEINFO.dwFlags>.
|
|
*
|
|
****************************************************************************/
|
|
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 <t DIDEVICEIMAGEINFOHEADER> structure provides general
|
|
* variable-length array of <t DIDEVICEIMAGE> structures.
|
|
* This structure is used by the
|
|
* <mf IDirectInputDevice8::GetImageInfo> method.
|
|
*
|
|
* @field DWORD | dwSize |
|
|
*
|
|
* The size of the <t DIDEVICEIMAGEINFOHEADER> structure.
|
|
*
|
|
* @field DWORD | dwSizeImageInfo |
|
|
*
|
|
* The size of each <t DIDEVICEIMAGEINFO> element in the
|
|
* <e DIDEVICEIMAGEINFOHEADER.lprgImageInfo> 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
|
|
* <e DIDEVICEIMAGEINFOHEADER.lprgImageInfo>.
|
|
*
|
|
* @field DWORD | dwBufferUsed |
|
|
*
|
|
* Size, in bytes, of the memory used within the buffer pointed to
|
|
* by <e DIDEVICEIMAGEINFOHEADER.lprgImageInfo>.
|
|
*
|
|
* @field LPDIDEVICEIMAGEINFO | lprgImageInfoArray |
|
|
*
|
|
* Buffer to be filled with an array of <t DIDEVICEIMAGEINFO>
|
|
* structures that describe all of the device images and views,
|
|
* overlay images, and callout-string coordinates.
|
|
*
|
|
* @comm The buffer at <e DIDEVICEIMAGEINFOHEADER.lprgImageInfo> must be
|
|
* large enough to hold all required image information structures.
|
|
* Applications can query for the required size by calling the
|
|
* <mf IDirectInputDevice8::GetImageInfo> method with the
|
|
* <e DIDEVICEIMAGEINFOHEADER.dwBufferSize> is set to zero.
|
|
* After the call, <e DIDEVICEIMAGEINFOHEADER.dwBufferUsed>
|
|
* 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 <t DIDEVICEOBJECTINSTANCE> structure is used by the
|
|
* <mf IDirectInputDevice::EnumObjects> and
|
|
* <mf IDirectInputDevice::GetObjectInfo> 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:
|
|
*
|
|
* <c GUID_XAxis>: 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.
|
|
*
|
|
* <c GUID_YAxis>: 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.
|
|
*
|
|
* <c GUID_ZAxis>: This is the vertical axis of a controller.
|
|
* For example, it may represent rotation of the Z-wheel on
|
|
* a mouse.
|
|
*
|
|
* <c GUID_Button>: This is a button on a game controller.
|
|
*
|
|
* <c GUID_Key>: This is a key on a keypad.
|
|
*
|
|
* Other object types may be defined in the future. (For example,
|
|
* <c GUID_Fire>, <c GUID_Throttle>, <c GUID_SteeringWheel>.)
|
|
*
|
|
* @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 <c DIDFT_*> flags which describe
|
|
* the object type (axis, button, etc.) and contains the
|
|
* object instance number in the high byte. Use the
|
|
* <f DIDFT_GETINSTANCE> macro to extract the object instance
|
|
* number.
|
|
*
|
|
* @field DWORD | dwFlags |
|
|
*
|
|
* Zero or more <c DIDOI_*> 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 <mf IDirectInputDevice2::EnumObjects>
|
|
* method with the
|
|
* <c DIDFT_ENUMCOLLECTION(n)> 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 <t DIDEVICEOBJECTINSTANCE> 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 <t DIDEVICEOBJECTINSTANCE> 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 <t DIDEVICEOBJECTINSTANCE> 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 <c DIDOI_FFACTUATOR> flag set.
|
|
;begin_internal
|
|
* ISSUE-2001/03/29-timgill FF Flag issue
|
|
* If this flag is set, can you specify a <t DIREGION>
|
|
* 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 <t DIDEVICEOBJECTINSTANCE> and
|
|
* <t DIOBJECTDATAFORMAT> which indicates that
|
|
* the object reports position information.
|
|
*
|
|
* This flag is new for DirectX 5.0.
|
|
*
|
|
* @define DIDOI_ASPECTVELOCITY | 0x00000200 |
|
|
*
|
|
* Flag for <t DIDEVICEOBJECTINSTANCE> and
|
|
* <t DIOBJECTDATAFORMAT> which indicates that
|
|
* the object reports velocity information.
|
|
*
|
|
* This flag is new for DirectX 5.0.
|
|
*
|
|
* @define DIDOI_ASPECTACCEL | 0x00000300 |
|
|
*
|
|
* Flag for <t DIDEVICEOBJECTINSTANCE> and
|
|
* <t DIOBJECTDATAFORMAT> which indicates that
|
|
* the object reports acceleration information.
|
|
*
|
|
* This flag is new for DirectX 5.0.
|
|
*
|
|
* @define DIDOI_ASPECTFORCE | 0x00000400 |
|
|
*
|
|
* Flag for <t DIDEVICEOBJECTINSTANCE> and
|
|
* <t DIOBJECTDATAFORMAT> which indicates that
|
|
* the object reports force information.
|
|
*
|
|
* This flag is new for DirectX 5.0.
|
|
*
|
|
* @define DIDOI_ASPECTMASK | 0x00000F00 |
|
|
*
|
|
* Mask for <t DIDEVICEOBJECTINSTANCE> and
|
|
* <t DIOBJECTDATAFORMAT> 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 <t DIDEVICEOBJECTINSTANCE> 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 <t DIOBJECTDATAFORMAT> which indicates that
|
|
* the <t DIOBJECTDATAFORMAT>.pguid field is really a
|
|
* (suitably cast)
|
|
* <c DIMAKEUSAGEDWORD> 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 <t DIPROPHEADER> structure.
|
|
*
|
|
* @field DWORD | dwObj |
|
|
*
|
|
* Identifies the object for which the property is to be
|
|
* accessed.
|
|
*
|
|
* If the <e DIPROPHEADER.dwHow> field is
|
|
* <c DIPH_DEVICE>, then the <e DIPROPHEADER.dwObj> field
|
|
* must be zero.
|
|
*
|
|
* If the <e DIPROPHEADER.dwHow> field is
|
|
* <c DIPH_BYOFFSET>, then the <e DIPROPHEADER.dwObj> field
|
|
* is the
|
|
* offset into the current data format of the object
|
|
* whose property is being accessed.
|
|
*
|
|
* If the <e DIPROPHEADER.dwHow> field is
|
|
* <c DIPH_BYID>, then the <e DIPROPHEADER.dwObj> field
|
|
* is the object type/instance identifier as returned in
|
|
* the <p dwType> field of the <t DIDEVICEOBJECTINSTANCE>
|
|
* returned from a prior call to
|
|
* <mf IDirectInputDevice::EnumObjects>.
|
|
*
|
|
* If the <e DIPROPHEADER.dwHow> field is
|
|
* <c DIPH_BYUSAGE>, then the <e DIPROPHEADER.dwObj> field
|
|
* is the HID usage page and usage values, combined into
|
|
* a single <t DWORD> with the
|
|
* <c DIMAKEUSAGEDWORD> macro.
|
|
*
|
|
* If more than object has the specified HID usage page
|
|
* and usage, then one is selected arbitrarily.
|
|
*
|
|
* The <c DIPH_BYUSAGE> value is new for DirectX 5.0a.
|
|
*
|
|
* @field DWORD | dwHow |
|
|
*
|
|
* Specifies how the <e DIPROPHEADER.dwObj>
|
|
* 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 <t DWORD>
|
|
* that can be passed in the <e DIPROPHEADER.dwObj>
|
|
* field of a <t DIPROPHEADER> or as the
|
|
* <p dwObj> parameter to the
|
|
* <mf IDirectInputDevice::GetObjectInfo> method,
|
|
* provided that the corresponding <p dwHow> is set to
|
|
* the value <c DIPH_BYUSAGE>.
|
|
*
|
|
* @parm WORD | wUsagePage |
|
|
*
|
|
* HID usage page value.
|
|
*
|
|
* @parm WORD | wUsage |
|
|
*
|
|
* HID usage value.
|
|
*
|
|
* @xref <t DIPROPHEADER>.
|
|
*
|
|
* @devnote NOTE - this is in a different order from that in <t DIOBJECTATTRIBUTES>
|
|
*
|
|
****************************************************************************/
|
|
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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPDWORD).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* should be interpreted.
|
|
*
|
|
* @field DWORD | dwData |
|
|
*
|
|
* On <f SetProperty>, contains the value of the property to
|
|
* be set. On <f GetProperty>, 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPPOINTER).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* should be interpreted.
|
|
*
|
|
* @field UINT_PTR | uData |
|
|
*
|
|
* On <f SetProperty>, contains the value of the property to
|
|
* be set. On <f GetProperty>, 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPRANGE).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* 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 <e DIPROPRANGE.lMin> = DIPROPRANGE_NOMIN
|
|
* and <e DIPROPRANGE.lMax> = 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPRANGE).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPRANGE).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPGUIDANDPATH).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPSTRING).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* 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
|
|
* <e DIIMAGELABEL.dwFlags> field.
|
|
*
|
|
* @field DWORD | dwFlags |
|
|
*
|
|
* A combination of <c DIDAL_*> 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPGUID).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* should be interpreted.
|
|
*
|
|
* @field GUID | guid |
|
|
*
|
|
* On <f SetProperty>, contains the value of the property to
|
|
* be set. On <f GetProperty>, 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:
|
|
*
|
|
* <e DIPROPHEADER.dwSize> = sizeof(DIPROPFILETIME).
|
|
*
|
|
* <e DIPROPHEADER.dwHeaderSize> = sizeof(DIPROPHEADER).
|
|
*
|
|
* <e DIPROPHEADER.dwObj> = object identifier.
|
|
*
|
|
* <e DIPROPHEADER.dwHow> = how the <e DIPROPHEADER.dwObj>
|
|
* should be interpreted.
|
|
*
|
|
* @field GUID | guid |
|
|
*
|
|
* On <f SetProperty>, contains the value of the property to
|
|
* be set. On <f GetProperty>, 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* The <e DIPROPDWORD.dwData> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* The <e DIPROPDWORD.dwData> field may be one of the following
|
|
* values:
|
|
*
|
|
* <c DIPROPAXISMODE_ABS>: Report axis positions in "absolute
|
|
* coordinates". Axis motion accumulates over time.
|
|
*
|
|
* <c DIPROPAXISMODE_REL>: 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPRANGE.diph> member of a
|
|
* <t DIPROPRANGE> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* You can set the dead zone property for all axes
|
|
* by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_DEVICE> and the
|
|
* <e DIPROPHEADER.dwObj> field to zero.
|
|
*
|
|
* You can set the dead zone property for a particular
|
|
* axis by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_BYID> or to <c DIPH_BYOFFSET> and setting
|
|
* the <e DIPROPHEADER.dwObj> field to the object id
|
|
* or offset (respectively).
|
|
*
|
|
* The <e DIPROPDWORD.dwData> 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 <c DIPROP_SATURATION> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* You can set the saturation property for all axes
|
|
* by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_DEVICE> and the
|
|
* <e DIPROPHEADER.dwObj> field to zero.
|
|
*
|
|
* You can set the saturation property for a particular
|
|
* axis by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_BYID> or to <c DIPH_BYOFFSET> and setting
|
|
* the <e DIPROPHEADER.dwObj> field to the object id
|
|
* or offset (respectively).
|
|
*
|
|
* The <e DIPROPDWORD.dwData> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* The <e DIPROPDWORD.dwData> 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 <c DIPROP_FFGAIN> 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
|
|
* <f MulDiv> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* The <e DIPROPDWORD.dwData> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* The <e DIPROPDWORD.dwData> field may be one of the following
|
|
* values:
|
|
*
|
|
* <c DIPROPAUTOCENTER_OFF>: 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.
|
|
*
|
|
* <c DIPROPAUTOCENTER_ON>: 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* You can set the calibration mode property for all axes
|
|
* by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_DEVICE> and the
|
|
* <e DIPROPHEADER.dwObj> field to zero.
|
|
*
|
|
* You can set the calibration mode property for a particular
|
|
* axis by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_BYID> or to <c DIPH_BYOFFSET> and setting
|
|
* the <e DIPROPHEADER.dwObj> field to the object id
|
|
* or offset (respectively).
|
|
*
|
|
* The <e DIPROPDWORD.dwData> field may be one of the following
|
|
* values:
|
|
*
|
|
* <c DIPROPCALIBRATIONMODE_COOKED>: DirectInput should
|
|
* return data after applying calibration information.
|
|
* This is the default mode.
|
|
*
|
|
* <c DIPROPCALIBRATIONMODE_RAW>: 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPCAL.diph> member of a
|
|
* <t DIPROPCAL> structure.
|
|
*
|
|
* You can access the calibration mode property for a particular
|
|
* axis by setting the
|
|
* <e DIPROPHEADER.dwHow> field of the <t DIPROPHEADER>
|
|
* to <c DIPH_BYID> or to <c DIPH_BYOFFSET> and setting
|
|
* the <e DIPROPHEADER.dwObj> field to the object id
|
|
* or offset (respectively).
|
|
*
|
|
* Control panel applications which set new calibration data
|
|
* must also invoke the <mf IDirectInputJoyConfig::SendNotify>
|
|
* method to notify other applications of the change in
|
|
* calibration.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_CALIBRATION> 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 <f CreateFile> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPGUIDANDPATH.diph> member of a
|
|
* <t DIPROPHEADER> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_GUIDANDPATH> 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
|
|
* <t DIDEVICEINSTANCE> structure's
|
|
* <e DIDEVICEINSTANCE.tszInstanceName> 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 <mf IDirectInputDevice::GetDeviceInfo> method.
|
|
*
|
|
* This property applies to the entire device, rather
|
|
* than to any particular object, so the
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPSTRING.diph> member of a
|
|
* <t DIPROPSTRING> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_INSTANCENAME> 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
|
|
* <t DIDEVICEINSTANCE> structure's
|
|
* <e DIDEVICEINSTANCE.tszProductName> 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 <mf IDirectInputDevice::GetDeviceInfo> method.
|
|
*
|
|
* This property applies to the entire device, rather
|
|
* than to any particular object, so the
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPSTRING.diph> member of a
|
|
* <t DIPROPSTRING> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_PRODUCTNAME> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_JOYSTICKID> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPSTRING.diph> member of a
|
|
* <t DIPROPSTRING> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_GETPORTDISPLAYNAME> property is new for DirectX 6.1a
|
|
*
|
|
****************************************************************************/
|
|
enddoc
|
|
#define DIPROP_GETPORTDISPLAYNAME MAKEDIPROP(16)
|
|
|
|
begindoc
|
|
/****************************************************************************
|
|
*
|
|
* @doc INTERNAL
|
|
*
|
|
* @define DIPROP_ENABLEREPORTID | MAKEDIPROP(17) |
|
|
*
|
|
* @devnote
|
|
* <y This property has been made internal>
|
|
* <y This property was only supported in Win98 SE and DX7>
|
|
* 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPRANGE.diph> member of a
|
|
* <t DIPROPRANGE> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPRANGE.diph> member of a
|
|
* <t DIPROPRANGE> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPSTRING.diph> member of a
|
|
* <t DIPROPSTRING> 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 <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPCPOINTS.diph> member of a
|
|
* <t DIPROPCPOINTS> 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 <p pdiph> "must" be a pointer to the <e DIPROPPOINTER.diph>
|
|
* member of a <t DIPROPPOINTER> 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 <p pdiph> "must" be a pointer to the <e DIPROPDWORD.diph>
|
|
* member of a <t DIPROPDWORD> 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 <e DIPROPDWORD.dwData>
|
|
* field so the values should be extracted as follows
|
|
* wVendorID = LOWORD( <e DIPROPDWORD.dwData> );
|
|
* wProductID = HIWORD( <e DIPROPDWORD.dwData> );
|
|
*
|
|
* This property applies to the entire device, rather
|
|
* than to any particular object, so the
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a pointer to the <e DIPROPDWORD.diph>
|
|
* member of a <t DIPROPDWORD> 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
|
|
* <e DIPROPHEADER.dwHow> field must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPSTRING.diph> member of a
|
|
* <t DIPROPSTRING> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_USERNAME> 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
|
|
* <c REGSTR_PATH_JOYOEM> 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 <e DIPROPHEADER.dwHow> field must be
|
|
* <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a pointer to the <e DIPROPSTRING.diph>
|
|
* member of a <t DIPROPSTRING> structure.
|
|
*
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_TYPENAME> property is new for DirectX 8
|
|
*
|
|
****************************************************************************/
|
|
enddoc
|
|
#define DIPROP_TYPENAME MAKEDIPROP(26)
|
|
;end
|
|
|
|
;begin_internal_800
|
|
begindoc
|
|
/****************************************************************************
|
|
*
|
|
* @doc INTERNAL
|
|
*
|
|
* @define DIPROP_ENABLEREPORTID | MAKEDIPROP(0xFFFB) |
|
|
*
|
|
* <y Undocumented> predefined property which enables/disables
|
|
* HID features/outputs associated with the
|
|
* elements specified by the previous
|
|
* <mf IDirectInput::SetDataFormat>.
|
|
*
|
|
* The <p pdiph> "must" be a
|
|
* pointer to the <e DIPROPDWORD.diph> member of a
|
|
* <t DIPROPDWORD> structure.
|
|
*
|
|
* If <e DIPROPHEADER.dwHow> is <c DIPH_DEVICE>,
|
|
* <e DIPROPDWORD.dipdw> can be set to
|
|
* 0x0 to disable polling of all report IDs contained
|
|
* contained in the previous call to <mf IDirectInput::SetDataFormat>.
|
|
*
|
|
* 0x1 to enable polling of all report IDs.
|
|
*
|
|
* If <e DIPROPHEADER.dwHow> is not <c DIPH_DEVICE> and pertains to
|
|
* individual elements within the specified data format,
|
|
* <e DIPROPDWORD.dipdw> 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 <mf IDirectInput::SetDataFormat>.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_ENABLESETREPORTID> 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) |
|
|
*
|
|
* <y Undocumented> 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 <e DIPROPHEADER.dwHow> field
|
|
* must be <c DIPH_DEVICE>.
|
|
*
|
|
* The <p pdiph> "must" be a pointer to the <e DIPROPSTRING.diph>
|
|
* member of a <t DIPROPSTRING> structure.
|
|
*
|
|
* @devnote
|
|
*
|
|
* The <c DIPROP_MAPFILE> property is new for DirectX 8.
|
|
*
|
|
****************************************************************************/
|
|
enddoc
|
|
#define DIPROP_MAPFILE MAKEDIPROP(0xFFFD)//;Internal
|
|
;end_internal_800
|
|
|
|
begindoc
|
|
/****************************************************************************
|
|
*
|
|
* @doc INTERNAL
|
|
*
|
|
* @define DIPROP_SPECIFICCALIBRATION | MAKEDIPROP(0xFFFE) |
|
|
*
|
|
* <y Undocumented> predefined property which acts the same
|
|
* as <c DIPROP_CALIBRATION>, 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
|
|
* <c DIPROP_CALIBRATION> 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) |
|
|
*
|
|
* <y Undocumented> 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 <t DIDEVICEOBJECTDATA> structure is used by the
|
|
* <mf IDirectInputDevice::GetDeviceData> 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 <e DIDEVICEOBJECTDATA.dwData>
|
|
* would have been stored if the data had been obtained via
|
|
* <mf IDirectInputDevice::GetDeviceState>.
|
|
*
|
|
* For the predefined data formats, the
|
|
* <e DIDEVICEOBJECTDATA.dwOfs> field will be as follows:
|
|
*
|
|
* If the device is accessed as a mouse, it will be one
|
|
* of the <c DIMOFS_*> values.
|
|
*
|
|
* If the device is accessed as a keyboard, it will be one
|
|
* of the <c DIK_*> values.
|
|
*
|
|
;begin_public_500
|
|
* If the device is accessed as a joystick, it will be one
|
|
* of the <c DIJOFS_*> 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.
|
|
*
|
|
* <c DIDFT_AXIS>: 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.
|
|
*
|
|
* <c DIDFT_BUTTON>: Only the low byte of the
|
|
* <e DIDEVICEOBJECTDATA.dwData> is significant.
|
|
* The high bit of the low byte is set if the button
|
|
* went down; it is clear if the button went up.
|
|
*
|
|
* <c DIDFT_POV>: 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
|
|
* <f GetTickCount> 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
|
|
* <f DISEQUENCE_COMPARE> 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 <mf IDirectInputDevice8::SetActionMap> 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:
|
|
* "==", "!=", "<lt>", "<gt>", "<lt>=", "<gt>=".
|
|
*
|
|
* @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 <p dwSequence1>
|
|
* precedes <p dwSequence2> chronologically:
|
|
*
|
|
* |
|
|
*
|
|
* if (DISEQUENCE_COMPARE(dwSequence1, <, dwSequence2)) {
|
|
* ...
|
|
* }
|
|
*
|
|
* @ex
|
|
*
|
|
* The following example checks whether <p dwSequence1>
|
|
* chronologically follows or is equal to <p dwSequence2>:
|
|
*
|
|
* |
|
|
*
|
|
* 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 <f SetCooperativeLevel> 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 <c WM_ENTERSIZEMOVE> and <c WM_ENTERMENULOOP> messages;
|
|
* otherwise, the user will not be able to manipulate the menu
|
|
* or move or resize the window.
|
|
*
|
|
* Exactly one of <c DISCL_EXCLUSIVE> or <c DISCL_NONEXCLUSIVE>
|
|
* must be passed to <f SetCooperativeLevel>. "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 <f SetCooperativeLevel> 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 <c DISCL_EXCLUSIVE> or <c DISCL_NONEXCLUSIVE>
|
|
* must be passed to <f SetCooperativeLevel>. "It is an error"
|
|
* to pass both or neither.
|
|
*
|
|
* @define DISCL_FOREGROUND | 0x00000004 |
|
|
*
|
|
* Parameter to <f SetCooperativeLevel> 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 <c DISCL_FOREGROUND> or <c DISCL_BACKGROUND>
|
|
* must be passed to <f SetCooperativeLevel>. "It is an error"
|
|
* to pass both or neither.
|
|
*
|
|
* @define DISCL_BACKGROUND | 0x00000008 |
|
|
*
|
|
* Parameter to <f SetCooperativeLevel> 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 <c DISCL_FOREGROUND> or <c DISCL_BACKGROUND>
|
|
* must be passed to <f SetCooperativeLevel>. "It is an error"
|
|
* to pass both or neither.
|
|
*
|
|
* @define DISCL_NOWINKEY | 0x00000010 |
|
|
*
|
|
* Parameter to <f SetCooperativeLevel> 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 <t DIDEVICEINSTANCE> structure is used by the
|
|
* <mf IDirectInput::EnumDevices> and
|
|
* <mf IDirectInputDevice::GetDeviceInfo> 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 <f RunControlPanel> 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 <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* 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 <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* to indicate that
|
|
* playback of all effects should be stopped.
|
|
* Sending the <c DISFFC_STOPALL> command is equivalent
|
|
* to invoking the <mf IDirectInputEffect::Stop> 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 <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* to indicate that
|
|
* playback of all effects should be paused.
|
|
*
|
|
* When effects are paused, time "stops" until the
|
|
* <c DISFFC_CONTINUE> 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 <c DISFFC_CONTINUE> failing to perform
|
|
* properly.
|
|
*
|
|
* If you wish to abandon a pause (rather than continue it),
|
|
* send the <c DISFFC_STOPALL> or <c DISFFC_RESET> command.
|
|
*
|
|
* @define DISFFC_CONTINUE | 0x00000008 |
|
|
*
|
|
* Parameter to <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* to indicate that
|
|
* effects whose playback was interrupt by a previous
|
|
* <c DISFFC_PAUSE> command should be resumed at the point
|
|
* at which they were interrupted.
|
|
*
|
|
* It is an error to send a <c DISFFC_CONTINUE> command
|
|
* when the device is not in a paused state.
|
|
*
|
|
* @define DISFFC_SETACTUATORSON | 0x00000010 |
|
|
*
|
|
* Parameter to <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* to indicate that the
|
|
* device's force feedback actuators should be enabled.
|
|
*
|
|
* @define DISFFC_SETACTUATORSOFF | 0x00000020 |
|
|
*
|
|
* Parameter to <mf IDirectInputDevice2::SendForceFeedbackCommand>
|
|
* 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 <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* which indicates that
|
|
* the force feedback device is devoid of any downloaded effects.
|
|
*
|
|
* @define DIGFFS_STOPPED | 0x00000002 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that
|
|
* no effects are currently playing and the device is not paused.
|
|
*
|
|
* @define DIGFFS_PAUSED | 0x00000004 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that
|
|
* playback of effects has been paused by a previous
|
|
* <c DISFFC_PAUSE> command.
|
|
*
|
|
* @define DIGFFS_ACTUATORSON | 0x00000010 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that the
|
|
* device's force feedback actuators are enabled.
|
|
*
|
|
* @define DIGFFS_ACTUATORSOFF | 0x00000020 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that the
|
|
* device's force feedback actuators are disabled.
|
|
*
|
|
* @define DIGFFS_POWERON | 0x00000040 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that
|
|
* power to the force feedback system is currently available.
|
|
* If the device cannot report the power state,
|
|
* then neither <c DIGFFS_POWERON> nor <c DIGFFS_POWEROFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_POWEROFF | 0x00000080 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* to indicate that
|
|
* power to the force feedback system is not currently available.
|
|
* If the device cannot report the power state,
|
|
* then neither <c DIGFFS_POWERON> nor <c DIGFFS_POWEROFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_SAFETYSWITCHON | 0x00000100 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* 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 <c DIGFFS_SAFETYSWITCHON> nor
|
|
* <c DIGFFS_SAFETYSWITCHOFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_SAFETYSWITCHOFF | 0x00000200 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* 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 <c DIGFFS_SAFETYSWITCHON> nor
|
|
* <c DIGFFS_SAFETYSWITCHOFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_USERFFSWITCHON | 0x00000400 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* 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 <c DIGFFS_USERFFSWITCHON> nor
|
|
* <c DIGFFS_USERFFSWITCHOFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_USERFFSWITCHOFF | 0x00000800 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* 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 <c DIGFFS_USERFFSWITCHON> nor
|
|
* <c DIGFFS_USERFFSWITCHOFF>
|
|
* will be returned.
|
|
*
|
|
* @define DIGFFS_DEVICELOST | 0x80000000 |
|
|
*
|
|
* Flag returned by <mf IDirectInputDevice2::GetForceFeedbackState>
|
|
* 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
|
|
* <c DISFFC_RESET> 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 <t DIEFFECTINFO> structure is used by the
|
|
* <mf IDirectInputDevice2::EnumEffects> and
|
|
* <mf IDirectInputDevice2::GetEffectInfo> 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 <c DIEFT_*> 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 <c DIEP_*> values describing the
|
|
* parameters supported by the effect. For example,
|
|
* if <c DIEP_ENVELOPE> 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 <c DIEP_*> 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 <c DIERR_EFFECTPLAYING> 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 <mf IDirectInputDevice2::SendDeviceData>
|
|
* 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 <mf IDirectInputDevice7::EnumEffectsInFile>,
|
|
* default processing should occur when enumerating effects.
|
|
* When passed to <mf IDirectInputDevice7::WriteEffectToFile>,
|
|
* default processing should occur when wrinting effects.
|
|
*
|
|
* @flag DIFEF_INCLUDENONSTANDARD |
|
|
*
|
|
* When passed to <mf IDirectInputDevice7::EnumEffectsInFile>,
|
|
* effects not recognized as predefined may be included in the
|
|
* enumeration.
|
|
* When passed to <mf IDirectInputDevice7::WriteEffectToFile>,
|
|
* effects not recognized as predefined may be written to file
|
|
* without an error being raised.
|
|
*
|
|
* @flag DIFEF_MODIFYIFNEEDED |
|
|
*
|
|
* When passed to <mf IDirectInputDevice7::EnumEffectsInFile>,
|
|
* 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 <t DIMOUSESTATE> structure is used by the
|
|
* <mf IDirectInputDevice::GetDeviceState> 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
|
|
* <mf IDirectInputDevice::SetDataFormat>, passing the
|
|
* <p c_dfDIMouse> 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 <t DIMOUSESTATE2> structure is used by the
|
|
* <mf IDirectInputDevice::GetDeviceState> 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
|
|
* <mf IDirectInputDevice::SetDataFormat>, passing the
|
|
* <p c_dfDIMouse2> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE2> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE2> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE2> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIMOUSESTATE2> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetObjectInfo> 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 <c JOY_POVCENTERED> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetObjectInfo> 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 <c JOY_POVCENTERED> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetObjectInfo> method to
|
|
* obtain semantic information about these values.
|
|
*
|
|
* @field LONG | lAX |
|
|
*
|
|
* (OUT) If the joystick supports x-axis acceleration, then
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetObjectInfo> method to
|
|
* obtain semantic information about these values.
|
|
*
|
|
* @field LONG | lFX |
|
|
*
|
|
* (OUT) If the joystick supports reporting x-axis force, then
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetDeviceData> 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
|
|
* <mf IDirectInputDevice::GetObjectInfo> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> 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 <c n> position relative
|
|
* to the beginning of the <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> structure to indicate
|
|
* that the data applies to the joystick slider <c n> position.
|
|
*
|
|
* @define DIJOFS_POV(n) |
|
|
* FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + n * sizeof(DWORD) |
|
|
*
|
|
* The offset of the joystick POV <c n> position relative
|
|
* to the beginning of the <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> structure to indicate
|
|
* that the data applies to the joystick POV <c n> position.
|
|
*
|
|
* @define DIJOFS_BUTTON(n) | FIELD_OFFSET(DIJOYSTATE, rgbButtons) + n |
|
|
*
|
|
* The offset of the joystick button <c n> state relative
|
|
* to the beginning of the <t DIJOYSTATE> structure.
|
|
* This value is returned as the <p dwOfs> field
|
|
* in the <t DIDEVICEOBJECTDATA> structure to indicate
|
|
* that the data applies to joystick button <c n>.
|
|
*
|
|
* For convenience, the first 32 buttons can also be accessed
|
|
* with the names with the macros <c DIJOFS_BUTTON0>
|
|
* through <c DIJOFS_BUTTON31>.
|
|
*
|
|
****************************************************************************/
|
|
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 <mf IDirectInput8::EnumDevicesBySemantics> 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 */
|