mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-04 16:26:53 +00:00
GP2X Backend: Volume control code cleanup.
svn-id: r42785
This commit is contained in:
parent
32d74a2247
commit
037c02a1f7
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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 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 @@ 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 */
|
@ -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
|
||||
|
@ -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 (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.
|
||||
@ -448,7 +449,7 @@ void OSystem_GP2X::quit() {
|
||||
if (_joystick)
|
||||
SDL_JoystickClose(_joystick);
|
||||
//CloseRam();
|
||||
GP2X_device_deinit();
|
||||
GP2X_HW::deviceDeinit();
|
||||
|
||||
SDL_RemoveTimer(_timerID);
|
||||
closeMixer();
|
||||
|
Loading…
Reference in New Issue
Block a user