reactos/lib/drivers/sound/mmebuddy/wave/wodMessage.c

140 lines
3.5 KiB
C
Raw Normal View History

/*
* PROJECT: ReactOS Sound System "MME Buddy" Library
* LICENSE: GPL - See COPYING in the top level directory
* FILE: lib/drivers/sound/mmebuddy/wave/wodMessage.c
*
* PURPOSE: Provides the wodMessage exported function, as required by
* the MME API, for wave output device support.
*
* PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
*/
#include <windows.h>
#include <mmsystem.h>
#include <mmddk.h>
#include <ntddsnd.h>
#include <sndtypes.h>
#include <mmebuddy.h>
#if 0
MMRESULT HelloWorld(PSOUND_DEVICE_INSTANCE Instance, PVOID String)
{
PWSTR WString = (PWSTR) String;
SND_TRACE(WString);
return MMSYSERR_NOTSUPPORTED;
}
#endif
/*
Standard MME driver entry-point for messages relating to wave audio
output.
*/
DWORD
APIENTRY
wodMessage(
UINT DeviceId,
UINT Message,
DWORD_PTR PrivateHandle,
DWORD_PTR Parameter1,
DWORD_PTR Parameter2)
{
MMRESULT Result = MMSYSERR_NOTSUPPORTED;
AcquireEntrypointMutex(WAVE_OUT_DEVICE_TYPE);
SND_TRACE(L"wodMessage - Message type %d\n", Message);
switch ( Message )
{
case WODM_GETNUMDEVS :
{
Result = GetSoundDeviceCount(WAVE_OUT_DEVICE_TYPE);
break;
}
case WODM_GETDEVCAPS :
{
Result = MmeGetSoundDeviceCapabilities(WAVE_OUT_DEVICE_TYPE,
DeviceId,
(PVOID) Parameter1,
Parameter2);
break;
}
case WODM_OPEN :
{
Result = MmeOpenWaveDevice(WAVE_OUT_DEVICE_TYPE,
DeviceId,
(LPWAVEOPENDESC) Parameter1,
Parameter2,
(DWORD_PTR*)PrivateHandle);
break;
}
case WODM_CLOSE :
{
Result = MmeCloseDevice(PrivateHandle);
break;
}
case WODM_PREPARE :
{
/* TODO: Do we need to pass 2nd parameter? */
Result = MmePrepareWaveHeader(PrivateHandle, Parameter1);
break;
}
case WODM_UNPREPARE :
{
Result = MmeUnprepareWaveHeader(PrivateHandle, Parameter1);
break;
}
case WODM_WRITE :
{
Result = MmeWriteWaveHeader(PrivateHandle, Parameter1);
break;
}
case WODM_RESET :
{
/* Stop playback, reset position to zero */
Result = MmeResetWavePlayback(PrivateHandle);
break;
}
case WODM_RESTART :
{
/* Continue playback when paused */
break;
}
case WODM_GETPOS :
{
Result = MmeGetPosition(WAVE_OUT_DEVICE_TYPE, DeviceId, PrivateHandle, (MMTIME*)Parameter1, Parameter2);
break;
}
case DRV_QUERYDEVICEINTERFACESIZE :
{
Result = MmeGetDeviceInterfaceString(WAVE_OUT_DEVICE_TYPE, DeviceId, NULL, 0, (DWORD*)Parameter1); //FIXME DWORD_PTR
break;
}
case DRV_QUERYDEVICEINTERFACE :
{
Result = MmeGetDeviceInterfaceString(WAVE_OUT_DEVICE_TYPE, DeviceId, (LPWSTR)Parameter1, Parameter2, NULL); //FIXME DWORD_PTR
break;
}
}
SND_TRACE(L"wodMessage returning MMRESULT %d\n", Result);
ReleaseEntrypointMutex(WAVE_OUT_DEVICE_TYPE);
return Result;
}