summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/main.c3
-rw-r--r--apps/settings.c7
-rw-r--r--apps/settings.h4
-rw-r--r--apps/sound_menu.c10
-rw-r--r--firmware/drivers/mas.h7
-rw-r--r--firmware/mpeg.c39
-rw-r--r--firmware/mpeg.h5
7 files changed, 67 insertions, 8 deletions
diff --git a/apps/main.c b/apps/main.c
index caa5517c4d..38a0c878d8 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -150,7 +150,8 @@ void init(void)
150 global_settings.bass, 150 global_settings.bass,
151 global_settings.treble, 151 global_settings.treble,
152 global_settings.loudness, 152 global_settings.loudness,
153 global_settings.bass_boost ); 153 global_settings.bass_boost,
154 global_settings.avc );
154 155
155 status_init(); 156 status_init();
156 usb_start_monitoring(); 157 usb_start_monitoring();
diff --git a/apps/settings.c b/apps/settings.c
index 84ac584951..5eebc61b41 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -54,6 +54,7 @@ offset abs
540x0e 0x22 <shuffle mode & directory filter byte> 540x0e 0x22 <shuffle mode & directory filter byte>
550x0f 0x23 <scroll speed & WPS display byte> 550x0f 0x23 <scroll speed & WPS display byte>
560x10 0x24 <playlist options byte> 560x10 0x24 <playlist options byte>
570x11 0x25 <AVC byte>
57 58
58 <all unused space filled with 0xff> 59 <all unused space filled with 0xff>
59 60
@@ -216,6 +217,8 @@ int settings_save( void )
216 ((global_settings.scroll_speed << 3) | 217 ((global_settings.scroll_speed << 3) |
217 (global_settings.wps_display & 7)); 218 (global_settings.wps_display & 7));
218 219
220 rtc_config_block[0x11] = (unsigned char)global_settings.avc;
221
219 memcpy(&rtc_config_block[0x24], &global_settings.total_uptime, 4); 222 memcpy(&rtc_config_block[0x24], &global_settings.total_uptime, 4);
220 memcpy(&rtc_config_block[0x28], &global_settings.total_boots, 2); 223 memcpy(&rtc_config_block[0x28], &global_settings.total_boots, 2);
221 224
@@ -277,6 +280,9 @@ void settings_load(void)
277 c = rtc_config_block[0xf] & 7; 280 c = rtc_config_block[0xf] & 7;
278 if (c != 7) 281 if (c != 7)
279 global_settings.wps_display = c; 282 global_settings.wps_display = c;
283
284 if (rtc_config_block[0x11] != 0xFF)
285 global_settings.avc = rtc_config_block[0x11];
280 286
281 if (rtc_config_block[0x24] != 0xFF) 287 if (rtc_config_block[0x24] != 0xFF)
282 memcpy(&global_settings.total_uptime, &rtc_config_block[0x24], 4); 288 memcpy(&global_settings.total_uptime, &rtc_config_block[0x24], 4);
@@ -300,6 +306,7 @@ void settings_reset(void) {
300 global_settings.treble = mpeg_sound_default(SOUND_TREBLE); 306 global_settings.treble = mpeg_sound_default(SOUND_TREBLE);
301 global_settings.loudness = DEFAULT_LOUDNESS_SETTING; 307 global_settings.loudness = DEFAULT_LOUDNESS_SETTING;
302 global_settings.bass_boost = DEFAULT_BASS_BOOST_SETTING; 308 global_settings.bass_boost = DEFAULT_BASS_BOOST_SETTING;
309 global_settings.avc = DEFAULT_AVC_SETTING;
303 global_settings.contrast = DEFAULT_CONTRAST_SETTING; 310 global_settings.contrast = DEFAULT_CONTRAST_SETTING;
304 global_settings.poweroff = DEFAULT_POWEROFF_SETTING; 311 global_settings.poweroff = DEFAULT_POWEROFF_SETTING;
305 global_settings.backlight = DEFAULT_BACKLIGHT_SETTING; 312 global_settings.backlight = DEFAULT_BACKLIGHT_SETTING;
diff --git a/apps/settings.h b/apps/settings.h
index 3921fb1f52..6a9f0ea636 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -38,7 +38,8 @@ struct user_settings
38 int treble; /* treble eq: 0-100 0=low 100=high */ 38 int treble; /* treble eq: 0-100 0=low 100=high */
39 int loudness; /* loudness eq: 0-100 0=off 100=max */ 39 int loudness; /* loudness eq: 0-100 0=off 100=max */
40 int bass_boost; /* bass boost eq: 0-100 0=off 100=max */ 40 int bass_boost; /* bass boost eq: 0-100 0=off 100=max */
41 41 int avc; /* auto volume correct: 0=disable, 1=2s 2=4s 3=8s */
42
42 /* device settings */ 43 /* device settings */
43 44
44 int contrast; /* lcd contrast: 0-100 0=low 100=high */ 45 int contrast; /* lcd contrast: 0-100 0=low 100=high */
@@ -94,6 +95,7 @@ extern struct user_settings global_settings;
94#define DEFAULT_TREBLE_SETTING 50/2 95#define DEFAULT_TREBLE_SETTING 50/2
95#define DEFAULT_LOUDNESS_SETTING 0 96#define DEFAULT_LOUDNESS_SETTING 0
96#define DEFAULT_BASS_BOOST_SETTING 0 97#define DEFAULT_BASS_BOOST_SETTING 0
98#define DEFAULT_AVC_SETTING 0
97#define DEFAULT_CONTRAST_SETTING 0 99#define DEFAULT_CONTRAST_SETTING 0
98#define DEFAULT_POWEROFF_SETTING 0 100#define DEFAULT_POWEROFF_SETTING 0
99#define DEFAULT_BACKLIGHT_SETTING 5 101#define DEFAULT_BACKLIGHT_SETTING 5
diff --git a/apps/sound_menu.c b/apps/sound_menu.c
index 015e8d08a9..2fd7a00946 100644
--- a/apps/sound_menu.c
+++ b/apps/sound_menu.c
@@ -128,6 +128,13 @@ static void bass_boost(void)
128{ 128{
129 set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS); 129 set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS);
130}; 130};
131
132static void avc(void)
133{
134 char* names[] = { "off", "2s ", "4s ", "8s " };
135 set_option("[AVC decay time]", &global_settings.avc, names, 4 );
136 mpeg_sound_set(SOUND_AVC, global_settings.avc);
137}
131#endif /* ARCHOS_RECORDER */ 138#endif /* ARCHOS_RECORDER */
132 139
133void sound_menu(void) 140void sound_menu(void)
@@ -139,7 +146,8 @@ void sound_menu(void)
139 { "Treble", treble }, 146 { "Treble", treble },
140#ifdef ARCHOS_RECORDER 147#ifdef ARCHOS_RECORDER
141 { "Loudness", loudness }, 148 { "Loudness", loudness },
142 { "Bass Boost", bass_boost } 149 { "Bass Boost", bass_boost },
150 { "AVC", avc }
143#endif 151#endif
144 }; 152 };
145 153
diff --git a/firmware/drivers/mas.h b/firmware/drivers/mas.h
index f5ab554ca1..5ccffdfd5b 100644
--- a/firmware/drivers/mas.h
+++ b/firmware/drivers/mas.h
@@ -60,11 +60,18 @@
60#define MAS_REG_KPRESCALE 0xe7 60#define MAS_REG_KPRESCALE 0xe7
61#define MAS_REG_KBASS 0x6b 61#define MAS_REG_KBASS 0x6b
62#define MAS_REG_KTREBLE 0x6f 62#define MAS_REG_KTREBLE 0x6f
63#ifdef ARCHOS_RECORDER
63#define MAS_REG_KMDB_SWITCH 0x21 64#define MAS_REG_KMDB_SWITCH 0x21
64#define MAS_REG_KMDB_STR 0x22 65#define MAS_REG_KMDB_STR 0x22
65#define MAS_REG_KMDB_HAR 0x23 66#define MAS_REG_KMDB_HAR 0x23
66#define MAS_REG_KMDB_FC 0x24 67#define MAS_REG_KMDB_FC 0x24
67#define MAS_REG_KLOUDNESS 0x1e 68#define MAS_REG_KLOUDNESS 0x1e
69#define MAS_REG_QPEAK_L 0x0a
70#define MAS_REG_QPEAK_R 0x0b
71#define MAS_REG_DQPEAK_L 0x0c
72#define MAS_REG_DQPEAK_R 0x0d
73#define MAS_REG_KAVC 0x12
74#endif
68 75
69/* 76/*
70 * MAS commands 77 * MAS commands
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 82e30ca0ba..50a9789501 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -484,6 +484,7 @@ void IMIA1(void)
484static int new_file(bool next_track) 484static int new_file(bool next_track)
485{ 485{
486 char *trackname; 486 char *trackname;
487 int i;
487 488
488 do { 489 do {
489 trackname = peek_next_track( next_track ? 1 : -1 ); 490 trackname = peek_next_track( next_track ? 1 : -1 );
@@ -503,6 +504,10 @@ static int new_file(bool next_track)
503 mp3info(&(id3tags[last_tag].id3), trackname); 504 mp3info(&(id3tags[last_tag].id3), trackname);
504 id3tags[last_tag].mempos = mp3buf_write; 505 id3tags[last_tag].mempos = mp3buf_write;
505 last_tag++; 506 last_tag++;
507 for(i = 0;i < last_tag;i++)
508 {
509 DEBUGF("nf: %d, %x\n", i, id3tags[i].mempos);
510 }
506 } 511 }
507 } 512 }
508 } while ( mpeg_file < 0 ); 513 } while ( mpeg_file < 0 );
@@ -800,10 +805,15 @@ static void mpeg_thread(void)
800 case MPEG_TRACK_CHANGE: 805 case MPEG_TRACK_CHANGE:
801 DEBUGF("Track change\n"); 806 DEBUGF("Track change\n");
802 807
808#ifdef ARCHOS_RECORDER
809 /* Reset the AVC */
810 mpeg_sound_set(SOUND_AVC, -1);
811#endif
803 /* shift array so index 0 is current track */ 812 /* shift array so index 0 is current track */
804 for (i=0; i<last_tag-1; i++) 813 for (i=0; i<last_tag-1; i++)
805 { 814 {
806 id3tags[i] = id3tags[i+1]; 815 id3tags[i] = id3tags[i+1];
816 DEBUGF("tc: %d, %x\n", i, id3tags[i].mempos);
807 } 817 }
808 last_tag--; 818 last_tag--;
809 break; 819 break;
@@ -1038,6 +1048,28 @@ void mpeg_sound_set(int setting, int value)
1038 tmp = MAX(MIN(value * 4, 0x44), 0); 1048 tmp = MAX(MIN(value * 4, 0x44), 0);
1039 mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8); 1049 mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8);
1040 break; 1050 break;
1051
1052 case SOUND_AVC:
1053 switch (value) {
1054 case 1: /* 2s */
1055 tmp = (0x2 << 8) | (0x8 << 12);
1056 break;
1057 case 2: /* 4s */
1058 tmp = (0x4 << 8) | (0x8 << 12);
1059 break;
1060 case 3: /* 8s */
1061 tmp = (0x8 << 8) | (0x8 << 12);
1062 break;
1063 case -1: /* turn off and then turn on again to decay quickly */
1064 tmp = mas_codec_readreg(MAS_REG_KAVC);
1065 mas_codec_writereg(MAS_REG_KAVC, 0);
1066 break;
1067 default: /* off */
1068 tmp = 0;
1069 break;
1070 }
1071 mas_codec_writereg(MAS_REG_KAVC, tmp);
1072 break;
1041#endif 1073#endif
1042 } 1074 }
1043#endif /* SIMULATOR */ 1075#endif /* SIMULATOR */
@@ -1082,16 +1114,16 @@ int mpeg_val2phys(int setting, int value)
1082 return result; 1114 return result;
1083} 1115}
1084 1116
1085void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost) 1117void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc)
1086{ 1118{
1087#ifdef SIMULATOR 1119#ifdef SIMULATOR
1088 volume = bass = treble = loudness = bass_boost; 1120 volume = bass = treble = loudness = bass_boost = avc;
1089#else 1121#else
1090#ifdef ARCHOS_RECORDER 1122#ifdef ARCHOS_RECORDER
1091 int rc; 1123 int rc;
1092 unsigned long val; 1124 unsigned long val;
1093#else 1125#else
1094 loudness = bass_boost; 1126 loudness = bass_boost = avc;
1095#endif 1127#endif
1096 1128
1097 setup_sci0(); 1129 setup_sci0();
@@ -1158,6 +1190,7 @@ void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost)
1158#ifdef ARCHOS_RECORDER 1190#ifdef ARCHOS_RECORDER
1159 mpeg_sound_set(SOUND_LOUDNESS, loudness); 1191 mpeg_sound_set(SOUND_LOUDNESS, loudness);
1160 mpeg_sound_set(SOUND_SUPERBASS, bass_boost); 1192 mpeg_sound_set(SOUND_SUPERBASS, bass_boost);
1193 mpeg_sound_set(SOUND_AVC, avc);
1161#endif 1194#endif
1162#endif /* SIMULATOR */ 1195#endif /* SIMULATOR */
1163} 1196}
diff --git a/firmware/mpeg.h b/firmware/mpeg.h
index 4150181620..6a86b3400d 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); 24void mpeg_init(int volume, int bass, int treble, 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);
@@ -46,7 +46,8 @@ struct mp3entry* mpeg_current_track(void);
46#ifdef ARCHOS_RECORDER 46#ifdef ARCHOS_RECORDER
47#define SOUND_LOUDNESS 4 47#define SOUND_LOUDNESS 4
48#define SOUND_SUPERBASS 5 48#define SOUND_SUPERBASS 5
49#define SOUND_NUMSETTINGS 6 49#define SOUND_AVC 6
50#define SOUND_NUMSETTINGS 7
50#else 51#else
51#define SOUND_DEEMPH 4 52#define SOUND_DEEMPH 4
52#define SOUND_NUMSETTINGS 5 53#define SOUND_NUMSETTINGS 5