[Scummvm-cvs-logs] SF.net SVN: scummvm:[42785] scummvm/trunk/backends/platform/gp2x

djwillis at users.sourceforge.net djwillis at users.sourceforge.net
Sat Jul 25 21:07:28 CEST 2009


Revision: 42785
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42785&view=rev
Author:   djwillis
Date:     2009-07-25 19:07:28 +0000 (Sat, 25 Jul 2009)

Log Message:
-----------
GP2X Backend: Volume control code cleanup.

Modified Paths:
--------------
    scummvm/trunk/backends/platform/gp2x/build/config-alleng.sh
    scummvm/trunk/backends/platform/gp2x/build/config.sh
    scummvm/trunk/backends/platform/gp2x/events.cpp
    scummvm/trunk/backends/platform/gp2x/gp2x-hw.cpp
    scummvm/trunk/backends/platform/gp2x/gp2x-hw.h
    scummvm/trunk/backends/platform/gp2x/gp2x.cpp

Modified: scummvm/trunk/backends/platform/gp2x/build/config-alleng.sh
===================================================================
--- scummvm/trunk/backends/platform/gp2x/build/config-alleng.sh	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/build/config-alleng.sh	2009-07-25 19:07:28 UTC (rev 42785)
@@ -18,6 +18,6 @@
 # Edit the configure line to suit.
 cd ../../../..
 ./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-all-engines --enable-vkeybd
-# --enable-plugins --default-dynamic
+#--enable-plugins --default-dynamic
 
 echo Generating config for GP2X complete. Check for errors.

Modified: scummvm/trunk/backends/platform/gp2x/build/config.sh
===================================================================
--- scummvm/trunk/backends/platform/gp2x/build/config.sh	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/build/config.sh	2009-07-25 19:07:28 UTC (rev 42785)
@@ -18,6 +18,6 @@
 # Edit the configure line to suit.
 cd ../../../..
 ./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-vkeybd
-# --enable-plugins --default-dynamic
+#--enable-plugins --default-dynamic
 
 echo Generating config for GP2X complete. Check for errors.

Modified: scummvm/trunk/backends/platform/gp2x/events.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2x/events.cpp	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/events.cpp	2009-07-25 19:07:28 UTC (rev 42785)
@@ -35,7 +35,7 @@
 #include "common/events.h"
 
 // FIXME move joystick defines out and replace with confile file options
-// we should really allow users to map any key to a joystick button
+// we should really allow users to map any key to a joystick button using the keymapper.
 #define JOY_DEADZONE 2200
 
 #define JOY_XAXIS 0
@@ -273,7 +273,7 @@
 
 	Combos:
 
-	GP2X_BUTTON_VOLUP &	GP2X_BUTTON_VOLDOWN		0 (For Monkey 2 CP)
+	GP2X_BUTTON_VOLUP &	GP2X_BUTTON_VOLDOWN		0 (For Monkey 2 CP) or Virtual Keyboard if enabled
 	GP2X_BUTTON_L &	GP2X_BUTTON_SELECT			Common::EVENT_QUIT (Calls Sync() to make sure SD is flushed)
 	GP2X_BUTTON_L &	GP2X_BUTTON_Y				Toggles setZoomOnMouse() for larger then 320*240 games to scale to the point + raduis.
 	GP2X_BUTTON_L &	GP2X_BUTTON_START			Common::EVENT_MAINMENU (ScummVM Global Main Menu)
@@ -434,29 +434,22 @@
 						}
 						break;
 					case GP2X_BUTTON_VOLUP:
-						//if (GP2X_BUTTON_STATE_L == TRUE) {
-						//	displayMessageOnOSD("Setting CPU Speed at 230MHz");
-						//	GP2X_setCpuspeed(200);
-							//event.kbd.keycode = Common::KEYCODE_PLUS;
-							//event.kbd.ascii = mapKey(SDLK_PLUS, ev.key.keysym.mod, 0);
-						//} else {
-							GP2X_mixer_move_volume(1);
+						GP2X_HW::mixerMoveVolume(2);
+						if (GP2X_HW::volumeLevel == 100) {
+							displayMessageOnOSD("Maximum Volume");
+						} else {
 							displayMessageOnOSD("Increasing Volume");
-						//}
+						}
 						break;
 
 					case GP2X_BUTTON_VOLDOWN:
-						//if (GP2X_BUTTON_STATE_L == TRUE) {
-						//	displayMessageOnOSD("Setting CPU Speed at 60MHz");
-						//	GP2X_setCpuspeed(60);
-							//event.kbd.keycode = Common::KEYCODE_MINUS;
-							//event.kbd.ascii = mapKey(SDLK_MINUS, ev.key.keysym.mod, 0);
-						//} else {
-							GP2X_mixer_move_volume(0);
+						GP2X_HW::mixerMoveVolume(1);
+						if (GP2X_HW::volumeLevel == 0) {
+							displayMessageOnOSD("Minimal Volume");
+						} else {
 							displayMessageOnOSD("Decreasing Volume");
-						//}
+						}
 						break;
-
 				}
 			}
 			return true;

Modified: scummvm/trunk/backends/platform/gp2x/gp2x-hw.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2x/gp2x-hw.cpp	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/gp2x-hw.cpp	2009-07-25 19:07:28 UTC (rev 42785)
@@ -48,6 +48,20 @@
 #include <sys/time.h>
 #include <unistd.h>
 
+namespace GP2X_HW {
+
+enum {
+	VOLUME_NOCHG			= 0,
+	VOLUME_DOWN				= 1,
+	VOLUME_UP				= 2,
+	VOLUME_CHANGE_RATE		= 8,
+	VOLUME_MIN				= 0,
+	VOLUME_INITIAL			= 70,
+	VOLUME_MAX				= 100
+};
+
+int volumeLevel = VOLUME_INITIAL;
+
 /* system registers */
 static struct
 {
@@ -61,14 +75,14 @@
 
 #define SYS_CLK_FREQ 7372800
 
-void GP2X_device_init() {
+void deviceInit() {
 	// Open devices
 	if (!gp2x_dev[0])  gp2x_dev[0] = open("/dev/mixer", O_RDWR);
 	if (!gp2x_dev[1])  gp2x_dev[1] = open("/dev/batt",   O_RDONLY);
 	if (!gp2x_dev[2])  gp2x_dev[2] = open("/dev/mem",   O_RDWR);
 }
 
-void GP2X_device_deinit() {
+void deviceDeinit() {
 	// Close devices
 	{
 		int i;
@@ -92,68 +106,35 @@
 	unpatchMMU();
 }
 
-// Vairous mixer level fudges.
-// TODO: Clean up and merge quick hacks.
+void mixerMoveVolume(int direction) {
+    if (volumeLevel <= 10) {
+        if (direction == VOLUME_UP)   volumeLevel += VOLUME_CHANGE_RATE/2;
+        if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE/2;
+    } else {
+        if(direction == VOLUME_UP)   volumeLevel += VOLUME_CHANGE_RATE;
+        if(direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE;
+    }
 
-void GP2X_mixer_set_volume(int L /*0..100*/, int R /*0..100*/) {
+    if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN;
+    if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX;
 
-	/* Set an arbitrary percentage value for the hardware mixer volume.
+    unsigned long soundDev = open("/dev/mixer", O_RDWR);
 
-	   Parameters:
-	   L (0..100) - volume percentage for the left channel
-	   R (0..100) - volume percentage for the right channel
-
-	   Note:
-	   - A higher percentage than 100 will distort your sound.
-	*/
-
-	unsigned char temp[4];
-
-	if (L < 0) L = 0;
-	if (L > GP2X_MAXVOL) L = GP2X_MAXVOL;
-	if (R < 0) R = 0;
-	if (R > GP2X_MAXVOL) R = GP2X_MAXVOL;
-
-	temp[0]=(unsigned char)L;
-	temp[1]=(unsigned char)R;
-	temp[2]=temp[3]=0;
-
-	//warning("GP2X_mixer_set_volume is about to set %d %d", L, R);
-	ioctl(gp2x_dev[0], SOUND_MIXER_WRITE_PCM, temp);
+    if(soundDev) {
+        int vol = ((volumeLevel << 8) | volumeLevel);
+        ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol);
+        close(soundDev);
+    }
 }
 
-int GP2X_mixer_get_volume() {
-	int vol;
-	ioctl(gp2x_dev[0], SOUND_MIXER_READ_PCM, &vol);
-	//warning("GP2X_mixer_get_volume returned %d %d", (int)((vol & 0xff)), (int)((vol >> 8) & 0xff));
-	return (int)((vol & 0xff));
-}
-
-void GP2X_mixer_move_volume(int UpDown) {
-	// Raise volume 5% if 1 passed, lower 5% if 0.
-	int curvol, newvol;
-	ioctl(gp2x_dev[0], SOUND_MIXER_READ_PCM, &curvol);
-	curvol = ((int)((curvol & 0xff)));
-	newvol = ((int)((curvol & 0xff)));
-	//warning("GP2X_mixer_move_volume got current volume @ %d", curvol);
-	if (UpDown == 1) {
-			newvol = (curvol + 5);
-	} else if (UpDown == 0) {
-			newvol = (curvol - 5);
-	}
-	//warning("GP2X_mixer_move_volume is about to set volume @ %d", newvol);
-	GP2X_mixer_set_volume(newvol, newvol);
-	return;
-}
-
-void GP2X_setCpuspeed(unsigned int mhz)
+void setCpuspeed(unsigned int mhz)
 {
 	set_FCLK(mhz);
 	set_DCLK_Div(0);
 	set_920_Div(0);
 }
 
-int GP2X_getBattLevel() {
+int getBattLevel() {
     int devbatt;
     unsigned short currentval=0;
     devbatt = open("/dev/batt", O_RDONLY);
@@ -213,3 +194,5 @@
 	MEM_REG[0x2846>>1]=(MEM_REG[0x2846>>1] | 0x20) & ~2;
 	while (!(MEM_REG[0x2846>>1] & 2));
 }
+
+} /* namespace GP2X_HW */
\ No newline at end of file

Modified: scummvm/trunk/backends/platform/gp2x/gp2x-hw.h
===================================================================
--- scummvm/trunk/backends/platform/gp2x/gp2x-hw.h	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/gp2x-hw.h	2009-07-25 19:07:28 UTC (rev 42785)
@@ -31,17 +31,19 @@
 #ifndef GP2X_HW_H
 #define GP2X_HW_H
 
+namespace GP2X_HW {
+
 #define GP2X_MAXVOL 100 // Highest level permitted by GP2X's mixer
 #define SYS_CLK_FREQ 7372800 // Clock Frequency
 
-extern void	GP2X_device_init();
-extern void	GP2X_device_deinit();
-extern void	GP2X_mixer_set_volume(int, int);
-extern int	GP2X_mixer_get_volume();
-extern void	GP2X_mixer_move_volume(int);
-extern void GP2X_setCpuspeed(unsigned int cpuspeed);
-extern int GP2X_getBattLevel();
+extern int volumeLevel;
 
+extern void	deviceInit();
+extern void	deviceDeinit();
+extern void	mixerMoveVolume(int);
+extern void setCpuspeed(unsigned int cpuspeed);
+extern int getBattLevel();
+
 extern void save_system_regs(void); /* save some registers */
 extern void set_display_clock_div(unsigned div);
 extern void set_FCLK(unsigned MHZ); /* adjust the clock frequency (in Mhz units) */
@@ -50,4 +52,6 @@
 extern void Disable_940(void); /* 940t down */
 extern void gp2x_video_wait_vsync(void);
 
+} /* namespace GP2X_HW */
+
 #endif //GP2X_HW_H

Modified: scummvm/trunk/backends/platform/gp2x/gp2x.cpp
===================================================================
--- scummvm/trunk/backends/platform/gp2x/gp2x.cpp	2009-07-25 18:44:57 UTC (rev 42784)
+++ scummvm/trunk/backends/platform/gp2x/gp2x.cpp	2009-07-25 19:07:28 UTC (rev 42785)
@@ -233,16 +233,17 @@
 		// switch. Still, it's a potential future change to keep in mind.
 		_timer = new DefaultTimerManager();
 		_timerID = SDL_AddTimer(10, &timer_handler, _timer);
+	}
 
-	// Initialise any GP2X specific stuff we may want (Volume, Batt Status etc.)
-	GP2X_device_init();
+	/* Initialise any GP2X specific stuff we may want (Batt Status, scaler etc.) */
+	GP2X_HW::deviceInit();
 
+	/* Set Default hardware mixer volume to a preset level (VOLUME_INITIAL). This is done to 'reset' volume level if set by other apps. */
+	GP2X_HW::mixerMoveVolume(0);
+
 	// Set Default hardware mixer volume to a plesent level.
 	// This is done to 'reset' volume level if set by other apps.
-	GP2X_mixer_set_volume(70, 70);
 
-	}
-
 	//if (SDL_GP2X_MouseType() == 0) {
 	//	// No mouse, F100 default state.
 	//	_gp2xInputType = 0;
@@ -448,7 +449,7 @@
 	if (_joystick)
 		SDL_JoystickClose(_joystick);
 	//CloseRam();
-	GP2X_device_deinit();
+	GP2X_HW::deviceDeinit();
 
 	SDL_RemoveTimer(_timerID);
 	closeMixer();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list