Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang (revision 15044)
+++ apps/lang/english.lang (working copy)
@@ -11389,3 +11389,47 @@
lcd_color: "Line Selector Colours"
+
+ id: LANG_CHARGER_REMOVED
+ desc: Tell the user when the charger is disconnected.
+Only for voice
+ user:
+
+ *: "Charger removed"
+
+
+ *: "Charger removed"
+
+
+ *: "Charger removed"
+
+
+
+ id: LANG_CHARGER_INSERTED
+ desc: Tell the user when the charger is connected.
+Only for voice
+ user:
+
+ *: "Charger inserted"
+
+
+ *: "Charger inserted"
+
+
+ *: "Charger inserted"
+
+
+
+id: LANG_BATTERY_STATUS
+ desc: option to Speak battery levels when they hit 50, 20 and 5%
+ user:
+
+ *: "Battery status notifications?"
+
+
+ *: "Battery status notifications?"
+
+
+ *: "Battery status notifications?"
+
+
Index: apps/settings.h
===================================================================
--- apps/settings.h (revision 15044)
+++ apps/settings.h (working copy)
@@ -535,7 +535,7 @@
bool talk_dir_clip; /* use directory .talk clips */
int talk_file; /* voice file mode: 0=off, 1=number, 2=spell */
bool talk_file_clip; /* use file .talk clips */
-
+ bool battery_status;
/* file browser sorting */
int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */
int sort_dir; /* 0=alpha, 1=date (old first), 2=date (new first) */
Index: apps/menus/settings_menu.c
===================================================================
--- apps/menus/settings_menu.c (revision 15044)
+++ apps/menus/settings_menu.c (working copy)
@@ -419,6 +419,8 @@
MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback);
MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL);
MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback);
+MENUITEM_SETTING(battery_status_item, &global_settings.battery_status, NULL);
+
static int talk_callback(int action,const struct menu_item_ex *this_item)
{
static int oldval = 0;
@@ -445,7 +447,8 @@
}
MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice,
&talk_menu_item, &talk_dir_item, &talk_dir_clip_item,
- &talk_file_item, &talk_file_clip_item);
+ &talk_file_item, &talk_file_clip_item,
+ &battery_status_item);
/* VOICE MENU */
/***********************************/
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c (revision 15044)
+++ apps/settings_list.c (working copy)
@@ -761,6 +761,7 @@
ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
ID2P(LANG_VOICE_SPELL)),
OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false, "talk file clip", NULL),
+ OFFON_SETTING(F_TEMPVAR, battery_status, LANG_BATTERY_STATUS, false, "Battery status notifications", NULL),
/* file sorting */
CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 ,
Index: apps/misc.c
===================================================================
--- apps/misc.c (revision 15044)
+++ apps/misc.c (working copy)
@@ -857,6 +857,16 @@
{
switch(event)
{
+ case SYS_BATTERY_UPDATE:
+ if(global_settings.battery_status)
+ {
+ if(talk_menus_enabled ())
+ {
+ talk_id(LANG_BATTERY_TIME, true);
+ talk_value(battery_level(), UNIT_PERCENT, true);
+ }
+ }
+ break;
case SYS_USB_CONNECTED:
if (callback != NULL)
callback(parameter);
@@ -888,10 +898,20 @@
#if CONFIG_CHARGING
case SYS_CHARGER_CONNECTED:
car_adapter_mode_processing(true);
+ if(global_settings.battery_status)
+ {
+ if(talk_menus_enabled ())
+ talk_id(LANG_CHARGER_INSERTED, true);
+ }
return SYS_CHARGER_CONNECTED;
case SYS_CHARGER_DISCONNECTED:
car_adapter_mode_processing(false);
+ if(global_settings.battery_status)
+ {
+ if(talk_menus_enabled ())
+ talk_id(LANG_CHARGER_REMOVED, true);
+ }
return SYS_CHARGER_DISCONNECTED;
case SYS_CAR_ADAPTER_RESUME:
Index: firmware/export/kernel.h
===================================================================
--- firmware/export/kernel.h (revision 15044)
+++ firmware/export/kernel.h (working copy)
@@ -62,6 +62,7 @@
#define SYS_POWEROFF MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 0)
#define SYS_CHARGER_CONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 1)
#define SYS_CHARGER_DISCONNECTED MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 2)
+#define SYS_BATTERY_UPDATE MAKE_SYS_EVENT(SYS_EVENT_CLS_POWER, 3)
#define SYS_FS_CHANGED MAKE_SYS_EVENT(SYS_EVENT_CLS_FILESYS, 0)
#define SYS_HOTSWAP_INSERTED MAKE_SYS_EVENT(SYS_EVENT_CLS_PLUG, 0)
#define SYS_HOTSWAP_EXTRACTED MAKE_SYS_EVENT(SYS_EVENT_CLS_PLUG, 1)
Index: firmware/export/powermgmt.h
===================================================================
--- firmware/export/powermgmt.h (revision 15044)
+++ firmware/export/powermgmt.h (working copy)
@@ -174,5 +174,4 @@
void cancel_shutdown(void);
void shutdown_hw(void);
void sys_poweroff(void);
-
#endif
Index: firmware/powermgmt.c
===================================================================
--- firmware/powermgmt.c (revision 15044)
+++ firmware/powermgmt.c (working copy)
@@ -74,12 +74,14 @@
#else
#define DEBUG_STACK 0
#endif
-
static int shutdown_timeout = 0;
#if CONFIG_CHARGING >= CHARGING_MONITOR
charge_state_type charge_state; /* charging mode */
#endif
+static int last_sent_level = 100;
+static void send_level(void);
+
#if CONFIG_CHARGING
charger_input_state_type charger_input_state IDATA_ATTR;
#endif
@@ -95,6 +97,7 @@
static int batt_time = BATT_MAXRUNTIME; /* estimated remaining time in minutes */
static time_t last_change = 0;
+
static void battery_status_update(void)
{
time_t now;
@@ -111,6 +114,7 @@
batt_level = 100 * (batt_millivolts - BATT_MINMVOLT) / (BATT_MAXMVOLT - BATT_MINMVOLT);
batt_time = batt_level * BATT_MAXRUNTIME / 100;
}
+ send_level();
}
void battery_read_info(int *voltage, int *level)
@@ -459,6 +463,7 @@
}
battery_percent = level;
+ send_level();
}
/*
@@ -638,6 +643,7 @@
return;
case CHARGER_PLUGGED:
queue_broadcast(SYS_CHARGER_CONNECTED, 0);
+ last_sent_level = 0;
charger_input_state = CHARGER;
break;
case CHARGER:
@@ -649,6 +655,7 @@
break;
case CHARGER_UNPLUGGED:
queue_broadcast(SYS_CHARGER_DISCONNECTED, 0);
+ last_sent_level = 100;
charger_input_state = NO_CHARGER;
break;
case CHARGER_PLUGGED:
@@ -1192,3 +1199,21 @@
power_off();
#endif /* #ifndef SIMULATOR */
}
+
+/*Returns the battery level on certain levels.*/
+static void send_level(void)
+{
+ int current_level = battery_level();
+ const int levels[] = { 5, 20, 50, 0 };
+ const int *level = levels;
+ while (*level)
+ {
+ if (current_level <= *level && last_sent_level > *level)
+ {
+ last_sent_level = *level;
+ queue_broadcast(SYS_BATTERY_UPDATE, last_sent_level);
+ break;
+ }
+ level++;
+ }
+}