[Scummvm-cvs-logs] CVS: scummvm/sound mpu401.cpp,1.18,1.19 mpu401.h,1.14,1.15

Jamieson Christian jamieson630 at users.sourceforge.net
Fri Sep 26 07:06:14 CEST 2003


Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv18895/sound

Modified Files:
	mpu401.cpp mpu401.h 
Log Message:
Converted the MPU-401 timer to use the Timer class.
Since this was the only place where we were using
create_thread, that method should be removable now.
I also removed the midi_driver_thread overrides
for the MorphOS and YPA1 (Palm) backends. These need
to be tested by their respective porters.

Index: mpu401.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mpu401.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- mpu401.cpp	25 Sep 2003 22:32:05 -0000	1.18
+++ mpu401.cpp	26 Sep 2003 14:05:33 -0000	1.19
@@ -20,7 +20,8 @@
 
 #include "stdafx.h"
 #include "mpu401.h"
-#include "base/engine.h"	// for g_system
+#include "base/engine.h"	// for g_engine
+#include "common/timer.h"
 #include "common/util.h"	// for ARRAYSIZE
 
 
@@ -82,10 +83,7 @@
 
 MidiDriver_MPU401::MidiDriver_MPU401() :
 	MidiDriver(),
-	_started_thread (false),
-	_mutex (0),
 	_timer_proc (0),
-	_timer_param (0),
 	_channel_mask (0xFFFF) // Permit all 16 channels by default
 {
 	
@@ -96,14 +94,11 @@
 }
 
 void MidiDriver_MPU401::close() {
-	if (_mutex) {
-		_started_thread = false;
-		g_system->lock_mutex (_mutex); // Wait for the timer thread to shutdown.
-		g_system->unlock_mutex (_mutex);
-		g_system->delete_mutex (_mutex);
-	}
-	int i;
-	for (i = 0; i < 16; ++i)
+	// FIXME: I'd really prefer a g_timer instead of going through g_engine
+	if (_timer_proc)
+		g_engine->_timer->releaseProcedure (_timer_proc);
+	_timer_proc = 0;
+	for (int i = 0; i < 16; ++i)
 		send (0x7B << 8 | 0xB0 | i);
 }
 
@@ -133,47 +128,13 @@
 	return NULL;
 }
 
-void MidiDriver_MPU401::setTimerCallback (void *timer_param, TimerCallback timer_proc) {
+void MidiDriver_MPU401::setTimerCallback (void *timer_param, TimerProc timer_proc) {
+	// FIXME: I'd really prefer a g_timer instead of going through g_engine
 	if (!_timer_proc || !timer_proc) {
+		if (_timer_proc)
+			g_engine->_timer->releaseProcedure (_timer_proc);
 		_timer_proc = timer_proc;
-		_timer_param = timer_param;
-		if (!_started_thread && timer_proc) {
-			// TODO: This is the only place in ScummVM where create_thread is
-			// being used. And it's used for a timer like thread. So if we
-			// could convert it to use the timer API instead, we could get
-			// rid of create_thread completely.
-			_mutex = g_system->create_mutex();
-			_started_thread = true;
-			g_system->create_thread(midi_driver_thread, this);
-		}
-	}
-}
-
-#if !defined(__MORPHOS__) && !defined(__PALM_OS__)
-
-int MidiDriver_MPU401::midi_driver_thread(void *param) {
-	MidiDriver_MPU401 *mid = (MidiDriver_MPU401 *)param;
-	int old_time, cur_time;
-
-	// Grab the MidiDriver's mutex. When the MidiDriver
-	// shuts down, it will wait on that mutex until we've
-	// detected the shutdown and quit looping.
-	g_system->lock_mutex (mid->_mutex);
-
-	old_time = g_system->get_msecs();
-	while (mid->_started_thread) {
-		g_system->delay_msecs(10);
-
-		cur_time = g_system->get_msecs();
-		while (old_time < cur_time) {
-			old_time += 10;
-			if (mid->_timer_proc)
-				(*(mid->_timer_proc)) (mid->_timer_param);
-		}
+		if (timer_proc)
+			g_engine->_timer->installProcedure (timer_proc, 10000, timer_param);
 	}
-
-	g_system->unlock_mutex (mid->_mutex);
-	return 0;
 }
-#endif
-

Index: mpu401.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mpu401.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- mpu401.h	25 Sep 2003 22:32:05 -0000	1.14
+++ mpu401.h	26 Sep 2003 14:05:33 -0000	1.15
@@ -78,22 +78,17 @@
 
 class MidiDriver_MPU401 : public MidiDriver {
 private:
-	typedef void (*TimerCallback) (void*);
+	typedef void (*TimerProc)(void *refCon); // Copied from class Timer
 
 	MidiChannel_MPU401 _midi_channels [16];
-	volatile bool _started_thread;
-	OSystem::MutexRef _mutex; // Concurrent shutdown barrier
-	volatile TimerCallback _timer_proc;
-	void *_timer_param;
+	TimerProc _timer_proc;
 	uint16 _channel_mask;
 
-	static int midi_driver_thread (void *param);
-
 public:
 	MidiDriver_MPU401();
 
 	virtual void close();
-	void setTimerCallback(void *timer_param, TimerCallback timer_proc);
+	void setTimerCallback(void *timer_param, TimerProc timer_proc);
 	uint32 getBaseTempo(void) { return 10000; }
 	uint32 property(int prop, uint32 param);
 





More information about the Scummvm-git-logs mailing list