From 8b4bd72ee1324818ee8b7fb986bb8b8f9e50e1aa Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Mon, 21 Nov 2005 21:14:07 +0000 Subject: [PATCH] Implement WaveThreadGetData svn path=/trunk/; revision=19425 --- reactos/lib/mmdrv/wave.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/reactos/lib/mmdrv/wave.c b/reactos/lib/mmdrv/wave.c index 1b3c09a1ed6..ff47faf7e19 100644 --- a/reactos/lib/mmdrv/wave.c +++ b/reactos/lib/mmdrv/wave.c @@ -97,8 +97,41 @@ static DWORD waveThread(LPVOID lpParameter) 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: