diff --git a/apps/main.c b/apps/main.c index 753cd71e8d..bfc331dc88 100644 --- a/apps/main.c +++ b/apps/main.c @@ -162,6 +162,7 @@ int init_dircache(bool preinit) { backlight_on(); show_logo(); + settings_save(); } } diff --git a/apps/main_menu.c b/apps/main_menu.c index 0ac4d94753..f66f511e9c 100644 --- a/apps/main_menu.c +++ b/apps/main_menu.c @@ -435,7 +435,6 @@ bool main_menu(void) #endif menu_exit(m); - settings_save(); return result; } diff --git a/apps/playback.c b/apps/playback.c index 02af5b6ec4..294bb3d69c 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -3560,7 +3560,7 @@ static void audio_thread(void) else { queue_wait_w_tmo(&audio_queue, &ev, HZ/2); - if ( (ev.id == SYS_TIMEOUT) && + if (playing && (ev.id == SYS_TIMEOUT) && (FILEBUFUSED < high_watermark)) register_ata_idle_func(ata_fillbuffer_callback); } diff --git a/apps/settings.c b/apps/settings.c index 94d456fcf5..91ffc0d238 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -2086,6 +2086,14 @@ bool do_set_setting(const unsigned char* string, void *variable, if ( function ) function(type_fromvoidptr(cb_data->type,variable)); } + if (cb_data->type == INT) + { + if (oldvalue != *(int*)variable) + settings_save(); + } + else if (oldvalue != *(bool*)variable) + settings_save(); + return false; } bool set_int(const unsigned char* string, diff --git a/firmware/ata_idle_notify.c b/firmware/ata_idle_notify.c index 17adbc1192..1fc6605ac6 100644 --- a/firmware/ata_idle_notify.c +++ b/firmware/ata_idle_notify.c @@ -77,8 +77,11 @@ bool call_ata_idle_notifys(bool force) int i; static int lock_until = 0; ata_idle_notify function; - if (!force && TIME_BEFORE(current_tick,lock_until) ) - return false; + if (!force) + { + if (TIME_BEFORE(current_tick,lock_until) ) + return false; + } lock_until = current_tick + 30*HZ; for (i = 0; i < MAX_ATA_CALLBACKS; i++) diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 72194db8da..5e69b36f2d 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -614,7 +614,7 @@ static void ata_thread(void) TIME_AFTER( current_tick, last_disk_activity + sleep_timeout ) ) { - call_ata_idle_notifys(false); + call_ata_idle_notifys(true); ata_perform_sleep(); last_sleep = current_tick; }