Emmanuel Maillard : winecoreaudio: Implement MIDIIn_Open and MIDIIn_Close.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Apr 27 06:43:41 CDT 2007


Module: wine
Branch: master
Commit: 3930b756eba7f37fe0f834d4f1dc3017f996c86b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3930b756eba7f37fe0f834d4f1dc3017f996c86b

Author: Emmanuel Maillard <mahanuu at free.fr>
Date:   Thu Apr 26 21:38:40 2007 +0200

winecoreaudio: Implement MIDIIn_Open and MIDIIn_Close.

---

 dlls/winecoreaudio.drv/midi.c |   61 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/dlls/winecoreaudio.drv/midi.c b/dlls/winecoreaudio.drv/midi.c
index dd6e954..17b4367 100644
--- a/dlls/winecoreaudio.drv/midi.c
+++ b/dlls/winecoreaudio.drv/midi.c
@@ -594,6 +594,65 @@ static DWORD MIDIOut_Reset(WORD wDevID)
     return MMSYSERR_NOERROR;
 }
 
+static DWORD MIDIIn_Open(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags)
+{
+    TRACE("wDevID=%d lpDesc=%p dwFlags=%08x\n", wDevID, lpDesc, dwFlags);
+
+    if (lpDesc == NULL) {
+	WARN("Invalid Parameter\n");
+	return MMSYSERR_INVALPARAM;
+    }
+    if (wDevID >= MIDIIn_NumDevs) {
+        WARN("bad device ID : %d\n", wDevID);
+	return MMSYSERR_BADDEVICEID;
+    }
+    if (sources[wDevID].midiDesc.hMidi != 0) {
+	WARN("device already open !\n");
+	return MMSYSERR_ALLOCATED;
+    }
+    if ((dwFlags & MIDI_IO_STATUS) != 0) {
+	WARN("No support for MIDI_IO_STATUS in dwFlags yet, ignoring it\n");
+	dwFlags &= ~MIDI_IO_STATUS;
+    }
+    if ((dwFlags & ~CALLBACK_TYPEMASK) != 0) {
+	FIXME("Bad dwFlags\n");
+	return MMSYSERR_INVALFLAG;
+    }
+
+    sources[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK);
+    sources[wDevID].lpQueueHdr = NULL;
+    sources[wDevID].midiDesc = *lpDesc;
+    sources[wDevID].startTime = 0;
+    sources[wDevID].state = 0;
+
+    return MIDI_NotifyClient(wDevID, MIM_OPEN, 0L, 0L);
+}
+
+static DWORD MIDIIn_Close(WORD wDevID)
+{
+    DWORD ret = MMSYSERR_NOERROR;
+
+    TRACE("wDevID=%d\n", wDevID);
+
+    if (wDevID >= MIDIIn_NumDevs) {
+        WARN("bad device ID : %d\n", wDevID);
+	return MMSYSERR_BADDEVICEID;
+    }
+
+    if (sources[wDevID].midiDesc.hMidi == 0) {
+	WARN("device not opened !\n");
+	return MMSYSERR_ERROR;
+    }
+    if (sources[wDevID].lpQueueHdr != 0) {
+	return MIDIERR_STILLPLAYING;
+    }
+
+    ret = MIDI_NotifyClient(wDevID, MIM_CLOSE, 0L, 0L);
+    sources[wDevID].midiDesc.hMidi = 0;
+    return ret;
+}
+
+
 /*
  * MIDI In Mach message handling
  */
@@ -717,7 +776,9 @@ DWORD WINAPI CoreAudio_midMessage(UINT wDevID, UINT wMsg, DWORD dwUser, DWORD dw
         case DRVM_DISABLE:
             return 0;
         case MIDM_OPEN:
+            return MIDIIn_Open(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
         case MIDM_CLOSE:
+            return MIDIIn_Close(wDevID);
         case MIDM_ADDBUFFER:
         case MIDM_PREPARE:
         case MIDM_UNPREPARE:




More information about the wine-cvs mailing list