summaryrefslogtreecommitdiff
path: root/firmware/target/hosted
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2012-01-03 23:44:38 +0000
committerThomas Martitz <kugel@rockbox.org>2012-01-03 23:44:38 +0000
commitc1bd9b0361ba92c29ceef68d74093e70a1a3e481 (patch)
tree1a42acdf2099b7f5ac06eee11e1d488b388c6d9f /firmware/target/hosted
parent949e6398c89e3c277a4c542f67a5ee788c6f642d (diff)
downloadrockbox-c1bd9b0361ba92c29ceef68d74093e70a1a3e481.tar.gz
rockbox-c1bd9b0361ba92c29ceef68d74093e70a1a3e481.zip
Rework powermgmt to enable code re-use on appliation and sims.
* Introduce CONFIG_BATTERY_MEASURE define, to allow targets (application) to break powermgmt.c's assumption about the ability to read battery voltage. There's now additionally percentage (android) and remaining time measure (maemo). No measure at all also works (sdl app). If voltage can't be measured, then battery_level() is king and it'll be used for power_history and runtime estimation. * Implement target's API in the simulator, i.e. _battery_voltage(), so it doesn't need to implement it's own powermgmt.c and other stubs. Now the sim behaves much more like a native target, although it still changes the simulated battery voltage quickly, * Other changes include include renaming battery_adc_voltage() to _battery_voltage(), for consistency with the new target functions and making some of the apps code aware that voltage and runtime estimation is not always available. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31548 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/hosted')
-rw-r--r--firmware/target/hosted/android/powermgmt-android.c28
-rw-r--r--firmware/target/hosted/android/system-android.c2
-rw-r--r--firmware/target/hosted/maemo/maemo-thread.c30
-rw-r--r--firmware/target/hosted/powermgmt.c56
-rw-r--r--firmware/target/hosted/sdl/system-sdl.c2
-rw-r--r--firmware/target/hosted/ypr0/powermgmt-ypr0.c4
6 files changed, 13 insertions, 109 deletions
diff --git a/firmware/target/hosted/android/powermgmt-android.c b/firmware/target/hosted/android/powermgmt-android.c
index dcbd7a6214..1e70a81753 100644
--- a/firmware/target/hosted/android/powermgmt-android.c
+++ b/firmware/target/hosted/android/powermgmt-android.c
@@ -28,10 +28,10 @@ extern JNIEnv *env_ptr;
28extern jclass RockboxService_class; 28extern jclass RockboxService_class;
29extern jobject RockboxService_instance; 29extern jobject RockboxService_instance;
30 30
31static jfieldID _battery_level; 31static jfieldID __battery_level;
32static jobject BatteryMonitor_instance; 32static jobject BatteryMonitor_instance;
33 33
34void powermgmt_init_target(void) 34static void new_battery_monitor(void)
35{ 35{
36 JNIEnv e = *env_ptr; 36 JNIEnv e = *env_ptr;
37 jclass class = e->FindClass(env_ptr, "org/rockbox/monitors/BatteryMonitor"); 37 jclass class = e->FindClass(env_ptr, "org/rockbox/monitors/BatteryMonitor");
@@ -43,29 +43,15 @@ void powermgmt_init_target(void)
43 RockboxService_instance); 43 RockboxService_instance);
44 44
45 /* cache the battery level field id */ 45 /* cache the battery level field id */
46 _battery_level = (*env_ptr)->GetFieldID(env_ptr, 46 __battery_level = (*env_ptr)->GetFieldID(env_ptr,
47 class, 47 class,
48 "mBattLevel", "I"); 48 "mBattLevel", "I");
49} 49}
50 50
51int battery_level(void) 51int _battery_level(void)
52{ 52{
53 return (*env_ptr)->GetIntField(env_ptr, BatteryMonitor_instance, _battery_level); 53 if (!BatteryMonitor_instance)
54 new_battery_monitor();
55 return (*env_ptr)->GetIntField(env_ptr, BatteryMonitor_instance, __battery_level);
54} 56}
55 57
56int battery_time(void)
57{ /* cannot calculate yet */
58 return 0;
59}
60
61/* should always be safe on android targets, the host shuts us down before */
62bool battery_level_safe(void)
63{
64 return true;
65}
66
67/* TODO */
68unsigned battery_voltage(void)
69{
70 return 0;
71}
diff --git a/firmware/target/hosted/android/system-android.c b/firmware/target/hosted/android/system-android.c
index fba7ff4e2c..e48e910c0c 100644
--- a/firmware/target/hosted/android/system-android.c
+++ b/firmware/target/hosted/android/system-android.c
@@ -45,7 +45,7 @@ void system_reboot(void) { }
45 45
46/* this is used to return from the entry point of the native library. */ 46/* this is used to return from the entry point of the native library. */
47static jmp_buf poweroff_buf; 47static jmp_buf poweroff_buf;
48void shutdown_hw(void) 48void power_off(void)
49{ 49{
50 longjmp(poweroff_buf, 1); 50 longjmp(poweroff_buf, 1);
51} 51}
diff --git a/firmware/target/hosted/maemo/maemo-thread.c b/firmware/target/hosted/maemo/maemo-thread.c
index a32a563459..2f1d033baa 100644
--- a/firmware/target/hosted/maemo/maemo-thread.c
+++ b/firmware/target/hosted/maemo/maemo-thread.c
@@ -163,40 +163,14 @@ int maemo_thread_func (void *wait_for_osso_startup)
163 return 0; 163 return 0;
164} 164}
165 165
166/** Rockbox battery related functions */
167void battery_status_update(void)
168{
169 battery_percent = maemo_battery_level;
170 send_battery_level_event();
171}
172
173/* Returns true if any power input is connected - charging-capable
174 * or not. */
175bool power_input_present(void)
176{
177 return false;
178}
179
180unsigned battery_voltage(void)
181{
182 return 0;
183}
184
185/* Returns battery level in percent */ 166/* Returns battery level in percent */
186int battery_level(void) 167int _battery_level(void)
187{ 168{
188 battery_status_update();
189 return maemo_battery_level; 169 return maemo_battery_level;
190} 170}
191 171
192/* Return remaining battery time in minutes */ 172/* Return remaining battery time in minutes */
193int battery_time(void) 173int _battery_time(void)
194{ 174{
195 battery_status_update();
196 return maemo_remaining_time_sec / 60; 175 return maemo_remaining_time_sec / 60;
197} 176}
198
199bool battery_level_safe(void)
200{
201 return battery_level() >= 5;
202}
diff --git a/firmware/target/hosted/powermgmt.c b/firmware/target/hosted/powermgmt.c
deleted file mode 100644
index bf05e5ff19..0000000000
--- a/firmware/target/hosted/powermgmt.c
+++ /dev/null
@@ -1,56 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2011 by Thomas Jarosch
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#include "config.h"
22#include "powermgmt.h"
23#include "thread.h"
24#include "kernel.h"
25
26static char power_stack[DEFAULT_STACK_SIZE];
27static const char power_thread_name[] = "power";
28
29void powermgmt_init_target(void);
30
31#if !(CONFIG_PLATFORM & PLATFORM_ANDROID)
32void powermgmt_init_target(void)
33{
34 /* Nothing to do */
35}
36#endif
37
38static void power_thread(void)
39{
40 powermgmt_init_target();
41
42 while (1)
43 {
44 /* Sleep two seconds */
45 sleep(HZ*2);
46
47 handle_auto_poweroff();
48 }
49} /* power_thread */
50
51void powermgmt_init(void)
52{
53 create_thread(power_thread, power_stack, sizeof(power_stack), 0,
54 power_thread_name IF_PRIO(, PRIORITY_SYSTEM)
55 IF_COP(, CPU));
56}
diff --git a/firmware/target/hosted/sdl/system-sdl.c b/firmware/target/hosted/sdl/system-sdl.c
index 93a8a7cb66..87b2e0ccd1 100644
--- a/firmware/target/hosted/sdl/system-sdl.c
+++ b/firmware/target/hosted/sdl/system-sdl.c
@@ -196,7 +196,7 @@ static int sdl_event_thread(void * param)
196 return 0; 196 return 0;
197} 197}
198 198
199void shutdown_hw(void) 199void power_off(void)
200{ 200{
201 /* Shut down SDL event loop */ 201 /* Shut down SDL event loop */
202 SDL_Event event; 202 SDL_Event event;
diff --git a/firmware/target/hosted/ypr0/powermgmt-ypr0.c b/firmware/target/hosted/ypr0/powermgmt-ypr0.c
index 0c162a619d..9c90f7ea02 100644
--- a/firmware/target/hosted/ypr0/powermgmt-ypr0.c
+++ b/firmware/target/hosted/ypr0/powermgmt-ypr0.c
@@ -70,7 +70,7 @@ unsigned int power_input_status(void)
70 70
71/* Returns battery voltage from ADC [millivolts], 71/* Returns battery voltage from ADC [millivolts],
72 * adc returns voltage in 5mV steps */ 72 * adc returns voltage in 5mV steps */
73unsigned int battery_adc_voltage(void) 73int _battery_voltage(void)
74{ 74{
75 return adc_read(3) * 5; 75 return adc_read(3) * 5;
76} 76}
@@ -80,5 +80,5 @@ bool charging_state(void)
80 const unsigned short charged_thres = 4170; 80 const unsigned short charged_thres = 4170;
81 bool ret = (power_input_status() == POWER_INPUT_MAIN_CHARGER); 81 bool ret = (power_input_status() == POWER_INPUT_MAIN_CHARGER);
82 /* dont indicate for > ~95% */ 82 /* dont indicate for > ~95% */
83 return ret && (battery_adc_voltage() <= charged_thres); 83 return ret && (_battery_voltage() <= charged_thres);
84} 84}