summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/debug_menu.c66
-rw-r--r--apps/gui/skin_engine/skin_tokens.c10
-rw-r--r--apps/menus/main_menu.c6
-rw-r--r--apps/menus/theme_menu.c6
-rw-r--r--apps/misc.c4
-rw-r--r--apps/plugin.c2
-rw-r--r--apps/plugin.h4
-rw-r--r--apps/plugins/SOURCES2
-rw-r--r--apps/settings.h2
-rw-r--r--apps/settings_list.c2
10 files changed, 68 insertions, 36 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index b4d917a3eb..340407176c 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -900,8 +900,7 @@ static bool tsc2100_debug(void)
900 return simplelist_show_list(&info); 900 return simplelist_show_list(&info);
901} 901}
902#endif 902#endif
903#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SAMSUNG_YPR0) 903#if (CONFIG_BATTERY_MEASURE != 0) && defined(HAVE_LCD_BITMAP) && !defined(SIMULATOR)
904#ifdef HAVE_LCD_BITMAP
905/* 904/*
906 * view_battery() shows a automatically scaled graph of the battery voltage 905 * view_battery() shows a automatically scaled graph of the battery voltage
907 * over time. Usable for estimating battery life / charging rate. 906 * over time. Usable for estimating battery life / charging rate.
@@ -909,13 +908,14 @@ static bool tsc2100_debug(void)
909 */ 908 */
910 909
911#define BAT_LAST_VAL MIN(LCD_WIDTH, POWER_HISTORY_LEN) 910#define BAT_LAST_VAL MIN(LCD_WIDTH, POWER_HISTORY_LEN)
912#define BAT_YSPACE (LCD_HEIGHT - 20) 911#define BAT_TSPACE 20
912#define BAT_YSPACE (LCD_HEIGHT - BAT_TSPACE)
913 913
914 914
915static bool view_battery(void) 915static bool view_battery(void)
916{ 916{
917 int view = 0; 917 int view = 0;
918 int i, x, y, y1, y2, grid, graph; 918 int i, x, y, z, y1, y2, grid, graph;
919 unsigned short maxv, minv; 919 unsigned short maxv, minv;
920 920
921 lcd_setfont(FONT_SYSFIXED); 921 lcd_setfont(FONT_SYSFIXED);
@@ -934,19 +934,28 @@ static bool view_battery(void)
934 if (power_history[i] < minv) 934 if (power_history[i] < minv)
935 minv = power_history[i]; 935 minv = power_history[i];
936 } 936 }
937 937 /* print header */
938#if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE)
938 /* adjust grid scale */ 939 /* adjust grid scale */
939 if ((maxv - minv) > 50) 940 if ((maxv - minv) > 50)
940 grid = 50; 941 grid = 50;
941 else 942 else
942 grid = 5; 943 grid = 5;
943 944
944 /* print header */
945 lcd_putsf(0, 0, "battery %d.%03dV", power_history[0] / 1000, 945 lcd_putsf(0, 0, "battery %d.%03dV", power_history[0] / 1000,
946 power_history[0] % 1000); 946 power_history[0] % 1000);
947 lcd_putsf(0, 1, "%d.%03d-%d.%03dV (%2dmV)", 947 lcd_putsf(0, 1, "%d.%03d-%d.%03dV (%2dmV)",
948 minv / 1000, minv % 1000, maxv / 1000, maxv % 1000, 948 minv / 1000, minv % 1000, maxv / 1000, maxv % 1000,
949 grid); 949 grid);
950#elif (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE)
951 /* adjust grid scale */
952 if ((maxv - minv) > 10)
953 grid = 10;
954 else
955 grid = 1;
956 lcd_putsf(0, 0, "battery %d%%", power_history[0]);
957 lcd_putsf(0, 1, "%d%%-%d%% (%d %%)", minv, maxv, grid);
958#endif
950 959
951 i = 1; 960 i = 1;
952 while ((y = (minv - (minv % grid)+i*grid)) < maxv) 961 while ((y = (minv - (minv % grid)+i*grid)) < maxv)
@@ -971,11 +980,11 @@ static bool view_battery(void)
971 { 980 {
972 y1 = (power_history[i] - minv) * BAT_YSPACE / 981 y1 = (power_history[i] - minv) * BAT_YSPACE /
973 (maxv - minv); 982 (maxv - minv);
974 y1 = MIN(MAX(LCD_HEIGHT-1 - y1, 20), 983 y1 = MIN(MAX(LCD_HEIGHT-1 - y1, BAT_TSPACE),
975 LCD_HEIGHT-1); 984 LCD_HEIGHT-1);
976 y2 = (power_history[i-1] - minv) * BAT_YSPACE / 985 y2 = (power_history[i-1] - minv) * BAT_YSPACE /
977 (maxv - minv); 986 (maxv - minv);
978 y2 = MIN(MAX(LCD_HEIGHT-1 - y2, 20), 987 y2 = MIN(MAX(LCD_HEIGHT-1 - y2, BAT_TSPACE),
979 LCD_HEIGHT-1); 988 LCD_HEIGHT-1);
980 989
981 lcd_set_drawmode(DRMODE_SOLID); 990 lcd_set_drawmode(DRMODE_SOLID);
@@ -999,10 +1008,13 @@ static bool view_battery(void)
999 lcd_putsf(0, 0, "Pwr status: %s", 1008 lcd_putsf(0, 0, "Pwr status: %s",
1000 charging_state() ? "charging" : "discharging"); 1009 charging_state() ? "charging" : "discharging");
1001#else 1010#else
1002 lcd_puts(0, 0, "Power status:"); 1011 lcd_puts(0, 0, "Power status: unknown");
1003#endif 1012#endif
1004 battery_read_info(&y, NULL); 1013 battery_read_info(&y, &z);
1005 lcd_putsf(0, 1, "Battery: %d.%03d V", y / 1000, y % 1000); 1014 if (y > 0)
1015 lcd_putsf(0, 1, "Battery: %d.%03d V (%d %%)", y / 1000, y % 1000, z);
1016 else if (z > 0)
1017 lcd_putsf(0, 1, "Battery: %d %%", z);
1006#ifdef ADC_EXT_POWER 1018#ifdef ADC_EXT_POWER
1007 y = (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 1000; 1019 y = (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 1000;
1008 lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000); 1020 lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000);
@@ -1169,16 +1181,23 @@ static bool view_battery(void)
1169#endif /* target type */ 1181#endif /* target type */
1170#endif /* CONFIG_CHARGING */ 1182#endif /* CONFIG_CHARGING */
1171 break; 1183 break;
1172
1173 case 2: /* voltage deltas: */ 1184 case 2: /* voltage deltas: */
1185#if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE)
1174 lcd_puts(0, 0, "Voltage deltas:"); 1186 lcd_puts(0, 0, "Voltage deltas:");
1175 1187 for (i = 0; i < POWER_HISTORY_LEN-1; i++) {
1176 for (i = 0; i <= 6; i++) {
1177 y = power_history[i] - power_history[i+1]; 1188 y = power_history[i] - power_history[i+1];
1178 lcd_putsf(0, i+1, "-%d min: %s%d.%03d V", i, 1189 lcd_putsf(0, i+1, "-%d min: %c%d.%03d V", i,
1179 (y < 0) ? "-" : "", ((y < 0) ? y * -1 : y) / 1000, 1190 (y < 0) ? '-' : ' ', ((y < 0) ? y * -1 : y) / 1000,
1180 ((y < 0) ? y * -1 : y ) % 1000); 1191 ((y < 0) ? y * -1 : y ) % 1000);
1181 } 1192 }
1193#elif (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE)
1194 lcd_puts(0, 0, "Percentage deltas:");
1195 for (i = 0; i < POWER_HISTORY_LEN-1; i++) {
1196 y = power_history[i] - power_history[i+1];
1197 lcd_putsf(0, i+1, "-%d min: %c%d%%", i,
1198 (y < 0) ? '-' : ' ', ((y < 0) ? y * -1 : y));
1199 }
1200#endif
1182 break; 1201 break;
1183 1202
1184 case 3: /* remaining time estimation: */ 1203 case 3: /* remaining time estimation: */
@@ -1195,13 +1214,19 @@ static bool view_battery(void)
1195 lcd_putsf(0, 4, "Trickle sec: %d/60", trickle_sec); 1214 lcd_putsf(0, 4, "Trickle sec: %d/60", trickle_sec);
1196#endif /* ARCHOS_RECORDER */ 1215#endif /* ARCHOS_RECORDER */
1197 1216
1217#if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE)
1198 lcd_putsf(0, 5, "Last PwrHist: %d.%03dV", 1218 lcd_putsf(0, 5, "Last PwrHist: %d.%03dV",
1199 power_history[0] / 1000, 1219 power_history[0] / 1000,
1200 power_history[0] % 1000); 1220 power_history[0] % 1000);
1221#endif
1201 1222
1202 lcd_putsf(0, 6, "battery level: %d%%", battery_level()); 1223 lcd_putsf(0, 6, "battery level: %d%%", battery_level());
1203 1224
1204 lcd_putsf(0, 7, "Est. remain: %d m", battery_time()); 1225 int time_left = battery_time();
1226 if (time_left >= 0)
1227 lcd_putsf(0, 7, "Est. remain: %d m", time_left);
1228 else
1229 lcd_puts(0, 7, "Estimation n/a");
1205 break; 1230 break;
1206 } 1231 }
1207 1232
@@ -1228,8 +1253,7 @@ static bool view_battery(void)
1228 return false; 1253 return false;
1229} 1254}
1230 1255
1231#endif /* HAVE_LCD_BITMAP */ 1256#endif /* (CONFIG_BATTERY_MEASURE != 0) && HAVE_LCD_BITMAP */
1232#endif
1233 1257
1234#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 1258#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
1235#if (CONFIG_STORAGE & STORAGE_MMC) || (CONFIG_STORAGE & STORAGE_SD) 1259#if (CONFIG_STORAGE & STORAGE_MMC) || (CONFIG_STORAGE & STORAGE_SD)
@@ -2168,7 +2192,7 @@ static const struct the_menu_item menuitems[] = {
2168 { "View CPU stats", dbg_cpuinfo }, 2192 { "View CPU stats", dbg_cpuinfo },
2169#endif 2193#endif
2170#ifdef HAVE_LCD_BITMAP 2194#ifdef HAVE_LCD_BITMAP
2171#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SAMSUNG_YPR0) 2195#if (CONFIG_BATTERY_MEASURE != 0) && !defined(SIMULATOR)
2172 { "View battery", view_battery }, 2196 { "View battery", view_battery },
2173#endif 2197#endif
2174#ifndef APPLICATION 2198#ifndef APPLICATION
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index 169c4a36fd..bae8ae8f8e 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -1068,9 +1068,13 @@ const char *get_token_value(struct gui_wps *gwps,
1068 1068
1069 case SKIN_TOKEN_BATTERY_VOLTS: 1069 case SKIN_TOKEN_BATTERY_VOLTS:
1070 { 1070 {
1071 unsigned int v = battery_voltage(); 1071 int v = battery_voltage();
1072 snprintf(buf, buf_size, "%d.%02d", v / 1000, (v % 1000) / 10); 1072 if (v >= 0) {
1073 return buf; 1073 snprintf(buf, buf_size, "%d.%02d", v / 1000, (v % 1000) / 10);
1074 return buf;
1075 } else {
1076 return "?";
1077 }
1074 } 1078 }
1075 1079
1076 case SKIN_TOKEN_BATTERY_TIME: 1080 case SKIN_TOKEN_BATTERY_TIME:
diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c
index cefc395b3d..b7472a6849 100644
--- a/apps/menus/main_menu.c
+++ b/apps/menus/main_menu.c
@@ -210,7 +210,7 @@ static const char* info_getname(int selected_item, void *data,
210 snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME), 210 snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME),
211 battery_level(), battery_time() / 60, battery_time() % 60); 211 battery_level(), battery_time() / 60, battery_time() % 60);
212 else 212 else
213 return "(n/a)"; 213 return "Battery n/a"; /* translating worth it? */
214 break; 214 break;
215 case INFO_DISK1: /* disk usage 1 */ 215 case INFO_DISK1: /* disk usage 1 */
216#ifdef HAVE_MULTIVOLUME 216#ifdef HAVE_MULTIVOLUME
@@ -289,9 +289,11 @@ static int info_speak_item(int selected_item, void * data)
289#endif /* CONFIG_CHARGING = */ 289#endif /* CONFIG_CHARGING = */
290 if (battery_level() >= 0) 290 if (battery_level() >= 0)
291 { 291 {
292 int time_left = battery_time();
292 talk_id(LANG_BATTERY_TIME, false); 293 talk_id(LANG_BATTERY_TIME, false);
293 talk_value(battery_level(), UNIT_PERCENT, true); 294 talk_value(battery_level(), UNIT_PERCENT, true);
294 talk_value(battery_time() *60, UNIT_TIME, true); 295 if (time_left >= 0)
296 talk_value(time_left * 60, UNIT_TIME, true);
295 } 297 }
296 else talk_id(VOICE_BLANK, false); 298 else talk_id(VOICE_BLANK, false);
297 break; 299 break;
diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c
index e1077a5efd..5e04191ed1 100644
--- a/apps/menus/theme_menu.c
+++ b/apps/menus/theme_menu.c
@@ -219,7 +219,11 @@ MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON,
219#if CONFIG_KEYPAD == RECORDER_PAD 219#if CONFIG_KEYPAD == RECORDER_PAD
220 &buttonbar, 220 &buttonbar,
221#endif 221#endif
222 &volume_type, &battery_display); 222 &volume_type
223#if (CONFIG_BATTERY_MEASURE != 0)
224 , &battery_display
225#endif
226 );
223#endif /* HAVE_LCD_BITMAP */ 227#endif /* HAVE_LCD_BITMAP */
224 228
225/* */ 229/* */
diff --git a/apps/misc.c b/apps/misc.c
index b1def596ab..30c747113c 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -277,6 +277,7 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter)
277 277
278 if (batt_safe) 278 if (batt_safe)
279 { 279 {
280 int level;
280#ifdef HAVE_TAGCACHE 281#ifdef HAVE_TAGCACHE
281 if (!tagcache_prepare_shutdown()) 282 if (!tagcache_prepare_shutdown())
282 { 283 {
@@ -285,7 +286,8 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter)
285 return false; 286 return false;
286 } 287 }
287#endif 288#endif
288 if (battery_level() > 10) 289 level = battery_level();
290 if (level > 10 || level < 0)
289 splash(0, str(LANG_SHUTTINGDOWN)); 291 splash(0, str(LANG_SHUTTINGDOWN));
290 else 292 else
291 { 293 {
diff --git a/apps/plugin.c b/apps/plugin.c
index f17ad3c57a..25280750ce 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -664,9 +664,7 @@ static const struct plugin_api rockbox_api = {
664 battery_level, 664 battery_level,
665 battery_level_safe, 665 battery_level_safe,
666 battery_time, 666 battery_time,
667#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SAMSUNG_YPR0)
668 battery_voltage, 667 battery_voltage,
669#endif
670#if CONFIG_CHARGING 668#if CONFIG_CHARGING
671 charger_inserted, 669 charger_inserted,
672# if CONFIG_CHARGING >= CHARGING_MONITOR 670# if CONFIG_CHARGING >= CHARGING_MONITOR
diff --git a/apps/plugin.h b/apps/plugin.h
index 0bb7262bd8..918206ab69 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -794,9 +794,7 @@ struct plugin_api {
794 int (*battery_level)(void); 794 int (*battery_level)(void);
795 bool (*battery_level_safe)(void); 795 bool (*battery_level_safe)(void);
796 int (*battery_time)(void); 796 int (*battery_time)(void);
797#if (CONFIG_PLATFORM & PLATFORM_NATIVE) || defined(SAMSUNG_YPR0) 797 int (*battery_voltage)(void);
798 unsigned int (*battery_voltage)(void);
799#endif
800#if CONFIG_CHARGING 798#if CONFIG_CHARGING
801 bool (*charger_inserted)(void); 799 bool (*charger_inserted)(void);
802# if CONFIG_CHARGING >= CHARGING_MONITOR 800# if CONFIG_CHARGING >= CHARGING_MONITOR
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES
index 1b14c0dd5e..a72579e3da 100644
--- a/apps/plugins/SOURCES
+++ b/apps/plugins/SOURCES
@@ -1,5 +1,5 @@
1/* plugins common to all models */ 1/* plugins common to all models */
2#ifndef SIMULATOR 2#if !defined(SIMULATOR) && (CONFIG_BATTERY_MEASURE != 0)
3battery_bench.c 3battery_bench.c
4#endif 4#endif
5chessclock.c 5chessclock.c
diff --git a/apps/settings.h b/apps/settings.h
index 676e5bfb56..d0fd3204e9 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -638,7 +638,7 @@ struct user_settings
638 638
639 /* power settings */ 639 /* power settings */
640 int poweroff; /* idle power off timer */ 640 int poweroff; /* idle power off timer */
641#ifdef BATTERY_CAPACITY_DEFAULT 641#if BATTERY_CAPACITY_DEFAULT > 0
642 int battery_capacity; /* in mAh */ 642 int battery_capacity; /* in mAh */
643#endif 643#endif
644 644
diff --git a/apps/settings_list.c b/apps/settings_list.c
index c9003bb8f3..dff5ed26f4 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -838,7 +838,7 @@ const struct settings_list settings[] = {
838 NULL, NULL, NULL), 838 NULL, NULL, NULL),
839/* use this setting for user code even if there's no exchangable battery 839/* use this setting for user code even if there's no exchangable battery
840 * support enabled */ 840 * support enabled */
841#ifdef BATTERY_CAPACITY_DEFAULT 841#if BATTERY_CAPACITY_DEFAULT > 0
842/* define min/max/inc for this file if there's only one battery */ 842/* define min/max/inc for this file if there's only one battery */
843#ifndef BATTERY_CAPACITY_MIN 843#ifndef BATTERY_CAPACITY_MIN
844#define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT 844#define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT