dlangui/3rdparty/win32/directx/dinput8.d

433 lines
14 KiB
D

module win32.directx.dinput8;
version(Windows):
//import tango.sys.win32.Types;
//alias char CHAR;
import win32.windows;
enum {
CLASS_E_NOAGGREGATION = cast(int) 0x80040110,
}
interface IUnknown {
HRESULT QueryInterface(IID* riid, void** pvObject);
ULONG AddRef();
ULONG Release();
}
extern(C):
struct DIDEVICEINSTANCEA
{
DWORD dwSize;
GUID guidInstance;
GUID guidProduct;
DWORD dwDevType;
CHAR tszInstanceName[MAX_PATH];
CHAR tszProductName[MAX_PATH];
GUID guidFFDriver;
WORD wUsagePage;
WORD wUsage;
}
alias DIDEVICEINSTANCEA DIDEVICEINSTANCE;
struct DIDEVICEOBJECTINSTANCEA
{
DWORD dwSize;
GUID guidType;
DWORD dwOfs;
DWORD dwType;
DWORD dwFlags;
CHAR tszName[MAX_PATH];
DWORD dwFFMaxForce;
DWORD dwFFForceResolution;
WORD wCollectionNumber;
WORD wDesignatorIndex;
WORD wUsagePage;
WORD wUsage;
DWORD dwDimension;
WORD wExponent;
WORD wReportId;
}
struct DIOBJECTDATAFORMAT
{
const GUID *pguid;
DWORD dwOfs;
DWORD dwType;
DWORD dwFlags;
}
struct DIDATAFORMAT
{
DWORD dwSize;
DWORD dwObjSize;
DWORD dwFlags;
DWORD dwDataSize;
DWORD dwNumObjs;
DIOBJECTDATAFORMAT* rgodf;
}
extern DIDATAFORMAT c_dfDIKeyboard;
extern DIDATAFORMAT c_dfDIMouse2;
extern DIDATAFORMAT c_dfDIJoystick;
struct DIACTIONA
{
UINT* uAppData;
DWORD dwSemantic;
DWORD dwFlags;
union
{
LPCSTR lptszActionName;
UINT uResIdString;
}
GUID guidInstance;
DWORD dwObjID;
DWORD dwHow;
}
struct DIACTIONFORMATA
{
DWORD dwSize;
DWORD dwActionSize;
DWORD dwDataSize;
DWORD dwNumActions;
DIACTIONA* rgoAction;
GUID guidActionMap;
DWORD dwGenre;
DWORD dwBufferSize;
LONG lAxisMin;
LONG lAxisMax;
HINSTANCE hInstString;
FILETIME ftTimeStamp;
DWORD dwCRC;
CHAR tszActionMap[MAX_PATH];
}
struct DIDEVCAPS
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwDevType;
DWORD dwAxes;
DWORD dwButtons;
DWORD dwPOVs;
DWORD dwFFSamplePeriod;
DWORD dwFFMinTimeResolution;
DWORD dwFirmwareRevision;
DWORD dwHardwareRevision;
DWORD dwFFDriverVersion;
}
struct DIPROPHEADER
{
DWORD dwSize;
DWORD dwHeaderSize;
DWORD dwObj;
DWORD dwHow;
}
struct DIDEVICEOBJECTDATA
{
DWORD dwOfs;
DWORD dwData;
DWORD dwTimeStamp;
DWORD dwSequence;
UINT* uAppData;
}
struct DIENVELOPE
{
DWORD dwSize = DIENVELOPE.sizeof;
DWORD dwAttackLevel;
DWORD dwAttackTime; // Microseconds
DWORD dwFadeLevel;
DWORD dwFadeTime; // Microseconds
}
struct DIEFFECT
{
DWORD dwSize = DIEFFECT.sizeof;
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
DIENVELOPE* lpEnvelope; // Optional
DWORD cbTypeSpecificParams; // Size of params
LPVOID lpvTypeSpecificParams; // Pointer to params
DWORD dwStartDelay; // Microseconds
}
struct DIEFFESCAPE
{
DWORD dwSize;
DWORD dwCommand;
LPVOID lpvInBuffer;
DWORD cbInBuffer;
LPVOID lpvOutBuffer;
DWORD cbOutBuffer;
}
struct DIEFFECTINFOA
{
DWORD dwSize;
GUID guid;
DWORD dwEffType;
DWORD dwStaticParams;
DWORD dwDynamicParams;
CHAR tszName[MAX_PATH];
}
struct DIFILEEFFECT
{
DWORD dwSize;
GUID GuidEffect;
DIEFFECT* lpDiEffect;
CHAR szFriendlyName[MAX_PATH];
}
struct DIDEVICEIMAGEINFOA
{
CHAR 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;
}
struct DIDEVICEIMAGEINFOHEADERA
{
DWORD dwSize;
DWORD dwSizeImageInfo;
DWORD dwcViews;
DWORD dwcButtons;
DWORD dwcAxes;
DWORD dwcPOVs;
DWORD dwBufferSize;
DWORD dwBufferUsed;
DIDEVICEIMAGEINFOA* lprgImageInfoArray;
}
struct DICONFIGUREDEVICESPARAMSA
{
DWORD dwSize;
DWORD dwcUsers;
LPSTR lptszUserNames;
DWORD dwcFormats;
DIACTIONFORMATA* lprgFormats;
HWND hwnd;
DICOLORSET dics;
IUnknown lpUnkDDSTarget;
}
struct DICOLORSET
{
DWORD dwSize;
DWORD cTextFore;
DWORD cTextHighlight;
DWORD cCalloutLine;
DWORD cCalloutHighlight;
DWORD cBorder;
DWORD cControlFill;
DWORD cHighlightFill;
DWORD cAreaFill;
}
struct DIMOUSESTATE2
{
LONG lX;
LONG lY;
LONG lZ;
BYTE rgbButtons[8];
}
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 */
}
struct DIPROPRANGE
{
DIPROPHEADER diph;
LONG lMin;
LONG lMax;
}
interface IDirectInputEffect : IUnknown
{
HRESULT Initialize(HINSTANCE, DWORD, GUID*);
HRESULT GetEffectGuid(GUID*);
HRESULT GetParameters(DIEFFECT*, DWORD);
HRESULT SetParameters(DIEFFECT*, DWORD);
HRESULT Start(DWORD, DWORD);
HRESULT Stop();
HRESULT GetEffectStatus(LPDWORD);
HRESULT Download();
HRESULT Unload();
HRESULT Escape(DIEFFESCAPE*);
}
extern(Windows) alias bool function(DIDEVICEINSTANCEA*, LPVOID) LPDIENUMDEVICESCALLBACKA;
extern(Windows) alias bool function(DIDEVICEINSTANCEA*, IDirectInputDevice8A*, DWORD, DWORD, LPVOID) LPDIENUMDEVICESBYSEMANTICSCBA;
extern(Windows) alias bool function(DIDEVICEOBJECTINSTANCEA *didoi, void* pContext) LPDIENUMDEVICEOBJECTSCALLBACKA;
extern(Windows) alias bool function(DIEFFECTINFOA*, LPVOID) LPDIENUMEFFECTSCALLBACKA;
extern(Windows) alias bool function(IDirectInputEffect, LPVOID) LPDIENUMCREATEDEFFECTOBJECTSCALLBACK;
extern(Windows) alias bool function(DIFILEEFFECT* , LPVOID) LPDIENUMEFFECTSINFILECALLBACK;
extern(Windows) alias bool function(IUnknown, LPVOID) LPDICONFIGUREDEVICESCALLBACK;
interface IDirectInputDevice8A : IUnknown
{
HRESULT GetCapabilities(DIDEVCAPS*);
HRESULT EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACKA, VOID*, DWORD);
HRESULT GetProperty(GUID*, DIPROPHEADER*);
HRESULT SetProperty(GUID*, DIPROPHEADER*);
HRESULT Acquire();
HRESULT Unacquire();
HRESULT GetDeviceState(DWORD, LPVOID);
HRESULT GetDeviceData(DWORD, DIDEVICEOBJECTDATA*, LPDWORD, DWORD);
HRESULT SetDataFormat(DIDATAFORMAT*);
HRESULT SetEventNotification(HANDLE);
HRESULT SetCooperativeLevel(HWND, DWORD);
HRESULT GetObjectInfo(DIDEVICEOBJECTINSTANCEA*, DWORD, DWORD);
HRESULT GetDeviceInfo(DIDEVICEINSTANCEA*);
HRESULT RunControlPanel(HWND, DWORD);
HRESULT Initialize(HINSTANCE, DWORD, GUID*);
HRESULT CreateEffect(GUID*, DIEFFECT*, IDirectInputEffect*, IUnknown);
HRESULT EnumEffects(LPDIENUMEFFECTSCALLBACKA, LPVOID, DWORD);
HRESULT GetEffectInfo(DIEFFECTINFOA*, GUID*);
HRESULT GetForceFeedbackState(LPDWORD);
HRESULT SendForceFeedbackCommand(DWORD);
HRESULT EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, LPVOID, DWORD);
HRESULT Escape(DIEFFESCAPE*);
HRESULT Poll();
HRESULT SendDeviceData(DWORD, DIDEVICEOBJECTDATA*, LPDWORD, DWORD);
HRESULT EnumEffectsInFile(LPCSTR, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD);
HRESULT WriteEffectToFile(LPCSTR, DWORD, DIFILEEFFECT*, DWORD);
HRESULT BuildActionMap(DIACTIONFORMATA*, LPCSTR, DWORD);
HRESULT SetActionMap(DIACTIONFORMATA*, LPCSTR, DWORD);
HRESULT GetImageInfo(DIDEVICEIMAGEINFOHEADERA*);
}
alias IDirectInputDevice8A IDirectInputDevice8;
interface IDirectInput8A : IUnknown
{
extern(Windows):
HRESULT CreateDevice(GUID*, IDirectInputDevice8A*, IUnknown);
HRESULT EnumDevices(DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);
HRESULT GetDeviceStatus(GUID*);
HRESULT RunControlPanel(HWND, DWORD);
HRESULT Initialize(HINSTANCE, DWORD);
HRESULT FindDevice(GUID*, LPCSTR, GUID*);
HRESULT EnumDevicesBySemantics(LPCSTR, DIACTIONFORMATA*, LPDIENUMDEVICESBYSEMANTICSCBA, LPVOID, DWORD);
HRESULT ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK, DICONFIGUREDEVICESPARAMSA*, DWORD, LPVOID);
}
alias IDirectInput8A IDirectInput8;
extern(Windows) HRESULT DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, GUID* riidltf, void** ppvOut, IUnknown punkOuter);
const GUID IID_IDirectInput8A={0xBF798030, 0x483A, 0x4DA2, [0xAA, 0x99, 0x5D, 0x64, 0xED, 0x36, 0x97, 0x00]};
alias IID_IDirectInput8A IID_IDirectInput8;
const GUID GUID_SysKeyboard = {0x6F1D2B61, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_SysMouse = {0x6F1D2B60, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_XAxis = {0xA36D02E0, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_YAxis = {0xA36D02E1, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_ZAxis = {0xA36D02E2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_RxAxis = {0xA36D02F4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_RyAxis = {0xA36D02F5, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_RzAxis = {0xA36D02E3, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_Slider = {0xA36D02E4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_Key = {0x55728220, 0xD33C, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
const GUID GUID_POV = {0xA36D02F2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]};
enum : uint
{
DISCL_EXCLUSIVE= 0x00000001,
DISCL_NONEXCLUSIVE= 0x00000002,
DISCL_FOREGROUND= 0x00000004,
DISCL_BACKGROUND= 0x00000008,
DISCL_NOWINKEY= 0x00000010,
DIPH_DEVICE=0,
DIPH_BYOFFSET=1,
DI8DEVCLASS_GAMECTRL=4,
DIEDFL_ATTACHEDONLY= 0x00000001,
DIDFT_AXIS= 0x00000003
}
enum
{
SEVERITY_SUCCESS= 0,
SEVERITY_ERROR= 1,
FACILITY_WIN32= 7,
ERROR_READ_FAULT= 30L,
DIENUM_CONTINUE= 1,
DIPH_BYID= 2
}
struct DIPROPDWORD
{
DIPROPHEADER diph;
DWORD dwData;
}
template MAKE_HRESULT(uint sev, uint fac, uint code)
{
const HRESULT MAKE_HRESULT = cast(HRESULT)((sev << 31) | (fac << 16) | code);
}
const HRESULT DIERR_OLDDIRECTINPUTVERSION = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1150);
const HRESULT DIERR_BETADIRECTINPUTVERSION = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1153);
const HRESULT DIERR_BADDRIVERVER = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 119);
const HRESULT DIERR_DEVICENOTREG = 0x80040154;
const HRESULT DIERR_NOTFOUND = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND);
const HRESULT DIERR_OBJECTNOTFOUND = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND);
const HRESULT DIERR_INVALIDPARAM = E_INVALIDARG;
const HRESULT DIERR_NOINTERFACE = E_NOINTERFACE;
const HRESULT DIERR_GENERIC = E_FAIL;
const HRESULT DIERR_OUTOFMEMORY = E_OUTOFMEMORY;
const HRESULT DIERR_UNSUPPORTED = E_NOTIMPL;
const HRESULT DIERR_NOTINITIALIZED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 21);
const HRESULT DIERR_ALREADYINITIALIZED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1247);
const HRESULT DIERR_NOAGGREGATION = CLASS_E_NOAGGREGATION;
const HRESULT DIERR_OTHERAPPHASPRIO = 0x80070005;
const HRESULT DIERR_INPUTLOST = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT);
const HRESULT DIERR_ACQUIRED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 170);
const HRESULT DIERR_NOTACQUIRED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 12);
const HRESULT DIERR_READONLY = 0x80070005;
const HRESULT DIERR_HANDLEEXISTS = 0x80070005;
const HRESULT DIERR_INSUFFICIENTPRIVS = 0x80040200;
const HRESULT DIERR_DEVICEFULL = 0x80040201;
const HRESULT DIERR_MOREDATA = 0x80040202;
const HRESULT DIERR_NOTDOWNLOADED = 0x80040203;
const HRESULT DIERR_HASEFFECTS = 0x80040204;
const HRESULT DIERR_NOTEXCLUSIVEACQUIRED = 0x80040205;
const HRESULT DIERR_INCOMPLETEEFFECT = 0x80040206;
const HRESULT DIERR_NOTBUFFERED = 0x80040207;
const HRESULT DIERR_EFFECTPLAYING = 0x80040208;
const HRESULT DIERR_UNPLUGGED = 0x80040209;
const HRESULT DIERR_REPORTFULL = 0x8004020A;
const HRESULT DIERR_MAPFILEFAIL = 0x8004020B;