mmddk.h revision ee6bcfc59fe3b0230aad85e2ef63d0402b7719b2
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright 1998, Luiz Otavio L. Zorzella
af062818b47340eef15700d2f0211576ba3506eevboxsync * 1999, Eric Pouech
af062818b47340eef15700d2f0211576ba3506eevboxsync * Purpose: multimedia declarations (external to WINMM & MMSYSTEM DLLs
af062818b47340eef15700d2f0211576ba3506eevboxsync * for other DLLs (MCI, drivers...))
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * Sun LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * other than GPL or LGPL is available it will apply instead, Sun elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern "C" {
af062818b47340eef15700d2f0211576ba3506eevboxsync/* For now I'm making 16 the maximum number of midi devices one can
af062818b47340eef15700d2f0211576ba3506eevboxsync * have. This should be more than enough for everybody. But as a purist,
af062818b47340eef15700d2f0211576ba3506eevboxsync * I intend to make it unbounded in the future, as soon as I figure
af062818b47340eef15700d2f0211576ba3506eevboxsync * a good way to do so.
af062818b47340eef15700d2f0211576ba3506eevboxsync/* ==================================
af062818b47340eef15700d2f0211576ba3506eevboxsync * Multimedia DDK compatible part
af062818b47340eef15700d2f0211576ba3506eevboxsync * ================================== */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* messages that have IOCTL format
af062818b47340eef15700d2f0211576ba3506eevboxsync * dw1 = NULL or handle
af062818b47340eef15700d2f0211576ba3506eevboxsync * dw2 = NULL or ptr to DRVM_IOCTL_DATA
af062818b47340eef15700d2f0211576ba3506eevboxsync * return is MMRESULT
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dwCmd; /* IOCTL command code, 0x80000000 and above reserved for system */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* command code ranges for dwCmd field of DRVM_IOCTL message
af062818b47340eef15700d2f0211576ba3506eevboxsync * - codes from 0 to 0x7FFFFFFF are user defined
af062818b47340eef15700d2f0211576ba3506eevboxsync * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DRVM_MAPPER_CONSOLEVOICECOM_GET (DRVM_MAPPER+23)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DRV_QUERYDEVICEINTERFACE (DRV_RESERVED + 12)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY 0x00000001
af062818b47340eef15700d2f0211576ba3506eevboxsync/* pre-defined joystick types */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* calibration flags */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_XY 0x00000001l /* XY are calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_Z 0x00000002l /* Z is calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_R 0x00000004l /* R is calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_U 0x00000008l /* U is calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_V 0x00000010l /* V is calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_ISCAL_POV 0x00000020l /* POV is calibrated */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* point of view constants */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Specific settings for joystick hardware */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_HASPOV 0x00000002l /* point of view hat present */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_POVISBUTTONCOMBOS 0x00000004l /* pov done through combo of buttons */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_POVISPOLL 0x00000008l /* pov done through polling */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ISYOKE 0x00000010l /* joystick is a flight yoke */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ISGAMEPAD 0x00000020l /* joystick is a game pad */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ISCARCTRL 0x00000040l /* joystick is a car controller */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* X defaults to J1 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_XISJ1Y 0x00000080l /* X is on J1 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_XISJ2X 0x00000100l /* X is on J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_XISJ2Y 0x00000200l /* X is on J2 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Y defaults to J1 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_YISJ1X 0x00000400l /* Y is on J1 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_YISJ2X 0x00000800l /* Y is on J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_YISJ2Y 0x00001000l /* Y is on J2 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Z defaults to J2 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ZISJ1X 0x00002000l /* Z is on J1 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ZISJ1Y 0x00004000l /* Z is on J1 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_ZISJ2X 0x00008000l /* Z is on J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* POV defaults to J2 Y axis, if it is not button based */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_POVISJ1X 0x00010000l /* pov done through J1 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_POVISJ1Y 0x00020000l /* pov done through J1 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_POVISJ2X 0x00040000l /* pov done through J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* R defaults to J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_HASR 0x00080000l /* has R (4th axis) info */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_RISJ1X 0x00100000l /* R done through J1 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_RISJ1Y 0x00200000l /* R done through J1 Y axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_RISJ2Y 0x00400000l /* R done through J2 X axis */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* U & V for future hardware */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_HASU 0x00800000l /* has U (5th axis) info */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_HWS_HASV 0x01000000l /* has V (6th axis) info */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* Usage settings */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_US_HASRUDDER 0x00000001l /* joystick configured with rudder */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_US_PRESENT 0x00000002l /* is joystick actually present? */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define JOY_US_ISOEM 0x00000004l /* joystick is an OEM defined type */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* struct for storing x,y, z, and rudder values */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joypos_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync/* struct for storing ranges */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joyrange_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joyreguservalues_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dwTimeOut; /* value at which to timeout joystick polling */
af062818b47340eef15700d2f0211576ba3506eevboxsync JOYRANGE jrvRanges; /* range of values app wants returned for axes */
af062818b47340eef15700d2f0211576ba3506eevboxsync JOYPOS jpDeadZone; /* area around center to be considered
af062818b47340eef15700d2f0211576ba3506eevboxsync as "dead". specified as a percentage
af062818b47340eef15700d2f0211576ba3506eevboxsync (0-100). Only X & Y handled by system driver */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joyreghwsettings_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync/* range of values returned by the hardware (filled in by calibration) */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joyreghwvalues_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync JOYRANGE jrvHardware; /* values returned by hardware */
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* hardware configuration */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joyreghwconfig_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync JOYREGHWVALUES hwv; /* values returned by hardware */
af062818b47340eef15700d2f0211576ba3506eevboxsync/* joystick calibration info structure */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct joycalibrate_tag {
af062818b47340eef15700d2f0211576ba3506eevboxsync/* prototype for joystick message function */
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2);
af062818b47340eef15700d2f0211576ba3506eevboxsync/* messages sent to joystick driver's DriverProc() function */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_RETURN_BASE MCI_FORMAT_MILLISECONDS_S
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_MILLISECONDS_S (MCI_STRING_OFFSET + 21)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_FRAMES_S (MCI_STRING_OFFSET + 24)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_SMPTE_24_S (MCI_STRING_OFFSET + 25)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_SMPTE_25_S (MCI_STRING_OFFSET + 26)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_SMPTE_30_S (MCI_STRING_OFFSET + 27)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_SMPTE_30DROP_S (MCI_STRING_OFFSET + 28)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_FORMAT_SAMPLES_S (MCI_STRING_OFFSET + 30)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_SEQ_FORMAT_SONGPTR_S (MCI_SEQ_OFFSET + 9)
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_RESOURCE_RETURNED 0x00010000 /* resource ID */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_COLONIZED3_RETURN 0x00020000 /* colonized ID, 3 bytes data */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_COLONIZED4_RETURN 0x00040000 /* colonized ID, 4 bytes data */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_INTEGER_RETURNED 0x00080000 /* integer conversion needed */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MCI_RESOURCE_DRIVER 0x00100000 /* driver owns returned resource */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes))
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsync LPSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT wType; /* driver type (filled in by the driver) */
af062818b47340eef15700d2f0211576ba3506eevboxsync} MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA;
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct {
af062818b47340eef15700d2f0211576ba3506eevboxsync LPWSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */
af062818b47340eef15700d2f0211576ba3506eevboxsync UINT wType; /* driver type (filled in by the driver) */
af062818b47340eef15700d2f0211576ba3506eevboxsync} MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsyncBOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData);
af062818b47340eef15700d2f0211576ba3506eevboxsyncBOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID,
af062818b47340eef15700d2f0211576ba3506eevboxsyncUINT WINAPI mciLoadCommandResource(HINSTANCE hInstance,
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DCB_WINDOW 0x0001 /* dwCallback is a HWND */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DCB_FUNCTION 0x0003 /* dwCallback is a FARPROC */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DCB_EVENT 0x0005 /* dwCallback is an EVENT Handler */
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DCB_NOSWITCH 0x0008 /* don't switch stacks for callback */
af062818b47340eef15700d2f0211576ba3506eevboxsyncBOOL WINAPI DriverCallback(DWORD_PTR dwCallBack, DWORD uFlags, HDRVR hDev,
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
af062818b47340eef15700d2f0211576ba3506eevboxsyncUINT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR);
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* __MMDDK_H */