[AUDIO-BRINGUP]
[reactos.git] / lib / drivers / sound / mmebuddy / mixer / mxdMessage.c
index 86e6377..7652d9e 100644 (file)
 
 MMRESULT
 MmeGetLineInfo(
-    IN  DWORD Message,
-    IN  DWORD PrivateHandle,
-    IN  DWORD Parameter1,
-    IN  DWORD Parameter2)
+    IN UINT DeviceId,
+    IN  UINT Message,
+    IN  DWORD_PTR PrivateHandle,
+    IN  DWORD_PTR Parameter1,
+    IN  DWORD_PTR Parameter2)
 {
     MMRESULT Result;
     PSOUND_DEVICE_INSTANCE SoundDeviceInstance;
@@ -32,130 +33,52 @@ MmeGetLineInfo(
 
     //SND_TRACE(L"Getting mixer info %u\n", Message);
 
-    VALIDATE_MMSYS_PARAMETER( PrivateHandle );
-    SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle;
-
-    Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
-    if ( ! MMSUCCESS(Result) )
-        return TranslateInternalMmResult(Result);
-
-    Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
-    if ( ! MMSUCCESS(Result) )
-        return TranslateInternalMmResult(Result);
-
-    if ( ! FunctionTable->QueryMixerInfo )
-        return MMSYSERR_NOTSUPPORTED;
-
-    Result = FunctionTable->QueryMixerInfo(SoundDeviceInstance, Message, (LPVOID)Parameter1, Parameter2);
-
-    return Result;
-}
+    if ( PrivateHandle == 0 )
+    {
+        Result = GetSoundDevice(MIXER_DEVICE_TYPE, DeviceId, &SoundDevice);
 
+        if ( ! MMSUCCESS(Result) )
+            return TranslateInternalMmResult(Result);
 
-MMRESULT
-MmeCloseMixerDevice(
-    IN  DWORD PrivateHandle)
-{
-    MMRESULT Result;
-    PSOUND_DEVICE_INSTANCE SoundDeviceInstance;
-    PSOUND_DEVICE SoundDevice;
+         Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
+         if ( ! MMSUCCESS(Result) )
+            return TranslateInternalMmResult(Result);
 
-    SND_TRACE(L"Closing mixer device \n");
+         Result = FunctionTable->QueryMixerInfo(NULL, DeviceId, Message, (LPVOID)Parameter1, Parameter2);
+         return Result;
+    }
 
     VALIDATE_MMSYS_PARAMETER( PrivateHandle );
     SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle;
 
-    if ( ! IsValidSoundDeviceInstance(SoundDeviceInstance) )
-        return MMSYSERR_INVALHANDLE;
-
     Result = GetSoundDeviceFromInstance(SoundDeviceInstance, &SoundDevice);
     if ( ! MMSUCCESS(Result) )
         return TranslateInternalMmResult(Result);
 
-
-    Result = DestroySoundDeviceInstance(SoundDeviceInstance);
-
-    return Result;
-}
-
-MMRESULT
-MmeOpenMixerDevice(
-    IN  MMDEVICE_TYPE DeviceType,
-    IN  DWORD DeviceId,
-    IN  LPMIXEROPENDESC OpenParameters,
-    IN  DWORD Flags,
-    OUT DWORD* PrivateHandle)
-{
-    MMRESULT Result;
-    PMMFUNCTION_TABLE FunctionTable;
-    PSOUND_DEVICE SoundDevice;
-    PSOUND_DEVICE_INSTANCE SoundDeviceInstance;
-
-    SND_TRACE(L"Opening mixer device");
-
-    VALIDATE_MMSYS_PARAMETER( OpenParameters );
-
-    Result = GetSoundDevice(DeviceType, DeviceId, &SoundDevice);
-    if ( ! MMSUCCESS(Result) )
-        return TranslateInternalMmResult(Result);
-
-    /* Check that winmm gave us a private handle to fill */
-    VALIDATE_MMSYS_PARAMETER( PrivateHandle );
-
-    /* Create a sound device instance and open the sound device */
-    Result = CreateSoundDeviceInstance(SoundDevice, &SoundDeviceInstance);
-    if ( ! MMSUCCESS(Result) )
-        return TranslateInternalMmResult(Result);
-
     Result = GetSoundDeviceFunctionTable(SoundDevice, &FunctionTable);
     if ( ! MMSUCCESS(Result) )
         return TranslateInternalMmResult(Result);
 
-    if ( ! FunctionTable->SetWaveFormat )
+    if ( ! FunctionTable->QueryMixerInfo )
         return MMSYSERR_NOTSUPPORTED;
 
-    Result = FunctionTable->SetWaveFormat(SoundDeviceInstance, DeviceId, NULL, 0);
-    if ( ! MMSUCCESS(Result) )
-    {
-        /* TODO: Destroy sound instance */
-        return TranslateInternalMmResult(Result);
-    }
-
-    /* Store the device instance pointer in the private handle - is DWORD safe here? */
-    *PrivateHandle = (DWORD) SoundDeviceInstance;
-
-    /* Store the additional information we were given - FIXME: Need flags! */
-    SetSoundDeviceInstanceMmeData(SoundDeviceInstance,
-                                  (HDRVR)OpenParameters->hmx,
-                                  OpenParameters->dwCallback,
-                                  OpenParameters->dwInstance,
-                                  Flags);
-
-    /* Let the application know the device is open */
-    ReleaseEntrypointMutex(DeviceType);
-#if 0
-    NotifyMmeClient(SoundDeviceInstance,
-                    DeviceType == WAVE_OUT_DEVICE_TYPE ? WOM_OPEN : WIM_OPEN,
-                    0);
-#endif
-    AcquireEntrypointMutex(DeviceType);
-
-    SND_TRACE(L"Mixer device now open\n");
+    Result = FunctionTable->QueryMixerInfo(SoundDeviceInstance, DeviceId, Message, (LPVOID)Parameter1, Parameter2);
 
-    return MMSYSERR_NOERROR;
+    return Result;
 }
 
+
 /*
     Standard MME driver entry-point for messages relating to mixers.
 */
 DWORD
 APIENTRY
 mxdMessage(
-    DWORD DeviceId,
-    DWORD Message,
-    DWORD PrivateHandle,
-    DWORD Parameter1,
-    DWORD Parameter2)
+    UINT DeviceId,
+    UINT Message,
+    DWORD_PTR PrivateHandle,
+    DWORD_PTR Parameter1,
+    DWORD_PTR Parameter2)
 {
     MMRESULT Result = MMSYSERR_NOTSUPPORTED;
 
@@ -188,25 +111,26 @@ mxdMessage(
 
         case MXDM_OPEN :
         {
-            Result = MmeOpenMixerDevice(MIXER_DEVICE_TYPE,
-                                       DeviceId,
-                                       (LPMIXEROPENDESC) Parameter1,
-                                       Parameter2,
-                                       (DWORD*) PrivateHandle);
-
+            Result = MmeOpenDevice(MIXER_DEVICE_TYPE,
+                                   DeviceId,
+                                   (LPWAVEOPENDESC) Parameter1, /* unused */
+                                   Parameter2,
+                                   (DWORD*) PrivateHandle);
+            VALIDATE_MMSYS_PARAMETER(*(DWORD_PTR*)PrivateHandle);
             break;
         }
 
         case MXDM_CLOSE :
         {
-            Result = MmeCloseMixerDevice(PrivateHandle);
+            Result = MmeCloseDevice(PrivateHandle);
 
             break;
         }
 
         case MXDM_GETCONTROLDETAILS :
         {
-            Result = MmeGetLineInfo(Message,
+            Result = MmeGetLineInfo(DeviceId,
+                                    Message,
                                     PrivateHandle,
                                     Parameter1,
                                     Parameter2);
@@ -216,7 +140,8 @@ mxdMessage(
 
         case MXDM_SETCONTROLDETAILS :
         {
-            Result = MmeGetLineInfo(Message,
+            Result = MmeGetLineInfo(DeviceId,
+                                    Message,
                                     PrivateHandle,
                                     Parameter1,
                                     Parameter2);
@@ -226,7 +151,8 @@ mxdMessage(
 
         case MXDM_GETLINECONTROLS :
         {
-            Result = MmeGetLineInfo(Message,
+            Result = MmeGetLineInfo(DeviceId,
+                                    Message,
                                     PrivateHandle,
                                     Parameter1,
                                     Parameter2);
@@ -236,7 +162,8 @@ mxdMessage(
 
         case MXDM_GETLINEINFO :
         {
-            Result = MmeGetLineInfo(Message,
+            Result = MmeGetLineInfo(DeviceId,
+                                    Message,
                                     PrivateHandle,
                                     Parameter1,
                                     Parameter2);