1 /*
2 * PROJECT: ReactOS Sound System "MME Buddy" Library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: lib/drivers/sound/mmebuddy/wave/wodMessage.c
5 *
6 * PURPOSE: Provides the wodMessage exported function, as required by
7 * the MME API, for wave output device support.
8 *
9 * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
10 */
11
12 #include "precomp.h"
13
14 #if 0
15 MMRESULT HelloWorld(PSOUND_DEVICE_INSTANCE Instance, PVOID String)
16 {
17 PWSTR WString = (PWSTR) String;
18 SND_TRACE(WString);
19 return MMSYSERR_NOTSUPPORTED;
20 }
21 #endif
22
23 /*
24 Standard MME driver entry-point for messages relating to wave audio
25 output.
26 */
27 DWORD
28 APIENTRY
wodMessage(UINT DeviceId,UINT Message,DWORD_PTR PrivateHandle,DWORD_PTR Parameter1,DWORD_PTR Parameter2)29 wodMessage(
30 UINT DeviceId,
31 UINT Message,
32 DWORD_PTR PrivateHandle,
33 DWORD_PTR Parameter1,
34 DWORD_PTR Parameter2)
35 {
36 MMRESULT Result = MMSYSERR_NOTSUPPORTED;
37
38 AcquireEntrypointMutex(WAVE_OUT_DEVICE_TYPE);
39
40 SND_TRACE(L"wodMessage - Message type %d\n", Message);
41
42 switch ( Message )
43 {
44 case WODM_GETNUMDEVS :
45 {
46 Result = GetSoundDeviceCount(WAVE_OUT_DEVICE_TYPE);
47 break;
48 }
49
50 case WODM_GETDEVCAPS :
51 {
52 Result = MmeGetSoundDeviceCapabilities(WAVE_OUT_DEVICE_TYPE,
53 DeviceId,
54 (PVOID) Parameter1,
55 Parameter2);
56 break;
57 }
58
59 case WODM_OPEN :
60 {
61 Result = MmeOpenDevice(WAVE_OUT_DEVICE_TYPE,
62 DeviceId,
63 (LPWAVEOPENDESC) Parameter1,
64 Parameter2,
65 (DWORD_PTR*)PrivateHandle);
66 break;
67 }
68
69 case WODM_CLOSE :
70 {
71 Result = MmeCloseDevice(PrivateHandle);
72
73 break;
74 }
75
76 case WODM_PREPARE :
77 {
78 /* TODO: Do we need to pass 2nd parameter? */
79 Result = MmePrepareWaveHeader(PrivateHandle, Parameter1);
80 break;
81 }
82
83 case WODM_UNPREPARE :
84 {
85 Result = MmeUnprepareWaveHeader(PrivateHandle, Parameter1);
86 break;
87 }
88
89 case WODM_WRITE :
90 {
91 Result = MmeWriteWaveHeader(PrivateHandle, Parameter1);
92 break;
93 }
94
95 case WODM_RESET :
96 {
97 /* Stop playback, reset position to zero */
98 Result = MmeResetWavePlayback(PrivateHandle);
99 break;
100 }
101
102 case WODM_RESTART :
103 {
104 /* Continue playback when paused */
105 Result = MmeSetState(PrivateHandle, TRUE);
106 break;
107 }
108 case WODM_PAUSE :
109 {
110 /* pause playback */
111 Result = MmeSetState(PrivateHandle, FALSE);
112 break;
113 }
114
115 case WODM_GETPOS :
116 {
117 Result = MmeGetPosition(WAVE_OUT_DEVICE_TYPE, DeviceId, PrivateHandle, (MMTIME*)Parameter1, Parameter2);
118 break;
119 }
120
121 case WODM_GETVOLUME:
122 {
123 Result = MmeGetVolume(WAVE_OUT_DEVICE_TYPE,
124 DeviceId,
125 PrivateHandle,
126 Parameter1);
127 break;
128 }
129
130 case WODM_SETVOLUME:
131 {
132 Result = MmeSetVolume(WAVE_OUT_DEVICE_TYPE,
133 DeviceId,
134 PrivateHandle,
135 Parameter1);
136 break;
137 }
138
139 case DRV_QUERYDEVICEINTERFACESIZE :
140 {
141 Result = MmeGetDeviceInterfaceString(WAVE_OUT_DEVICE_TYPE, DeviceId, NULL, 0, (DWORD*)Parameter1); //FIXME DWORD_PTR
142 break;
143 }
144
145 case DRV_QUERYDEVICEINTERFACE :
146 {
147 Result = MmeGetDeviceInterfaceString(WAVE_OUT_DEVICE_TYPE, DeviceId, (LPWSTR)Parameter1, Parameter2, NULL); //FIXME DWORD_PTR
148 break;
149 }
150 }
151
152 SND_TRACE(L"wodMessage returning MMRESULT %d\n", Result);
153
154 ReleaseEntrypointMutex(WAVE_OUT_DEVICE_TYPE);
155
156 return Result;
157 }
158