Corrected name spelling.
[kugel-rb/myfork.git] / apps / sound_menu.c
blob24da3f5555fb33d13d9f3a949aeb71484b765269
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 Björn Stenberg
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
19 #include "config.h"
20 #include <stdio.h>
21 #include <stdbool.h>
22 #include "kernel.h"
23 #include "lcd.h"
24 #include "menu.h"
25 #include "button.h"
26 #include "mpeg.h"
27 #include "settings.h"
28 #include "status.h"
29 #ifdef HAVE_LCD_BITMAP
30 #include "icons.h"
31 #endif
33 static char *fmt[] =
35 "", /* no decimals */
36 "%d.%d %s ", /* 1 decimal */
37 "%d.%02d %s " /* 2 decimals */
40 void set_sound(char* string,
41 int* variable,
42 int setting)
44 bool done = false;
45 bool changed = true;
46 int min, max;
47 int val;
48 int numdec;
49 int integer;
50 int dec;
51 char* unit;
52 char str[32];
54 unit = mpeg_sound_unit(setting);
55 numdec = mpeg_sound_numdecimals(setting);
56 min = mpeg_sound_min(setting);
57 max = mpeg_sound_max(setting);
59 #ifdef HAVE_LCD_BITMAP
60 if(global_settings.statusbar)
61 lcd_setmargins(0, STATUSBAR_HEIGHT);
62 else
63 lcd_setmargins(0, 0);
64 #endif
65 lcd_clear_display();
66 lcd_puts_scroll(0,0,string);
68 while (!done) {
69 if (changed) {
70 val = mpeg_val2phys(setting, *variable);
71 if(numdec)
73 integer = val / (10 * numdec);
74 dec = val % (10 * numdec);
75 snprintf(str,sizeof str, fmt[numdec], integer, dec, unit);
77 else
79 snprintf(str,sizeof str,"%d %s ", val, unit);
82 lcd_puts(0,1,str);
83 status_draw();
84 lcd_update();
86 changed = false;
87 switch( button_get_w_tmo(HZ/2) ) {
88 #ifdef HAVE_RECORDER_KEYPAD
89 case BUTTON_UP:
90 case BUTTON_UP | BUTTON_REPEAT:
91 #else
92 case BUTTON_RIGHT:
93 case BUTTON_RIGHT | BUTTON_REPEAT:
94 #endif
95 (*variable)++;
96 if(*variable > max )
97 *variable = max;
98 changed = true;
99 break;
101 #ifdef HAVE_RECORDER_KEYPAD
102 case BUTTON_DOWN:
103 case BUTTON_DOWN | BUTTON_REPEAT:
104 #else
105 case BUTTON_LEFT:
106 case BUTTON_LEFT | BUTTON_REPEAT:
107 #endif
108 (*variable)--;
109 if(*variable < min )
110 *variable = min;
111 changed = true;
112 break;
114 #ifdef HAVE_RECORDER_KEYPAD
115 case BUTTON_LEFT:
116 #else
117 case BUTTON_STOP:
118 case BUTTON_MENU:
119 #endif
120 done = true;
121 break;
122 #ifdef HAVE_RECORDER_KEYPAD
123 case BUTTON_F3:
124 #ifdef HAVE_LCD_BITMAP
125 global_settings.statusbar = !global_settings.statusbar;
126 settings_save();
127 if(global_settings.statusbar)
128 lcd_setmargins(0, STATUSBAR_HEIGHT);
129 else
130 lcd_setmargins(0, 0);
131 lcd_clear_display();
132 lcd_puts_scroll(0, 0, string);
133 #endif
134 break;
135 #endif
137 if (changed) {
138 mpeg_sound_set(setting, *variable);
139 #ifdef HAVE_MAS3507D
140 if(setting == SOUND_BALANCE)
141 mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
142 #endif
145 lcd_stop_scroll();
148 static Menu volume(void)
150 set_sound("Volume", &global_settings.volume, SOUND_VOLUME);
151 return MENU_OK;
154 static Menu balance(void)
156 set_sound("Balance", &global_settings.balance, SOUND_BALANCE);
157 return MENU_OK;
160 static Menu bass(void)
162 set_sound("Bass", &global_settings.bass, SOUND_BASS);
163 return MENU_OK;
166 static Menu treble(void)
168 set_sound("Treble", &global_settings.treble, SOUND_TREBLE);
169 return MENU_OK;
172 #ifdef HAVE_MAS3587F
173 static Menu loudness(void)
175 set_sound("Loudness", &global_settings.loudness, SOUND_LOUDNESS);
176 return MENU_OK;
179 static Menu bass_boost(void)
181 set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS);
182 return MENU_OK;
185 static Menu avc(void)
187 char* names[] = { "off", "2s ", "4s ", "8s " };
188 set_option("[AV decay time]", &global_settings.avc, names, 4 );
189 mpeg_sound_set(SOUND_AVC, global_settings.avc);
190 return MENU_OK;
192 #endif /* ARCHOS_RECORDER */
194 Menu sound_menu(void)
196 int m;
197 Menu result;
198 struct menu_items items[] = {
199 { "Volume", volume },
200 { "Bass", bass },
201 { "Treble", treble },
202 { "Balance", balance },
203 #ifdef HAVE_MAS3587F
204 { "Loudness", loudness },
205 { "Bass Boost", bass_boost },
206 { "Auto Volume", avc }
207 #endif
210 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
211 result = menu_run(m);
212 menu_exit(m);
214 return result;