Implement WaveThreadGetData
Modified: trunk/reactos/lib/mmdrv/wave.c
_____
Modified: trunk/reactos/lib/mmdrv/wave.c
--- trunk/reactos/lib/mmdrv/wave.c 2005-11-21 21:09:30 UTC (rev
19424)
+++ trunk/reactos/lib/mmdrv/wave.c 2005-11-21 21:14:07 UTC (rev
19425)
@@ -97,8 +97,41 @@
DPRINT("UNIMPLMENENT WaveThreadSetState ");
break;
- case WaveThreadGetData:
- DPRINT("UNIMPLMENENT WaveThreadGetData ");
+ case WaveThreadGetData:
+ {
+ OVERLAPPED Overlap;
+ DWORD BytesReturned;
+
+ // FIXME
+ // Assert(hDev != NULL);
+
+ memset(&Overlap, 0, sizeof(Overlap));
+
+ Overlap.hEvent = pClient->Event;
+
+ if (!DeviceIoControl(pClient->hDev,
pClient->AuxParam.GetSetData.Function, NULL, 0,
+ pClient->AuxParam.GetSetData.pData,
pClient->AuxParam.GetSetData.DataLen,
+ &BytesReturned, &Overlap))
+ {
+ DWORD cbTransfer;
+
+ if (GetLastError() != ERROR_IO_PENDING)
+ pClient->AuxReturnCode = TranslateStatus();
+ else
+ {
+
+ if (!GetOverlappedResult(pClient->hDev,
&Overlap, &cbTransfer, TRUE))
+ pClient->AuxReturnCode =
TranslateStatus();
+ }
+ }
+ else
+ {
+ while (SetEvent(pClient->Event) &&
WaitForSingleObjectEx(pClient->Event, 0, TRUE) ==
+ WAIT_IO_COMPLETION) {}
+
+ pClient->AuxReturnCode = MMSYSERR_NOERROR;
+ }
+ }
break;
case WaveThreadSetData: