aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/gp2x/gp2x-hw.cpp
diff options
context:
space:
mode:
authorJohn Willis2009-07-25 19:07:28 +0000
committerJohn Willis2009-07-25 19:07:28 +0000
commit037c02a1f7179bbe5e3b044e6c9a13a94cd9851c (patch)
tree9cc7bb21aa85c56d76c92eaf679e5a6d7779866e /backends/platform/gp2x/gp2x-hw.cpp
parent32d74a224735b56f8e28e3bff63f330c33ad25dd (diff)
downloadscummvm-rg350-037c02a1f7179bbe5e3b044e6c9a13a94cd9851c.tar.gz
scummvm-rg350-037c02a1f7179bbe5e3b044e6c9a13a94cd9851c.tar.bz2
scummvm-rg350-037c02a1f7179bbe5e3b044e6c9a13a94cd9851c.zip
GP2X Backend: Volume control code cleanup.
svn-id: r42785
Diffstat (limited to 'backends/platform/gp2x/gp2x-hw.cpp')
-rw-r--r--backends/platform/gp2x/gp2x-hw.cpp95
1 files changed, 39 insertions, 56 deletions
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