[ros-diffs] [silverblade] 34332: Started work on the user-mode Sound Blaster component. Like mmdrv, this is currently created as an executable to make initial testing easier. Fixed bug in EnumerateNt4ServiceSoundDevices where *all* device types were being sent to the detection callback (made this an optional feature instead). Moved original test code from MME-Buddy into MMDrv (don't want it for sndblst)

silverblade at svn.reactos.org silverblade at svn.reactos.org
Sun Jul 6 16:30:40 CEST 2008


Author: silverblade
Date: Sun Jul  6 09:30:40 2008
New Revision: 34332

URL: http://svn.reactos.org/svn/reactos?rev=34332&view=rev
Log:
Started work on the user-mode Sound Blaster component. Like mmdrv, this is
currently created as an executable to make initial testing easier. Fixed
bug in EnumerateNt4ServiceSoundDevices where *all* device types were being
sent to the detection callback (made this an optional feature instead).
Moved original test code from MME-Buddy into MMDrv (don't want it for sndblst)


Added:
    branches/silverblade-audio/dll/win32/mmdrv/testing.c
      - copied, changed from r34328, branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c
    branches/silverblade-audio/dll/win32/sndblst/
    branches/silverblade-audio/dll/win32/sndblst/sndblst.c   (with props)
    branches/silverblade-audio/dll/win32/sndblst/sndblst.def   (with props)
    branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild   (with props)
Removed:
    branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c
Modified:
    branches/silverblade-audio/dll/win32/mmdrv/mmdrv.rbuild
    branches/silverblade-audio/dll/win32/win32.rbuild
    branches/silverblade-audio/lib/drivers/sound/mmebuddy/devices.c
    branches/silverblade-audio/lib/drivers/sound/mmebuddy/instances.c
    branches/silverblade-audio/lib/drivers/sound/mmebuddy/mmebuddy.rbuild
    branches/silverblade-audio/lib/drivers/sound/mmebuddy/nt4.c

Modified: branches/silverblade-audio/dll/win32/mmdrv/mmdrv.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/mmdrv/mmdrv.rbuild?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/dll/win32/mmdrv/mmdrv.rbuild [iso-8859-1] (original)
+++ branches/silverblade-audio/dll/win32/mmdrv/mmdrv.rbuild [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -11,4 +11,5 @@
 	<library>winmm</library>
     <library>advapi32</library>
     <file>entry.c</file>
+    <file>testing.c</file>
 </module>

Copied: branches/silverblade-audio/dll/win32/mmdrv/testing.c (from r34328, branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c)
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/mmdrv/testing.c?p2=branches/silverblade-audio/dll/win32/mmdrv/testing.c&p1=branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c&r1=34328&r2=34332&rev=34332&view=diff
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c [iso-8859-1] (original)
+++ branches/silverblade-audio/dll/win32/mmdrv/testing.c [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -10,6 +10,7 @@
 
     History:
         4 July 2008 - Created
+        6 July 2008 - Moved from mmebuddy to mmdrv
 */
 
 #include <windows.h>

Added: branches/silverblade-audio/dll/win32/sndblst/sndblst.c
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/sndblst/sndblst.c?rev=34332&view=auto
==============================================================================
--- branches/silverblade-audio/dll/win32/sndblst/sndblst.c (added)
+++ branches/silverblade-audio/dll/win32/sndblst/sndblst.c [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -1,0 +1,75 @@
+/*
+    ReactOS Sound System
+    Sound Blaster MME Driver
+
+    Purpose:
+        MME driver entry-point
+
+    Author:
+        Andrew Greenwood (silverblade at reactos.org)
+
+    History:
+        6 July 2008 - Created
+*/
+
+#include <windows.h>
+#include <ntddsnd.h>
+#include <mmddk.h>
+#include <mmebuddy.h>
+#include <debug.h>
+
+
+BOOLEAN FoundDevice(
+    UCHAR DeviceType,
+    PWSTR DevicePath,
+    HANDLE Handle)
+{
+    /* Nothing particularly special required... */
+    return ( AddSoundDevice(DeviceType, DevicePath) == MMSYSERR_NOERROR );
+}
+
+
+APIENTRY LONG
+DriverProc(
+    DWORD driver_id,
+    HANDLE driver_handle,
+    UINT message,
+    LONG parameter1,
+    LONG parameter2)
+{
+    switch ( message )
+    {
+        case DRV_LOAD :
+            SOUND_DEBUG(L"DRV_LOAD");
+
+            EnumerateNt4ServiceSoundDevices(L"sndblst",
+                                            WAVE_OUT_DEVICE_TYPE,
+                                            FoundDevice);
+
+            return 1L;
+
+        case DRV_FREE :
+            SOUND_DEBUG(L"DRV_FREE");
+            return 1L;
+
+        default :
+            return DefaultDriverProc(driver_id,
+                                     driver_handle,
+                                     message,
+                                     parameter1,
+                                     parameter2);
+    }
+}
+
+int APIENTRY wWinMain(
+    HINSTANCE hInstance,
+    HINSTANCE hPrevInstance,
+    LPWSTR lpCmdLine,
+    int nCmdShow)
+{
+    DriverProc(0, 0, DRV_LOAD, 0, 0);
+
+    SOUND_DEBUG_HEX(wodMessage(0, WODM_GETNUMDEVS, 0, 0, 0));
+
+    return 0;
+}

Propchange: branches/silverblade-audio/dll/win32/sndblst/sndblst.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: branches/silverblade-audio/dll/win32/sndblst/sndblst.def
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/sndblst/sndblst.def?rev=34332&view=auto
==============================================================================
--- branches/silverblade-audio/dll/win32/sndblst/sndblst.def (added)
+++ branches/silverblade-audio/dll/win32/sndblst/sndblst.def [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -1,0 +1,15 @@
+; $Id: sndblst.def 34299 2008-07-05 02:43:17Z silverblade $
+;
+; sndblst.def
+;
+; ReactOS Operating System
+;
+LIBRARY sndblst.dll
+EXPORTS
+DriverProc at 20
+;widMessage at 20
+wodMessage at 20
+;midMessage at 20
+;modMessage at 20
+;mxdMessage at 20
+;auxMessage at 20

Propchange: branches/silverblade-audio/dll/win32/sndblst/sndblst.def
------------------------------------------------------------------------------
    svn:eol-style = native

Added: branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild?rev=34332&view=auto
==============================================================================
--- branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild (added)
+++ branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -1,0 +1,15 @@
+<!-- Temporarily compiling as a CUI app for testing purposes */
+<!--module name="mmdrv" type="win32dll" baseaddress="${BASEADDRESS_MMDRV}" installbase="system32" installname="mmdrv.dll" unicode="yes"-->
+<module name="sndblst" type="win32cui" installbase="system32" installname="sndblst.exe" unicode="yes">
+	<!--importlibrary definition="mmdrv.def" /-->
+    <include base="ReactOS">include/reactos/libs/sound</include>
+	<include base="sndblst">.</include>
+	<!--define name="NDEBUG" /-->
+    <library>mmebuddy</library>
+	<library>ntdll</library>
+	<library>kernel32</library>
+	<library>user32</library>
+	<library>winmm</library>
+    <library>advapi32</library>
+    <file>sndblst.c</file>
+</module>

Propchange: branches/silverblade-audio/dll/win32/sndblst/sndblst.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/silverblade-audio/dll/win32/win32.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/dll/win32/win32.rbuild?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/dll/win32/win32.rbuild [iso-8859-1] (original)
+++ branches/silverblade-audio/dll/win32/win32.rbuild [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -292,6 +292,9 @@
 <directory name="smdll">
 	<xi:include href="smdll/smdll.rbuild" />
 </directory>
+<directory name="sndblst">
+    <xi:include href="sndblst/sndblst.rbuild" />
+</directory>
 <directory name="snmpapi">
 	<xi:include href="snmpapi/snmpapi.rbuild" />
 </directory>

Modified: branches/silverblade-audio/lib/drivers/sound/mmebuddy/devices.c
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/lib/drivers/sound/mmebuddy/devices.c?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/devices.c [iso-8859-1] (original)
+++ branches/silverblade-audio/lib/drivers/sound/mmebuddy/devices.c [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -11,6 +11,7 @@
     History:
         4 July 2008 - Created
         5 July 2008 - Implemented format support
+        6 July 2008 - Added default instance constructor/destructor
 */
 
 
@@ -39,109 +40,6 @@
     }
 
     return SoundDeviceTotals[DeviceType - MIN_SOUND_DEVICE_TYPE];
-}
-
-
-MMRESULT
-GetSoundDevice(
-    IN  UCHAR DeviceType,
-    IN  ULONG DeviceIndex,
-    OUT PSOUND_DEVICE* Device)
-{
-    ULONG Count = 0;
-    PSOUND_DEVICE CurrentDevice = NULL;
-
-    if ( ! VALID_SOUND_DEVICE_TYPE(DeviceType) )
-        return MMSYSERR_INVALPARAM;
-
-    if ( DeviceIndex >= SoundDeviceTotals[DeviceType - MIN_SOUND_DEVICE_TYPE] )
-        return MMSYSERR_INVALPARAM;
-
-    if ( ! Device )
-        return MMSYSERR_INVALPARAM;
-
-    /*
-        We know by now that a device at the index should exist
-        so just loop around until we reach that index.
-    */
-
-    CurrentDevice = SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE];
-
-    for ( Count = 0; Count <= DeviceIndex; ++ Count )
-    {
-        *Device = CurrentDevice;
-        CurrentDevice = CurrentDevice->Next;
-    }
-
-    return MMSYSERR_NOERROR;
-}
-
-
-MMRESULT
-GetSoundDevicePath(
-    IN  PSOUND_DEVICE SoundDevice,
-    OUT LPWSTR* DevicePath)
-{
-    if ( ! SoundDevice )
-        return MMSYSERR_INVALPARAM;
-
-    if ( ! DevicePath )
-        return MMSYSERR_INVALPARAM;
-
-    MessageBox(0, SoundDevice->DevicePath, L"Foo", MB_TASKMODAL | MB_OK);
-    *DevicePath = SoundDevice->DevicePath;
-
-    return MMSYSERR_NOERROR;
-}
-
-
-VOID
-RemoveAllSoundDevices()
-{
-    ULONG i;
-
-    DPRINT("Emptying all device lists\n");
-
-    for ( i = 0; i < SOUND_DEVICE_TYPES; ++ i )
-    {
-        RemoveSoundDevices(i);
-    }
-}
-
-
-BOOLEAN
-RemoveSoundDevices(
-    IN  UCHAR DeviceType)
-{
-    PSOUND_DEVICE CurrentDevice;
-    PSOUND_DEVICE NextDevice;
-
-    DPRINT("Emptying device list for device type %d\n", DeviceType);
-
-    if ( ! VALID_SOUND_DEVICE_TYPE(DeviceType) )
-    {
-        DPRINT("Invalid device type - %d\n", DeviceType);
-        return FALSE;
-    }
-
-    /* Clean out the device list */
-    CurrentDevice = SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE];
-
-    while ( CurrentDevice )
-    {
-        /* Save the next device pointer so we can reference it later */
-        NextDevice = CurrentDevice->Next;
-
-        FreeMemory(CurrentDevice);
-        /*HeapFree(GetProcessHeap(), 0, CurrentDevice);*/
-        CurrentDevice = NextDevice;
-    }
-
-    /* Reset the list content and item count */
-    SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE] = NULL;
-    SoundDeviceTotals[DeviceType - MIN_SOUND_DEVICE_TYPE] = 0;
-
-    return TRUE;
 }
 
 
@@ -312,6 +210,109 @@
 }
 
 
+BOOLEAN
+RemoveSoundDevices(
+    IN  UCHAR DeviceType)
+{
+    PSOUND_DEVICE CurrentDevice;
+    PSOUND_DEVICE NextDevice;
+
+    DPRINT("Emptying device list for device type %d\n", DeviceType);
+
+    if ( ! VALID_SOUND_DEVICE_TYPE(DeviceType) )
+    {
+        DPRINT("Invalid device type - %d\n", DeviceType);
+        return FALSE;
+    }
+
+    /* Clean out the device list */
+    CurrentDevice = SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE];
+
+    while ( CurrentDevice )
+    {
+        /* Save the next device pointer so we can reference it later */
+        NextDevice = CurrentDevice->Next;
+
+        FreeMemory(CurrentDevice);
+        /*HeapFree(GetProcessHeap(), 0, CurrentDevice);*/
+        CurrentDevice = NextDevice;
+    }
+
+    /* Reset the list content and item count */
+    SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE] = NULL;
+    SoundDeviceTotals[DeviceType - MIN_SOUND_DEVICE_TYPE] = 0;
+
+    return TRUE;
+}
+
+
+VOID
+RemoveAllSoundDevices()
+{
+    ULONG i;
+
+    DPRINT("Emptying all device lists\n");
+
+    for ( i = 0; i < SOUND_DEVICE_TYPES; ++ i )
+    {
+        RemoveSoundDevices(i);
+    }
+}
+
+
+MMRESULT
+GetSoundDevice(
+    IN  UCHAR DeviceType,
+    IN  ULONG DeviceIndex,
+    OUT PSOUND_DEVICE* Device)
+{
+    ULONG Count = 0;
+    PSOUND_DEVICE CurrentDevice = NULL;
+
+    if ( ! VALID_SOUND_DEVICE_TYPE(DeviceType) )
+        return MMSYSERR_INVALPARAM;
+
+    if ( DeviceIndex >= SoundDeviceTotals[DeviceType - MIN_SOUND_DEVICE_TYPE] )
+        return MMSYSERR_INVALPARAM;
+
+    if ( ! Device )
+        return MMSYSERR_INVALPARAM;
+
+    /*
+        We know by now that a device at the index should exist
+        so just loop around until we reach that index.
+    */
+
+    CurrentDevice = SoundDeviceLists[DeviceType - MIN_SOUND_DEVICE_TYPE];
+
+    for ( Count = 0; Count <= DeviceIndex; ++ Count )
+    {
+        *Device = CurrentDevice;
+        CurrentDevice = CurrentDevice->Next;
+    }
+
+    return MMSYSERR_NOERROR;
+}
+
+
+MMRESULT
+GetSoundDevicePath(
+    IN  PSOUND_DEVICE SoundDevice,
+    OUT LPWSTR* DevicePath)
+{
+    if ( ! SoundDevice )
+        return MMSYSERR_INVALPARAM;
+
+    if ( ! DevicePath )
+        return MMSYSERR_INVALPARAM;
+
+    MessageBox(0, SoundDevice->DevicePath, L"Foo", MB_TASKMODAL | MB_OK);
+    *DevicePath = SoundDevice->DevicePath;
+
+    return MMSYSERR_NOERROR;
+}
+
+
 MMRESULT
 GetSoundDeviceType(
     IN  PSOUND_DEVICE Device,
@@ -558,7 +559,6 @@
     PSOUND_DEVICE SoundDevice;
     MMRESULT Result;
 
-    /* TODO: Close device */
     SOUND_DEBUG(L"Default instance dtor");
 
     SOUND_ASSERT(SoundDeviceInstance);

Modified: branches/silverblade-audio/lib/drivers/sound/mmebuddy/instances.c
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/lib/drivers/sound/mmebuddy/instances.c?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/instances.c [iso-8859-1] (original)
+++ branches/silverblade-audio/lib/drivers/sound/mmebuddy/instances.c [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -10,6 +10,7 @@
 
     History:
         4 July 2008 - Created
+        6 July 2008 - Re-structured
 */
 
 #include <windows.h>

Modified: branches/silverblade-audio/lib/drivers/sound/mmebuddy/mmebuddy.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/lib/drivers/sound/mmebuddy/mmebuddy.rbuild?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/mmebuddy.rbuild [iso-8859-1] (original)
+++ branches/silverblade-audio/lib/drivers/sound/mmebuddy/mmebuddy.rbuild [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -8,7 +8,6 @@
     <file>nt4.c</file>
     <file>utility.c</file>
     <file>thread.c</file>
-    <file>testing.c</file>
     <directory name="mme">
         <file>DriverProc.c</file>
         <file>wodMessage.c</file>

Modified: branches/silverblade-audio/lib/drivers/sound/mmebuddy/nt4.c
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/lib/drivers/sound/mmebuddy/nt4.c?rev=34332&r1=34331&r2=34332&view=diff
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/nt4.c [iso-8859-1] (original)
+++ branches/silverblade-audio/lib/drivers/sound/mmebuddy/nt4.c [iso-8859-1] Sun Jul  6 09:30:40 2008
@@ -232,10 +232,14 @@
                 if ( ( ValueType == REG_DWORD ) &&
                      ( ValueDataLength == sizeof(DWORD) ) )
                 {
-                    SoundDeviceDetectedProc(
-                        DeviceType,
-                        DevicePath,
-                        INVALID_HANDLE_VALUE);
+                    if ( ( DeviceType == 0 ) ||
+                         ( DeviceType == ValueData ) )
+                    {
+                        SoundDeviceDetectedProc(
+                            ValueData,
+                            DevicePath,
+                            INVALID_HANDLE_VALUE);
+                    }
                 }
 
                 /* Reset variables for the next iteration */

Removed: branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c
URL: http://svn.reactos.org/svn/reactos/branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c?rev=34331&view=auto
==============================================================================
--- branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c [iso-8859-1] (original)
+++ branches/silverblade-audio/lib/drivers/sound/mmebuddy/testing.c (removed)
@@ -1,365 +1,0 @@
-/*
-    ReactOS Sound System
-    MME Driver Helper
-
-    Purpose:
-        Hax
-
-    Author:
-        Andrew Greenwood (silverblade at reactos.org)
-
-    History:
-        4 July 2008 - Created
-*/
-
-#include <windows.h>
-#include <mmsystem.h>
-#include <mmddk.h>
-#include <ntddsnd.h>
-#include <debug.h>
-
-#include <ntddk.h>
-#include <mmebuddy.h>
-
-
-
-/*
-    **** TESTING CODE ONLY ****
-*/
-
-PSOUND_DEVICE Device;
-PSOUND_DEVICE_INSTANCE Instance;
-WAVEHDR waveheader;
-WORD JunkBuffer[65536];
-
-
-#define IDS_WAVEOUT_PNAME   0x68
-
-
-
-BOOLEAN TestCallback(
-    UCHAR DeviceType,
-    PWSTR DevicePath,
-    HANDLE Handle)
-{
-/*    MessageBox(0, DevicePath, L"CALLBACK", MB_OK | MB_TASKMODAL);*/
-
-    AddSoundDevice(DeviceType, DevicePath);
-
-    return TRUE;
-}
-
-
-VOID
-TestDeviceDetection()
-{
-    ULONG WaveInCount, WaveOutCount;
-    ULONG MidiInCount, MidiOutCount;
-    ULONG MixerCount, AuxCount;
-    WCHAR Message[1024];
-
-    DetectNt4SoundDevices(WAVE_IN_DEVICE_TYPE,
-                          L"\\\\.\\SBWaveIn",
-                          TestCallback);
-
-    DetectNt4SoundDevices(WAVE_OUT_DEVICE_TYPE,
-                          L"\\\\.\\SBWaveOut",
-                          TestCallback);
-
-    DetectNt4SoundDevices(MIDI_IN_DEVICE_TYPE,
-                          L"\\\\.\\MidiIn",
-                          TestCallback);
-
-    DetectNt4SoundDevices(MIDI_OUT_DEVICE_TYPE,
-                          L"\\\\.\\MidiOut",
-                          TestCallback);
-
-    DetectNt4SoundDevices(MIXER_DEVICE_TYPE,
-                          L"\\\\.\\SBMixer",
-                          TestCallback);
-
-    DetectNt4SoundDevices(AUX_DEVICE_TYPE,
-                          L"\\\\.\\SBAux",
-                          TestCallback);
-
-    WaveInCount = GetSoundDeviceCount(WAVE_IN_DEVICE_TYPE);
-    WaveOutCount = GetSoundDeviceCount(WAVE_OUT_DEVICE_TYPE);
-    MidiInCount = GetSoundDeviceCount(MIDI_IN_DEVICE_TYPE);
-    MidiOutCount = GetSoundDeviceCount(MIDI_OUT_DEVICE_TYPE);
-    MixerCount = GetSoundDeviceCount(MIXER_DEVICE_TYPE);
-    AuxCount = GetSoundDeviceCount(AUX_DEVICE_TYPE);
-
-    wsprintf(Message, L"Found devices:\n- %d wave inputs\n- %d wave outputs\n- %d midi inputs\n- %d midi outputs\n- %d mixers\n- %d aux devices",
-        WaveInCount, WaveOutCount,
-        MidiInCount, MidiOutCount,
-        MixerCount, AuxCount);
-
-    MessageBox(0, Message, L"Result", MB_OK | MB_TASKMODAL);
-}
-
-APIENTRY VOID
-TestGetCaps()
-{
-    UNIVERSAL_CAPS Caps;
-    WCHAR DevInfo[1024];
-    PSOUND_DEVICE Device;
-    MMRESULT Result;
-
-    AddSoundDevice(WAVE_OUT_DEVICE_TYPE, L"\\\\.\\SBWaveOut0");
-    Result = GetSoundDevice(WAVE_OUT_DEVICE_TYPE, 0, &Device);
-
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 1", L"Fail", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    Result = GetSoundDeviceCapabilities(Device, &Caps);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 2", L"Fail", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    wsprintf(DevInfo, L"Device name: %hS\nManufacturer ID: %d\nProduct ID: %d\nDriver version: %x\nChannels: %d", Caps.WaveOut.szPname, Caps.WaveOut.wMid, Caps.WaveOut.wPid, Caps.WaveOut.vDriverVersion, Caps.WaveOut.wChannels);
-
-    MessageBox(0, DevInfo, L"Device caps", MB_OK | MB_TASKMODAL);
-}
-
-
-VOID
-TestFormatQuery()
-{
-    WCHAR msg[1024];
-    PSOUND_DEVICE Device;
-    MMRESULT Result;
-    WAVEFORMATEX fmt;
-
-    AddSoundDevice(WAVE_OUT_DEVICE_TYPE, L"\\\\.\\SBWaveOut0");
-    Result = GetSoundDevice(WAVE_OUT_DEVICE_TYPE, 0, &Device);
-
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 1", L"Fail", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    /* Request a valid format */
-    fmt.wFormatTag = WAVE_FORMAT_PCM;
-    fmt.nChannels = 1;
-    fmt.nSamplesPerSec = 22050;
-    fmt.wBitsPerSample = 16;
-    fmt.nBlockAlign = fmt.nChannels * (fmt.wBitsPerSample / 8);
-    fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign;
-    fmt.cbSize = 0;
-
-    Result = QueryWaveDeviceFormatSupport(Device, &fmt, sizeof(WAVEFORMATEX));
-
-    wsprintf(msg, L"Format support query result: %d", Result);
-    MessageBox(0, msg, L"Result", MB_OK | MB_TASKMODAL);
-
-    /* Send it some garbage */
-    fmt.nChannels = 6969;
-
-    Result = QueryWaveDeviceFormatSupport(Device, &fmt, sizeof(WAVEFORMATEX));
-
-    wsprintf(msg, L"Format support query result: %d", Result);
-    MessageBox(0, msg, L"Result", MB_OK | MB_TASKMODAL);
-}
-
-
-VOID CALLBACK
-OverlappedCallback(
-    IN  DWORD dwErrorCode,
-    IN  DWORD dwNumberOfBytesTransferred,
-    IN  LPOVERLAPPED lpOverlapped)
-{
-    MessageBox(0, L"Job done!", L"File IO Callback", MB_OK | MB_TASKMODAL);
-}
-
-
-VOID
-TestPlaybackHackingly()
-{
-    WCHAR msg[1024];
-    MMRESULT Result;
-    WAVEFORMATEX fmt;
-    ULONG i;
-
-    for ( i = 0; i < 65536; ++ i )
-        JunkBuffer[i] = rand();
-
-    AddSoundDevice(WAVE_OUT_DEVICE_TYPE, L"\\\\.\\SBWaveOut0");
-    Result = GetSoundDevice(WAVE_OUT_DEVICE_TYPE, 0, &Device);
-
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 1", L"Fail", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-/*    Result = OpenKernelSoundDevice(Device, GENERIC_READ | GENERIC_WRITE);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail open", L"Fail", MB_OK | MB_TASKMODAL);
-        return;
-    }
-    wsprintf(msg, L"Opened handle %x", Device->Handle);
-    MessageBox(0, msg, L"Result", MB_OK | MB_TASKMODAL);
-*/
-
-    Result = CreateSoundDeviceInstance(Device, &Instance);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 2", L"Fail 2", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    /* Request a valid format */
-    fmt.wFormatTag = WAVE_FORMAT_PCM;
-    fmt.nChannels = 1;
-    fmt.nSamplesPerSec = 22050;
-    fmt.wBitsPerSample = 16;
-    fmt.nBlockAlign = fmt.nChannels * (fmt.wBitsPerSample / 8);
-    fmt.nAvgBytesPerSec = fmt.nSamplesPerSec * fmt.nBlockAlign;
-    fmt.cbSize = 0;
-
-    Result = SetWaveDeviceFormat(Instance, &fmt, sizeof(WAVEFORMATEX));
-
-    wsprintf(msg, L"Format support set result: %d\nClick to play!", Result);
-    MessageBox(0, msg, L"Result", MB_OK | MB_TASKMODAL);
-
-    //SOUND_DEBUG_HEX(Instance->Device->Handle);
-
-    Result = StartWaveThread(Instance);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Failed to start thread", L"Fail 3", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    //SOUND_DEBUG_HEX(Instance->Device->Handle);
-
-    waveheader.lpData = (PVOID) JunkBuffer;
-    waveheader.dwBufferLength = 65536;
-    waveheader.dwFlags = WHDR_PREPARED;
-
-    Result = QueueWaveDeviceBuffer(Instance, &waveheader);
-//    CallSoundThread(Instance, WAVEREQUEST_QUEUE_BUFFER, &waveheader);
-/*
-    Result = WriteSoundDeviceBuffer(Instance,
-                                    JunkBuffer, 65535, OverlappedCallback);
-*/
-    wsprintf(msg, L"Play result: %d", Result);
-    MessageBox(0, msg, L"Result", MB_OK | MB_TASKMODAL);
-
-    StopWaveThread(Instance);
-    DestroySoundDeviceInstance(Instance);
-}
-
-
-APIENTRY VOID
-TestDevEnum()
-{
-    EnumerateNt4ServiceSoundDevices(
-        L"sndblst",
-        WAVE_OUT_DEVICE_TYPE,
-        TestCallback);
-}
-
-
-MMRESULT
-TestThreadCallback(
-    IN  struct _SOUND_DEVICE_INSTANCE* Instance,
-    IN  DWORD RequestId,
-    IN  PVOID Data)
-{
-    MessageBox(0, L"Thread Request Callback", L"Woot", MB_OK | MB_TASKMODAL);
-
-    return MMSYSERR_NOERROR;
-}
-
-
-WINAPI VOID
-TestThreading()
-{
-    MMRESULT Result;
-    PSOUND_DEVICE Device;
-    PSOUND_DEVICE_INSTANCE Instance;
-
-    AddSoundDevice(WAVE_OUT_DEVICE_TYPE, L"\\\\.\\SBWaveOut0");
-    Result = GetSoundDevice(WAVE_OUT_DEVICE_TYPE, 0, &Device);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 1", L"Fail 1", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    Result = CreateSoundDeviceInstance(Device, &Instance);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 2", L"Fail 2", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    Result = StartWaveThread(Instance);
-    if ( Result != MMSYSERR_NOERROR )
-    {
-        MessageBox(0, L"Fail 3", L"Fail 3", MB_OK | MB_TASKMODAL);
-        return;
-    }
-
-    MessageBox(0, L"Click to send a request", L"Bai", MB_OK | MB_TASKMODAL);
-    CallSoundThread(Instance, 69, NULL); 
-
-    MessageBox(0, L"Click to kill thread", L"Bai", MB_OK | MB_TASKMODAL);
-
-    StopWaveThread(Instance);
-}
-
-
-VOID
-wodTest()
-{
-    //MMRESULT Result;
-    DWORD NumWaveOuts;
-    WAVEOUTCAPS Caps;
-    MMRESULT Result;
-    WCHAR String[1024];
-
-    /* Report the number of wave output devices */
-    NumWaveOuts = wodMessage(0, WODM_GETNUMDEVS, 0, 0, 0);
-    SOUND_DEBUG_HEX(NumWaveOuts);
-
-    if ( NumWaveOuts < 1 )
-    {
-        SOUND_DEBUG(L"Nothing to do as no waveout devices!");
-        return;
-    }
-
-    Result = wodMessage(0, WODM_GETDEVCAPS, 0,
-                        (DWORD) &Caps, sizeof(WAVEOUTCAPS));
-
-    wsprintf(String, L"Device name: %hS\nManufacturer ID: %d\nProduct ID: %d\nDriver version: %x\nChannels: %d", Caps.szPname, Caps.wMid, Caps.wPid, Caps.vDriverVersion, Caps.wChannels);
-
-    MessageBox(0, String, L"Device caps", MB_OK | MB_TASKMODAL);
-}
-
-
-int APIENTRY wWinMain(
-    HINSTANCE hInstance,
-    HINSTANCE hPrevInstance,
-    LPWSTR lpCmdLine,
-    int nCmdShow)
-{
-//    TestDeviceDetection();
-//    wodTest();
-//    TestFormatQuery();
-    TestPlaybackHackingly();
-//    TestDevEnum();
-/*
-    TestThreading();
-*/
-    MessageBox(0, L"Le end", L"Bai", MB_OK | MB_TASKMODAL);
-    return 0;
-}



More information about the Ros-diffs mailing list