Branching for 0.3.15 release after two days of no response from a certain sphere...
[reactos.git] / dll / win32 / mmdrv / auxil.c
1 /*
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS Multimedia
5 * FILE: lib/mmdrv/auxil.c
6 * PURPOSE: Multimedia User Mode Driver
7 * PROGRAMMER: Andrew Greenwood
8 * Aleksey Bragin
9 * UPDATE HISTORY:
10 * Mar 16, 2004: Created skeleton implementation
11 */
12 #include "mmdrv.h"
13 #include "wave.h"
14
15
16 #define NDEBUG
17 #include <debug.h>
18
19 APIENTRY DWORD auxMessage(UINT dwId,
20 UINT uMessage,
21 DWORD dwUser,
22 DWORD dwParam1,
23 DWORD dwParam2)
24
25 {
26 MMRESULT Result;
27 AUX_DD_VOLUME Volume;
28
29 DPRINT("auxMessage\n");
30
31
32 // the following cases are documented by DDK
33 switch (uMessage)
34 {
35 case AUXDM_GETDEVCAPS:
36 DPRINT("AUXDM_GETDEVCAPS");
37 return GetDeviceCapabilities(dwId, AuxDevice, (LPBYTE)dwParam1, (DWORD)dwParam2);
38
39 case AUXDM_GETNUMDEVS:
40 DPRINT("AUXDM_GETNUMDEVS");
41 return GetDeviceCount(AuxDevice);
42
43 case AUXDM_GETVOLUME:
44 DPRINT("AUXDM_GETVOLUME");
45 Result = AuxGetAudio(dwId, (PBYTE) &Volume, sizeof(Volume));
46
47 if (Result == MMSYSERR_NOERROR)
48 {
49 *(LPDWORD)dwParam1 = (DWORD)MAKELONG(HIWORD(Volume.Left), HIWORD(Volume.Right));
50 }
51 return Result;
52
53
54 case AUXDM_SETVOLUME:
55 DPRINT("AUXDM_SETVOLUME");
56
57 Volume.Right = HIWORD(dwParam1) << 16;
58 Volume.Left = LOWORD(dwParam1) << 16;
59
60 return AuxSetAudio(dwId, (PBYTE)&Volume, sizeof(Volume));
61
62 }
63
64 return MMSYSERR_NOERROR;
65 }
66
67
68 DWORD AuxGetAudio(DWORD dwID, PBYTE pVolume, DWORD sizeVolume)
69 {
70 HANDLE DeviceHandle;
71 MMRESULT Result;
72 DWORD BytesReturned;
73
74 Result = OpenDevice(AuxDevice, dwID, &DeviceHandle, GENERIC_READ);
75 if (Result != MMSYSERR_NOERROR)
76 return Result;
77
78
79 Result = DeviceIoControl(DeviceHandle, IOCTL_AUX_GET_VOLUME, NULL, 0, (LPVOID)pVolume, sizeVolume,
80 &BytesReturned, NULL) ? MMSYSERR_NOERROR : TranslateStatus();
81
82
83 CloseHandle(DeviceHandle);
84
85 return Result;
86 }
87
88 DWORD AuxSetAudio(DWORD dwID, PBYTE pVolume, DWORD sizeVolume)
89 {
90 HANDLE DeviceHandle;
91 MMRESULT Result;
92 DWORD BytesReturned;
93
94 Result = OpenDevice(AuxDevice, dwID, &DeviceHandle, GENERIC_READ);
95 if (Result != MMSYSERR_NOERROR)
96 return Result;
97
98 Result = DeviceIoControl(DeviceHandle, IOCTL_AUX_SET_VOLUME, (LPVOID)pVolume, sizeVolume, NULL, 0,
99 &BytesReturned, NULL) ? MMSYSERR_NOERROR : TranslateStatus();
100
101
102 CloseHandle(DeviceHandle);
103
104 return Result;
105 }
106