[PATCH 4/4] wineoss: Move MODM_RESET to the unixlib.

Huw Davies huw at codeweavers.com
Fri Apr 22 01:08:41 CDT 2022


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/wineoss.drv/midi.c    | 47 --------------------------------------
 dlls/wineoss.drv/ossmidi.c | 43 +++++++++++++++++++++++++++++++---
 dlls/wineoss.drv/unixlib.h | 14 ------------
 3 files changed, 40 insertions(+), 64 deletions(-)

diff --git a/dlls/wineoss.drv/midi.c b/dlls/wineoss.drv/midi.c
index 8c3a2405b0f..470e8e4403d 100644
--- a/dlls/wineoss.drv/midi.c
+++ b/dlls/wineoss.drv/midi.c
@@ -64,13 +64,6 @@
 WINE_DEFAULT_DEBUG_CHANNEL(midi);
 
 static WINE_MIDIIN *MidiInDev;
-static WINE_MIDIOUT *MidiOutDev;
-
-/* this is the total number of MIDI out devices found (synth and port) */
-static	int 		MODM_NumDevs = 0;
-/* this is the number of FM synthesizers (index from 0 to NUMFMSYNTHDEVS - 1) */
-static	int		MODM_NumFMSynthDevs = 0;
-/* the Midi ports have index from NUMFMSYNTHDEVS to NumDevs - 1 */
 
 /* this is the total number of MIDI out devices found */
 static	int 		MIDM_NumDevs = 0;
@@ -119,9 +112,6 @@ static LRESULT OSS_MidiInit(void)
     if (!err)
     {
         MidiInDev = params.srcs;
-        MidiOutDev = params.dests;
-        MODM_NumDevs = params.num_dests;
-        MODM_NumFMSynthDevs = params.num_synths;
         MIDM_NumDevs = params.num_srcs;
     }
     return err;
@@ -140,10 +130,6 @@ static LRESULT OSS_MidiExit(void)
         return 1;
 
     MidiInDev = NULL;
-    MidiOutDev = NULL;
-
-    MODM_NumDevs = 0;
-    MODM_NumFMSynthDevs = 0;
     MIDM_NumDevs = 0;
 
     return 0;
@@ -646,37 +632,6 @@ static DWORD midStop(WORD wDevID)
     return MMSYSERR_NOERROR;
 }
 
-/*-----------------------------------------------------------------------*/
-
-DWORD WINAPI OSS_modMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
-			    DWORD_PTR dwParam1, DWORD_PTR dwParam2);
-
-/**************************************************************************
- * 			modReset				[internal]
- */
-static DWORD modReset(WORD wDevID)
-{
-    unsigned chn;
-
-    TRACE("(%04X);\n", wDevID);
-
-    if (wDevID >= MODM_NumDevs) return MMSYSERR_BADDEVICEID;
-    if (!MidiOutDev[wDevID].bEnabled) return MIDIERR_NODEVICE;
-
-    /* stop all notes */
-    /* FIXME: check if 0x78B0 is channel dependent or not. I coded it so that
-     * it's channel dependent...
-     */
-    for (chn = 0; chn < 16; chn++) {
-	/* turn off every note */
-	OSS_modMessage(wDevID, MODM_DATA, 0, 0x7800 | MIDI_CTL_CHANGE | chn, 0);
-	/* remove sustain on all channels */
-	OSS_modMessage(wDevID, MODM_DATA, 0, (CTL_SUSTAIN << 8) | MIDI_CTL_CHANGE | chn, 0);
-    }
-    /* FIXME: the LongData buffers must also be returned to the app */
-    return MMSYSERR_NOERROR;
-}
-
 /*======================================================================*
  *                  	    MIDI entry points 				*
  *======================================================================*/
@@ -742,8 +697,6 @@ DWORD WINAPI OSS_modMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
         return OSS_MidiInit();
     case DRVM_EXIT:
         return OSS_MidiExit();
-    case MODM_RESET:
-	return modReset(wDevID);
     }
 
     params.dev_id = wDevID;
diff --git a/dlls/wineoss.drv/ossmidi.c b/dlls/wineoss.drv/ossmidi.c
index 4b419c2716c..ba3017a5ad7 100644
--- a/dlls/wineoss.drv/ossmidi.c
+++ b/dlls/wineoss.drv/ossmidi.c
@@ -48,6 +48,17 @@
 
 #include "unixlib.h"
 
+struct midi_dest
+{
+    BOOL                bEnabled;
+    MIDIOPENDESC        midiDesc;
+    WORD                wFlags;
+    MIDIHDR            *lpQueueHdr;
+    void               *lpExtra; /* according to port type (MIDI, FM...), extra data when needed */
+    MIDIOUTCAPSW        caps;
+    int                 fd;
+};
+
 static unsigned int num_dests, num_srcs, num_synths, seq_refs;
 static struct midi_dest dests[MAX_MIDIOUTDRV];
 static struct midi_src srcs[MAX_MIDIINDRV];
@@ -381,10 +392,7 @@ wrapup:
 
     *params->err = 0;
     params->num_srcs = num_srcs;
-    params->num_dests = num_dests;
-    params->num_synths = num_synths;
     params->srcs = srcs;
-    params->dests = dests;
 
     return STATUS_SUCCESS;
 }
@@ -1065,6 +1073,32 @@ static UINT midi_out_get_volume(WORD dev_id, UINT *volume)
     return (dests[dev_id].caps.dwSupport & MIDICAPS_VOLUME) ? 0 : MMSYSERR_NOTSUPPORTED;
 }
 
+static UINT midi_out_reset(WORD dev_id)
+{
+    struct midi_dest *dest;
+    unsigned chn;
+
+    TRACE("(%04X);\n", dev_id);
+
+    if (dev_id >= num_dests) return MMSYSERR_BADDEVICEID;
+    dest = dests + dev_id;
+    if (!dest->bEnabled) return MIDIERR_NODEVICE;
+
+    /* stop all notes */
+    /* FIXME: check if 0x78B0 is channel dependent or not. I coded it so that
+     * it's channel dependent...
+     */
+    for (chn = 0; chn < 16; chn++)
+    {
+        /* turn off every note */
+        midi_out_data(dev_id, 0x7800 | MIDI_CTL_CHANGE | chn);
+        /* remove sustain on all channels */
+        midi_out_data(dev_id, (CTL_SUSTAIN << 8) | MIDI_CTL_CHANGE | chn);
+    }
+    /* FIXME: the LongData buffers must also be returned to the app */
+    return MMSYSERR_NOERROR;
+}
+
 NTSTATUS midi_out_message(void *args)
 {
     struct midi_out_message_params *params = args;
@@ -1108,6 +1142,9 @@ NTSTATUS midi_out_message(void *args)
     case MODM_SETVOLUME:
         *params->err = 0;
         break;
+    case MODM_RESET:
+        *params->err = midi_out_reset(params->dev_id);
+        break;
     default:
         TRACE("Unsupported message\n");
         *params->err = MMSYSERR_NOTSUPPORTED;
diff --git a/dlls/wineoss.drv/unixlib.h b/dlls/wineoss.drv/unixlib.h
index d56e11b8d23..183f5017d04 100644
--- a/dlls/wineoss.drv/unixlib.h
+++ b/dlls/wineoss.drv/unixlib.h
@@ -225,24 +225,10 @@ typedef struct midi_src
     int                 fd;
 } WINE_MIDIIN;
 
-typedef struct midi_dest
-{
-    BOOL                bEnabled;
-    MIDIOPENDESC        midiDesc;
-    WORD                wFlags;
-    MIDIHDR            *lpQueueHdr;
-    void               *lpExtra; /* according to port type (MIDI, FM...), extra data when needed */
-    MIDIOUTCAPSW        caps;
-    int                 fd;
-} WINE_MIDIOUT;
-
 struct midi_init_params
 {
     UINT *err;
-    unsigned int num_dests;
     unsigned int num_srcs;
-    unsigned int num_synths;
-    struct midi_dest *dests;
     struct midi_src *srcs;
 };
 
-- 
2.25.1




More information about the wine-devel mailing list