[ros-diffs] [hpoussin] 35209: Replace .def file by a .spec file

hpoussin at svn.reactos.org hpoussin at svn.reactos.org
Sat Aug 9 10:09:41 CEST 2008


Author: hpoussin
Date: Sat Aug  9 03:09:40 2008
New Revision: 35209

URL: http://svn.reactos.org/svn/reactos?rev=35209&view=rev
Log:
Replace .def file by a .spec file

Added:
    trunk/reactos/dll/win32/mmdrv/mmdrv.spec   (with props)
Removed:
    trunk/reactos/dll/win32/mmdrv/mmdrv.def
Modified:
    trunk/reactos/dll/win32/mmdrv/TODO   (props changed)
    trunk/reactos/dll/win32/mmdrv/auxil.c   (props changed)
    trunk/reactos/dll/win32/mmdrv/common.c   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/entry.c   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/kernel.c   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/midi.c   (props changed)
    trunk/reactos/dll/win32/mmdrv/mmddk.h   (props changed)
    trunk/reactos/dll/win32/mmdrv/mmdef.h   (props changed)
    trunk/reactos/dll/win32/mmdrv/mmdrv.h   (props changed)
    trunk/reactos/dll/win32/mmdrv/mmdrv.rbuild
    trunk/reactos/dll/win32/mmdrv/mme.c   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/mmioctl.h   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/session.c   (contents, props changed)
    trunk/reactos/dll/win32/mmdrv/utils.c   (props changed)
    trunk/reactos/dll/win32/mmdrv/wave.c   (props changed)
    trunk/reactos/dll/win32/mmdrv/wave.h   (props changed)
    trunk/reactos/dll/win32/mmdrv/wave_io.c   (contents, props changed)

Propchange: trunk/reactos/dll/win32/mmdrv/TODO
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: trunk/reactos/dll/win32/mmdrv/auxil.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Modified: trunk/reactos/dll/win32/mmdrv/common.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/common.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/common.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/common.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,258 +1,258 @@
-/*
- *
- * COPYRIGHT:            See COPYING in the top level directory
- * PROJECT:              ReactOS Multimedia
- * FILE:                 dll/win32/mmdrv/common.c
- * PURPOSE:              Multimedia User Mode Driver (Common functions)
- * PROGRAMMER:           Andrew Greenwood
- * UPDATE HISTORY:
- *                       Jan 14, 2007: Created
- */
-
-#include <mmdrv.h>
-
-/*
-    Translates errors to MMRESULT codes.
-*/
-
-MMRESULT
-ErrorToMmResult(UINT error_code)
-{
-    switch ( error_code )
-    {
-        case NO_ERROR :
-        case ERROR_IO_PENDING :
-            return MMSYSERR_NOERROR;
-
-        case ERROR_BUSY :
-            return MMSYSERR_ALLOCATED;
-
-        case ERROR_NOT_SUPPORTED :
-        case ERROR_INVALID_FUNCTION :
-            return MMSYSERR_NOTSUPPORTED;
-
-        case ERROR_NOT_ENOUGH_MEMORY :
-            return MMSYSERR_NOMEM;
-
-        case ERROR_ACCESS_DENIED :
-            return MMSYSERR_BADDEVICEID;
-
-        case ERROR_INSUFFICIENT_BUFFER :
-            return MMSYSERR_INVALPARAM;
-    };
-
-    /* If all else fails, it's just a plain old error */
-
-    return MMSYSERR_ERROR;
-}
-
-
-/*
-    Obtains a device count for a specific kind of device.
-*/
-
-DWORD
-GetDeviceCount(DeviceType device_type)
-{
-    UINT index = 0;
-    HANDLE handle;
-
-    /* Cycle through devices until an error occurs */
-
-    while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR )
-    {
-        CloseHandle(handle);
-        index ++;
-    }
-
-    DPRINT("Found %d devices of type %d\n", index, device_type);
-
-    return index;
-}
-
-
-/*
-    Obtains device capabilities. This could either be done as individual
-    functions for wave, MIDI and aux, or like this. I chose this method as
-    it centralizes everything.
-*/
-
-DWORD
-GetDeviceCapabilities(
-    DeviceType device_type,
-    DWORD device_id,
-    PVOID capabilities,
-    DWORD capabilities_size)
-{
-    MMRESULT result;
-    DWORD ioctl;
-    HANDLE handle;
-    DWORD bytes_returned;
-    BOOL device_io_result;
-
-    ASSERT(capabilities);
-
-    /* Choose the right IOCTL for the job */
-
-    if ( IsWaveDevice(device_type) )
-        ioctl = IOCTL_WAVE_GET_CAPABILITIES;
-    else if ( IsMidiDevice(device_type) )
-        ioctl = IOCTL_MIDI_GET_CAPABILITIES;
-    else if ( IsAuxDevice(device_type) )
-        return MMSYSERR_NOTSUPPORTED; /* TODO */
-    else
-        return MMSYSERR_NOTSUPPORTED;
-
-    result = OpenKernelDevice(device_type,
-                              device_id,
-                              GENERIC_READ,
-                              &handle);
-
-    if ( result != MMSYSERR_NOERROR )
-    {
-        DPRINT("Failed to open kernel device\n");
-        return result;
-    }
-
-    device_io_result = DeviceIoControl(handle,
-                                       ioctl,
-                                       NULL,
-                                       0,
-                                       (LPVOID) capabilities,
-                                       capabilities_size,
-                                       &bytes_returned,
-                                       NULL);
-
-    /* Translate result */
-
-    if ( device_io_result )
-        result = MMSYSERR_NOERROR;
-    else
-        result = ErrorToMmResult(GetLastError());
-
-    /* Clean up and return */
-
-    CloseKernelDevice(handle);
-
-    return result;
-}
-
-
-/*
-    A wrapper around OpenKernelDevice that creates a session,
-    opens the kernel device, initializes session data and notifies
-    the client (application) that the device has been opened. Again,
-    this supports any device type and the only real difference is
-    the open descriptor.
-*/
-
-DWORD
-OpenDevice(
-    DeviceType device_type,
-    DWORD device_id,
-    PVOID open_descriptor,
-    DWORD flags,
-    DWORD private_handle)
-{
-    SessionInfo* session_info;
-    MMRESULT result;
-    DWORD message;
-
-    /* This will automatically check for duplicate sessions */
-    result = CreateSession(device_type, device_id, &session_info);
-
-    if ( result != MMSYSERR_NOERROR )
-    {
-        DPRINT("Couldn't allocate session info\n");
-        return result;
-    }
-
-    result = OpenKernelDevice(device_type,
-                              device_id,
-                              GENERIC_READ,
-                              &session_info->kernel_device_handle);
-
-    if ( result != MMSYSERR_NOERROR )
-    {
-        DPRINT("Failed to open kernel device\n");
-        DestroySession(session_info);
-        return result;
-    }
-
-    /* Set common session data */
-
-    session_info->flags = flags;
-
-    /* Set wave/MIDI specific data */
-
-    if ( IsWaveDevice(device_type) )
-    {
-        LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor;
-        session_info->callback = wave_open_desc->dwCallback;
-        session_info->mme_wave_handle = wave_open_desc->hWave;
-        session_info->app_user_data = wave_open_desc->dwInstance;
-    }
-    else
-    {
-        DPRINT("Only wave devices are supported at present!\n");
-        DestroySession(session_info);
-        return MMSYSERR_NOTSUPPORTED;
-    }
-
-    /* Start the processing thread */
-
-    result = StartSessionThread(session_info);
-
-    if ( result != MMSYSERR_NOERROR )
-    {
-        DestroySession(session_info);
-        return result;
-    }
-
-    /* Store the session info */
-
-    *((SessionInfo**)private_handle) = session_info;
-
-    /* Send the right message */
-
-    message = (device_type == WaveOutDevice) ? WOM_OPEN :
-              (device_type == WaveInDevice) ? WIM_OPEN :
-              (device_type == MidiOutDevice) ? MOM_OPEN :
-              (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF;
-
-    NotifyClient(session_info, message, 0, 0);
-
-    return MMSYSERR_NOERROR;
-}
-
-
-/*
-    Attempts to close a device. This can fail if playback/recording has
-    not been stopped. We need to make sure it's safe to destroy the
-    session as well (mainly by killing the session thread.)
-*/
-
-DWORD
-CloseDevice(
-    DWORD private_handle)
-{
-    MMRESULT result;
-    SessionInfo* session_info = (SessionInfo*) private_handle;
-    /* TODO: Maybe this is best off inside the playback thread? */
-
-    ASSERT(session_info);
-
-    result = CallSessionThread(session_info, WODM_CLOSE, 0);
-
-    if ( result == MMSYSERR_NOERROR )
-    {
-        /* TODO: Wait for it to be safe to terminate */
-
-        CloseKernelDevice(session_info->kernel_device_handle);
-
-        DestroySession(session_info);
-    }
-
-    return result;
-}
-
+/*
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS Multimedia
+ * FILE:                 dll/win32/mmdrv/common.c
+ * PURPOSE:              Multimedia User Mode Driver (Common functions)
+ * PROGRAMMER:           Andrew Greenwood
+ * UPDATE HISTORY:
+ *                       Jan 14, 2007: Created
+ */
+
+#include <mmdrv.h>
+
+/*
+    Translates errors to MMRESULT codes.
+*/
+
+MMRESULT
+ErrorToMmResult(UINT error_code)
+{
+    switch ( error_code )
+    {
+        case NO_ERROR :
+        case ERROR_IO_PENDING :
+            return MMSYSERR_NOERROR;
+
+        case ERROR_BUSY :
+            return MMSYSERR_ALLOCATED;
+
+        case ERROR_NOT_SUPPORTED :
+        case ERROR_INVALID_FUNCTION :
+            return MMSYSERR_NOTSUPPORTED;
+
+        case ERROR_NOT_ENOUGH_MEMORY :
+            return MMSYSERR_NOMEM;
+
+        case ERROR_ACCESS_DENIED :
+            return MMSYSERR_BADDEVICEID;
+
+        case ERROR_INSUFFICIENT_BUFFER :
+            return MMSYSERR_INVALPARAM;
+    };
+
+    /* If all else fails, it's just a plain old error */
+
+    return MMSYSERR_ERROR;
+}
+
+
+/*
+    Obtains a device count for a specific kind of device.
+*/
+
+DWORD
+GetDeviceCount(DeviceType device_type)
+{
+    UINT index = 0;
+    HANDLE handle;
+
+    /* Cycle through devices until an error occurs */
+
+    while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR )
+    {
+        CloseHandle(handle);
+        index ++;
+    }
+
+    DPRINT("Found %d devices of type %d\n", index, device_type);
+
+    return index;
+}
+
+
+/*
+    Obtains device capabilities. This could either be done as individual
+    functions for wave, MIDI and aux, or like this. I chose this method as
+    it centralizes everything.
+*/
+
+DWORD
+GetDeviceCapabilities(
+    DeviceType device_type,
+    DWORD device_id,
+    PVOID capabilities,
+    DWORD capabilities_size)
+{
+    MMRESULT result;
+    DWORD ioctl;
+    HANDLE handle;
+    DWORD bytes_returned;
+    BOOL device_io_result;
+
+    ASSERT(capabilities);
+
+    /* Choose the right IOCTL for the job */
+
+    if ( IsWaveDevice(device_type) )
+        ioctl = IOCTL_WAVE_GET_CAPABILITIES;
+    else if ( IsMidiDevice(device_type) )
+        ioctl = IOCTL_MIDI_GET_CAPABILITIES;
+    else if ( IsAuxDevice(device_type) )
+        return MMSYSERR_NOTSUPPORTED; /* TODO */
+    else
+        return MMSYSERR_NOTSUPPORTED;
+
+    result = OpenKernelDevice(device_type,
+                              device_id,
+                              GENERIC_READ,
+                              &handle);
+
+    if ( result != MMSYSERR_NOERROR )
+    {
+        DPRINT("Failed to open kernel device\n");
+        return result;
+    }
+
+    device_io_result = DeviceIoControl(handle,
+                                       ioctl,
+                                       NULL,
+                                       0,
+                                       (LPVOID) capabilities,
+                                       capabilities_size,
+                                       &bytes_returned,
+                                       NULL);
+
+    /* Translate result */
+
+    if ( device_io_result )
+        result = MMSYSERR_NOERROR;
+    else
+        result = ErrorToMmResult(GetLastError());
+
+    /* Clean up and return */
+
+    CloseKernelDevice(handle);
+
+    return result;
+}
+
+
+/*
+    A wrapper around OpenKernelDevice that creates a session,
+    opens the kernel device, initializes session data and notifies
+    the client (application) that the device has been opened. Again,
+    this supports any device type and the only real difference is
+    the open descriptor.
+*/
+
+DWORD
+OpenDevice(
+    DeviceType device_type,
+    DWORD device_id,
+    PVOID open_descriptor,
+    DWORD flags,
+    DWORD private_handle)
+{
+    SessionInfo* session_info;
+    MMRESULT result;
+    DWORD message;
+
+    /* This will automatically check for duplicate sessions */
+    result = CreateSession(device_type, device_id, &session_info);
+
+    if ( result != MMSYSERR_NOERROR )
+    {
+        DPRINT("Couldn't allocate session info\n");
+        return result;
+    }
+
+    result = OpenKernelDevice(device_type,
+                              device_id,
+                              GENERIC_READ,
+                              &session_info->kernel_device_handle);
+
+    if ( result != MMSYSERR_NOERROR )
+    {
+        DPRINT("Failed to open kernel device\n");
+        DestroySession(session_info);
+        return result;
+    }
+
+    /* Set common session data */
+
+    session_info->flags = flags;
+
+    /* Set wave/MIDI specific data */
+
+    if ( IsWaveDevice(device_type) )
+    {
+        LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor;
+        session_info->callback = wave_open_desc->dwCallback;
+        session_info->mme_wave_handle = wave_open_desc->hWave;
+        session_info->app_user_data = wave_open_desc->dwInstance;
+    }
+    else
+    {
+        DPRINT("Only wave devices are supported at present!\n");
+        DestroySession(session_info);
+        return MMSYSERR_NOTSUPPORTED;
+    }
+
+    /* Start the processing thread */
+
+    result = StartSessionThread(session_info);
+
+    if ( result != MMSYSERR_NOERROR )
+    {
+        DestroySession(session_info);
+        return result;
+    }
+
+    /* Store the session info */
+
+    *((SessionInfo**)private_handle) = session_info;
+
+    /* Send the right message */
+
+    message = (device_type == WaveOutDevice) ? WOM_OPEN :
+              (device_type == WaveInDevice) ? WIM_OPEN :
+              (device_type == MidiOutDevice) ? MOM_OPEN :
+              (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF;
+
+    NotifyClient(session_info, message, 0, 0);
+
+    return MMSYSERR_NOERROR;
+}
+
+
+/*
+    Attempts to close a device. This can fail if playback/recording has
+    not been stopped. We need to make sure it's safe to destroy the
+    session as well (mainly by killing the session thread.)
+*/
+
+DWORD
+CloseDevice(
+    DWORD private_handle)
+{
+    MMRESULT result;
+    SessionInfo* session_info = (SessionInfo*) private_handle;
+    /* TODO: Maybe this is best off inside the playback thread? */
+
+    ASSERT(session_info);
+
+    result = CallSessionThread(session_info, WODM_CLOSE, 0);
+
+    if ( result == MMSYSERR_NOERROR )
+    {
+        /* TODO: Wait for it to be safe to terminate */
+
+        CloseKernelDevice(session_info->kernel_device_handle);
+
+        DestroySession(session_info);
+    }
+
+    return result;
+}
+

Propchange: trunk/reactos/dll/win32/mmdrv/common.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/mmdrv/entry.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/entry.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/entry.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/entry.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -22,7 +22,7 @@
     In summary, we just implement to satisfy the MME API (winmm) requirements.
 */
 
-LONG
+LONG WINAPI
 DriverProc(
     DWORD driver_id,
     HANDLE driver_handle,

Propchange: trunk/reactos/dll/win32/mmdrv/entry.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Modified: trunk/reactos/dll/win32/mmdrv/kernel.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/kernel.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/kernel.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/kernel.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,206 +1,206 @@
-/*
- *
- * COPYRIGHT:            See COPYING in the top level directory
- * PROJECT:              ReactOS Multimedia
- * FILE:                 dll/win32/mmdrv/kernel.c
- * PURPOSE:              Multimedia User Mode Driver (kernel interface)
- * PROGRAMMER:           Andrew Greenwood
- * UPDATE HISTORY:
- *                       Jan 14, 2007: Created
- */
-
-#include <mmdrv.h>
-
-/*
-    Devices that we provide access to follow a standard naming convention.
-    The first wave output, for example, appears as \Device\WaveOut0
-
-    I'm not entirely certain how drivers find a free name to use, or why
-    we need to strip the leading \Device from it when opening, but hey...
-*/
-
-MMRESULT
-CobbleDeviceName(
-    DeviceType device_type,
-    DWORD device_id,
-    PWCHAR out_device_name)
-{
-    WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH];
-
-    /* Work out the base name from the device type */
-
-    switch ( device_type )
-    {
-        case WaveOutDevice :
-            wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME);
-            break;
-
-        case WaveInDevice :
-            wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME);
-            break;
-
-        case MidiOutDevice :
-            wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME);
-            break;
-
-        case MidiInDevice :
-            wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME);
-            break;
-
-        case AuxDevice :
-            wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME);
-            break;
-
-        default :
-            return MMSYSERR_BADDEVICEID;
-    };
-
-    /* Now append the device number, removing the leading \Device */
-
-    wsprintf(out_device_name,
-             L"\\\\.%ls%d",
-             base_device_name + strlen("\\Device"),
-             device_id);
-
-    return MMSYSERR_NOERROR;
-}
-
-
-/*
-    Takes a device type (eg: WaveOutDevice), a device ID, desired access and
-    a pointer to a location that will store the handle of the opened "file" if
-    the function succeeds.
-
-    The device type and ID are converted into a device name using the above
-    function.
-*/
-
-MMRESULT
-OpenKernelDevice(
-    DeviceType device_type,
-    DWORD device_id,
-    DWORD access,
-    HANDLE* handle)
-{
-    MMRESULT result;
-    WCHAR device_name[MAX_DEVICE_NAME_LENGTH];
-    DWORD open_flags = 0;
-
-    ASSERT(handle);
-
-    /* Glue the base device name and the ID together */
-
-    result = CobbleDeviceName(device_type, device_id, device_name);
-
-    DPRINT("Opening kernel device %ls\n", device_name);
-
-    if ( result != MMSYSERR_NOERROR )
-        return result;
-
-    /* We want overlapped I/O when writing */
-
-    if ( access != GENERIC_READ )
-        open_flags = FILE_FLAG_OVERLAPPED;
-
-    /* Now try opening... */
-
-    *handle = CreateFile(device_name,
-                         access,
-                         FILE_SHARE_WRITE,
-                         NULL,
-                         OPEN_EXISTING,
-                         open_flags,
-                         NULL);
-
-    if ( *handle == INVALID_HANDLE_VALUE )
-        return ErrorToMmResult(GetLastError());
-
-    return MMSYSERR_NOERROR;
-}
-
-
-/*
-    Just an alias for the benefit of having a pair of functions ;)
-*/
-
-void
-CloseKernelDevice(HANDLE device_handle)
-{
-    CloseHandle(device_handle);
-}
-
-
-MMRESULT
-SetDeviceData(
-    HANDLE device_handle,
-    DWORD ioctl,
-    PBYTE input_buffer,
-    DWORD buffer_size)
-{
-    DPRINT("SetDeviceData\n");
-    /* TODO */
-    return 0;
-}
-
-
-MMRESULT
-GetDeviceData(
-    HANDLE device_handle,
-    DWORD ioctl,
-    PBYTE output_buffer,
-    DWORD buffer_size)
-{
-    OVERLAPPED overlap;
-    DWORD bytes_returned;
-    BOOL success;
-    DWORD transfer;
-
-    DPRINT("GetDeviceData\n");
-
-    memset(&overlap, 0, sizeof(overlap));
-
-    overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-
-    if ( ! overlap.hEvent )
-        return MMSYSERR_NOMEM;
-
-    success = DeviceIoControl(device_handle,
-                              ioctl,
-                              NULL,
-                              0,
-                              output_buffer,
-                              buffer_size,
-                              &bytes_returned,
-                              &overlap);
-
-    if ( ! success )
-    {
-        if ( GetLastError() == ERROR_IO_PENDING )
-        {
-            if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) )
-            {
-                CloseHandle(overlap.hEvent);
-                return ErrorToMmResult(GetLastError());
-            }
-        }
-        else
-        {
-            CloseHandle(overlap.hEvent);
-            return ErrorToMmResult(GetLastError());
-        }
-    }
-
-    while ( TRUE )
-    {
-        SetEvent(overlap.hEvent);
-
-        if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION )
-        {
-            break;
-        }
-    }
-
-    CloseHandle(overlap.hEvent);
-
-    return MMSYSERR_NOERROR;
-}
+/*
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS Multimedia
+ * FILE:                 dll/win32/mmdrv/kernel.c
+ * PURPOSE:              Multimedia User Mode Driver (kernel interface)
+ * PROGRAMMER:           Andrew Greenwood
+ * UPDATE HISTORY:
+ *                       Jan 14, 2007: Created
+ */
+
+#include <mmdrv.h>
+
+/*
+    Devices that we provide access to follow a standard naming convention.
+    The first wave output, for example, appears as \Device\WaveOut0
+
+    I'm not entirely certain how drivers find a free name to use, or why
+    we need to strip the leading \Device from it when opening, but hey...
+*/
+
+MMRESULT
+CobbleDeviceName(
+    DeviceType device_type,
+    DWORD device_id,
+    PWCHAR out_device_name)
+{
+    WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH];
+
+    /* Work out the base name from the device type */
+
+    switch ( device_type )
+    {
+        case WaveOutDevice :
+            wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME);
+            break;
+
+        case WaveInDevice :
+            wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME);
+            break;
+
+        case MidiOutDevice :
+            wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME);
+            break;
+
+        case MidiInDevice :
+            wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME);
+            break;
+
+        case AuxDevice :
+            wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME);
+            break;
+
+        default :
+            return MMSYSERR_BADDEVICEID;
+    };
+
+    /* Now append the device number, removing the leading \Device */
+
+    wsprintf(out_device_name,
+             L"\\\\.%ls%d",
+             base_device_name + strlen("\\Device"),
+             device_id);
+
+    return MMSYSERR_NOERROR;
+}
+
+
+/*
+    Takes a device type (eg: WaveOutDevice), a device ID, desired access and
+    a pointer to a location that will store the handle of the opened "file" if
+    the function succeeds.
+
+    The device type and ID are converted into a device name using the above
+    function.
+*/
+
+MMRESULT
+OpenKernelDevice(
+    DeviceType device_type,
+    DWORD device_id,
+    DWORD access,
+    HANDLE* handle)
+{
+    MMRESULT result;
+    WCHAR device_name[MAX_DEVICE_NAME_LENGTH];
+    DWORD open_flags = 0;
+
+    ASSERT(handle);
+
+    /* Glue the base device name and the ID together */
+
+    result = CobbleDeviceName(device_type, device_id, device_name);
+
+    DPRINT("Opening kernel device %ls\n", device_name);
+
+    if ( result != MMSYSERR_NOERROR )
+        return result;
+
+    /* We want overlapped I/O when writing */
+
+    if ( access != GENERIC_READ )
+        open_flags = FILE_FLAG_OVERLAPPED;
+
+    /* Now try opening... */
+
+    *handle = CreateFile(device_name,
+                         access,
+                         FILE_SHARE_WRITE,
+                         NULL,
+                         OPEN_EXISTING,
+                         open_flags,
+                         NULL);
+
+    if ( *handle == INVALID_HANDLE_VALUE )
+        return ErrorToMmResult(GetLastError());
+
+    return MMSYSERR_NOERROR;
+}
+
+
+/*
+    Just an alias for the benefit of having a pair of functions ;)
+*/
+
+void
+CloseKernelDevice(HANDLE device_handle)
+{
+    CloseHandle(device_handle);
+}
+
+
+MMRESULT
+SetDeviceData(
+    HANDLE device_handle,
+    DWORD ioctl,
+    PBYTE input_buffer,
+    DWORD buffer_size)
+{
+    DPRINT("SetDeviceData\n");
+    /* TODO */
+    return 0;
+}
+
+
+MMRESULT
+GetDeviceData(
+    HANDLE device_handle,
+    DWORD ioctl,
+    PBYTE output_buffer,
+    DWORD buffer_size)
+{
+    OVERLAPPED overlap;
+    DWORD bytes_returned;
+    BOOL success;
+    DWORD transfer;
+
+    DPRINT("GetDeviceData\n");
+
+    memset(&overlap, 0, sizeof(overlap));
+
+    overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+    if ( ! overlap.hEvent )
+        return MMSYSERR_NOMEM;
+
+    success = DeviceIoControl(device_handle,
+                              ioctl,
+                              NULL,
+                              0,
+                              output_buffer,
+                              buffer_size,
+                              &bytes_returned,
+                              &overlap);
+
+    if ( ! success )
+    {
+        if ( GetLastError() == ERROR_IO_PENDING )
+        {
+            if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) )
+            {
+                CloseHandle(overlap.hEvent);
+                return ErrorToMmResult(GetLastError());
+            }
+        }
+        else
+        {
+            CloseHandle(overlap.hEvent);
+            return ErrorToMmResult(GetLastError());
+        }
+    }
+
+    while ( TRUE )
+    {
+        SetEvent(overlap.hEvent);
+
+        if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION )
+        {
+            break;
+        }
+    }
+
+    CloseHandle(overlap.hEvent);
+
+    return MMSYSERR_NOERROR;
+}

Propchange: trunk/reactos/dll/win32/mmdrv/kernel.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: trunk/reactos/dll/win32/mmdrv/midi.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Propchange: trunk/reactos/dll/win32/mmdrv/mmddk.h
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Propchange: trunk/reactos/dll/win32/mmdrv/mmdef.h
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Removed: trunk/reactos/dll/win32/mmdrv/mmdrv.def
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/mmdrv.def?rev=35208&view=auto
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/mmdrv.def [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/mmdrv.def (removed)
@@ -1,14 +1,0 @@
-; $Id$
-;
-; mmdrv.def
-;
-; ReactOS Operating System
-;
-LIBRARY mmdrv.dll
-EXPORTS
-DriverProc at 20
-;widMessage at 20
-wodMessage at 20
-;midMessage at 20
-;modMessage at 20
-;auxMessage at 20

Propchange: trunk/reactos/dll/win32/mmdrv/mmdrv.h
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Modified: trunk/reactos/dll/win32/mmdrv/mmdrv.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/mmdrv.rbuild?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/mmdrv.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/mmdrv.rbuild [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,5 +1,5 @@
 <module name="mmdrv" type="win32dll" baseaddress="${BASEADDRESS_MMDRV}" installbase="system32" installname="mmdrv.dll" unicode="yes">
-	<importlibrary definition="mmdrv.def" />
+	<importlibrary definition="mmdrv.spec.def" />
 	<include base="mmdrv">.</include>
 	<define name="NDEBUG" />
 	<library>ntdll</library>
@@ -13,4 +13,5 @@
 	<file>common.c</file>
 	<file>wave.c</file>
 	<file>wave_io.c</file>
+	<file>mmdrv.spec</file>
 </module>

Added: trunk/reactos/dll/win32/mmdrv/mmdrv.spec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/mmdrv.spec?rev=35209&view=auto
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/mmdrv.spec (added)
+++ trunk/reactos/dll/win32/mmdrv/mmdrv.spec [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,0 +1,6 @@
+@ stdcall DriverProc(long ptr long long long)
+;@ stdcall widMessage(long long long long long)
+@ stdcall wodMessage(long long long long long)
+;@ stdcall midMessage(long long long long long)
+;@ stdcall modMessage(long long long long long)
+;@ stdcall auxMessage(long long long long long)

Propchange: trunk/reactos/dll/win32/mmdrv/mmdrv.spec
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/mmdrv/mme.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/mme.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/mme.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/mme.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,143 +1,143 @@
-/*
- *
- * COPYRIGHT:            See COPYING in the top level directory
- * PROJECT:              ReactOS Multimedia
- * FILE:                 dll/win32/mmdrv/mme.c
- * PURPOSE:              Multimedia User Mode Driver (MME Interface)
- * PROGRAMMER:           Andrew Greenwood
- *                       Aleksey Bragin
- * UPDATE HISTORY:
- *                       Jan 14, 2007: Rewritten and tidied up
- */
-
-#include <mmdrv.h>
-
-/*
-    Sends a message to the client (application), such as WOM_DONE. This
-    is just a wrapper around DriverCallback which translates the
-    parameters appropriately.
-*/
-
-BOOL
-NotifyClient(
-    SessionInfo* session_info,
-    DWORD message,
-    DWORD parameter1,
-    DWORD parameter2)
-{
-    return DriverCallback(session_info->callback,
-                          HIWORD(session_info->flags),
-                          session_info->mme_handle,
-                          message,
-                          session_info->app_user_data,
-                          parameter1,
-                          parameter2);
-}
-
-
-
-/*
-    MME Driver Entrypoint
-    Wave Output
-*/
-
-APIENTRY DWORD
-wodMessage(
-    DWORD device_id,
-    DWORD message,
-    DWORD private_handle,
-    DWORD parameter1,
-    DWORD parameter2)
-{
-    switch ( message )
-    {
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */
-        case WODM_GETNUMDEVS :
-            DPRINT("WODM_GETNUMDEVS\n");
-            return GetDeviceCount(WaveOutDevice);
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */
-        case WODM_GETDEVCAPS :
-            DPRINT("WODM_GETDEVCAPS\n");
-            return GetDeviceCapabilities(WaveOutDevice,
-                                         device_id,
-                                         (PVOID) parameter1,
-                                         parameter2);
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */
-        case WODM_OPEN :
-        {
-            WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1;
-            DPRINT("WODM_OPEN\n");
-
-            if ( parameter2 && WAVE_FORMAT_QUERY )
-                return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat);
-            else
-                return OpenDevice(WaveOutDevice,
-                                  device_id,
-                                  open_desc,
-                                  parameter2,
-                                  private_handle);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */
-        case WODM_CLOSE :
-        {
-            DPRINT("WODM_CLOSE\n");
-            return CloseDevice(private_handle);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */
-        case WODM_WRITE :
-        {
-            DPRINT("WODM_WRITE\n");
-            return WriteWaveBuffer(private_handle,
-                                   (PWAVEHDR) parameter1,
-                                   parameter2);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */
-        case WODM_PAUSE :
-        {
-            DPRINT("WODM_PAUSE\n");
-            return HandleBySessionThread(private_handle, message, 0);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */
-        case WODM_RESTART :
-        {
-            DPRINT("WODM_RESTART\n");
-            return HandleBySessionThread(private_handle, message, 0);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */
-        case WODM_RESET :
-        {
-            DPRINT("WODM_RESET\n");
-            return HandleBySessionThread(private_handle, message, 0);
-        }
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */
-#if 0
-        case WODM_GETPOS :
-        {
-            DPRINT("WODM_GETPOS\n");
-            return GetPosition(private_handle,
-                               (PMMTIME) parameter1,
-                               parameter2);
-        }
-#endif
-
-        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */
-        case WODM_BREAKLOOP :
-        {
-            DPRINT("WODM_BREAKLOOP\n");
-            return HandleBySessionThread(private_handle, message, 0);
-        }
-
-        /* TODO: Others */
-    }
-
-    DPRINT("Unsupported message\n");
-    return MMSYSERR_NOTSUPPORTED;
-}
+/*
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS Multimedia
+ * FILE:                 dll/win32/mmdrv/mme.c
+ * PURPOSE:              Multimedia User Mode Driver (MME Interface)
+ * PROGRAMMER:           Andrew Greenwood
+ *                       Aleksey Bragin
+ * UPDATE HISTORY:
+ *                       Jan 14, 2007: Rewritten and tidied up
+ */
+
+#include <mmdrv.h>
+
+/*
+    Sends a message to the client (application), such as WOM_DONE. This
+    is just a wrapper around DriverCallback which translates the
+    parameters appropriately.
+*/
+
+BOOL
+NotifyClient(
+    SessionInfo* session_info,
+    DWORD message,
+    DWORD parameter1,
+    DWORD parameter2)
+{
+    return DriverCallback(session_info->callback,
+                          HIWORD(session_info->flags),
+                          session_info->mme_handle,
+                          message,
+                          session_info->app_user_data,
+                          parameter1,
+                          parameter2);
+}
+
+
+
+/*
+    MME Driver Entrypoint
+    Wave Output
+*/
+
+APIENTRY DWORD
+wodMessage(
+    DWORD device_id,
+    DWORD message,
+    DWORD private_handle,
+    DWORD parameter1,
+    DWORD parameter2)
+{
+    switch ( message )
+    {
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */
+        case WODM_GETNUMDEVS :
+            DPRINT("WODM_GETNUMDEVS\n");
+            return GetDeviceCount(WaveOutDevice);
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */
+        case WODM_GETDEVCAPS :
+            DPRINT("WODM_GETDEVCAPS\n");
+            return GetDeviceCapabilities(WaveOutDevice,
+                                         device_id,
+                                         (PVOID) parameter1,
+                                         parameter2);
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */
+        case WODM_OPEN :
+        {
+            WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1;
+            DPRINT("WODM_OPEN\n");
+
+            if ( parameter2 && WAVE_FORMAT_QUERY )
+                return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat);
+            else
+                return OpenDevice(WaveOutDevice,
+                                  device_id,
+                                  open_desc,
+                                  parameter2,
+                                  private_handle);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */
+        case WODM_CLOSE :
+        {
+            DPRINT("WODM_CLOSE\n");
+            return CloseDevice(private_handle);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */
+        case WODM_WRITE :
+        {
+            DPRINT("WODM_WRITE\n");
+            return WriteWaveBuffer(private_handle,
+                                   (PWAVEHDR) parameter1,
+                                   parameter2);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */
+        case WODM_PAUSE :
+        {
+            DPRINT("WODM_PAUSE\n");
+            return HandleBySessionThread(private_handle, message, 0);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */
+        case WODM_RESTART :
+        {
+            DPRINT("WODM_RESTART\n");
+            return HandleBySessionThread(private_handle, message, 0);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */
+        case WODM_RESET :
+        {
+            DPRINT("WODM_RESET\n");
+            return HandleBySessionThread(private_handle, message, 0);
+        }
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */
+#if 0
+        case WODM_GETPOS :
+        {
+            DPRINT("WODM_GETPOS\n");
+            return GetPosition(private_handle,
+                               (PMMTIME) parameter1,
+                               parameter2);
+        }
+#endif
+
+        /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */
+        case WODM_BREAKLOOP :
+        {
+            DPRINT("WODM_BREAKLOOP\n");
+            return HandleBySessionThread(private_handle, message, 0);
+        }
+
+        /* TODO: Others */
+    }
+
+    DPRINT("Unsupported message\n");
+    return MMSYSERR_NOTSUPPORTED;
+}

Propchange: trunk/reactos/dll/win32/mmdrv/mme.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/mmdrv/mmioctl.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/mmioctl.h?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/mmioctl.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/mmioctl.h [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,147 +1,147 @@
-/*
- *
- * COPYRIGHT:            See COPYING in the top level directory
- * PROJECT:              ReactOS Multimedia
- * FILE:                 dll/win32/mmdrv/mmioctl.h
- * PURPOSE:              Multimedia system NT4 compatibility
- * PROGRAMMER:           Andrew Greenwood
- * UPDATE HISTORY:
- *                       Jan 13, 2007: Split from mmdrv.h
- */
-
-#ifndef MMDRV_IOCTLS
-#define MMDRV_IOCTLS
-
-
-#include <windows.h>
-#include <mmsystem.h>
-#include <mmddk.h>
-#include <winioctl.h>
-
-
-/*
-    Base names of the supported devices, as provided by drivers running in
-    kernel mode.
-
-    \Device\WaveIn0 etc.
-*/
-
-#define WAVE_OUT_DEVICE_NAME    L"\\Device\\WaveOut"
-#define WAVE_IN_DEVICE_NAME     L"\\Device\\WaveIn"
-#define MIDI_OUT_DEVICE_NAME    L"\\Device\\MidiOut"
-#define MIDI_IN_DEVICE_NAME     L"\\Device\\MidiIn"
-#define AUX_DEVICE_NAME         L"\\Device\\MMAux"
-
-
-/*
-    Base IOCTL codes
-*/
-
-#define IOCTL_SOUND_BASE    FILE_DEVICE_SOUND
-#define IOCTL_WAVE_BASE     0x0000
-#define IOCTL_MIDI_BASE     0x0080
-#define IOCTL_AUX_BASE      0x0100
-
-
-/*
-    Wave IOCTLs
-*/
-
-#define IOCTL_WAVE_QUERY_FORMAT \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_WAVE_SET_FORMAT \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_GET_CAPABILITIES \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_WAVE_SET_STATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_GET_STATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_GET_POSITION \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_SET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_WAVE_GET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_WAVE_SET_PITCH \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_GET_PITCH \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_SET_PLAYBACK_RATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_GET_PLAYBACK_RATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_PLAY \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_RECORD \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_BREAK_LOOP \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_WAVE_SET_LOW_PRIORITY \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-
-/*
-    MIDI IOCTLs
-*/
-
-#define IOCTL_MIDI_GET_CAPABILITIES \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_MIDI_SET_STATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_MIDI_GET_STATE \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_MIDI_SET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_MIDI_GET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_MIDI_PLAY \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_MIDI_RECORD \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_MIDI_CACHE_PATCHES \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-#define IOCTL_MIDI_CACHE_DRUM_PATCHES \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-
-/*
-    Aux IOCTLs
-*/
-
-#define IOCTL_AUX_GET_CAPABILITIES \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_AUX_SET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_AUX_GET_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define IOCTL_SOUND_GET_CHANGED_VOLUME \
-    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#endif
+/*
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS Multimedia
+ * FILE:                 dll/win32/mmdrv/mmioctl.h
+ * PURPOSE:              Multimedia system NT4 compatibility
+ * PROGRAMMER:           Andrew Greenwood
+ * UPDATE HISTORY:
+ *                       Jan 13, 2007: Split from mmdrv.h
+ */
+
+#ifndef MMDRV_IOCTLS
+#define MMDRV_IOCTLS
+
+
+#include <windows.h>
+#include <mmsystem.h>
+#include <mmddk.h>
+#include <winioctl.h>
+
+
+/*
+    Base names of the supported devices, as provided by drivers running in
+    kernel mode.
+
+    \Device\WaveIn0 etc.
+*/
+
+#define WAVE_OUT_DEVICE_NAME    L"\\Device\\WaveOut"
+#define WAVE_IN_DEVICE_NAME     L"\\Device\\WaveIn"
+#define MIDI_OUT_DEVICE_NAME    L"\\Device\\MidiOut"
+#define MIDI_IN_DEVICE_NAME     L"\\Device\\MidiIn"
+#define AUX_DEVICE_NAME         L"\\Device\\MMAux"
+
+
+/*
+    Base IOCTL codes
+*/
+
+#define IOCTL_SOUND_BASE    FILE_DEVICE_SOUND
+#define IOCTL_WAVE_BASE     0x0000
+#define IOCTL_MIDI_BASE     0x0080
+#define IOCTL_AUX_BASE      0x0100
+
+
+/*
+    Wave IOCTLs
+*/
+
+#define IOCTL_WAVE_QUERY_FORMAT \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_WAVE_SET_FORMAT \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_GET_CAPABILITIES \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_WAVE_SET_STATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_GET_STATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_GET_POSITION \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_SET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_WAVE_GET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_WAVE_SET_PITCH \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_GET_PITCH \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_SET_PLAYBACK_RATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_GET_PLAYBACK_RATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_PLAY \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_RECORD \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_BREAK_LOOP \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_WAVE_SET_LOW_PRIORITY \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+
+/*
+    MIDI IOCTLs
+*/
+
+#define IOCTL_MIDI_GET_CAPABILITIES \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_MIDI_SET_STATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_MIDI_GET_STATE \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_MIDI_SET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_MIDI_GET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_MIDI_PLAY \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_MIDI_RECORD \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_MIDI_CACHE_PATCHES \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+#define IOCTL_MIDI_CACHE_DRUM_PATCHES \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+
+
+/*
+    Aux IOCTLs
+*/
+
+#define IOCTL_AUX_GET_CAPABILITIES \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_AUX_SET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_AUX_GET_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_SOUND_GET_CHANGED_VOLUME \
+    CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#endif

Propchange: trunk/reactos/dll/win32/mmdrv/mmioctl.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/mmdrv/session.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/session.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/session.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/session.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,245 +1,245 @@
-/*
- *
- * COPYRIGHT:            See COPYING in the top level directory
- * PROJECT:              ReactOS Multimedia
- * FILE:                 dll/win32/mmdrv/session.c
- * PURPOSE:              Multimedia User Mode Driver (session management)
- * PROGRAMMER:           Andrew Greenwood
- * UPDATE HISTORY:
- *                       Jan 14, 2007: Created
- */
-
-#include <mmdrv.h>
-
-/* Each session is tracked, but the list must be locked when in use  */
-
-SessionInfo* session_list = NULL;
-CRITICAL_SECTION session_lock;
-
-
-/*
-    Obtains a pointer to the session associated with a device type and ID.
-    If no session exists, returns NULL. This is mainly used to see if a
-    session already exists prior to creating a new one.
-*/
-
-SessionInfo*
-GetSession(
-    DeviceType device_type,
-    DWORD device_id)
-{
-    SessionInfo* session_info;
-
-    EnterCriticalSection(&session_lock);
-    session_info = session_list;
-
-    while ( session_info )
-    {
-        if ( ( session_info->device_type == device_type ) &&
-             ( session_info->device_id == device_id ) )
-        {
-            LeaveCriticalSection(&session_lock);
-            return session_info;
-        }
-
-        session_info = session_info->next;
-    }
-
-    LeaveCriticalSection(&session_lock);
-    return NULL;
-}
-
-
-/*
-    Creates a new session, associated with the specified device type and ID.
-    Whilst the session list is locked, this also checks to see if an existing
-    session is associated with the device.
-*/
-
-MMRESULT
-CreateSession(
-    DeviceType device_type,
-    DWORD device_id,
-    SessionInfo** session_info)
-{
-    HANDLE heap = GetProcessHeap();
-
-    ASSERT(session_info);
-
-    EnterCriticalSection(&session_lock);
-
-    /* Ensure we're not creating a duplicate session */
-
-    if ( GetSession(device_type, device_id) )
-    {
-        DPRINT("Already allocated session\n");
-        LeaveCriticalSection(&session_lock);
-        return MMSYSERR_ALLOCATED;
-    }
-
-    *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo));
-
-    if ( ! *session_info )
-    {
-        DPRINT("Failed to allocate mem for session info\n");
-        LeaveCriticalSection(&session_lock);
-        return MMSYSERR_NOMEM;
-    }
-
-    (*session_info)->device_type = device_type;
-    (*session_info)->device_id = device_id;
-
-    /* Add to the list */
-
-    (*session_info)->next = session_list;
-    session_list = *session_info;
-
-    LeaveCriticalSection(&session_lock);
-
-    return MMSYSERR_NOERROR;
-}
-
-
-/*
-    Removes a session from the list and destroys it. This function does NOT
-    perform any additional cleanup. Think of it as a slightly more advanced
-    free()
-*/
-
-VOID
-DestroySession(SessionInfo* session)
-{
-    HANDLE heap = GetProcessHeap();
-    SessionInfo* session_node;
-    SessionInfo* session_prev;
-
-    /* TODO: More cleanup stuff */
-
-    /* Remove from the list */
-
-    EnterCriticalSection(&session_lock);
-
-    session_node = session_list;
-    session_prev = NULL;
-
-    while ( session_node )
-    {
-        if ( session_node == session )
-        {
-            /* Bridge the gap for when we go */
-            session_prev->next = session->next;
-            break;
-        }
-
-        /* Save the previous node, fetch the next */
-        session_prev = session_node;
-        session_node = session_node->next;
-    }
-
-    LeaveCriticalSection(&session_lock);
-
-    HeapFree(heap, 0, session);
-}
-
-
-/*
-    Allocates events and other resources for the session thread, starts it,
-    and waits for it to announce that it is ready to work for us.
-*/
-
-MMRESULT
-StartSessionThread(SessionInfo* session_info)
-{
-    LPTASKCALLBACK task;
-    MMRESULT result;
-
-    ASSERT(session_info);
-
-    /* This is our "ready" event, sent when the thread is idle */
-
-    session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL);
-
-    if ( ! session_info->thread.ready_event )
-    {
-        DPRINT("Couldn't create thread_ready event\n");
-        return MMSYSERR_NOMEM;
-    }
-
-    /* This is our "go" event, sent when we want the thread to do something */
-
-    session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL);
-
-    if ( ! session_info->thread.go_event )
-    {
-        DPRINT("Couldn't create thread_go event\n");
-        CloseHandle(session_info->thread.ready_event);
-        return MMSYSERR_NOMEM;
-    }
-
-    /* TODO - other kinds of devices need attention, too */
-    task = ( session_info->device_type == WaveOutDevice )
-           ? (LPTASKCALLBACK) WaveThread : NULL;
-
-    ASSERT(task);
-
-    /* Effectively, this is a beefed-up CreateThread */
-
-    result = mmTaskCreate(task,
-                          &session_info->thread.handle,
-                          (DWORD) session_info);
-
-    if ( result != MMSYSERR_NOERROR )
-    {
-        DPRINT("Task creation failed\n");
-        CloseHandle(session_info->thread.ready_event);
-        CloseHandle(session_info->thread.go_event);
-        return result;
-    }
-
-    /* Wait for the thread to be ready before completing */
-
-    WaitForSingleObject(session_info->thread.ready_event, INFINITE);
-
-    return MMSYSERR_NOERROR;
-}
-
-
-/*
-    The session thread is pretty simple. Upon creation, it announces that it
-    is ready to do stuff for us. When we want it to perform an action, we use
-    CallSessionThread with an appropriate function and parameter, then tell
-    the thread we want it to do something. When it's finished, it announces
-    that it is ready once again.
-*/
-
-MMRESULT
-CallSessionThread(
-    SessionInfo* session_info,
-    ThreadFunction function,
-    PVOID thread_parameter)
-{
-    ASSERT(session_info);
-
-    session_info->thread.function = function;
-    session_info->thread.parameter = thread_parameter;
-
-    DPRINT("Calling session thread\n");
-    SetEvent(session_info->thread.go_event);
-
-    DPRINT("Waiting for thread response\n");
-    WaitForSingleObject(session_info->thread.ready_event, INFINITE);
-
-    return session_info->thread.result;
-}
-
-
-DWORD
-HandleBySessionThread(
-    DWORD private_handle,
-    DWORD message,
-    DWORD parameter)
-{
-    return CallSessionThread((SessionInfo*) private_handle,
-                             message,
-                             (PVOID) parameter);
-}
+/*
+ *
+ * COPYRIGHT:            See COPYING in the top level directory
+ * PROJECT:              ReactOS Multimedia
+ * FILE:                 dll/win32/mmdrv/session.c
+ * PURPOSE:              Multimedia User Mode Driver (session management)
+ * PROGRAMMER:           Andrew Greenwood
+ * UPDATE HISTORY:
+ *                       Jan 14, 2007: Created
+ */
+
+#include <mmdrv.h>
+
+/* Each session is tracked, but the list must be locked when in use  */
+
+SessionInfo* session_list = NULL;
+CRITICAL_SECTION session_lock;
+
+
+/*
+    Obtains a pointer to the session associated with a device type and ID.
+    If no session exists, returns NULL. This is mainly used to see if a
+    session already exists prior to creating a new one.
+*/
+
+SessionInfo*
+GetSession(
+    DeviceType device_type,
+    DWORD device_id)
+{
+    SessionInfo* session_info;
+
+    EnterCriticalSection(&session_lock);
+    session_info = session_list;
+
+    while ( session_info )
+    {
+        if ( ( session_info->device_type == device_type ) &&
+             ( session_info->device_id == device_id ) )
+        {
+            LeaveCriticalSection(&session_lock);
+            return session_info;
+        }
+
+        session_info = session_info->next;
+    }
+
+    LeaveCriticalSection(&session_lock);
+    return NULL;
+}
+
+
+/*
+    Creates a new session, associated with the specified device type and ID.
+    Whilst the session list is locked, this also checks to see if an existing
+    session is associated with the device.
+*/
+
+MMRESULT
+CreateSession(
+    DeviceType device_type,
+    DWORD device_id,
+    SessionInfo** session_info)
+{
+    HANDLE heap = GetProcessHeap();
+
+    ASSERT(session_info);
+
+    EnterCriticalSection(&session_lock);
+
+    /* Ensure we're not creating a duplicate session */
+
+    if ( GetSession(device_type, device_id) )
+    {
+        DPRINT("Already allocated session\n");
+        LeaveCriticalSection(&session_lock);
+        return MMSYSERR_ALLOCATED;
+    }
+
+    *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo));
+
+    if ( ! *session_info )
+    {
+        DPRINT("Failed to allocate mem for session info\n");
+        LeaveCriticalSection(&session_lock);
+        return MMSYSERR_NOMEM;
+    }
+
+    (*session_info)->device_type = device_type;
+    (*session_info)->device_id = device_id;
+
+    /* Add to the list */
+
+    (*session_info)->next = session_list;
+    session_list = *session_info;
+
+    LeaveCriticalSection(&session_lock);
+
+    return MMSYSERR_NOERROR;
+}
+
+
+/*
+    Removes a session from the list and destroys it. This function does NOT
+    perform any additional cleanup. Think of it as a slightly more advanced
+    free()
+*/
+
+VOID
+DestroySession(SessionInfo* session)
+{
+    HANDLE heap = GetProcessHeap();
+    SessionInfo* session_node;
+    SessionInfo* session_prev;
+
+    /* TODO: More cleanup stuff */
+
+    /* Remove from the list */
+
+    EnterCriticalSection(&session_lock);
+
+    session_node = session_list;
+    session_prev = NULL;
+
+    while ( session_node )
+    {
+        if ( session_node == session )
+        {
+            /* Bridge the gap for when we go */
+            session_prev->next = session->next;
+            break;
+        }
+
+        /* Save the previous node, fetch the next */
+        session_prev = session_node;
+        session_node = session_node->next;
+    }
+
+    LeaveCriticalSection(&session_lock);
+
+    HeapFree(heap, 0, session);
+}
+
+
+/*
+    Allocates events and other resources for the session thread, starts it,
+    and waits for it to announce that it is ready to work for us.
+*/
+
+MMRESULT
+StartSessionThread(SessionInfo* session_info)
+{
+    LPTASKCALLBACK task;
+    MMRESULT result;
+
+    ASSERT(session_info);
+
+    /* This is our "ready" event, sent when the thread is idle */
+
+    session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+    if ( ! session_info->thread.ready_event )
+    {
+        DPRINT("Couldn't create thread_ready event\n");
+        return MMSYSERR_NOMEM;
+    }
+
+    /* This is our "go" event, sent when we want the thread to do something */
+
+    session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+    if ( ! session_info->thread.go_event )
+    {
+        DPRINT("Couldn't create thread_go event\n");
+        CloseHandle(session_info->thread.ready_event);
+        return MMSYSERR_NOMEM;
+    }
+
+    /* TODO - other kinds of devices need attention, too */
+    task = ( session_info->device_type == WaveOutDevice )
+           ? (LPTASKCALLBACK) WaveThread : NULL;
+
+    ASSERT(task);
+
+    /* Effectively, this is a beefed-up CreateThread */
+
+    result = mmTaskCreate(task,
+                          &session_info->thread.handle,
+                          (DWORD) session_info);
+
+    if ( result != MMSYSERR_NOERROR )
+    {
+        DPRINT("Task creation failed\n");
+        CloseHandle(session_info->thread.ready_event);
+        CloseHandle(session_info->thread.go_event);
+        return result;
+    }
+
+    /* Wait for the thread to be ready before completing */
+
+    WaitForSingleObject(session_info->thread.ready_event, INFINITE);
+
+    return MMSYSERR_NOERROR;
+}
+
+
+/*
+    The session thread is pretty simple. Upon creation, it announces that it
+    is ready to do stuff for us. When we want it to perform an action, we use
+    CallSessionThread with an appropriate function and parameter, then tell
+    the thread we want it to do something. When it's finished, it announces
+    that it is ready once again.
+*/
+
+MMRESULT
+CallSessionThread(
+    SessionInfo* session_info,
+    ThreadFunction function,
+    PVOID thread_parameter)
+{
+    ASSERT(session_info);
+
+    session_info->thread.function = function;
+    session_info->thread.parameter = thread_parameter;
+
+    DPRINT("Calling session thread\n");
+    SetEvent(session_info->thread.go_event);
+
+    DPRINT("Waiting for thread response\n");
+    WaitForSingleObject(session_info->thread.ready_event, INFINITE);
+
+    return session_info->thread.result;
+}
+
+
+DWORD
+HandleBySessionThread(
+    DWORD private_handle,
+    DWORD message,
+    DWORD parameter)
+{
+    return CallSessionThread((SessionInfo*) private_handle,
+                             message,
+                             (PVOID) parameter);
+}

Propchange: trunk/reactos/dll/win32/mmdrv/session.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: trunk/reactos/dll/win32/mmdrv/utils.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Propchange: trunk/reactos/dll/win32/mmdrv/wave.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Propchange: trunk/reactos/dll/win32/mmdrv/wave.h
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords (removed)
@@ -1,1 +1,0 @@
-author date id revision

Modified: trunk/reactos/dll/win32/mmdrv/wave_io.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mmdrv/wave_io.c?rev=35209&r1=35208&r2=35209&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mmdrv/wave_io.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mmdrv/wave_io.c [iso-8859-1] Sat Aug  9 03:09:40 2008
@@ -1,40 +1,40 @@
-/*
-    Don't use this.
-*/
-
-#include <mmdrv.h>
-
-/*
-    Complete a partial wave buffer transaction
-*/
-
-void
-CompleteWaveOverlap(
-    DWORD error_code,
-    DWORD bytes_transferred,
-    LPOVERLAPPED overlapped)
-{
-    DPRINT("Complete partial wave overlap\n");
-}
-
-/*
-    Helper function to set up loops
-*/
-
-VOID
-UpdateWaveLoop(SessionInfo* session_info)
-{
-}
-
-
-/*
-    The hub of all wave I/O. This ensures a constant stream of buffers are
-    passed between the land of usermode and kernelmode.
-*/
-
-VOID
-PerformWaveIO(
-    SessionInfo* session_info)
-{
-
-}
+/*
+    Don't use this.
+*/
+
+#include <mmdrv.h>
+
+/*
+    Complete a partial wave buffer transaction
+*/
+
+void
+CompleteWaveOverlap(
+    DWORD error_code,
+    DWORD bytes_transferred,
+    LPOVERLAPPED overlapped)
+{
+    DPRINT("Complete partial wave overlap\n");
+}
+
+/*
+    Helper function to set up loops
+*/
+
+VOID
+UpdateWaveLoop(SessionInfo* session_info)
+{
+}
+
+
+/*
+    The hub of all wave I/O. This ensures a constant stream of buffers are
+    passed between the land of usermode and kernelmode.
+*/
+
+VOID
+PerformWaveIO(
+    SessionInfo* session_info)
+{
+
+}

Propchange: trunk/reactos/dll/win32/mmdrv/wave_io.c
------------------------------------------------------------------------------
    svn:eol-style = native



More information about the Ros-diffs mailing list