1 /*
2  * PROJECT:     ReactOS Sound System "MME Buddy" Library
3  * LICENSE:     GPL - See COPYING in the top level directory
4  * FILE:        lib/sound/mmebuddy/midi/modMessage.c
5  *
6  * PURPOSE:     Provides the modMessage exported function, as required by
7  *              the MME API, for MIDI output device support.
8  *
9  * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
10 */
11 
12 #include "precomp.h"
13 
14 /*
15     Standard MME driver entry-point for messages relating to MIDI output.
16 */
17 DWORD
18 APIENTRY
19 modMessage(
20     UINT DeviceId,
21     UINT Message,
22     DWORD_PTR PrivateHandle,
23     DWORD_PTR Parameter1,
24     DWORD_PTR Parameter2)
25 {
26     MMRESULT Result = MMSYSERR_NOTSUPPORTED;
27 
28     AcquireEntrypointMutex(MIDI_OUT_DEVICE_TYPE);
29 
30     SND_TRACE(L"modMessage - Message type %d\n", Message);
31 
32     switch ( Message )
33     {
34         case MODM_GETNUMDEVS :
35         {
36             Result = GetSoundDeviceCount(MIDI_OUT_DEVICE_TYPE);
37             break;
38         }
39 
40         case MODM_GETDEVCAPS :
41         {
42             Result = MmeGetSoundDeviceCapabilities(MIDI_OUT_DEVICE_TYPE,
43                                                    DeviceId,
44                                                    (PVOID) Parameter1,
45                                                    Parameter2);
46             break;
47         }
48 
49         case DRV_QUERYDEVICEINTERFACESIZE :
50         {
51             Result = MmeGetDeviceInterfaceString(MIDI_OUT_DEVICE_TYPE, DeviceId, NULL, 0, (DWORD*)Parameter1); //FIXME DWORD_PTR
52             break;
53         }
54 
55         case DRV_QUERYDEVICEINTERFACE :
56         {
57             Result = MmeGetDeviceInterfaceString(MIDI_OUT_DEVICE_TYPE, DeviceId, (LPWSTR)Parameter1, Parameter2, NULL); //FIXME DWORD_PTR
58             break;
59         }
60 
61         case MODM_OPEN :
62         {
63             Result = MmeOpenDevice(MIDI_OUT_DEVICE_TYPE,
64                                    DeviceId,
65                                    (LPWAVEOPENDESC) Parameter1, /* unused */
66                                    Parameter2,
67                                    (DWORD_PTR*)PrivateHandle);
68             break;
69         }
70 
71         case MODM_CLOSE :
72         {
73             Result = MmeCloseDevice(PrivateHandle);
74 
75             break;
76         }
77 
78         case MODM_GETVOLUME:
79         {
80             Result = MmeGetVolume(MIDI_OUT_DEVICE_TYPE,
81                                   DeviceId,
82                                   PrivateHandle,
83                                   Parameter1);
84             break;
85         }
86 
87         case MODM_SETVOLUME:
88         {
89             Result = MmeSetVolume(MIDI_OUT_DEVICE_TYPE,
90                                   DeviceId,
91                                   PrivateHandle,
92                                   Parameter1);
93             break;
94         }
95     }
96 
97     SND_TRACE(L"modMessage returning MMRESULT %d\n", Result);
98 
99     ReleaseEntrypointMutex(MIDI_OUT_DEVICE_TYPE);
100 
101     return Result;
102 }
103