diff options
-rw-r--r-- | apps/main.c | 3 | ||||
-rw-r--r-- | apps/settings.c | 7 | ||||
-rw-r--r-- | apps/settings.h | 4 | ||||
-rw-r--r-- | apps/sound_menu.c | 10 | ||||
-rw-r--r-- | firmware/drivers/mas.h | 7 | ||||
-rw-r--r-- | firmware/mpeg.c | 39 | ||||
-rw-r--r-- | firmware/mpeg.h | 5 |
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 | |||
54 | 0x0e 0x22 <shuffle mode & directory filter byte> | 54 | 0x0e 0x22 <shuffle mode & directory filter byte> |
55 | 0x0f 0x23 <scroll speed & WPS display byte> | 55 | 0x0f 0x23 <scroll speed & WPS display byte> |
56 | 0x10 0x24 <playlist options byte> | 56 | 0x10 0x24 <playlist options byte> |
57 | 0x11 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 | |||
132 | static 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 | ||
133 | void sound_menu(void) | 140 | void 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) | |||
484 | static int new_file(bool next_track) | 484 | static 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 | ||
1085 | void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost) | 1117 | void 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 | ||
24 | void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost); | 24 | void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost, int avc); |
25 | void mpeg_play(char* trackname); | 25 | void mpeg_play(char* trackname); |
26 | void mpeg_stop(void); | 26 | void mpeg_stop(void); |
27 | void mpeg_pause(void); | 27 | void 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 |