Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang (revision 15044)
+++ apps/lang/english.lang (working copy)
@@ -11389,3 +11389,33 @@
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"
+
+
Index: apps/misc.c
===================================================================
--- apps/misc.c (revision 15044)
+++ apps/misc.c (working copy)
@@ -857,6 +857,13 @@
{
switch(event)
{
+ case SYS_BATTERY_UPDATE:
+ 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 +895,14 @@
#if CONFIG_CHARGING
case SYS_CHARGER_CONNECTED:
car_adapter_mode_processing(true);
+ if(talk_menus_enabled ())
+ talk_id(LANG_CHARGER_INSERTED, true);
return SYS_CHARGER_CONNECTED;
case SYS_CHARGER_DISCONNECTED:
car_adapter_mode_processing(false);
+ 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,24 @@
power_off();
#endif /* #ifndef SIMULATOR */
}
+
+/*Returns the battery level on certain levels.*/
+static void send_level(void)
+{
+ int current_level = battery_level();
+ if (current_level <= 5 && last_sent_level > 5)
+ {
+ last_sent_level = 5;
+ queue_broadcast(SYS_BATTERY_UPDATE, last_sent_level);
+ }
+ if (current_level <= 20 && last_sent_level > 20)
+ {
+ last_sent_level = 20;
+ queue_broadcast(SYS_BATTERY_UPDATE, last_sent_level);
+ }
+ if (current_level <= 50 && last_sent_level > 50)
+ {
+ last_sent_level = 50;
+ queue_broadcast(SYS_BATTERY_UPDATE, last_sent_level);
+ }
+}