diff --git a/apps/settings.c b/apps/settings.c index 64a1a8c0a2..9d0a9f62b3 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -126,6 +126,7 @@ modified unless the header & checksum test fails. Rest of config block, only saved to disk: +0xB1 (int) battery capacity 0xB5 scroll step in pixels 0xB6 scroll start and endpoint delay 0xB7 bidir scroll setting (bidi if 0-200% longer than screen width) @@ -368,6 +369,7 @@ int settings_save( void ) config_block[0x29]=(unsigned char)(global_settings.topruntime >> 8); } + memcpy(&config_block[0xb1], &global_settings.battery_capacity, 4); config_block[0xb5]=(unsigned char)global_settings.scroll_step; config_block[0xb6]=(unsigned char)global_settings.scroll_delay; config_block[0xb7]=(unsigned char)global_settings.bidir_limit; @@ -466,6 +468,8 @@ void settings_apply(void) enable_trickle_charge(global_settings.trickle_charge); #endif + set_battery_capacity(global_settings.battery_capacity); + #ifdef HAVE_LCD_BITMAP settings_apply_pm_range(); peak_meter_init_times( @@ -648,6 +652,8 @@ void settings_load(void) global_settings.topruntime = config_block[0x28] | (config_block[0x29] << 8); + memcpy(&global_settings.battery_capacity, &config_block[0xb1], 4); + if (config_block[0xb5] != 0xff) global_settings.scroll_step = config_block[0xb5]; @@ -831,7 +837,7 @@ void settings_reset(void) { global_settings.backlight_timeout = DEFAULT_BACKLIGHT_TIMEOUT_SETTING; global_settings.backlight_on_when_charging = DEFAULT_BACKLIGHT_ON_WHEN_CHARGING_SETTING; - global_settings.battery_capacity = 0; /* 1500 mAh */ + global_settings.battery_capacity = 1500; /* mAh */ global_settings.trickle_charge = true; global_settings.dirfilter = SHOW_MUSIC; global_settings.sort_case = false; diff --git a/apps/settings.h b/apps/settings.h index a2f7692d88..41f9b803c1 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -85,14 +85,7 @@ struct user_settings bool backlight_on_when_charging; bool discharge; /* maintain charge of at least: false = 85%, true = 10% */ bool trickle_charge; /* do trickle charging: 0=off, 1=on */ - int battery_capacity; /* 0 = 1500 mAh - 1 = 1600 mAh - 2 = 1700 mAh - 3 = 1800 mAh - 4 = 1900 mAh - 5 = 2000 mAh - 6 = 2100 mAh - 7 = 2200 mAh */ + int battery_capacity; /* in mAh */ /* resume settings */ diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 9e7320eef6..94f6cc74ea 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -428,27 +428,16 @@ static bool bidir_limit(void) } #endif +#ifndef SIMULATOR /** * Menu to set the battery capacity */ -static bool battery_capacity(void) { - bool retval = false; - - char* names[] = { "1500 mAh ", "1600 mAh ", - "1700 mAh ", "1800 mAh ", - "1900 mAh ", "2000 mAh ", - "2100 mAh ", "2200 mAh " - }; - - retval = set_option( str(LANG_BATTERY_CAPACITY), - &global_settings.battery_capacity, names, 8, NULL); - -#ifndef SIMULATOR - set_battery_capacity(global_settings.battery_capacity); -#endif /* SIMULATOR */ - - return retval; +static bool battery_capacity(void) +{ + return set_int(str(LANG_BATTERY_CAPACITY), " mAh", &global_settings.battery_capacity, + &set_battery_capacity, 50, 1500, BATTERY_CAPACITY_MAX ); } +#endif #ifdef HAVE_CHARGE_CTRL static bool deep_discharge(void) @@ -742,7 +731,9 @@ static bool system_settings_menu(void) #ifdef HAVE_ATA_POWER_OFF { str(LANG_POWEROFF), poweroff }, #endif +#ifndef SIMULATOR { str(LANG_BATTERY_CAPACITY), battery_capacity }, +#endif #ifdef HAVE_CHARGE_CTRL { str(LANG_DISCHARGE), deep_discharge }, { str(LANG_TRICKLE_CHARGE), trickle_charge }, diff --git a/firmware/powermgmt.c b/firmware/powermgmt.c index 7dcecb1e68..febcb78a5a 100644 --- a/firmware/powermgmt.c +++ b/firmware/powermgmt.c @@ -73,9 +73,9 @@ int battery_capacity = 1500; /* only a default value */ void set_battery_capacity(int capacity) { - int values[8] = {1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200}; - - battery_capacity = values[capacity]; + battery_capacity = capacity; + if ((battery_capacity > BATTERY_CAPACITY_MAX) || (battery_capacity < 1500)) + battery_capacity = 1500; } #ifdef HAVE_CHARGE_CTRL diff --git a/firmware/powermgmt.h b/firmware/powermgmt.h index b7f8b01978..ea6319c02e 100644 --- a/firmware/powermgmt.h +++ b/firmware/powermgmt.h @@ -27,6 +27,7 @@ #define BATTERY_LEVEL_FULL 585 /* 5.85V */ #define BATTERY_RANGE (BATTERY_LEVEL_FULL - BATTERY_LEVEL_EMPTY) +#define BATTERY_CAPACITY_MAX 2400 /* max. capacity that can be selected in settings menu, min. is always 1500 */ #define POWER_HISTORY_LEN 2*60 /* 2 hours of samples, one per minute */ #define POWER_AVG_N 4 /* how many samples to take for each measurement */