[ros-diffs] [greatlrd] 19398: remove the stub of ThreadCallWaveDevice and implement it there it need it.

greatlrd at svn.reactos.com greatlrd at svn.reactos.com
Mon Nov 21 01:16:51 CET 2005


remove the stub of  ThreadCallWaveDevice and implement it there it need
it.
Modified: trunk/reactos/lib/mmdrv/wave.c
  _____  

Modified: trunk/reactos/lib/mmdrv/wave.c
--- trunk/reactos/lib/mmdrv/wave.c	2005-11-20 23:25:16 UTC (rev
19397)
+++ trunk/reactos/lib/mmdrv/wave.c	2005-11-21 00:16:30 UTC (rev
19398)
@@ -85,15 +85,11 @@

 	return MMSYSERR_NOERROR;
 }
 
-//FIXME: Params are MS-specific
-static MMRESULT ThreadCallWaveDevice(WAVETHREADFUNCTION Function,
PWAVEALLOC pClient)
-{
-	return MMSYSERR_NOERROR;
-}
 
 //FIXME: Params are MS-specific
 static void CallbackWaveDevice(PWAVEALLOC pWave, DWORD msg, DWORD dw1)
 {
+
 }
 
 //FIXME: Params are MS-specific
@@ -162,6 +158,8 @@
  */
 APIENTRY DWORD wodMessage(DWORD dwId, DWORD dwMessage, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
 {
+    PWAVEALLOC pTask = (PWAVEALLOC)dwUser;
+
     switch (dwMessage) {
         case WODM_GETNUMDEVS:
             DPRINT("WODM_GETNUMDEVS");
@@ -178,13 +176,16 @@
 
         case WODM_CLOSE:
 			{
-				MMRESULT Result;
-				PWAVEALLOC pTask = (PWAVEALLOC)dwUser;
+				MMRESULT Result;
DPRINT("WODM_CLOSE");
 
 				// 1. Check if the task is ready to
complete
-				Result =
ThreadCallWaveDevice(WaveThreadClose, pTask);
-				if (Result != MMSYSERR_NOERROR) {
+                pTask->AuxFunction = WaveThreadClose;
+                SetEvent(pTask->AuxEvent1);
+                WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	            			
+				if ( pTask->AuxReturnCode !=
MMSYSERR_NOERROR) 
+                {
 				    return Result;
 				}
 				else
@@ -233,36 +234,57 @@
 				return WriteWaveDevice(pWaveHdr,
(PWAVEALLOC)dwUser);
 			}
 
+        case WODM_PAUSE:
+            
 
-        case WODM_PAUSE:
             DPRINT("WODM_PAUSE");
-            ((PWAVEALLOC)dwUser)->AuxParam.State = WAVE_DD_STOP;
-            return ThreadCallWaveDevice(WaveThreadSetState,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.State = WAVE_DD_STOP;
+           
+            pTask->AuxFunction = WaveThreadSetState;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
 
         case WODM_RESTART:
             DPRINT("WODM_RESTART");
-            ((PWAVEALLOC)dwUser)->AuxParam.State = WAVE_DD_PLAY;
-            return ThreadCallWaveDevice(WaveThreadSetState,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.State = WAVE_DD_PLAY;
 
+            pTask->AuxFunction = WaveThreadSetState;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;            
+
         case WODM_RESET:
             DPRINT("WODM_RESET");
-            ((PWAVEALLOC)dwUser)->AuxParam.State = WAVE_DD_RESET;
-            return ThreadCallWaveDevice(WaveThreadSetState,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.State = WAVE_DD_RESET;
 
+            pTask->AuxFunction = WaveThreadSetState;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
+           
         case WODM_BREAKLOOP:
             DPRINT("WODM_BREAKLOOP");
-            return ThreadCallWaveDevice(WaveThreadBreakLoop,
(PWAVEALLOC)dwUser);
 
+            pTask->AuxFunction = WaveThreadBreakLoop;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
+
         case WODM_GETPOS:
             DPRINT("WODM_GETPOS");
-            return GetPositionWaveDevice(((PWAVEALLOC)dwUser),
(LPMMTIME)dwParam1, dwParam2);
+            return GetPositionWaveDevice(pTask, (LPMMTIME)dwParam1,
dwParam2);
 
         case WODM_SETPITCH:
             DPRINT("WODM_SETPITCH");
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.pData =
(PBYTE)&dwParam1;
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.DataLen =
sizeof(DWORD);
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.Function =
IOCTL_WAVE_SET_PITCH;
-            return ThreadCallWaveDevice(WaveThreadSetData,
((PWAVEALLOC)dwUser));
+            pTask->AuxParam.GetSetData.pData = (PBYTE)&dwParam1;
+            pTask->AuxParam.GetSetData.DataLen = sizeof(DWORD);
+            pTask->AuxParam.GetSetData.Function = IOCTL_WAVE_SET_PITCH;
+            
+            pTask->AuxFunction = WaveThreadSetData;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
 
         case WODM_SETVOLUME:
             DPRINT("WODM_SETVOLUME");
@@ -277,17 +299,26 @@
 
         case WODM_SETPLAYBACKRATE:
             DPRINT("WODM_SETPLAYBACKRATE");
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.pData =
(PBYTE)&dwParam1;
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.DataLen =
sizeof(DWORD);
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.Function =
IOCTL_WAVE_SET_PLAYBACK_RATE;
-            return ThreadCallWaveDevice(WaveThreadSetData,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.GetSetData.pData = (PBYTE)&dwParam1;
+            pTask->AuxParam.GetSetData.DataLen = sizeof(DWORD);
+            pTask->AuxParam.GetSetData.Function =
IOCTL_WAVE_SET_PLAYBACK_RATE;
+            
+            pTask->AuxFunction = WaveThreadSetData;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
 
+
         case WODM_GETPITCH:
             DPRINT("WODM_GETPITCH");
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.pData =
(PBYTE)dwParam1;
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.DataLen =
sizeof(DWORD);
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.Function =
IOCTL_WAVE_GET_PITCH;
-            return ThreadCallWaveDevice(WaveThreadGetData,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.GetSetData.pData = (PBYTE)dwParam1;
+            pTask->AuxParam.GetSetData.DataLen = sizeof(DWORD);
+            pTask->AuxParam.GetSetData.Function = IOCTL_WAVE_GET_PITCH;
+            
+            pTask->AuxFunction = WaveThreadGetData;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
 
         case WODM_GETVOLUME:
             DPRINT("WODM_GETVOLUME");
@@ -306,10 +337,14 @@
 
         case WODM_GETPLAYBACKRATE:
             DPRINT("WODM_GETPLAYBACKRATE");
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.pData =
(PBYTE)dwParam1;
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.DataLen =
sizeof(DWORD);
-            ((PWAVEALLOC)dwUser)->AuxParam.GetSetData.Function =
IOCTL_WAVE_GET_PLAYBACK_RATE;
-            return ThreadCallWaveDevice(WaveThreadGetData,
(PWAVEALLOC)dwUser);
+            pTask->AuxParam.GetSetData.pData = (PBYTE)dwParam1;
+            pTask->AuxParam.GetSetData.DataLen = sizeof(DWORD);
+            pTask->AuxParam.GetSetData.Function =
IOCTL_WAVE_GET_PLAYBACK_RATE;
+                         
+            pTask->AuxFunction = WaveThreadGetData;
+            SetEvent(pTask->AuxEvent1);
+            WaitForSingleObject(pTask->AuxEvent2, INFINITE);
+	        return pTask->AuxReturnCode;
 
         default:
             return MMSYSERR_NOTSUPPORTED;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051121/1ca97657/attachment.html


More information about the Ros-diffs mailing list