auxMessage
authorMagnus Olsen <magnus@greatlord.com>
Sun, 20 Nov 2005 17:52:53 +0000 (17:52 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Sun, 20 Nov 2005 17:52:53 +0000 (17:52 +0000)
implement
GetDeviceCapabilities
GetDeviceCount

modMessage
implement
GetDeviceCapabilities

svn path=/trunk/; revision=19381

reactos/lib/mmdrv/auxil.c
reactos/lib/mmdrv/midi.c
reactos/lib/mmdrv/mmddk.h
reactos/lib/mmdrv/mmdef.h
reactos/lib/mmdrv/utils.c
reactos/lib/mmdrv/wave.c
reactos/lib/mmdrv/wave.h

index 4bbcc52..df98119 100644 (file)
@@ -9,13 +9,14 @@
  * UPDATE HISTORY:
  *                       Mar 16, 2004: Created skeleton implementation
  */
-
 #include "mmdrv.h"
+#include "wave.h"
+
 
 #define NDEBUG
 #include <debug.h>
 
-APIENTRY DWORD auxMessage(UINT uDevice,
+APIENTRY DWORD auxMessage(UINT dwId,
                   UINT uMessage,
                   DWORD dwUser,
                   DWORD dwParam1,
@@ -28,14 +29,21 @@ APIENTRY DWORD auxMessage(UINT uDevice,
        switch (uMessage)
        {
        case AUXDM_GETDEVCAPS:
-               return 0;
+               DPRINT("AUXDM_GETDEVCAPS");
+               return GetDeviceCapabilities(dwId, AuxDevice, (LPBYTE)dwParam1, (DWORD)dwParam2);
+
        case AUXDM_GETNUMDEVS:
-               return 0;
+               DPRINT("AUXDM_GETNUMDEVS");
+               return GetDeviceCount(AuxDevice);
+               
        case AUXDM_GETVOLUME:
                return 0;
+
        case AUXDM_SETVOLUME:
                return 0;
        }
 
     return MMSYSERR_NOERROR;
 }
+
+
index c4e22bb..4e5be6a 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include "mmdrv.h"
+#include "wave.h"
 
 #define NDEBUG
 #include <debug.h>
@@ -233,7 +234,7 @@ APIENTRY DWORD modMessage(DWORD ID, DWORD Message, DWORD User, DWORD Param1, DWO
         
         case MODM_GETDEVCAPS:
             DPRINT("MODM_GETDEVCAPS");
-            return MMSYSERR_NOTSUPPORTED;
+            return GetDeviceCapabilities(ID, MidiOutDevice, (LPBYTE)Param1, (DWORD)Param2);
             
         case MODM_OPEN :
             return OpenMidiDevice(MidiOutDevice, ID, User, Param1, Param2);
index 80050cf..ce8c9ad 100644 (file)
@@ -29,6 +29,8 @@
 #include <mmsystem.h>
 #include <winbase.h>
 
+
+
 #define MAX_MIDIINDRV  (16)
 /* For now I'm making 16 the maximum number of midi devices one can
  * have. This should be more than enough for everybody. But as a purist,
index 29f2569..acc842e 100644 (file)
@@ -52,6 +52,7 @@
 #define IOCTL_SOUND_BASE    FILE_DEVICE_SOUND
 #define IOCTL_WAVE_BASE     0x0000
 #define IOCTL_MIDI_BASE     0x0080
+#define IOCTL_AUX_BASE      0x0100
 
 // Wave device driver IOCTLs
 
 #define IOCTL_MIDI_CACHE_PATCHES      CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS)
 #define IOCTL_MIDI_CACHE_DRUM_PATCHES CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
 
+// AUX device driver IOCTLs
+#define IOCTL_AUX_GET_CAPABILITIES      CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_AUX_SET_VOLUME            CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_AUX_GET_VOLUME            CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_SOUND_GET_CHANGED_VOLUME  CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+
 #endif
index e97fc00..3cdabac 100644 (file)
@@ -82,8 +82,12 @@ MMRESULT OpenDevice(UINT DeviceType, DWORD ID, PHANDLE pDeviceHandle,
         case MidiInDevice :
             wsprintf(DeviceName, L"\\\\.%ls%d", MIDI_IN_DEVICE_NAME_U + strlen("\\Device"), ID);
             break;
+               case AuxDevice :
+                        wsprintf(DeviceName, L"\\\\.%ls%d", AUX_DEVICE_NAME_U + strlen("\\Device"), ID);
+                        break;
         default : // Aux
-            wsprintf(DeviceName, L"\\\\.%ls%d", AUX_DEVICE_NAME_U + strlen("\\Device"), ID);
+            DPRINT("No Auido Device Found");
+            return MMSYSERR_BADDEVICEID; /* Maybe we should change error code */
     };
 
     DPRINT("Attempting to open %S\n", DeviceName);
index ed690a2..e7c3c16 100644 (file)
  * ============================
  */
 
-static MMRESULT GetDeviceCapabilities(DWORD ID, UINT DeviceType,
+MMRESULT GetDeviceCapabilities(DWORD ID, UINT DeviceType,
                                       LPBYTE pCaps, DWORD Size)
 {
-    // FIXME: Implement :)
-//    return sndGetData(DeviceType, id, dwSize, lpCaps,
-//                      IOCTL_WAVE_GET_CAPABILITIES);
-
     HANDLE DeviceHandle = NULL;
     MMRESULT Result = MMSYSERR_NOERROR;
     DWORD BytesReturned = 0;
@@ -46,11 +42,31 @@ static MMRESULT GetDeviceCapabilities(DWORD ID, UINT DeviceType,
     // Setting the overlapped parameter (last) to null means we
     // wait until the operation completes.
     //
+    
+
+       if (DeviceType == WaveOutDevice)
+       {
+               Result = DeviceIoControl(DeviceHandle, IOCTL_WAVE_GET_CAPABILITIES,
+                            NULL, 0, (LPVOID)pCaps, Size,
+                  &BytesReturned, NULL) ? MMSYSERR_NOERROR : TranslateStatus();
+       }
+
+       else if (DeviceType == MidiOutDevice)
+       {
+           Result = DeviceIoControl(DeviceHandle, IOCTL_MIDI_GET_CAPABILITIES,
+                            NULL, 0, (LPVOID)pCaps, Size,
+                  &BytesReturned, NULL) ? MMSYSERR_NOERROR : TranslateStatus();
+       }
 
-    Result = DeviceIoControl(DeviceHandle, IOCTL_WAVE_GET_CAPABILITIES,
+    else if (DeviceType == AuxDevice)
+       {
+           Result = DeviceIoControl(DeviceHandle, IOCTL_AUX_GET_CAPABILITIES,
                             NULL, 0, (LPVOID)pCaps, Size,
                   &BytesReturned, NULL) ? MMSYSERR_NOERROR : TranslateStatus();
+       }
 
+       
+               
 
     // Close the handle and return the result code
 //    CloseHandle(DeviceHandle);
index 97f9d9a..56aa5b6 100644 (file)
@@ -78,3 +78,6 @@ typedef struct tag_WAVEALLOC {
     HANDLE              ThreadHandle;   // Handle for thread termination ONLY
     MMRESULT            AuxReturnCode;  // Return code from Aux task
 }WAVEALLOC, *PWAVEALLOC;
+
+MMRESULT GetDeviceCapabilities(DWORD ID, UINT DeviceType,
+                                      LPBYTE pCaps, DWORD Size);