diff --git a/apps/filetree.c b/apps/filetree.c index 2f4c21dcfe..3496aedd6c 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -829,7 +829,7 @@ int ft_enter(struct tree_context* c) playlist_get_filename_crc32(NULL, start_index); global_status.resume_elapsed = 0; global_status.resume_offset = 0; - status_save(); + status_save(false); rc = GO_TO_WPS; } else { diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index bcfb8273d4..53efc1f7ac 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c @@ -187,10 +187,10 @@ void draw_progressbar(struct gui_wps *gwps, struct skin_viewport* skin_viewport, int maxvol = sound_max(SOUND_VOLUME); #if defined(HAVE_PERCEPTUAL_VOLUME) || defined(HAVE_TOUCHSCREEN) length = 1000; - end = to_normalized_volume(global_settings.volume, minvol, maxvol, length); + end = to_normalized_volume(global_status.volume, minvol, maxvol, length); #else length = maxvol - minvol; - end = global_settings.volume - minvol; + end = global_status.volume - minvol; #endif } else if (pb->type == SKIN_TOKEN_BATTERY_PERCENTBAR) diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index e614990679..5bfed0b50d 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -1910,7 +1910,7 @@ static int parse_touchregion(struct skin_element *element, if (region->action == ACTION_TOUCH_MUTE) { - region->value = global_settings.volume; + region->value = global_status.volume; } diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index c3e81e4da0..9cbc4066de 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -1173,30 +1173,30 @@ const char *get_token_value(struct gui_wps *gwps, case SKIN_TOKEN_VOLUME: format_sound_value_ex(buf, buf_size, SOUND_VOLUME, - global_settings.volume, true); + global_status.volume, true); if (intval) { int minvol = sound_min(SOUND_VOLUME); if (limit == TOKEN_VALUE_ONLY) { - numeric_ret = global_settings.volume; + numeric_ret = global_status.volume; } - else if (global_settings.volume == minvol) + else if (global_status.volume == minvol) { numeric_ret = 1; } - else if (global_settings.volume == 0) + else if (global_status.volume == 0) { numeric_ret = limit - 1; } - else if (global_settings.volume > 0) + else if (global_status.volume > 0) { numeric_ret = limit; } else { - numeric_ret = (limit-3) * (global_settings.volume - minvol - 1) + numeric_ret = (limit-3) * (global_status.volume - minvol - 1) / (-1 - minvol) + 2; } } diff --git a/apps/gui/skin_engine/skin_touchsupport.c b/apps/gui/skin_engine/skin_touchsupport.c index cd2f5b6cd2..4479b4754d 100644 --- a/apps/gui/skin_engine/skin_touchsupport.c +++ b/apps/gui/skin_engine/skin_touchsupport.c @@ -274,12 +274,12 @@ int skin_get_touchaction(struct gui_wps *gwps, int* edge_offset) case ACTION_TOUCH_MUTE: { const int min_vol = sound_min(SOUND_VOLUME); - if (global_settings.volume == min_vol) - global_settings.volume = temp->value; + if (global_status.volume == min_vol) + global_status.volume = temp->value; else { - temp->value = global_settings.volume; - global_settings.volume = min_vol; + temp->value = global_status.volume; + global_status.volume = min_vol; } setvol(); returncode = ACTION_REDRAW; diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c index 2d446025cb..283a9c5293 100644 --- a/apps/gui/statusbar.c +++ b/apps/gui/statusbar.c @@ -229,7 +229,7 @@ static struct screen * sb_fill_bar_info(struct gui_statusbar * bar) bar->battery_icon_switch_tick = current_tick + HZ; } } - bar->info.volume = global_settings.volume; + bar->info.volume = global_status.volume; bar->info.shuffle = global_settings.playlist_shuffle; #ifdef HAS_BUTTON_HOLD bar->info.keylock = button_hold(); diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 4e0911f7fd..5b10ce9e3a 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -192,8 +192,8 @@ static int skintouch_to_wps(void) const int max_vol = sound_max(SOUND_VOLUME); const int step_vol = sound_steps(SOUND_VOLUME); - global_settings.volume = from_normalized_volume(offset, min_vol, max_vol, 1000); - global_settings.volume -= (global_settings.volume % step_vol); + global_status.volume = from_normalized_volume(offset, min_vol, max_vol, 1000); + global_status.volume -= (global_status.volume % step_vol); setvol(); } return ACTION_TOUCHSCREEN; diff --git a/apps/iap/iap-core.c b/apps/iap/iap-core.c index 3faf8237bf..cb04ea8d35 100644 --- a/apps/iap/iap-core.c +++ b/apps/iap/iap-core.c @@ -322,7 +322,7 @@ void iap_set_remote_volume(void) IAP_TX_INIT(0x03, 0x0D); IAP_TX_PUT(0x04); IAP_TX_PUT(0x00); - IAP_TX_PUT(0xFF & (int)((global_settings.volume + 90) * 2.65625)); + IAP_TX_PUT(0xFF & (int)((global_status.volume + 90) * 2.65625)); iap_send_tx(); } @@ -882,7 +882,7 @@ void iap_periodic(void) IAP_TX_INIT(0x03, 0x09); IAP_TX_PUT(0x04); IAP_TX_PUT(0x00); - IAP_TX_PUT(0xFF &(int)((global_settings.volume + 90) * 2.65625)); + IAP_TX_PUT(0xFF &(int)((global_status.volume + 90) * 2.65625)); device.changed_notifications |= BIT_N(4); iap_send_tx(); } diff --git a/apps/iap/iap-lingo3.c b/apps/iap/iap-lingo3.c index c7801fbce0..f1aeb1f64d 100644 --- a/apps/iap/iap-lingo3.c +++ b/apps/iap/iap-lingo3.c @@ -265,7 +265,7 @@ void iap_handlepkt_mode3(const unsigned int len, const unsigned char *buf) device.play_status = audio_status(); /* TODO: Fix this */ device.mute = false; - device.volume = global_settings.volume; + device.volume = global_status.volume; device.power_state = charger_input_state; device.battery_level = battery_level(); /* TODO: Fix this */ @@ -441,7 +441,7 @@ void iap_handlepkt_mode3(const unsigned int len, const unsigned char *buf) /* Mute status False*/ IAP_TX_PUT(0x00); /* Volume */ - IAP_TX_PUT(0xFF & (int)((global_settings.volume + 90) * 2.65625)); + IAP_TX_PUT(0xFF & (int)((global_status.volume + 90) * 2.65625)); } else { /* Mute status True*/ @@ -630,8 +630,8 @@ void iap_handlepkt_mode3(const unsigned int len, const unsigned char *buf) /* Mute status False*/ IAP_TX_PUT(0x00); /* Volume */ - IAP_TX_PUT(0xFF & (int)((global_settings.volume + 90) * 2.65625)); - IAP_TX_PUT(0xFF & (int)((global_settings.volume + 90) * 2.65625)); + IAP_TX_PUT(0xFF & (int)((global_status.volume + 90) * 2.65625)); + IAP_TX_PUT(0xFF & (int)((global_status.volume + 90) * 2.65625)); } else { /* Mute status True*/ @@ -766,7 +766,7 @@ void iap_handlepkt_mode3(const unsigned int len, const unsigned char *buf) CHECKLEN(5); if (buf[0x03]==0x00){ /* Not Muted */ - global_settings.volume = (int) (buf[0x04]/2.65625)-90; + global_status.volume = (int) (buf[0x04]/2.65625)-90; device.mute = false; } else { @@ -940,7 +940,7 @@ void iap_handlepkt_mode3(const unsigned int len, const unsigned char *buf) CHECKLEN(7); if (buf[0x03]==0x00){ /* Not Muted */ - global_settings.volume = (int) (buf[0x04]/2.65625)-90; + global_status.volume = (int) (buf[0x04]/2.65625)-90; device.mute = false; } else { diff --git a/apps/main.c b/apps/main.c index 3d8bdc3432..e3189d1713 100644 --- a/apps/main.c +++ b/apps/main.c @@ -319,7 +319,7 @@ static int INIT_ATTR init_dircache(bool preinit) struct dircache_info info; dircache_get_info(&info); global_status.dircache_size = info.size; - status_save(); + status_save(true); } /* else don't wait or already enabled by load */ } @@ -435,7 +435,7 @@ static void init(void) pcm_init(); dsp_init(); settings_reset(); - settings_load(SETTINGS_ALL); + settings_load(); settings_apply(true); #ifdef HAVE_DIRCACHE init_dircache(true); @@ -679,9 +679,9 @@ static void init(void) pcm_init(); dsp_init(); - CHART(">settings_load(ALL)"); - settings_load(SETTINGS_ALL); - CHART("settings_load"); + settings_load(); + CHART(" max_vol) - global_settings.volume = max_vol; - if (global_settings.volume > global_settings.volume_limit) - global_settings.volume = global_settings.volume_limit; - - sound_set_volume(global_settings.volume); + int volume = global_status.volume; + if (volume < min_vol) + volume = min_vol; + if (volume > max_vol) + volume = max_vol; + if (volume > global_settings.volume_limit) + volume = global_settings.volume_limit; + global_status.volume = volume; + sound_set_volume(volume); global_status.last_volume_change = current_tick; - settings_save(); + status_save(false); } #ifdef HAVE_PERCEPTUAL_VOLUME @@ -920,7 +921,7 @@ void set_normalized_volume(int vol) if (vol >= norm_tab_size) vol = norm_tab_size - 1; - global_settings.volume = norm_tab[vol]; + global_status.volume = norm_tab[vol]; } int get_normalized_volume(void) @@ -931,7 +932,7 @@ int get_normalized_volume(void) while (a != b) { int i = (a + b + 1) / 2; - if (global_settings.volume < norm_tab[i]) + if (global_status.volume < norm_tab[i]) b = i - 1; else a = i; @@ -942,12 +943,12 @@ int get_normalized_volume(void) #else void set_normalized_volume(int vol) { - global_settings.volume = vol * sound_steps(SOUND_VOLUME); + global_status.volume = vol * sound_steps(SOUND_VOLUME); } int get_normalized_volume(void) { - return global_settings.volume / sound_steps(SOUND_VOLUME); + return global_status.volume / sound_steps(SOUND_VOLUME); } #endif @@ -971,7 +972,7 @@ void adjust_volume_ex(int steps, enum volume_adjust_mode mode) #endif case VOLUME_ADJUST_DIRECT: default: - global_settings.volume += steps * sound_steps(SOUND_VOLUME); + global_status.volume += steps * sound_steps(SOUND_VOLUME); break; } diff --git a/apps/playback.c b/apps/playback.c index 92000ad0ec..e304bb0447 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -3011,7 +3011,7 @@ static void audio_start_playback(const struct audio_resume_info *resume_info, audio_set_output_source(AUDIO_SRC_PLAYBACK); #endif #ifndef PLATFORM_HAS_VOLUME_CHANGE - sound_set_volume(global_settings.volume); + sound_set_volume(global_status.volume); #endif pcmbuf_update_frequency(); diff --git a/apps/playlist.c b/apps/playlist.c index dafb2e652a..a55fe89918 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -3777,7 +3777,7 @@ int playlist_update_resume_info(const struct mp3entry* id3) global_status.resume_elapsed = id3->elapsed; global_status.resume_offset = id3->offset; global_status.resume_modified = pl_modified; - status_save(); + status_save(false); } } else @@ -3787,7 +3787,7 @@ int playlist_update_resume_info(const struct mp3entry* id3) global_status.resume_elapsed = -1; global_status.resume_offset = -1; global_status.resume_modified = false; - status_save(); + status_save(true); return -1; } diff --git a/apps/plugin.c b/apps/plugin.c index 1a5507538b..e3483e08b3 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -1029,7 +1029,7 @@ int plugin_load(const char* plugin, const void* parameter) plugin_check_open_close__exit(); - status_save(); + status_save(false); if (rc == PLUGIN_ERROR) splash(HZ*2, str(LANG_PLUGIN_ERROR)); diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c index 0fd2a947fb..56ef25a579 100644 --- a/apps/plugins/beatbox/beatbox.c +++ b/apps/plugins/beatbox/beatbox.c @@ -601,23 +601,23 @@ int beatboxmain() /* case BTN_UP: case BTN_UP | BUTTON_REPEAT: - vol = rb->global_settings->volume; + vol = rb->global_status->volume; if (vol < rb->sound_max(SOUND_VOLUME)) { vol++; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } break; case BTN_DOWN: case BTN_DOWN | BUTTON_REPEAT: - vol = rb->global_settings->volume; + vol = rb->global_status->volume; if (vol > rb->sound_min(SOUND_VOLUME)) { vol--; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } break; diff --git a/apps/plugins/doom/m_menu.c b/apps/plugins/doom/m_menu.c index aa82959aaf..123f5ed82c 100644 --- a/apps/plugins/doom/m_menu.c +++ b/apps/plugins/doom/m_menu.c @@ -878,7 +878,7 @@ void M_SystemVol(int choice) { systemvol-=5; rb->sound_set(SOUND_VOLUME, systemvol); - rb->global_settings->volume = systemvol; + rb->global_status->volume = systemvol; } break; case 1: @@ -886,7 +886,7 @@ void M_SystemVol(int choice) { systemvol+=5; rb->sound_set(SOUND_VOLUME, systemvol); - rb->global_settings->volume = systemvol; + rb->global_status->volume = systemvol; } break; } diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c index 04817d4722..ec004f6614 100644 --- a/apps/plugins/doom/rockdoom.c +++ b/apps/plugins/doom/rockdoom.c @@ -718,8 +718,8 @@ enum plugin_status plugin_start(const void* parameter) int mod = (rb->sound_max(SOUND_VOLUME)-rb->sound_min(SOUND_VOLUME))/15; if(mod == 0) - mod = rb->global_settings->volume; - systemvol= rb->global_settings->volume-rb->global_settings->volume%mod; + mod = rb->global_status->volume; + systemvol= rb->global_status->volume-rb->global_status->volume%mod; general_translucency = default_translucency; // phares diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c index 99d9e033fc..deb5a115bc 100644 --- a/apps/plugins/fft/fft.c +++ b/apps/plugins/fft/fft.c @@ -978,7 +978,7 @@ static void fft_osd_format_message(enum fft_setting_flags id) case FFT_SETF_VOLUME: rb->snprintf(fft_osd_message, sizeof (fft_osd_message), "Volume: %d%s", - rb->sound_val2phys(SOUND_VOLUME, global_settings.volume), + rb->sound_val2phys(SOUND_VOLUME, global_status.volume), rb->sound_unit(SOUND_VOLUME)); return; #endif diff --git a/apps/plugins/lib/playback_control.c b/apps/plugins/lib/playback_control.c index 3e97916400..19d39a9c92 100644 --- a/apps/plugins/lib/playback_control.c +++ b/apps/plugins/lib/playback_control.c @@ -65,7 +65,7 @@ static bool nexttrack(void) static bool volume(void) { const struct settings_list* vol = - rb->find_setting(&rb->global_settings->volume); + rb->find_setting(&rb->global_status->volume); return rb->option_screen((struct settings_list*)vol, parentvp, false, "Volume"); } diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c index 9d61c067fd..001d4286dd 100644 --- a/apps/plugins/metronome.c +++ b/apps/plugins/metronome.c @@ -887,7 +887,7 @@ static void metronome_draw(struct screen* display, int state) /* One line in several. */ rb->snprintf( buffer, sizeof(buffer), "%u/%u@%u V%d" , ps->beats_per_bar, ps->base_beat - , bpm, rb->global_settings->volume ); + , bpm, rb->global_status->volume ); display->puts(0,4, buffer); /* Would it hurt to draw a 3rd line to 2-line display? @@ -931,7 +931,7 @@ static void metronome_draw(struct screen* display, int state) #endif rb->snprintf( buffer, sizeof(buffer), "BPM: %d Vol: %d" - , bpm, rb->global_settings->volume ); + , bpm, rb->global_status->volume ); display->puts(0,3, buffer); display->hline(0, 111, 12); @@ -962,7 +962,7 @@ static void draw_display(void) This is for parts with associated volume. */ static void tweak_volume(int offset) { - int vol = rb->global_settings->volume + offset; + int vol = rb->global_status->volume + offset; int minvol = rb->sound_min(SOUND_VOLUME); int maxvol = rb->sound_max(SOUND_VOLUME); @@ -1121,13 +1121,13 @@ static void change_volume(int delta) { int minvol = rb->sound_min(SOUND_VOLUME); int maxvol = rb->sound_max(SOUND_VOLUME); - int vol = rb->global_settings->volume + delta; + int vol = rb->global_status->volume + delta; if (vol > maxvol) vol = maxvol; else if(vol < minvol) vol = minvol; - if(vol != rb->global_settings->volume) + if(vol != rb->global_status->volume) { - rb->global_settings->volume = vol; + rb->global_status->volume = vol; tweak_volume(part->volume); trigger_display(display_state); } diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c index 93d1ccdca1..bf79b5038b 100644 --- a/apps/plugins/midi/midiplay.c +++ b/apps/plugins/midi/midiplay.c @@ -588,12 +588,12 @@ static int midimain(const void * filename) case MIDI_VOL_UP: case MIDI_VOL_UP | BUTTON_REPEAT: { - vol = rb->global_settings->volume; + vol = rb->global_status->volume; if (vol < rb->sound_max(SOUND_VOLUME)) { vol++; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } break; } @@ -601,12 +601,12 @@ static int midimain(const void * filename) case MIDI_VOL_DOWN: case MIDI_VOL_DOWN | BUTTON_REPEAT: { - vol = rb->global_settings->volume; + vol = rb->global_status->volume; if (vol > rb->sound_min(SOUND_VOLUME)) { vol--; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } break; } diff --git a/apps/plugins/mikmod/mikmod.c b/apps/plugins/mikmod/mikmod.c index 0cddbf3282..99d5aca148 100644 --- a/apps/plugins/mikmod/mikmod.c +++ b/apps/plugins/mikmod/mikmod.c @@ -326,7 +326,7 @@ static void showinfo(void) module->sngspd, module->bpm); rb->lcd_putsxy(1, 1 + 6 * font_h, statustext); - sprintf(statustext, "vol: %ddB", rb->global_settings->volume); + sprintf(statustext, "vol: %ddB", rb->global_status->volume); rb->lcd_putsxy(1, 1 + 7 * font_h, statustext); sprintf(statustext, "time: %d:%02d", diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index db04d1865b..677e19e17c 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -1462,7 +1462,7 @@ static void osd_refresh_volume(void) char buf[32]; int width; - int volume = rb->global_settings->volume; + int volume = rb->global_status->volume; rb->snprintf(buf, sizeof (buf), "%d%s", rb->sound_val2phys(SOUND_VOLUME, volume), rb->sound_unit(SOUND_VOLUME)); @@ -1870,7 +1870,7 @@ static int osd_stream_status(void) /* Change the current audio volume by a specified amount */ static void osd_set_volume(int delta) { - int vol = rb->global_settings->volume; + int vol = rb->global_status->volume; int limit; vol += delta; @@ -1888,9 +1888,9 @@ static void osd_set_volume(int delta) } /* Sync the global settings */ - if (vol != rb->global_settings->volume) { + if (vol != rb->global_status->volume) { rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } /* Update the volume display */ diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index 3ff3e96059..822466656b 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -2113,13 +2113,13 @@ enum plugin_status plugin_start(const void* parameter) case OSCILLOSCOPE_VOL_UP: case OSCILLOSCOPE_VOL_UP | BUTTON_REPEAT: { - int vol = rb->global_settings->volume; + int vol = rb->global_status->volume; if (vol < rb->sound_max(SOUND_VOLUME)) { vol++; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } osc_popupmsg(OSC_MSG_VOLUME, vol); @@ -2129,13 +2129,13 @@ enum plugin_status plugin_start(const void* parameter) case OSCILLOSCOPE_VOL_DOWN: case OSCILLOSCOPE_VOL_DOWN | BUTTON_REPEAT: { - int vol = rb->global_settings->volume; + int vol = rb->global_status->volume; if (vol > rb->sound_min(SOUND_VOLUME)) { vol--; rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; } osc_popupmsg(OSC_MSG_VOLUME, vol); diff --git a/apps/plugins/rockboy/menu.c b/apps/plugins/rockboy/menu.c index 870ea389fb..4f7b7eb0bb 100644 --- a/apps/plugins/rockboy/menu.c +++ b/apps/plugins/rockboy/menu.c @@ -428,7 +428,7 @@ static void do_opt_menu(void) options.dirty=1; /* Assume that the settings have been changed */ struct viewport *parentvp = NULL; - const struct settings_list* vol = rb->find_setting(&rb->global_settings->volume); + const struct settings_list* vol = rb->find_setting(&rb->global_status->volume); while(!done) { diff --git a/apps/plugins/test_sampr.c b/apps/plugins/test_sampr.c index 3006faeea5..7f3da6ced8 100644 --- a/apps/plugins/test_sampr.c +++ b/apps/plugins/test_sampr.c @@ -174,7 +174,7 @@ static void set_frequency(int index) #ifndef HAVE_VOLUME_IN_LIST static void set_volume(int value) { - rb->global_settings->volume = value; + rb->global_status->volume = value; rb->sound_set(SOUND_VOLUME, value); } @@ -243,7 +243,7 @@ static void play_tone(bool volume_set) #ifndef HAVE_VOLUME_IN_LIST if (volume_set) { - int volume = rb->global_settings->volume; + int volume = rb->global_status->volume; rb->set_int("Volume", NULL, -1, &volume, set_volume, 1, rb->sound_min(SOUND_VOLUME), diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index d9c6786697..a96946fc8f 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -637,13 +637,13 @@ static void save_settings(void) { static void change_volume(int delta) { int minvol = rb->sound_min(SOUND_VOLUME); int maxvol = rb->sound_max(SOUND_VOLUME); - int vol = rb->global_settings->volume + delta; + int vol = rb->global_status->volume + delta; if (vol > maxvol) vol = maxvol; else if (vol < minvol) vol = minvol; - if (vol != rb->global_settings->volume) { + if (vol != rb->global_status->volume) { rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; + rb->global_status->volume = vol; rb->lcd_putsxyf(0,0, "%d", vol); rb->lcd_update(); rb->sleep(HZ/12); diff --git a/apps/plugins/xworld/sys.c b/apps/plugins/xworld/sys.c index 4a80152b70..d28c24beff 100644 --- a/apps/plugins/xworld/sys.c +++ b/apps/plugins/xworld/sys.c @@ -286,7 +286,7 @@ static void do_sound_settings(struct System* sys) case 2: { const struct settings_list* vol = - rb->find_setting(&rb->global_settings->volume); + rb->find_setting(&rb->global_status->volume); rb->option_screen((struct settings_list*)vol, NULL, false, "Volume"); break; } diff --git a/apps/radio/radio.c b/apps/radio/radio.c index fb2555b93f..9d27c79ee0 100644 --- a/apps/radio/radio.c +++ b/apps/radio/radio.c @@ -296,7 +296,7 @@ void remember_frequency(void) &fm_region_data[global_settings.fm_region]; global_status.last_frequency = (curr_freq - fmr->freq_min) / fmr->freq_step; - status_save(); + status_save(true); } /* Step to the next or previous frequency */ @@ -531,14 +531,14 @@ void radio_screen(void) case ACTION_SETTINGS_INC: case ACTION_SETTINGS_INCREPEAT: - global_settings.volume += sound_steps(SOUND_VOLUME); + global_status.volume += sound_steps(SOUND_VOLUME); setvol(); update_type = SKIN_REFRESH_NON_STATIC; break; case ACTION_SETTINGS_DEC: case ACTION_SETTINGS_DECREPEAT: - global_settings.volume -= sound_steps(SOUND_VOLUME); + global_status.volume -= sound_steps(SOUND_VOLUME); setvol(); update_type = SKIN_REFRESH_NON_STATIC; break; diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index dec7b7bd8c..253142bd97 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -773,7 +773,7 @@ static const char* reclist_get_name(int selected_item, void * data, case ITEM_VOLUME: snprintf(buffer, buffer_len, "%s: %s", str(LANG_VOLUME), fmt_gain(SOUND_VOLUME, - global_settings.volume, + global_status.volume, buf2, sizeof(buf2))); break; #endif @@ -896,7 +896,7 @@ static void recording_step_levels(int setting_id, int steps) switch(setting_id) { case SOUND_VOLUME: - global_settings.volume += steps; + global_status.volume += steps; setvol(); break; #if defined(HAVE_LINE_REC) || defined(HAVE_FMRADIO_REC) @@ -1020,7 +1020,7 @@ bool recording_screen(bool no_source) #endif audio_init_recording(); - sound_set_volume(global_settings.volume); + sound_set_volume(global_status.volume); #if CONFIG_RTC == 0 /* Create new filename for recording start */ diff --git a/apps/root_menu.c b/apps/root_menu.c index c4b5479ebd..ab8b03677f 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c @@ -710,7 +710,7 @@ static inline int load_screen(int screen) if (screen == old_previous) old_previous = GO_TO_ROOT; global_status.last_screen = (char)screen; - status_save(); + status_save(false); if (screen == GO_TO_BROWSEPLUGINS) activity = ACTIVITY_PLUGINBROWSER; @@ -774,7 +774,6 @@ static int load_plugin_screen(char *key) int old_global = global_status.last_screen; last_screen = next_screen; global_status.last_screen = (char)next_screen; - /*status_save(); //only needed if we crash */ while(loops-- > 0) /* just to keep things from getting out of hand */ { diff --git a/apps/screens.c b/apps/screens.c index c1c5b1fde7..f1e487ee14 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -889,8 +889,7 @@ static const char* runtime_get_data(int selected_item, void* data, { case 0:return str(LANG_RUNNING_TIME); case 1: { - global_status.runtime += ((current_tick - lasttime) / HZ); - lasttime = current_tick; + update_runtime(); t = global_status.runtime; break; } diff --git a/apps/settings.c b/apps/settings.c index 7f6022ace2..5a0aa206ee 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -8,7 +8,6 @@ * $Id$ * * Copyright (C) 2002 by Stuart Martin - * RTC config saving code (C) 2002 by hessu@hes.iki.fi * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -79,6 +78,17 @@ struct user_settings global_settings; struct system_status global_status; +static uint32_t user_settings_crc; +static long next_status_update_tick; +long lasttime = 0; + +/* flush system_status more often for spinning harddisks as we may not be able + * to spin up at shutdown in order to save so keep the gap minimal */ +#if (CONFIG_STORAGE & STORAGE_ATA) +#define SYSTEM_STATUS_UPDATE_TICKS (HZ * 60 * 5) /* flush every 5 minutes */ +#else +#define SYSTEM_STATUS_UPDATE_TICKS (HZ * 60 * 15) /* flush every 15 minutes */ +#endif #include "dsp_proc_settings.h" #include "playback.h" @@ -87,11 +97,6 @@ struct system_status global_status; #endif #include "pcm_sampr.h" -#define NVRAM_DATA_START 8 -#define NVRAM_BLOCK_SIZE (sizeof(struct system_status) + NVRAM_DATA_START) - -#define MAX_LINES 10 - #ifdef HAVE_REMOTE_LCD #include "lcd-remote.h" #endif @@ -103,14 +108,16 @@ struct system_status global_status; #ifdef ROCKBOX_NO_TEMP_SETTINGS_FILE /* Overwrites same file each time */ #define CONFIGFILE_TEMP CONFIGFILE -#define NVRAM_FILE_TEMP NVRAM_FILE +#define RESUMEFILE_TEMP RESUMEFILE #define rename_temp_file(a,b,c) #else /* creates temp files on save, renames next load, saves old file if desired */ #define CONFIGFILE_TEMP CONFIGFILE".new" -#define NVRAM_FILE_TEMP NVRAM_FILE".new" +#define RESUMEFILE_TEMP RESUMEFILE".new" #ifdef LOGF_ENABLE static char *debug_get_flags(uint32_t flags); +#undef DEBUGF /* allow DEBUGF or logf not both */ +#define DEBUGF(...) do { } while(0) #endif static void debug_available_settings(void); @@ -129,110 +136,7 @@ static void rename_temp_file(const char *tempfile, rename(tempfile, file); } } -#endif - -long lasttime = 0; - -/** NVRAM stuff, if the target doesnt have NVRAM it is saved in ROCKBOX_DIR /nvram.bin **/ -/* NVRAM is set out as - * - * [0] 'R' - * [1] 'b' - * [2] version - * [3] stored variable count - * [4-7] crc32 checksum in host endian order - * [8+] data - */ - -static unsigned int nvram_crc(char *buf, int max_len) -{ - return crc_32(&buf[NVRAM_DATA_START], max_len - NVRAM_DATA_START - 1, NVRAM_BLOCK_SIZE); -} - -static void read_nvram_data(void) -{ - rename_temp_file(NVRAM_FILE_TEMP, NVRAM_FILE, NVRAM_FILE".old"); - - int fd = open(NVRAM_FILE, O_RDONLY); - if (fd < 0) - return; - - char buf[NVRAM_BLOCK_SIZE]; - memset(buf, 0, sizeof(buf)); - - ssize_t bytes = read(fd, buf, sizeof(buf)); - close(fd); - - if (bytes < 8) /* min is 8 bytes,magic, ver, vars, crc32 */ - return; - - /* check magic, version */ - if (buf[0] != 'R' || buf[1] != 'b' || buf[2] != NVRAM_CONFIG_VERSION) - return; - - /* check crc32 */ - unsigned int crc32 = nvram_crc(buf, sizeof(buf)); - if (crc32 != load_h32(&buf[4])) - return; - - /* all good, so read in the settings */ - int var_count = buf[3]; - size_t buf_pos = NVRAM_DATA_START; - for(int i = 0; i < nb_settings; i++) - { - const struct settings_list *setting = &settings[i]; - int nvram_bytes = (setting->flags & F_NVRAM_BYTES_MASK) >> F_NVRAM_MASK_SHIFT; - if (nvram_bytes) - { - if (var_count > 0 && buf_pos < (size_t)bytes) - { - memcpy(setting->setting, &buf[buf_pos], nvram_bytes); - buf_pos += nvram_bytes; - var_count--; - } - else /* should only happen when new items are added to the end */ - { - memcpy(setting->setting, &setting->default_val, nvram_bytes); - } - } - } -} - -static void write_nvram_data(void) -{ - char buf[NVRAM_BLOCK_SIZE]; - memset(buf, 0, sizeof(buf)); - - /* magic, version */ - buf[0] = 'R'; - buf[1] = 'b'; - buf[2] = NVRAM_CONFIG_VERSION; - - size_t buf_pos = NVRAM_DATA_START; - int var_count = 0; - for(int i = 0; i < nb_settings && buf_pos < sizeof(buf); i++) - { - const struct settings_list *setting = &settings[i]; - int nvram_bytes = (setting->flags & F_NVRAM_BYTES_MASK) >> F_NVRAM_MASK_SHIFT; - if (nvram_bytes) - { - memcpy(&buf[buf_pos], setting->setting, nvram_bytes); - buf_pos += nvram_bytes; - var_count++; - } - } - - /* count and crc32 */ - buf[3] = var_count; - store_h32(&buf[4], nvram_crc(buf, sizeof(buf))); - - int fd = open(NVRAM_FILE_TEMP,O_CREAT|O_TRUNC|O_WRONLY, 0666); - if (fd < 0) - return; - - write(fd, buf, sizeof(buf)); - close(fd); -} +#endif /* ndef ROCKBOX_NO_TEMP_SETTINGS_FILE */ const char* setting_get_cfgvals(const struct settings_list *setting) { @@ -242,7 +146,7 @@ const char* setting_get_cfgvals(const struct settings_list *setting) return setting->choice_setting->cfg_vals; else if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) { - DEBUGF("Setting: %s \n", setting->cfg_name); + logf("Setting: %s", setting->cfg_name); return setting->bool_setting->cfg_vals; } else if ((setting->flags & F_HAS_CFGVALS) == F_HAS_CFGVALS) @@ -252,21 +156,26 @@ const char* setting_get_cfgvals(const struct settings_list *setting) /** Reading from a config file **/ /* - * load settings from disk or RTC RAM + * load settings from disk */ -void settings_load(int which) +void settings_load(void) { logf("\r\n%s()\r\n", __func__); debug_available_settings(); - if (which & SETTINGS_RTC) - read_nvram_data(); - if (which & SETTINGS_HD) - { - rename_temp_file(CONFIGFILE_TEMP, CONFIGFILE, CONFIGFILE".old"); - settings_load_config(CONFIGFILE, false); - settings_load_config(FIXEDSETTINGSFILE, false); - } + /* make temp files current make current files .old */ + rename_temp_file(RESUMEFILE_TEMP, RESUMEFILE, RESUMEFILE".old"); + rename_temp_file(CONFIGFILE_TEMP, CONFIGFILE, CONFIGFILE".old"); + + settings_load_config(CONFIGFILE, false); /* load user_settings items */ + settings_load_config(RESUMEFILE, false); /* load system_status items */ + + /* fixed settings file has final say on user_settings AND system_status items */ + settings_load_config(FIXEDSETTINGSFILE, false); + + /* set initial CRC value - settings_save checks, if changed writes to disk */ + user_settings_crc = crc_32(&global_settings, + sizeof(global_settings), 0xFFFFFFFF); } bool cfg_string_to_int(const struct settings_list *setting, int* out, const char* str) @@ -533,19 +442,17 @@ void cfg_to_string(const struct settings_list *setting, char* buf, int buf_len) (int)RGB_UNPACK_RED(colour), (int)RGB_UNPACK_GREEN(colour), (int)RGB_UNPACK_BLUE(colour)); + break; /* we got a value */ } else #endif - if (setting_get_cfgvals(setting) == NULL) + if (setting_get_cfgvals(setting) != NULL && cfg_int_to_string( + setting, *(int*)setting->setting, buf, buf_len)) { - snprintf(buf, buf_len, "%d", *(int*)setting->setting); - } - else - { - if (!cfg_int_to_string(setting, *(int*)setting->setting, - buf, buf_len)) - snprintf(buf, buf_len, "%d", *(int*)setting->setting); + break; /* we got a value */ } + + snprintf(buf, buf_len, "%d", *(int*)setting->setting); break; case F_T_BOOL: cfg_int_to_string(setting, *(bool*)setting->setting, buf, buf_len); @@ -599,6 +506,11 @@ static bool is_changed(const struct settings_list *setting) sound_default(setting->sound_setting->setting)) return false; } + else if (setting->flags & F_RESUMESETTING) + { + /* exclude resume settings they will get saved to '.resume.cfg' */ + return false; + } else if (*(int*)setting->setting == setting->default_val.int_) return false; break; @@ -624,8 +536,13 @@ static bool settings_write_config(const char* filename, int options) fd = open(filename,O_CREAT|O_TRUNC|O_WRONLY, 0666); if (fd < 0) return false; - fdprintf(fd, "# .cfg file created by rockbox %s - " + + if (options != SETTINGS_SAVE_RESUMEINFO) + { + fdprintf(fd, "# .cfg file created by rockbox %s - " "http://www.rockbox.org\r\n\r\n", rbversion); + } + for(i=0; iflags & F_EQSETTING)) continue; break; + case SETTINGS_SAVE_RESUMEINFO: + if (!(setting->flags & F_RESUMESETTING)) + continue; + break; + case SETTINGS_SAVE_ALL: + { + /*only save sound settings (volume) from F_RESUMESETTING items */ + uint32_t exclude_flag = (F_RESUMESETTING|F_SOUNDSETTING); + if ((setting->flags & exclude_flag) == F_RESUMESETTING) + continue; + break; + } } cfg_to_string(setting, value, MAX_PATH); logf("Written: '%s: %s'\r\n",setting->cfg_name, value); @@ -668,13 +597,41 @@ static bool settings_write_config(const char* filename, int options) static void flush_global_status_callback(void) { - write_nvram_data(); + if (TIME_AFTER(current_tick, next_status_update_tick)) + { + next_status_update_tick = current_tick + SYSTEM_STATUS_UPDATE_TICKS; + update_runtime(); + + DEBUGF("Writing system_status to disk\n"); + logf("Writing system_status to disk"); + + settings_write_config(RESUMEFILE_TEMP, SETTINGS_SAVE_RESUMEINFO); + } } static void flush_config_block_callback(void) { - write_nvram_data(); - settings_write_config(CONFIGFILE_TEMP, SETTINGS_SAVE_CHANGED); + uint32_t crc = crc_32(&global_settings, sizeof(global_settings), 0xFFFFFFFF); + if (user_settings_crc != crc) + { + DEBUGF("Writing changed user_settings to disk\n"); + logf("Writing changed user_settings to disk"); + + user_settings_crc = crc; /* update immediately in case we yield */ + if (!settings_write_config(CONFIGFILE_TEMP, SETTINGS_SAVE_CHANGED)) + { + user_settings_crc = 0; + DEBUGF("Error failed to write settings to disk\n"); + logf("Error failed to write settings to disk"); + } + } +#ifdef LOGF_ENABLE + else + logf("No changes to user_settings"); +#endif + /* remove any outstanding status_cb and call it unconditionally */ + next_status_update_tick = current_tick - 1; + unregister_storage_idle_func(flush_global_status_callback, true); } void reset_runtime(void) @@ -684,9 +641,9 @@ void reset_runtime(void) } /* - * persist all runtime user settings to disk or RTC RAM + * update runtime and if greater topruntime as well */ -static void update_runtime(void) +void update_runtime(void) { int elapsed_secs; @@ -698,27 +655,27 @@ static void update_runtime(void) global_status.topruntime = global_status.runtime; } -void status_save(void) +void status_save(bool force) { - update_runtime(); - register_storage_idle_func(flush_global_status_callback); + if(force) + { + settings_save(); /* will force a status flush */ + } + else + register_storage_idle_func(flush_global_status_callback); } int settings_save(void) { logf("%s", __func__); - update_runtime(); + /* remove any oustanding status_cb we will call it in the config_block_cb */ + unregister_storage_idle_func(flush_global_status_callback, false); register_storage_idle_func(flush_config_block_callback); return 0; } bool settings_save_config(int options) { - /* if we have outstanding temp files it would be a good idea to flush - them before the user starts saving things */ - rename_temp_file(NVRAM_FILE_TEMP, NVRAM_FILE, NULL); /* dont overwrite .old */ - rename_temp_file(CONFIGFILE_TEMP, CONFIGFILE, NULL); /* files from last boot */ - char filename[MAX_PATH]; const char *folder, *namebase; switch (options) @@ -805,7 +762,7 @@ void sound_settings_apply(void) #endif sound_set(SOUND_BALANCE, global_settings.balance); #ifndef PLATFORM_HAS_VOLUME_CHANGE - sound_set(SOUND_VOLUME, global_settings.volume); + sound_set(SOUND_VOLUME, global_status.volume); #endif sound_set(SOUND_CHANNELS, global_settings.channel_config); sound_set(SOUND_STEREO_WIDTH, global_settings.stereo_width); @@ -1122,7 +1079,6 @@ void settings_apply(bool read_disk) CHART("cfg_name && !strcasecmp(setting->cfg_name, name)) { - logf("Found, flags: %s", debug_get_flags(settings[i].flags)); +#ifdef LOGF_ENABLE + name = debug_get_flags(settings[i].flags); + logf("Found, %s", name); +#endif return setting; } } @@ -1356,103 +1315,112 @@ void set_file(const char* filename, char* setting, const int maxlen) #ifdef LOGF_ENABLE static char *debug_get_flags(uint32_t flags) { - static char buf[256] = {0}; + static char buf[256]; uint32_t ftype = flags & F_T_MASK; /* the variable type for the setting */ flags &= ~F_T_MASK; + uint32_t flags_rem = flags; switch (ftype) { case F_T_CUSTOM: - strlcpy(buf, "[Type CUSTOM] ", sizeof(buf)); + strlcpy(buf, "Type: [CUSTOM] Flags: ", sizeof(buf)); break; case F_T_INT: - strlcpy(buf, "[Type INT] ", sizeof(buf)); + strlcpy(buf, "Type: [INT] Flags: ", sizeof(buf)); break; case F_T_UINT: - strlcpy(buf, "[Type UINT] ", sizeof(buf)); + strlcpy(buf, "Type: [UINT] Flags: ", sizeof(buf)); break; case F_T_BOOL: - strlcpy(buf, "[Type BOOL] ", sizeof(buf)); + strlcpy(buf, "Type: [BOOL] Flags: ", sizeof(buf)); break; case F_T_CHARPTR: - strlcpy(buf, "[Type CHARPTR] ", sizeof(buf)); + strlcpy(buf, "Type: [CHARPTR] Flags: ", sizeof(buf)); break; case F_T_UCHARPTR: - strlcpy(buf, "[Type UCHARPTR] ", sizeof(buf)); + strlcpy(buf, "Type: [UCHARPTR] Flags: ", sizeof(buf)); + break; + default: + snprintf(buf, sizeof(buf), + "Type: [!UNKNOWN TYPE! (0x%lx)] Flags: ", (long)ftype); break; } #define SETTINGFLAGS(n) \ - if(flags & n) { \ - flags &= ~n; \ + if(flags_rem & n) { \ + flags_rem &= ~n; \ strlcat(buf, "["#n"]", sizeof(buf));} - SETTINGFLAGS(F_T_SOUND); - SETTINGFLAGS(F_BOOL_SETTING); - SETTINGFLAGS(F_RGB); - SETTINGFLAGS(F_FILENAME); - SETTINGFLAGS(F_INT_SETTING); - SETTINGFLAGS(F_CHOICE_SETTING); - SETTINGFLAGS(F_CHOICETALKS); - SETTINGFLAGS(F_TABLE_SETTING); - SETTINGFLAGS(F_ALLOW_ARBITRARY_VALS); - SETTINGFLAGS(F_CB_ON_SELECT_ONLY); - SETTINGFLAGS(F_CB_ONLY_IF_CHANGED); - SETTINGFLAGS(F_MIN_ISFUNC); - SETTINGFLAGS(F_MAX_ISFUNC); - SETTINGFLAGS(F_DEF_ISFUNC); - SETTINGFLAGS(F_CUSTOM_SETTING); - SETTINGFLAGS(F_TIME_SETTING); + SETTINGFLAGS(F_RESUMESETTING); SETTINGFLAGS(F_THEMESETTING); SETTINGFLAGS(F_RECSETTING); SETTINGFLAGS(F_EQSETTING); SETTINGFLAGS(F_SOUNDSETTING); + SETTINGFLAGS(F_CHOICE_SETTING); + SETTINGFLAGS(F_CHOICETALKS); + SETTINGFLAGS(F_TABLE_SETTING); + SETTINGFLAGS(F_CUSTOM_SETTING); + SETTINGFLAGS(F_TIME_SETTING); + + SETTINGFLAGS(F_FILENAME); + SETTINGFLAGS(F_INT_SETTING); + SETTINGFLAGS(F_T_SOUND); + SETTINGFLAGS(F_RGB); + SETTINGFLAGS(F_BOOL_SETTING); + + SETTINGFLAGS(F_MIN_ISFUNC); + SETTINGFLAGS(F_MAX_ISFUNC); + SETTINGFLAGS(F_DEF_ISFUNC); + SETTINGFLAGS(F_ALLOW_ARBITRARY_VALS); + SETTINGFLAGS(F_CB_ON_SELECT_ONLY); + SETTINGFLAGS(F_CB_ONLY_IF_CHANGED); SETTINGFLAGS(F_TEMPVAR); SETTINGFLAGS(F_PADTITLE); SETTINGFLAGS(F_NO_WRAP); SETTINGFLAGS(F_BANFROMQS); SETTINGFLAGS(F_DEPRECATED); + + SETTINGFLAGS(F_HAS_CFGVALS); #undef SETTINGFLAGS - if (flags & F_NVRAM_BYTES_MASK) - { - flags &= ~F_NVRAM_BYTES_MASK; - strlcat(buf, "[NVRAM]", sizeof(buf)); - } /* anything left is unknown */ - if (flags) + if (flags_rem) { - strlcat(buf, "[UNKNOWN FLAGS]", sizeof(buf)); + strlcat(buf, "[!UNKNOWN FLAGS!]", sizeof(buf)); size_t len = strlen(buf); if (len < sizeof(buf)) - snprintf(buf + len, sizeof(buf) - len - 1, "[%x]", flags); + snprintf(buf + len, sizeof(buf) - len - 1, "[0x%lx]", flags_rem); } + /* no flags set */ + if (flags == 0) + strlcat(buf, "[0x0]", sizeof(buf)); return buf; } #endif static void debug_available_settings(void) { #if defined(DEBUG_AVAIL_SETTINGS) && defined(LOGF_ENABLE) + static char namebuf[128]; + logf("\r\nAvailable Settings:"); for (int i=0; i 2MB of RAM by default*/ OFFON_SETTING(F_BANFROMQS,dircache,LANG_DIRCACHE_ENABLE,true,"dircache",NULL), - SYSTEM_SETTING(NVRAM(4),dircache_size,0), + SYSTEM_STATUS(0, dircache_size, 0, "DSZ"), #endif #ifdef HAVE_TAGCACHE @@ -2049,7 +2054,6 @@ const struct settings_list settings[] = { ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS), ID2P(LANG_OPEN_PLUGIN) ), - SYSTEM_SETTING(NVRAM(1),last_screen,-1), #if defined(HAVE_RTC_ALARM) && \ (defined(HAVE_RECORDING) || CONFIG_TUNER) {F_T_INT|F_HAS_CFGVALS, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN, diff --git a/apps/settings_list.h b/apps/settings_list.h index ae219a6fe5..58e5ec3486 100644 --- a/apps/settings_list.h +++ b/apps/settings_list.h @@ -119,6 +119,7 @@ struct table_setting { Should really only be used if the value you want to store in global_settings is very different to the string you want to use in the config. */ #define F_CUSTOM_SETTING 0x8000 + struct custom_setting { /* load the saved value from the .cfg setting: pointer into global_settings @@ -146,28 +147,18 @@ struct custom_setting { #define F_TIME_SETTING 0x10000 /* int,table format hh:mm:ss.mss auto ranged */ #define F_HAS_CFGVALS 0x20000 /* uses setting union to carry cfg_vals */ - - +#define F_RESUMESETTING 0x40000 /* saved to a separate cfg file on shutdown */ +/*#define _AVAILABLE_ 0x80000*/ /* these use the _isfunc_type type for the function */ /* typedef int (*_isfunc_type)(void); */ #define F_MIN_ISFUNC 0x100000 /* min(above) is function pointer to above type */ #define F_MAX_ISFUNC 0x200000 /* max(above) is function pointer to above type */ #define F_DEF_ISFUNC 0x400000 /* default_val is function pointer to above type */ - #define F_THEMESETTING 0x800000 #define F_RECSETTING 0x1000000 #define F_EQSETTING 0x2000000 #define F_SOUNDSETTING 0x4000000 - -#define F_NVRAM_BYTES_MASK 0xE0000 /*0-4 bytes can be stored */ -#define F_NVRAM_MASK_SHIFT 17 -#define NVRAM_CONFIG_VERSION 9 -/* Above define should be bumped if -- a new NVRAM setting is added between 2 other NVRAM settings -- number of bytes for a NVRAM setting is changed -- a NVRAM setting is removed -*/ - +/*#define _AVAILABLE_ 0x8000000*/ #define F_CB_ON_SELECT_ONLY 0x10000000 /* option_callback only called if selected */ #define F_CB_ONLY_IF_CHANGED 0x20000000 /* option_callback only called if setting changed */ diff --git a/apps/tree.c b/apps/tree.c index 0e78d8ba3e..1c31b1e430 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -1321,7 +1321,7 @@ void tree_flush(void) } if (old_val != global_status.dircache_size) - status_save(); + status_save(true); #ifdef HAVE_EEPROM_SETTINGS if (savecache) diff --git a/firmware/drivers/tuner/ipod_remote_tuner.c b/firmware/drivers/tuner/ipod_remote_tuner.c index 5539b09721..077d541a1a 100644 --- a/firmware/drivers/tuner/ipod_remote_tuner.c +++ b/firmware/drivers/tuner/ipod_remote_tuner.c @@ -108,7 +108,7 @@ static void rmt_tuner_sleep(int state) iap_send_pkt(data4, sizeof(data3)); /* set volume */ unsigned char data2[] = {0x03, 0x09, 0x04, 0x00, 0x00 }; - data2[4] = (char)((global_settings.volume+58) * 4); + data2[4] = (char)((global_status.volume+58) * 4); iap_send_pkt(data2, sizeof(data2)); } else diff --git a/firmware/export/rbpaths.h b/firmware/export/rbpaths.h index 2376163180..73c62486f1 100644 --- a/firmware/export/rbpaths.h +++ b/firmware/export/rbpaths.h @@ -113,11 +113,12 @@ #define CODEPAGE_DIR ROCKBOX_DIR "/codepages" #define VIEWERS_CONFIG ROCKBOX_DIR "/viewers.config" + +#define RESUMEFILE ROCKBOX_DIR "/.resume.cfg" #define CONFIGFILE ROCKBOX_DIR "/config.cfg" #define FIXEDSETTINGSFILE ROCKBOX_DIR "/fixed.cfg" #define PLAYLIST_CONTROL_FILE ROCKBOX_DIR "/.playlist_control" -#define NVRAM_FILE ROCKBOX_DIR "/nvram.bin" #define GLYPH_CACHE_FILE ROCKBOX_DIR "/.glyphcache" #endif /* __PATHS_H__ */ diff --git a/firmware/sound.c b/firmware/sound.c index a2dfd300d4..70883168bf 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -117,7 +117,7 @@ int sound_current(int setting) { #ifndef BOOTLOADER #ifndef PLATFORM_HAS_VOLUME_CHANGE - SOUND_CUR_SET(VOLUME, global_settings.volume) + SOUND_CUR_SET(VOLUME, global_status.volume) #endif #if defined(AUDIOHW_HAVE_BASS) SOUND_CUR_SET(BASS, global_settings.bass)