diff options
| -rwxr-xr-x | backends/platform/gp2x/build/config-alleng.sh | 2 | ||||
| -rwxr-xr-x | backends/platform/gp2x/build/config.sh | 2 | ||||
| -rw-r--r-- | backends/platform/gp2x/events.cpp | 31 | ||||
| -rw-r--r-- | backends/platform/gp2x/gp2x-hw.cpp | 95 | ||||
| -rw-r--r-- | backends/platform/gp2x/gp2x-hw.h | 18 | ||||
| -rw-r--r-- | backends/platform/gp2x/gp2x.cpp | 13 | 
6 files changed, 71 insertions, 90 deletions
| diff --git a/backends/platform/gp2x/build/config-alleng.sh b/backends/platform/gp2x/build/config-alleng.sh index 5724f39dc5..4a3526d50c 100755 --- a/backends/platform/gp2x/build/config-alleng.sh +++ b/backends/platform/gp2x/build/config-alleng.sh @@ -18,6 +18,6 @@ export DEFINES=-DNDEBUG  # 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. diff --git a/backends/platform/gp2x/build/config.sh b/backends/platform/gp2x/build/config.sh index 55954d6231..2bc49564f7 100755 --- a/backends/platform/gp2x/build/config.sh +++ b/backends/platform/gp2x/build/config.sh @@ -18,6 +18,6 @@ export DEFINES=-DNDEBUG  # 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. diff --git a/backends/platform/gp2x/events.cpp b/backends/platform/gp2x/events.cpp index 9a9a59765d..8cd034d2d5 100644 --- a/backends/platform/gp2x/events.cpp +++ b/backends/platform/gp2x/events.cpp @@ -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 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {  	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 @@ bool OSystem_GP2X::pollEvent(Common::Event &event) {  						}  						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; diff --git a/backends/platform/gp2x/gp2x-hw.cpp b/backends/platform/gp2x/gp2x-hw.cpp index fe02e029f7..9eb6b040c0 100644 --- a/backends/platform/gp2x/gp2x-hw.cpp +++ b/backends/platform/gp2x/gp2x-hw.cpp @@ -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 @@ static volatile unsigned short *MEM_REG;  #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 @@ void GP2X_device_deinit() {  	unpatchMMU();  } -// Vairous mixer level fudges. -// TODO: Clean up and merge quick hacks. - -void GP2X_mixer_set_volume(int L /*0..100*/, int R /*0..100*/) { - -	/* Set an arbitrary percentage value for the hardware mixer volume. - -	   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); -} - -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 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; +    } + +    if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN; +    if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX; + +    unsigned long soundDev = open("/dev/mixer", O_RDWR); + +    if(soundDev) { +        int vol = ((volumeLevel << 8) | volumeLevel); +        ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol); +        close(soundDev); +    }  } -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 @@ void gp2x_video_wait_vsync(void)  	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 diff --git a/backends/platform/gp2x/gp2x-hw.h b/backends/platform/gp2x/gp2x-hw.h index 89ad1093e4..7e72812cc4 100644 --- a/backends/platform/gp2x/gp2x-hw.h +++ b/backends/platform/gp2x/gp2x-hw.h @@ -31,16 +31,18 @@  #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); @@ -50,4 +52,6 @@ extern void set_DCLK_Div(unsigned short div); /* 0 to 7 divider (freq=FCLK/(1+di  extern void Disable_940(void); /* 940t down */  extern void gp2x_video_wait_vsync(void); +} /* namespace GP2X_HW */ +  #endif //GP2X_HW_H diff --git a/backends/platform/gp2x/gp2x.cpp b/backends/platform/gp2x/gp2x.cpp index 553385807a..4752646083 100644 --- a/backends/platform/gp2x/gp2x.cpp +++ b/backends/platform/gp2x/gp2x.cpp @@ -233,15 +233,16 @@ void OSystem_GP2X::initBackend() {  		// 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 (Batt Status, scaler etc.) */ +	GP2X_HW::deviceInit(); -	// Initialise any GP2X specific stuff we may want (Volume, Batt Status etc.) -	GP2X_device_init(); +	/* 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. @@ -448,7 +449,7 @@ void OSystem_GP2X::quit() {  	if (_joystick)  		SDL_JoystickClose(_joystick);  	//CloseRam(); -	GP2X_device_deinit(); +	GP2X_HW::deviceDeinit();  	SDL_RemoveTimer(_timerID);  	closeMixer(); | 
