From e0574936dc8352833a933c1a9142a25896b6df9d Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Sun, 29 Mar 2009 23:50:26 +0200 Subject: [PATCH] mciqtz32: Implement driver messages. --- dlls/mciqtz32/Makefile.in | 2 +- dlls/mciqtz32/mciqtz.c | 142 ++++++++++++++++++++++++++++++++++++++++- dlls/mciqtz32/mciqtz_private.h | 28 ++++++++ 3 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 dlls/mciqtz32/mciqtz_private.h diff --git a/dlls/mciqtz32/Makefile.in b/dlls/mciqtz32/Makefile.in index 1d136eb86f6..8321d2dcb69 100644 --- a/dlls/mciqtz32/Makefile.in +++ b/dlls/mciqtz32/Makefile.in @@ -3,7 +3,7 @@ TOPOBJDIR = ../.. SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = mciqtz32.dll -IMPORTS = kernel32 +IMPORTS = winmm user32 kernel32 C_SRCS = \ mciqtz.c diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c index 6d272b58b6d..786105a5019 100644 --- a/dlls/mciqtz32/mciqtz.c +++ b/dlls/mciqtz32/mciqtz.c @@ -21,11 +21,16 @@ #include #include "windef.h" #include "winbase.h" +#include "winuser.h" #include "mmddk.h" #include "wine/debug.h" +#include "mciqtz_private.h" WINE_DEFAULT_DEBUG_CHANNEL(mciqtz); +static DWORD MCIQTZ_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS); +static DWORD MCIQTZ_mciStop(UINT, DWORD, LPMCI_GENERIC_PARMS); + /*======================================================================* * MCI QTZ implementation * *======================================================================*/ @@ -46,6 +51,120 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad) return TRUE; } +/************************************************************************** + * MCIQTZ_drvOpen [internal] + */ +static DWORD MCIQTZ_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp) +{ + WINE_MCIQTZ* wma; + + TRACE("%s, %p\n", debugstr_w(str), modp); + + /* session instance */ + if (!modp) + return 0xFFFFFFFF; + + wma = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCIQTZ)); + if (!wma) + return 0; + + wma->wDevID = modp->wDeviceID; + mciSetDriverData(wma->wDevID, (DWORD_PTR)wma); + + return modp->wDeviceID; +} + +/************************************************************************** + * MCIQTZ_drvClose [internal] + */ +static DWORD MCIQTZ_drvClose(DWORD dwDevID) +{ + WINE_MCIQTZ* wma; + + TRACE("%04x\n", dwDevID); + + /* finish all outstanding things */ + MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL); + + wma = (WINE_MCIQTZ*)mciGetDriverData(dwDevID); + + if (wma) { + HeapFree(GetProcessHeap(), 0, wma); + return 1; + } + + return (dwDevID == 0xFFFFFFFF) ? 1 : 0; +} + +/************************************************************************** + * MCIQTZ_drvConfigure [internal] + */ +static DWORD MCIQTZ_drvConfigure(DWORD dwDevID) +{ + WINE_MCIQTZ* wma; + + TRACE("%04x\n", dwDevID); + + MCIQTZ_mciStop(dwDevID, MCI_WAIT, NULL); + + wma = (WINE_MCIQTZ*)mciGetDriverData(dwDevID); + + if (wma) { + MessageBoxA(0, "Sample QTZ Wine Driver !", "MM-Wine Driver", MB_OK); + return 1; + } + + return 0; +} + +/************************************************************************** + * MCIQTZ_mciGetOpenDev [internal] + */ +static WINE_MCIQTZ* MCIQTZ_mciGetOpenDev(UINT wDevID) +{ + WINE_MCIQTZ* wma = (WINE_MCIQTZ*)mciGetDriverData(wDevID); + + if (!wma) { + WARN("Invalid wDevID=%u\n", wDevID); + return 0; + } + return wma; +} + +/*************************************************************************** + * MCIQTZ_mciClose [internal] + */ +static DWORD MCIQTZ_mciClose(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + WINE_MCIQTZ* wma; + + TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL); + + wma = MCIQTZ_mciGetOpenDev(wDevID); + if (!wma) + return MCIERR_INVALID_DEVICE_ID; + + return 0; +} + +/*************************************************************************** + * MCIQTZ_mciStop [internal] + */ +static DWORD MCIQTZ_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + WINE_MCIQTZ* wma; + + TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + wma = MCIQTZ_mciGetOpenDev(wDevID); + if (!wma) + return MCIERR_INVALID_DEVICE_ID; + + return 0; +} + /*======================================================================* * MCI QTZ entry points * *======================================================================*/ @@ -56,8 +175,27 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad) LRESULT CALLBACK MCIQTZ_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, LPARAM dwParam1, LPARAM dwParam2) { - FIXME("(%08lX, %p, %08X, %08lX, %08lX): Stub!\n", - dwDevID, hDriv, wMsg, dwParam1, dwParam2); + TRACE("(%08lX, %p, %08X, %08lX, %08lX)\n", + dwDevID, hDriv, wMsg, dwParam1, dwParam2); + + switch (wMsg) { + case DRV_LOAD: return 1; + case DRV_FREE: return 1; + case DRV_OPEN: return MCIQTZ_drvOpen((LPCWSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSW)dwParam2); + case DRV_CLOSE: return MCIQTZ_drvClose(dwDevID); + case DRV_ENABLE: return 1; + case DRV_DISABLE: return 1; + case DRV_QUERYCONFIGURE: return 1; + case DRV_CONFIGURE: return MCIQTZ_drvConfigure(dwDevID); + case DRV_INSTALL: return DRVCNF_RESTART; + case DRV_REMOVE: return DRVCNF_RESTART; + } + + /* session instance */ + if (dwDevID == 0xFFFFFFFF) + return 1; + + FIXME("Unsupported command [%u]\n", wMsg); return MCIERR_UNRECOGNIZED_COMMAND; } diff --git a/dlls/mciqtz32/mciqtz_private.h b/dlls/mciqtz32/mciqtz_private.h new file mode 100644 index 00000000000..4134d8dcedf --- /dev/null +++ b/dlls/mciqtz32/mciqtz_private.h @@ -0,0 +1,28 @@ +/* + * DirectShow MCI Driver + * + * Copyright 2009 Christian Costa + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_PRIVATE_MCIQTZ_H +#define __WINE_PRIVATE_MCIQTZ_H + +typedef struct { + MCIDEVICEID wDevID; +} WINE_MCIQTZ; + +#endif /* __WINE_PRIVATE_MCIQTZ_H */ -- 2.11.4.GIT