1
0
Fork 0
forked from len0rd/rockbox

Recording settings are now persistent. Added a Recording Settings menu

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2818 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2002-11-10 23:18:33 +00:00
parent 8e4a0e0aab
commit afe0da9e16
7 changed files with 251 additions and 103 deletions

View file

@ -1118,7 +1118,27 @@ desc: in the recording settings
eng: "Source" eng: "Source"
new: new:
id: LANG_RECORDING_CHANNEL id: LANG_RECORDING_CHANNELS
desc: in the recording settings desc: in the recording settings
eng: "Channel" eng: "Channels"
new:
id: LANG_RECORDING_SRC_MIC
desc: in the recording settings
eng: "Mic"
new:
id: LANG_RECORDING_SRC_LINE
desc: in the recording settings
eng: "Line In"
new:
id: LANG_RECORDING_SRC_DIGITAL
desc: in the recording settings
eng: "Digital"
new:
id: LANG_RECORDING_SETTINGS
desc: in the main menu
eng: "Recording settings"
new: new:

View file

@ -228,6 +228,7 @@ bool main_menu(void)
{ str(LANG_SOUND_SETTINGS), sound_menu }, { str(LANG_SOUND_SETTINGS), sound_menu },
{ str(LANG_GENERAL_SETTINGS), settings_menu }, { str(LANG_GENERAL_SETTINGS), settings_menu },
#ifdef HAVE_MAS3587F #ifdef HAVE_MAS3587F
{ str(LANG_RECORDING_SETTINGS), recording_menu },
{ str(LANG_RECORDING), recording_screen }, { str(LANG_RECORDING), recording_screen },
#endif #endif
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP

View file

@ -35,6 +35,7 @@
#include "peakmeter.h" #include "peakmeter.h"
#include "status.h" #include "status.h"
#include "menu.h" #include "menu.h"
#include "sound_menu.h"
bool f2_rec_screen(void); bool f2_rec_screen(void);
bool f3_rec_screen(void); bool f3_rec_screen(void);
@ -46,14 +47,6 @@ extern int mp3buf_write;
extern int mp3buf_read; extern int mp3buf_read;
extern bool recording; extern bool recording;
int mic_gain = 8;
int left_gain = 2;
int right_gain = 2;
unsigned int recording_quality = 5;
unsigned int recording_frequency = 0;
unsigned int recording_channel_mode = 0;
unsigned int recording_source = 0;
#define SOURCE_MIC 0 #define SOURCE_MIC 0
#define SOURCE_LINE 1 #define SOURCE_LINE 1
#define SOURCE_SPDIF 2 #define SOURCE_SPDIF 2
@ -70,13 +63,15 @@ char *freq_str[6] =
static void set_gain(void) static void set_gain(void)
{ {
if(recording_source == SOURCE_MIC) if(global_settings.rec_source == SOURCE_MIC)
{ {
mpeg_set_recording_gain(left_gain, 0, mic_gain); mpeg_set_recording_gain(global_settings.rec_left_gain, 0,
global_settings.rec_mic_gain);
} }
else else
{ {
mpeg_set_recording_gain(left_gain, right_gain, 0); mpeg_set_recording_gain(global_settings.rec_left_gain,
global_settings.rec_right_gain, 0);
} }
} }
@ -107,7 +102,7 @@ int cursor;
void adjust_cursor(void) void adjust_cursor(void)
{ {
if(recording_source == SOURCE_LINE) if(global_settings.rec_source == SOURCE_LINE)
{ {
if(cursor < 0) if(cursor < 0)
cursor = 0; cursor = 0;
@ -140,8 +135,10 @@ bool recording_screen(void)
peak_meter_enabled = true; peak_meter_enabled = true;
mpeg_set_recording_options(recording_frequency, recording_quality, mpeg_set_recording_options(global_settings.rec_frequency,
recording_source, recording_channel_mode); global_settings.rec_quality,
global_settings.rec_source,
global_settings.rec_channels);
lcd_setfont(FONT_UI); lcd_setfont(FONT_UI);
lcd_getstringsize("M", &w, &h); lcd_getstringsize("M", &w, &h);
@ -189,30 +186,37 @@ bool recording_screen(void)
switch(cursor) switch(cursor)
{ {
case 0: case 0:
if(recording_source == SOURCE_MIC) if(global_settings.rec_source == SOURCE_MIC)
{ {
mic_gain++; global_settings.rec_mic_gain++;
if(mic_gain > mpeg_sound_max(SOUND_MIC_GAIN)) if(global_settings.rec_mic_gain >
mic_gain = mpeg_sound_max(SOUND_MIC_GAIN); mpeg_sound_max(SOUND_MIC_GAIN))
global_settings.rec_mic_gain =
mpeg_sound_max(SOUND_MIC_GAIN);
} }
else else
{ {
gain = MAX(left_gain, right_gain) + 1; gain = MAX(global_settings.rec_left_gain,
global_settings.rec_right_gain) + 1;
if(gain > mpeg_sound_max(SOUND_MIC_GAIN)) if(gain > mpeg_sound_max(SOUND_MIC_GAIN))
gain = mpeg_sound_max(SOUND_MIC_GAIN); gain = mpeg_sound_max(SOUND_MIC_GAIN);
left_gain = gain; global_settings.rec_left_gain = gain;
right_gain = gain; global_settings.rec_right_gain = gain;
} }
break; break;
case 1: case 1:
left_gain++; global_settings.rec_left_gain++;
if(left_gain > mpeg_sound_max(SOUND_LEFT_GAIN)) if(global_settings.rec_left_gain >
left_gain = mpeg_sound_max(SOUND_LEFT_GAIN); mpeg_sound_max(SOUND_LEFT_GAIN))
global_settings.rec_left_gain =
mpeg_sound_max(SOUND_LEFT_GAIN);
break; break;
case 2: case 2:
right_gain++; global_settings.rec_right_gain++;
if(right_gain > mpeg_sound_max(SOUND_RIGHT_GAIN)) if(global_settings.rec_right_gain >
right_gain = mpeg_sound_max(SOUND_RIGHT_GAIN); mpeg_sound_max(SOUND_RIGHT_GAIN))
global_settings.rec_right_gain =
mpeg_sound_max(SOUND_RIGHT_GAIN);
break; break;
} }
set_gain(); set_gain();
@ -223,36 +227,50 @@ bool recording_screen(void)
switch(cursor) switch(cursor)
{ {
case 0: case 0:
if(recording_source == SOURCE_MIC) if(global_settings.rec_source == SOURCE_MIC)
{ {
mic_gain--; global_settings.rec_mic_gain--;
if(mic_gain < mpeg_sound_min(SOUND_MIC_GAIN)) if(global_settings.rec_mic_gain <
mic_gain = mpeg_sound_min(SOUND_MIC_GAIN); mpeg_sound_min(SOUND_MIC_GAIN))
global_settings.rec_mic_gain =
mpeg_sound_min(SOUND_MIC_GAIN);
} }
else else
{ {
gain = MAX(left_gain, right_gain) - 1; gain = MAX(global_settings.rec_left_gain,
global_settings.rec_right_gain) - 1;
if(gain < mpeg_sound_min(SOUND_LEFT_GAIN)) if(gain < mpeg_sound_min(SOUND_LEFT_GAIN))
gain = mpeg_sound_min(SOUND_LEFT_GAIN); gain = mpeg_sound_min(SOUND_LEFT_GAIN);
left_gain = gain; global_settings.rec_left_gain = gain;
right_gain = gain; global_settings.rec_right_gain = gain;
} }
break; break;
case 1: case 1:
left_gain--; global_settings.rec_left_gain--;
if(left_gain < mpeg_sound_min(SOUND_LEFT_GAIN)) if(global_settings.rec_left_gain <
left_gain = mpeg_sound_min(SOUND_LEFT_GAIN); mpeg_sound_min(SOUND_LEFT_GAIN))
global_settings.rec_left_gain =
mpeg_sound_min(SOUND_LEFT_GAIN);
break; break;
case 2: case 2:
right_gain--; global_settings.rec_right_gain--;
if(right_gain < mpeg_sound_min(SOUND_MIC_GAIN)) if(global_settings.rec_right_gain <
right_gain = mpeg_sound_min(SOUND_MIC_GAIN); mpeg_sound_min(SOUND_MIC_GAIN))
global_settings.rec_right_gain =
mpeg_sound_min(SOUND_MIC_GAIN);
break; break;
} }
set_gain(); set_gain();
update_countdown = 1; /* Update immediately */ update_countdown = 1; /* Update immediately */
break; break;
case BUTTON_F1:
if (recording_menu())
return SYS_USB_CONNECTED;
settings_save();
update_countdown = 1; /* Update immediately */
break;
case BUTTON_F2: case BUTTON_F2:
if (f2_rec_screen()) if (f2_rec_screen())
return SYS_USB_CONNECTED; return SYS_USB_CONNECTED;
@ -282,18 +300,20 @@ bool recording_screen(void)
peak_meter_draw(0, 8 + h, LCD_WIDTH, h); peak_meter_draw(0, 8 + h, LCD_WIDTH, h);
/* Show mic gain if input source is Mic */ /* Show mic gain if input source is Mic */
if(recording_source == 0) if(global_settings.rec_source == 0)
{ {
snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_GAIN), snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_GAIN),
fmt_gain(SOUND_MIC_GAIN, mic_gain, fmt_gain(SOUND_MIC_GAIN,
global_settings.rec_mic_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
lcd_puts(0, 3, buf); lcd_puts(0, 3, buf);
} }
else else
{ {
if(recording_source == SOURCE_LINE) if(global_settings.rec_source == SOURCE_LINE)
{ {
gain = MAX(left_gain, right_gain); gain = MAX(global_settings.rec_left_gain,
global_settings.rec_right_gain);
snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_GAIN), snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_GAIN),
fmt_gain(SOUND_LEFT_GAIN, gain, fmt_gain(SOUND_LEFT_GAIN, gain,
@ -301,12 +321,14 @@ bool recording_screen(void)
lcd_puts(0, 3, buf); lcd_puts(0, 3, buf);
snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_LEFT), snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_LEFT),
fmt_gain(SOUND_LEFT_GAIN, left_gain, fmt_gain(SOUND_LEFT_GAIN,
global_settings.rec_left_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
lcd_puts(0, 4, buf); lcd_puts(0, 4, buf);
snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_RIGHT), snprintf(buf, 32, "%s: %s", str(LANG_RECORDING_RIGHT),
fmt_gain(SOUND_RIGHT_GAIN, right_gain, fmt_gain(SOUND_RIGHT_GAIN,
global_settings.rec_right_gain,
buf2, sizeof(buf2))); buf2, sizeof(buf2)));
lcd_puts(0, 5, buf); lcd_puts(0, 5, buf);
} }
@ -314,14 +336,14 @@ bool recording_screen(void)
status_draw(); status_draw();
if(recording_source != SOURCE_SPDIF) if(global_settings.rec_source != SOURCE_SPDIF)
put_cursorxy(0, 3 + cursor, true); put_cursorxy(0, 3 + cursor, true);
snprintf(buf, 32, "%s %s [%d]", snprintf(buf, 32, "%s %s [%d]",
freq_str[recording_frequency], freq_str[global_settings.rec_frequency],
recording_channel_mode? global_settings.rec_channels?
str(LANG_CHANNEL_MONO):str(LANG_CHANNEL_STEREO), str(LANG_CHANNEL_MONO):str(LANG_CHANNEL_STEREO),
recording_quality); global_settings.rec_quality);
lcd_puts(0, 6, buf); lcd_puts(0, 6, buf);
} }
else else
@ -357,7 +379,7 @@ bool f2_rec_screen(void)
/* Recording quality */ /* Recording quality */
lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_QUALITY)); lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_QUALITY));
snprintf(buf, 32, "%d", recording_quality); snprintf(buf, 32, "%d", global_settings.rec_quality);
lcd_putsxy(0, LCD_HEIGHT/2-h, buf); lcd_putsxy(0, LCD_HEIGHT/2-h, buf);
lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
@ -366,14 +388,14 @@ bool f2_rec_screen(void)
snprintf(buf, sizeof buf, "%s:", str(LANG_RECORDING_FREQUENCY)); snprintf(buf, sizeof buf, "%s:", str(LANG_RECORDING_FREQUENCY));
lcd_getstringsize(buf,&w,&h); lcd_getstringsize(buf,&w,&h);
lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf);
ptr = freq_str[recording_frequency]; ptr = freq_str[global_settings.rec_frequency];
lcd_getstringsize(ptr, &w, &h); lcd_getstringsize(ptr, &w, &h);
lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr);
lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow],
LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true);
/* Channel mode */ /* Channel mode */
switch ( recording_channel_mode ) { switch ( global_settings.rec_channels ) {
case 0: case 0:
ptr = str(LANG_CHANNEL_STEREO); ptr = str(LANG_CHANNEL_STEREO);
break; break;
@ -383,9 +405,9 @@ bool f2_rec_screen(void)
break; break;
} }
lcd_getstringsize(str(LANG_RECORDING_CHANNEL), &w, &h); lcd_getstringsize(str(LANG_RECORDING_CHANNELS), &w, &h);
lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2,
str(LANG_RECORDING_CHANNEL)); str(LANG_RECORDING_CHANNELS));
lcd_getstringsize(str(LANG_F2_MODE), &w, &h); lcd_getstringsize(str(LANG_F2_MODE), &w, &h);
lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE)); lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F2_MODE));
lcd_getstringsize(ptr, &w, &h); lcd_getstringsize(ptr, &w, &h);
@ -398,25 +420,25 @@ bool f2_rec_screen(void)
switch (button_get(true)) { switch (button_get(true)) {
case BUTTON_LEFT: case BUTTON_LEFT:
case BUTTON_F2 | BUTTON_LEFT: case BUTTON_F2 | BUTTON_LEFT:
recording_quality++; global_settings.rec_quality++;
if(recording_quality > 7) if(global_settings.rec_quality > 7)
recording_quality = 0; global_settings.rec_quality = 0;
used = true; used = true;
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
case BUTTON_F2 | BUTTON_DOWN: case BUTTON_F2 | BUTTON_DOWN:
recording_frequency++; global_settings.rec_frequency++;
if(recording_frequency > 5) if(global_settings.rec_frequency > 5)
recording_frequency = 0; global_settings.rec_frequency = 0;
used = true; used = true;
break; break;
case BUTTON_RIGHT: case BUTTON_RIGHT:
case BUTTON_F2 | BUTTON_RIGHT: case BUTTON_F2 | BUTTON_RIGHT:
recording_channel_mode++; global_settings.rec_channels++;
if(recording_channel_mode > 1) if(global_settings.rec_channels > 1)
recording_channel_mode = 0; global_settings.rec_channels = 0;
used = true; used = true;
break; break;
@ -436,27 +458,30 @@ bool f2_rec_screen(void)
} }
} }
mpeg_set_recording_options(recording_frequency, recording_quality, mpeg_set_recording_options(global_settings.rec_frequency,
recording_source, recording_channel_mode); global_settings.rec_quality,
global_settings.rec_source,
global_settings.rec_channels);
// settings_save(); set_gain();
settings_save();
lcd_setfont(FONT_UI); lcd_setfont(FONT_UI);
return false; return false;
} }
char *src_str[] =
{
"Mic",
"Line In",
"Digital"
};
bool f3_rec_screen(void) bool f3_rec_screen(void)
{ {
bool exit = false; bool exit = false;
bool used = false; bool used = false;
int w, h; int w, h;
char *src_str[] =
{
str(LANG_RECORDING_SRC_MIC),
str(LANG_RECORDING_SRC_LINE),
str(LANG_RECORDING_SRC_DIGITAL)
};
lcd_setfont(FONT_SYSFIXED); lcd_setfont(FONT_SYSFIXED);
lcd_getstringsize("A",&w,&h); lcd_getstringsize("A",&w,&h);
@ -469,7 +494,7 @@ bool f3_rec_screen(void)
/* Recording source */ /* Recording source */
lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_SOURCE)); lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_RECORDING_SOURCE));
ptr = src_str[recording_source]; ptr = src_str[global_settings.rec_source];
lcd_getstringsize(ptr, &w, &h); lcd_getstringsize(ptr, &w, &h);
lcd_putsxy(0, LCD_HEIGHT/2-h, ptr); lcd_putsxy(0, LCD_HEIGHT/2-h, ptr);
lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
@ -480,25 +505,25 @@ bool f3_rec_screen(void)
switch (button_get(true)) { switch (button_get(true)) {
case BUTTON_LEFT: case BUTTON_LEFT:
case BUTTON_F3 | BUTTON_LEFT: case BUTTON_F3 | BUTTON_LEFT:
recording_source++; global_settings.rec_source++;
if(recording_source > 2) if(global_settings.rec_source > 2)
recording_source = 0; global_settings.rec_source = 0;
used = true; used = true;
break; break;
case BUTTON_DOWN: case BUTTON_DOWN:
case BUTTON_F3 | BUTTON_DOWN: case BUTTON_F3 | BUTTON_DOWN:
recording_frequency++; global_settings.rec_frequency++;
if(recording_frequency > 5) if(global_settings.rec_frequency > 5)
recording_frequency = 0; global_settings.rec_frequency = 0;
used = true; used = true;
break; break;
case BUTTON_RIGHT: case BUTTON_RIGHT:
case BUTTON_F3 | BUTTON_RIGHT: case BUTTON_F3 | BUTTON_RIGHT:
recording_channel_mode++; global_settings.rec_channels++;
if(recording_channel_mode > 1) if(global_settings.rec_channels > 1)
recording_channel_mode = 0; global_settings.rec_channels = 0;
used = true; used = true;
break; break;
@ -518,10 +543,14 @@ bool f3_rec_screen(void)
} }
} }
mpeg_set_recording_options(recording_frequency, recording_quality, mpeg_set_recording_options(global_settings.rec_frequency,
recording_source, recording_channel_mode); global_settings.rec_quality,
global_settings.rec_source,
global_settings.rec_channels);
// settings_save(); set_gain();
settings_save();
lcd_setfont(FONT_UI); lcd_setfont(FONT_UI);
return false; return false;

View file

@ -99,13 +99,15 @@ offset abs
peak_meter_dbfs (bit 7) peak_meter_dbfs (bit 7)
0x1f 0x33 <peak meter min either in -db or in percent> 0x1f 0x33 <peak meter min either in -db or in percent>
0x20 0x34 <peak meter max either in -db or in percent> 0x20 0x34 <peak meter max either in -db or in percent>
0x21 0x35 <repeat mode> 0x21 0x35 <repeat mode (bit 0-1), rec. channels (bit 2),
mic gain (bit 4-7)>
0x22 0x36 <rec. quality (bit 0-2), source (bit 3-4), frequency (bit 5-7)>
0x23 0x37 <rec. left gain (bit 0-3)>
0x24 0x38 <rec. right gain (bit 0-3)>
<all unused space filled with 0xff> <all unused space filled with 0xff>
the geeky but useless statistics part:
0x24 <total uptime in seconds: 32 bits uint, actually unused for now>
0x2a <checksum 2 bytes: xor of 0x0-0x29> 0x2a <checksum 2 bytes: xor of 0x0-0x29>
Config memory is reset to 0xff and initialized with 'factory defaults' if Config memory is reset to 0xff and initialized with 'factory defaults' if
@ -329,9 +331,16 @@ int settings_save( void )
(global_settings.peak_meter_dbfs ? 0x80 : 0); (global_settings.peak_meter_dbfs ? 0x80 : 0);
config_block[0x1f] = (unsigned char)global_settings.peak_meter_min; config_block[0x1f] = (unsigned char)global_settings.peak_meter_min;
config_block[0x20] = (unsigned char)global_settings.peak_meter_max; config_block[0x20] = (unsigned char)global_settings.peak_meter_max;
config_block[0x21] = (unsigned char)global_settings.repeat_mode; config_block[0x21] = (unsigned char)
((global_settings.repeat_mode & 3) |
memcpy(&config_block[0x24], &global_settings.total_uptime, 4); ((global_settings.rec_channels & 1) << 2) |
((global_settings.rec_mic_gain & 0x0f) << 3));
config_block[0x22] = (unsigned char)
((global_settings.rec_quality & 7) |
((global_settings.rec_source & 1) << 3) |
((global_settings.rec_frequency & 7) << 5));
config_block[0x23] = (unsigned char)global_settings.rec_left_gain;
config_block[0x24] = (unsigned char)global_settings.rec_right_gain;
strncpy(&config_block[0xb8], global_settings.wps_file, MAX_FILENAME); strncpy(&config_block[0xb8], global_settings.wps_file, MAX_FILENAME);
strncpy(&config_block[0xcc], global_settings.lang_file, MAX_FILENAME); strncpy(&config_block[0xcc], global_settings.lang_file, MAX_FILENAME);
@ -565,10 +574,24 @@ void settings_load(void)
global_settings.peak_meter_max = config_block[0x20]; global_settings.peak_meter_max = config_block[0x20];
if (config_block[0x21] != 0xFF) if (config_block[0x21] != 0xFF)
global_settings.repeat_mode = config_block[0x21]; {
global_settings.repeat_mode = config_block[0x21] & 3;
global_settings.rec_channels = (config_block[0x21] >> 2) & 1;
global_settings.rec_mic_gain = (config_block[0x21] >> 4) & 0x0f;
}
if (config_block[0x22] != 0xFF)
{
global_settings.rec_quality = config_block[0x22] & 7;
global_settings.rec_source = (config_block[0x22] >> 3) & 3;
global_settings.rec_frequency = (config_block[0x22] >> 5) & 7;
}
if (config_block[0x23] != 0xFF)
global_settings.rec_left_gain = config_block[0x23] & 0x0f;
if (config_block[0x24] != 0xFF) if (config_block[0x24] != 0xFF)
memcpy(&global_settings.total_uptime, &config_block[0x24], 4); global_settings.rec_right_gain = config_block[0x24] & 0x0f;
memcpy(&global_settings.resume_first_index, &config_block[0xF4], 4); memcpy(&global_settings.resume_first_index, &config_block[0xF4], 4);
memcpy(&global_settings.resume_seed, &config_block[0xF8], 4); memcpy(&global_settings.resume_seed, &config_block[0xF8], 4);
@ -731,6 +754,13 @@ void settings_reset(void) {
global_settings.bass_boost = mpeg_sound_default(SOUND_SUPERBASS); global_settings.bass_boost = mpeg_sound_default(SOUND_SUPERBASS);
global_settings.avc = mpeg_sound_default(SOUND_AVC); global_settings.avc = mpeg_sound_default(SOUND_AVC);
global_settings.channel_config = mpeg_sound_default(SOUND_CHANNELS); global_settings.channel_config = mpeg_sound_default(SOUND_CHANNELS);
global_settings.rec_quality = 5;
global_settings.rec_source = 0; /* 0=mic */
global_settings.rec_frequency = 0; /* 0=44.1kHz */
global_settings.rec_channels = 0; /* 0=Stereo */
global_settings.rec_mic_gain = 8;
global_settings.rec_left_gain = 2; /* 0dB */
global_settings.rec_right_gain = 2; /* 0dB */
global_settings.resume = RESUME_ASK; global_settings.resume = RESUME_ASK;
global_settings.contrast = DEFAULT_CONTRAST_SETTING; global_settings.contrast = DEFAULT_CONTRAST_SETTING;
global_settings.poweroff = DEFAULT_POWEROFF_SETTING; global_settings.poweroff = DEFAULT_POWEROFF_SETTING;
@ -744,7 +774,6 @@ void settings_reset(void) {
global_settings.repeat_mode = REPEAT_ALL; global_settings.repeat_mode = REPEAT_ALL;
global_settings.playlist_shuffle = false; global_settings.playlist_shuffle = false;
global_settings.discharge = 0; global_settings.discharge = 0;
global_settings.total_uptime = 0;
global_settings.timeformat = 0; global_settings.timeformat = 0;
global_settings.volume_type = 0; global_settings.volume_type = 0;
global_settings.battery_type = 0; global_settings.battery_type = 0;

View file

@ -61,12 +61,27 @@ struct user_settings
int bass_boost; /* bass boost eq: 0-100 0=off 100=max */ int bass_boost; /* bass boost eq: 0-100 0=off 100=max */
int avc; /* auto volume correct: 0=disable, 1=2s 2=4s 3=8s */ int avc; /* auto volume correct: 0=disable, 1=2s 2=4s 3=8s */
int channel_config; /* Stereo, Mono, Mono left, Mono right */ int channel_config; /* Stereo, Mono, Mono left, Mono right */
int rec_quality; /* 0-7 */
int rec_source; /* 0=mic, 1=line, 2=S/PDIF */
int rec_frequency; /* 0 = 44.1kHz
1 = 48kHz
2 = 32kHz
3 = 22.05kHz
4 = 24kHz
5 = 16kHz */
int rec_channels; /* 0=Stereo, 1=Mono */
int rec_mic_gain; /* 0-15 */
int rec_left_gain; /* 0-15 */
int rec_right_gain; /* 0-15 */
/* device settings */ /* device settings */
int contrast; /* lcd contrast: 0-100 0=low 100=high */ int contrast; /* lcd contrast: 0-100 0=low 100=high */
int poweroff; /* power off timer */ int poweroff; /* power off timer */
int backlight_timeout; /* backlight off timeout: 0-18 0=never,1=always,then according to timeout_values[] */ int backlight_timeout; /* backlight off timeout: 0-18 0=never,
1=always,
then according to timeout_values[] */
bool backlight_on_when_charging; bool backlight_on_when_charging;
bool discharge; /* maintain charge of at least: false = 90%, true = 10% */ bool discharge; /* maintain charge of at least: false = 90%, true = 10% */
@ -115,8 +130,6 @@ struct user_settings
bool browse_current; /* 1=goto current song, bool browse_current; /* 1=goto current song,
0=goto previous location */ 0=goto previous location */
/* geeky persistent statistics */
unsigned int total_uptime; /* total uptime since rockbox was first booted */
}; };
/* prototypes */ /* prototypes */

View file

@ -183,7 +183,42 @@ static bool avc(void)
return set_option(str(LANG_DECAY), &global_settings.avc, return set_option(str(LANG_DECAY), &global_settings.avc,
names, 4, set_avc); names, 4, set_avc);
} }
#endif /* ARCHOS_RECORDER */
static bool recsource(void)
{
char *names[] = {str(LANG_RECORDING_SRC_MIC), str(LANG_RECORDING_SRC_LINE),
str(LANG_RECORDING_SRC_DIGITAL) };
return set_option(str(LANG_RECORDING_SOURCE),
&global_settings.rec_source,
names, 3, NULL );
}
static bool recfrequency(void)
{
char *names[] = {"44.1kHz", "48kHz", "32kHz",
"22.05kHz", "24kHz", "16kHz"};
return set_option(str(LANG_RECORDING_FREQUENCY),
&global_settings.rec_frequency,
names, 6, NULL );
}
static bool recchannels(void)
{
char *names[] = {str(LANG_CHANNEL_STEREO), str(LANG_CHANNEL_MONO)};
return set_option(str(LANG_RECORDING_CHANNELS),
&global_settings.rec_channels,
names, 2, NULL );
}
static bool recquality(void)
{
return set_int(str(LANG_RECORDING_QUALITY), "",
&global_settings.rec_quality,
NULL, 1, 0, 7 );
}
#endif /* HAVE_MAS3587F */
static void set_chanconf(int val) static void set_chanconf(int val)
{ {
@ -221,3 +256,23 @@ bool sound_menu(void)
return result; return result;
} }
#ifdef HAVE_MAS3587F
bool recording_menu(void)
{
int m;
bool result;
struct menu_items items[] = {
{ str(LANG_RECORDING_QUALITY), recquality },
{ str(LANG_RECORDING_FREQUENCY), recfrequency },
{ str(LANG_RECORDING_SOURCE), recsource },
{ str(LANG_RECORDING_CHANNELS), recchannels },
};
m=menu_init( items, sizeof items / sizeof(struct menu_items) );
result = menu_run(m);
menu_exit(m);
return result;
}
#endif

View file

@ -22,5 +22,6 @@
#include "menu.h" #include "menu.h"
bool sound_menu(void); bool sound_menu(void);
bool recording_menu(void);
#endif #endif