summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-08-14 21:30:06 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-08-14 21:30:06 +0000
commitb3bda03db01eb5ffb2c087258c777ceb772cdc25 (patch)
treea9eeab42d302a115c24dba21c8bad084e96f9308
parentbfe55a4a09a6e7dfc04df464ccec6ce427ddbdc1 (diff)
downloadrockbox-b3bda03db01eb5ffb2c087258c777ceb772cdc25.tar.gz
rockbox-b3bda03db01eb5ffb2c087258c777ceb772cdc25.zip
Added Balance setting
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1744 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/main.c1
-rw-r--r--apps/settings.c10
-rw-r--r--apps/settings.h7
-rw-r--r--apps/sound_menu.c10
-rw-r--r--firmware/mpeg.c70
-rw-r--r--firmware/mpeg.h8
6 files changed, 69 insertions, 37 deletions
diff --git a/apps/main.c b/apps/main.c
index a6e90eed3c..22fd8f6051 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -152,6 +152,7 @@ void init(void)
152 mpeg_init( global_settings.volume, 152 mpeg_init( global_settings.volume,
153 global_settings.bass, 153 global_settings.bass,
154 global_settings.treble, 154 global_settings.treble,
155 global_settings.balance,
155 global_settings.loudness, 156 global_settings.loudness,
156 global_settings.bass_boost, 157 global_settings.bass_boost,
157 global_settings.avc ); 158 global_settings.avc );
diff --git a/apps/settings.c b/apps/settings.c
index ef51727105..8c73aab87b 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -39,7 +39,7 @@ struct user_settings global_settings;
39 39
40static unsigned short last_checksum = 0; 40static unsigned short last_checksum = 0;
41 41
42#define CONFIG_BLOCK_VERSION 0 42#define CONFIG_BLOCK_VERSION 1
43#define CONFIG_BLOCK_SIZE 44 43#define CONFIG_BLOCK_SIZE 44
44 44
45/******************************************** 45/********************************************
@@ -339,12 +339,12 @@ void settings_reset(void) {
339 DEBUGF( "settings_reset()\n" ); 339 DEBUGF( "settings_reset()\n" );
340 340
341 global_settings.volume = mpeg_sound_default(SOUND_VOLUME); 341 global_settings.volume = mpeg_sound_default(SOUND_VOLUME);
342 global_settings.balance = DEFAULT_BALANCE_SETTING; 342 global_settings.balance = mpeg_sound_default(SOUND_BALANCE);
343 global_settings.bass = mpeg_sound_default(SOUND_BASS); 343 global_settings.bass = mpeg_sound_default(SOUND_BASS);
344 global_settings.treble = mpeg_sound_default(SOUND_TREBLE); 344 global_settings.treble = mpeg_sound_default(SOUND_TREBLE);
345 global_settings.loudness = DEFAULT_LOUDNESS_SETTING; 345 global_settings.loudness = mpeg_sound_default(SOUND_LOUDNESS);
346 global_settings.bass_boost = DEFAULT_BASS_BOOST_SETTING; 346 global_settings.bass_boost = mpeg_sound_default(SOUND_SUPERBASS);
347 global_settings.avc = DEFAULT_AVC_SETTING; 347 global_settings.avc = mpeg_sound_default(SOUND_AVC);
348 global_settings.contrast = DEFAULT_CONTRAST_SETTING; 348 global_settings.contrast = DEFAULT_CONTRAST_SETTING;
349 global_settings.poweroff = DEFAULT_POWEROFF_SETTING; 349 global_settings.poweroff = DEFAULT_POWEROFF_SETTING;
350 global_settings.backlight = DEFAULT_BACKLIGHT_SETTING; 350 global_settings.backlight = DEFAULT_BACKLIGHT_SETTING;
diff --git a/apps/settings.h b/apps/settings.h
index 115aab0f74..52f67bdf08 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -97,13 +97,6 @@ extern struct user_settings global_settings;
97 97
98/* system defines */ 98/* system defines */
99 99
100#define DEFAULT_VOLUME_SETTING 70/2
101#define DEFAULT_BALANCE_SETTING 50
102#define DEFAULT_BASS_SETTING 50/2
103#define DEFAULT_TREBLE_SETTING 50/2
104#define DEFAULT_LOUDNESS_SETTING 0
105#define DEFAULT_BASS_BOOST_SETTING 0
106#define DEFAULT_AVC_SETTING 0
107#ifdef HAVE_LCD_CHARCELLS 100#ifdef HAVE_LCD_CHARCELLS
108#define MAX_CONTRAST_SETTING 31 101#define MAX_CONTRAST_SETTING 31
109#define DEFAULT_CONTRAST_SETTING 30 102#define DEFAULT_CONTRAST_SETTING 30
diff --git a/apps/sound_menu.c b/apps/sound_menu.c
index 70ecb8708d..1b44859a2b 100644
--- a/apps/sound_menu.c
+++ b/apps/sound_menu.c
@@ -105,6 +105,10 @@ void set_sound(char* string,
105 break; 105 break;
106 } 106 }
107 mpeg_sound_set(setting, *variable); 107 mpeg_sound_set(setting, *variable);
108#ifdef HAVE_MAS3507D
109 if(setting == SOUND_BALANCE)
110 mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
111#endif
108 } 112 }
109 lcd_stop_scroll(); 113 lcd_stop_scroll();
110} 114}
@@ -114,6 +118,11 @@ static void volume(void)
114 set_sound("Volume", &global_settings.volume, SOUND_VOLUME); 118 set_sound("Volume", &global_settings.volume, SOUND_VOLUME);
115} 119}
116 120
121static void balance(void)
122{
123 set_sound("Balance", &global_settings.balance, SOUND_BALANCE);
124}
125
117static void bass(void) 126static void bass(void)
118{ 127{
119 set_sound("Bass", &global_settings.bass, SOUND_BASS); 128 set_sound("Bass", &global_settings.bass, SOUND_BASS);
@@ -150,6 +159,7 @@ void sound_menu(void)
150 { "Volume", volume }, 159 { "Volume", volume },
151 { "Bass", bass }, 160 { "Bass", bass },
152 { "Treble", treble }, 161 { "Treble", treble },
162 { "Balance", balance },
153#ifdef HAVE_MAS3587F 163#ifdef HAVE_MAS3587F
154 { "Loudness", loudness }, 164 { "Loudness", loudness },
155 { "Bass Boost", bass_boost }, 165 { "Bass Boost", bass_boost },
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 698a36cbe5..d1b27d3145 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -59,7 +59,7 @@ static char *units[] =
59 "%", /* Volume */ 59 "%", /* Volume */
60 "dB", /* Bass */ 60 "dB", /* Bass */
61 "dB", /* Treble */ 61 "dB", /* Treble */
62 "", /* Balance */ 62 "%", /* Balance */
63 "dB", /* Loudness */ 63 "dB", /* Loudness */
64 "%" /* Bass boost */ 64 "%" /* Bass boost */
65}; 65};
@@ -79,7 +79,7 @@ static int minval[] =
79 0, /* Volume */ 79 0, /* Volume */
80 0, /* Bass */ 80 0, /* Bass */
81 0, /* Treble */ 81 0, /* Treble */
82 0, /* Balance */ 82 -50, /* Balance */
83 0, /* Loudness */ 83 0, /* Loudness */
84 0 /* Bass boost */ 84 0 /* Bass boost */
85}; 85};
@@ -94,7 +94,7 @@ static int maxval[] =
94 30, /* Bass */ 94 30, /* Bass */
95 30, /* Treble */ 95 30, /* Treble */
96#endif 96#endif
97 100, /* Balance */ 97 50, /* Balance */
98 17, /* Loudness */ 98 17, /* Loudness */
99 10 /* Bass boost */ 99 10 /* Bass boost */
100}; 100};
@@ -109,7 +109,7 @@ static int defaultval[] =
109 15+7, /* Bass */ 109 15+7, /* Bass */
110 15+7, /* Treble */ 110 15+7, /* Treble */
111#endif 111#endif
112 50, /* Balance */ 112 0, /* Balance */
113 0, /* Loudness */ 113 0, /* Loudness */
114 0 /* Bass boost */ 114 0 /* Bass boost */
115}; 115};
@@ -1266,10 +1266,11 @@ bool mpeg_is_playing(void)
1266 1266
1267#ifndef SIMULATOR 1267#ifndef SIMULATOR
1268#ifdef HAVE_MAS3507D 1268#ifdef HAVE_MAS3507D
1269int current_volume=0; /* all values in tenth of dB */ 1269int current_left_volume = 0; /* all values in tenth of dB */
1270int current_treble=0; 1270int current_right_volume = 0; /* all values in tenth of dB */
1271int current_bass=0; 1271int current_treble = 0;
1272int current_balance=0; 1272int current_bass = 0;
1273int current_balance = 0;
1273 1274
1274/* convert tenth of dB volume to register value */ 1275/* convert tenth of dB volume to register value */
1275static int tenthdb2reg(int db) { 1276static int tenthdb2reg(int db) {
@@ -1292,14 +1293,9 @@ void set_prescaled_volume(void)
1292 mas_writereg(MAS_REG_KPRESCALE, prescale_table[prescale/10]); 1293 mas_writereg(MAS_REG_KPRESCALE, prescale_table[prescale/10]);
1293 1294
1294 /* gain up the analog volume to compensate the prescale reduction gain */ 1295 /* gain up the analog volume to compensate the prescale reduction gain */
1295 r = l = current_volume + prescale; 1296 l = current_left_volume + prescale;
1297 r = current_right_volume + prescale;
1296 1298
1297 /* balance */
1298 if (current_balance >= 0)
1299 l -= current_balance;
1300 else
1301 r += current_balance;
1302
1303 dac_volume(tenthdb2reg(l), tenthdb2reg(r), false); 1299 dac_volume(tenthdb2reg(l), tenthdb2reg(r), false);
1304} 1300}
1305#endif /* HAVE_MAS3507D */ 1301#endif /* HAVE_MAS3507D */
@@ -1310,7 +1306,11 @@ void mpeg_sound_set(int setting, int value)
1310#ifdef SIMULATOR 1306#ifdef SIMULATOR
1311 setting = value; 1307 setting = value;
1312#else 1308#else
1309#ifdef HAVE_MAS3507D
1310 int l, r;
1311#else
1313 int tmp; 1312 int tmp;
1313#endif
1314 1314
1315 switch(setting) 1315 switch(setting)
1316 { 1316 {
@@ -1321,15 +1321,44 @@ void mpeg_sound_set(int setting, int value)
1321 tmp = 0x7f00 * value / 100; 1321 tmp = 0x7f00 * value / 100;
1322 mas_codec_writereg(0x10, tmp & 0xff00); 1322 mas_codec_writereg(0x10, tmp & 0xff00);
1323#else 1323#else
1324 tmp = 0x38 * value / 100; 1324 l = value;
1325 r = value;
1326
1327 if(current_balance > 0)
1328 {
1329 l -= current_balance;
1330 if(l < 0)
1331 l = 0;
1332 }
1333
1334 if(current_balance < 0)
1335 {
1336 r += current_balance;
1337 if(r < 0)
1338 r = 0;
1339 }
1340
1341 l = 0x38 * l / 100;
1342 r = 0x38 * r / 100;
1325 1343
1326 /* store volume in tenth of dB */ 1344 /* store volume in tenth of dB */
1327 current_volume = ( tmp < 0x08 ? tmp*30 - 780 : tmp*15 - 660 ); 1345 current_left_volume = ( l < 0x08 ? l*30 - 780 : l*15 - 660 );
1346 current_right_volume = ( r < 0x08 ? r*30 - 780 : r*15 - 660 );
1328 1347
1329 set_prescaled_volume(); 1348 set_prescaled_volume();
1330#endif 1349#endif
1331 break; 1350 break;
1332 1351
1352 case SOUND_BALANCE:
1353#ifdef HAVE_MAS3587F
1354 tmp = ((value * 127 / 100) & 0xff) << 8;
1355 mas_codec_writereg(0x11, tmp & 0xff00);
1356#else
1357 /* Convert to percent */
1358 current_balance = value * 2;
1359#endif
1360 break;
1361
1333 case SOUND_BASS: 1362 case SOUND_BASS:
1334#ifdef HAVE_MAS3587F 1363#ifdef HAVE_MAS3587F
1335 tmp = (((value-12) * 8) & 0xff) << 8; 1364 tmp = (((value-12) * 8) & 0xff) << 8;
@@ -1415,6 +1444,10 @@ int mpeg_val2phys(int setting, int value)
1415 result = value * 2; 1444 result = value * 2;
1416 break; 1445 break;
1417 1446
1447 case SOUND_BALANCE:
1448 result = value * 2;
1449 break;
1450
1418 case SOUND_BASS: 1451 case SOUND_BASS:
1419#ifdef HAVE_MAS3587F 1452#ifdef HAVE_MAS3587F
1420 result = value - 12; 1453 result = value - 12;
@@ -1444,7 +1477,7 @@ int mpeg_val2phys(int setting, int value)
1444 return result; 1477 return result;
1445} 1478}
1446 1479
1447void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc) 1480void mpeg_init(int volume, int bass, int treble, int balance, int loudness, int bass_boost, int avc)
1448{ 1481{
1449#ifdef SIMULATOR 1482#ifdef SIMULATOR
1450 volume = bass = treble = loudness = bass_boost = avc; 1483 volume = bass = treble = loudness = bass_boost = avc;
@@ -1556,6 +1589,7 @@ void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, i
1556 1589
1557 mpeg_sound_set(SOUND_BASS, bass); 1590 mpeg_sound_set(SOUND_BASS, bass);
1558 mpeg_sound_set(SOUND_TREBLE, treble); 1591 mpeg_sound_set(SOUND_TREBLE, treble);
1592 mpeg_sound_set(SOUND_BALANCE, balance);
1559 mpeg_sound_set(SOUND_VOLUME, volume); 1593 mpeg_sound_set(SOUND_VOLUME, volume);
1560 1594
1561#ifdef HAVE_MAS3587F 1595#ifdef HAVE_MAS3587F
diff --git a/firmware/mpeg.h b/firmware/mpeg.h
index 2838c47d45..48367317dc 100644
--- a/firmware/mpeg.h
+++ b/firmware/mpeg.h
@@ -21,7 +21,7 @@
21 21
22#include <stdbool.h> 22#include <stdbool.h>
23 23
24void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc); 24void mpeg_init(int volume, int bass, int treble, int balance, int loudness, int bass_boost, int avc);
25void mpeg_play(char* trackname); 25void mpeg_play(char* trackname);
26void mpeg_stop(void); 26void mpeg_stop(void);
27void mpeg_pause(void); 27void mpeg_pause(void);
@@ -44,15 +44,9 @@ bool mpeg_has_changed_track(void);
44#define SOUND_BASS 1 44#define SOUND_BASS 1
45#define SOUND_TREBLE 2 45#define SOUND_TREBLE 2
46#define SOUND_BALANCE 3 46#define SOUND_BALANCE 3
47
48#ifdef HAVE_MAS3587F
49#define SOUND_LOUDNESS 4 47#define SOUND_LOUDNESS 4
50#define SOUND_SUPERBASS 5 48#define SOUND_SUPERBASS 5
51#define SOUND_AVC 6 49#define SOUND_AVC 6
52#define SOUND_NUMSETTINGS 7 50#define SOUND_NUMSETTINGS 7
53#else
54#define SOUND_DEEMPH 4
55#define SOUND_NUMSETTINGS 5
56#endif
57 51
58#endif 52#endif