MIDI In support set 2 (5/7)

Emmanuel Maillard mahanuu at free.fr
Thu Apr 26 16:22:05 CDT 2007


Changelog :
- implement MIDIIn_Reset

-------------- next part --------------
From 99c130bad0c19acb094a2c47f7e302a039cf78be Mon Sep 17 00:00:00 2001
From: Emmanuel Maillard <mahanuu at free.fr>
Date: Thu, 26 Apr 2007 22:56:10 +0200
Subject: [PATCH] - implement MIDIIn_Reset

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

diff --git a/dlls/winecoreaudio.drv/midi.c b/dlls/winecoreaudio.drv/midi.c
index 37d5903..6efe057 100644
--- a/dlls/winecoreaudio.drv/midi.c
+++ b/dlls/winecoreaudio.drv/midi.c
@@ -699,6 +699,31 @@ static DWORD MIDIIn_Stop(WORD wDevID)
     return MMSYSERR_NOERROR;
 }
 
+static DWORD MIDIIn_Reset(WORD wDevID)
+{
+    DWORD dwTime = GetTickCount();
+    
+    TRACE("%d\n", wDevID);
+    if (wDevID >= MIDIIn_NumDevs) {
+        WARN("bad device ID : %d\n", wDevID);
+	return MMSYSERR_BADDEVICEID;
+    }
+    
+    EnterCriticalSection(&midiInLock);
+    while (sources[wDevID].lpQueueHdr) {
+	sources[wDevID].lpQueueHdr->dwFlags &= ~MHDR_INQUEUE;
+	sources[wDevID].lpQueueHdr->dwFlags |= MHDR_DONE;
+	/* FIXME: when called from 16 bit, lpQueueHdr needs to be a segmented ptr */
+	if (MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)sources[wDevID].lpQueueHdr, dwTime) != MMSYSERR_NOERROR) {
+	    WARN("Couldn't notify client\n");
+	}
+	sources[wDevID].lpQueueHdr = (LPMIDIHDR)sources[wDevID].lpQueueHdr->lpNext;
+    }
+    LeaveCriticalSection(&midiInLock);
+
+    return MMSYSERR_NOERROR;
+}
+
 /*
  * MIDI In Mach message handling
  */
@@ -839,8 +864,8 @@ DWORD WINAPI CoreAudio_midMessage(UINT w
             return MIDIIn_Start(wDevID);
         case MIDM_STOP:
             return MIDIIn_Stop(wDevID);
-
         case MIDM_RESET:
+            return MIDIIn_Reset(wDevID);
         default:
             TRACE("Unsupported message\n");
     }
-- 
1.4.4



More information about the wine-patches mailing list