From da5910eac0629c4ac38c7967160e455ae6db9915 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Fri, 29 Jun 2007 19:01:24 +0000 Subject: Shutdown and powermanagement cleanup: * Use the proper function for determining whether the battery level is safe, and get rid of the extra one. Low battery warning now appears at 10% or less. * Don't delay shutdown artificially by 3 seconds due to low/critical battery warning. * Shutdown at critical battery level: Skip all disk-hitting housekeeping, make sure dircache stops, and don't mark disk as clean in eeprom. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13734 a1c6a512-1295-4272-9138-f99709370657 --- apps/misc.c | 75 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 33 deletions(-) (limited to 'apps') diff --git a/apps/misc.c b/apps/misc.c index 08e699e781..88ec73e2d3 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -611,7 +611,7 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter) if(!charger_inserted()) #endif { - bool batt_crit = battery_level_critical(); + bool batt_safe = battery_level_safe(); int audio_stat = audio_status(); FOR_NB_SCREENS(i) @@ -619,15 +619,8 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter) #ifdef X5_BACKLIGHT_SHUTDOWN x5_backlight_shutdown(); #endif - if (!battery_level_safe()) - gui_syncsplash(3*HZ, "%s %s", - str(LANG_WARNING_BATTERY_EMPTY), - str(LANG_SHUTTINGDOWN)); - else if (battery_level_critical()) - gui_syncsplash(3*HZ, "%s %s", - str(LANG_WARNING_BATTERY_LOW), - str(LANG_SHUTTINGDOWN)); - else { + if (batt_safe) + { #ifdef HAVE_TAGCACHE if (!tagcache_prepare_shutdown()) { @@ -636,44 +629,60 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter) return false; } #endif - gui_syncsplash(0, str(LANG_SHUTTINGDOWN)); + if (battery_level() > 10) + gui_syncsplash(0, str(LANG_SHUTTINGDOWN)); + else + gui_syncsplash(0, "%s %s", + str(LANG_WARNING_BATTERY_LOW), + str(LANG_SHUTTINGDOWN)); + } + else + { + gui_syncsplash(0, "%s %s", + str(LANG_WARNING_BATTERY_EMPTY), + str(LANG_SHUTTINGDOWN)); } - if (global_settings.fade_on_stop + if (global_settings.fade_on_stop && (audio_stat & AUDIO_STATUS_PLAY)) { fade(0); } -#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC - if (!batt_crit && (audio_stat & AUDIO_STATUS_RECORD)) + if (batt_safe) /* do not save on critical battery */ { - audio_stop_recording(); - while(audio_status() & AUDIO_STATUS_RECORD) - sleep(1); - } - - audio_close_recording(); +#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC + if (audio_stat & AUDIO_STATUS_RECORD) + audio_stop_recording(); #endif - /* audio_stop_recording == audio_stop for HWCODEC */ + /* audio_stop_recording == audio_stop for HWCODEC */ + audio_stop(); - audio_stop(); - while (audio_status()) - sleep(1); - - if (callback != NULL) - callback(parameter); + if (callback != NULL) + callback(parameter); - if (!batt_crit) /* do not save on critical battery */ + /* wait for audio_stop or audio_stop_recording to complete */ + while (audio_status()) + sleep(1); + +#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC + audio_close_recording(); +#endif system_flush(); #ifdef HAVE_EEPROM_SETTINGS - if (firmware_settings.initialized) - { - firmware_settings.disk_clean = true; - firmware_settings.bl_version = 0; - eeprom_settings_store(); + if (firmware_settings.initialized) + { + firmware_settings.disk_clean = true; + firmware_settings.bl_version = 0; + eeprom_settings_store(); + } +#endif } +#ifdef HAVE_DIRCACHE + else + dircache_disable(); #endif + shutdown_hw(); } #endif -- cgit v1.2.3