--- apps/plugins/battery_bench.c (rev 16841) +++ apps/plugins/battery_bench.c (improved one) @@ -243,7 +243,7 @@ void thread(void) { - bool got_info = false, timeflag = false, in_usb_mode = false; + bool got_info = false, timeflag = false, lowbattflag = false, in_usb_mode = false; int fd, buffelements, tick = 1, i = 0, skipped = 0, exit = 0; int fst = 0, lst = 0; /* first and last skipped tick */ unsigned int last_voltage = 0; @@ -263,8 +263,15 @@ do { + /* lowbattflag prevents from data loss when battery is low */ + if(i >= 1 && bat[i-1].level <= 1) + lowbattflag = true; + else if(i >= 2 && bat[i-1].level <= 10 && + bat[i-1].level != bat[i-2].level) + lowbattflag = true; + if(!in_usb_mode && got_info && - (exit || timeflag || rb->ata_disk_is_active()) ) + (exit || timeflag || lowbattflag || rb->ata_disk_is_active()) ) { int last, secs, j, temp = skipped; @@ -334,18 +341,13 @@ tick = *rb->current_tick; got_info = false; timeflag = false; + lowbattflag = false; } } else { unsigned int current_voltage; - if( -#if CONFIG_CODEC == SWCODEC - !rb->pcm_is_playing() -#else - !rb->mp3_is_playing() -#endif - && (*rb->current_tick - tick) > DISK_SPINDOWN_TIMEOUT * HZ) + if((*rb->current_tick - tick) > DISK_SPINDOWN_TIMEOUT * HZ) timeflag = true; if(last_voltage != (current_voltage=rb->battery_voltage())