EeePc porting - Instructions for last codebase

26 views
Skip to first unread message

Luca Belluccini

unread,
Apr 7, 2009, 10:07:50 PM4/7/09
to android-porting
Compile a kernel image disabling pmem, enabling vesa, enabling
hardware stuff...
Use the old eee_701 target files (replace the compiled kernel).
Modify:
- system/core/mountd/Android.mk (add an if to make them compile for
x86 arch or specific target)
- external/e2fsprogs/Android.mk (include them for x86 arch - they're
necessary for installer)
- vendor/asus/eee_701/init.rc (add ro.HOME_APP_ADJ 4 and
ro.HOME_APP_MEM 4096)
- frameworks/base/preloaded-classes (comment out some ATM non existent
classes PhoneWindow and derived)
- frameworks/base/services/jni/com_android_server_BatteryService.cpp
(added some stuff for faking battery status)

@@ -15,6 +15,7 @@
*/

#define LOG_TAG "BatteryService"
+#define eee_701 1

#include "JNIHelp.h"
#include "jni.h"
@@ -79,6 +80,7 @@

static jint getBatteryStatus(const char* status)
{
+ if(eee_701) return gConstants.statusUnknown;
switch (status[0]) {
case 'C': return gConstants.statusCharging; //
Charging
case 'D': return gConstants.statusDischarging; //
Discharging
@@ -95,6 +97,7 @@

static jint getBatteryHealth(const char* status)
{
+ if(eee_701) return gConstants.healthUnknown;
switch (status[0]) {
case 'D': return gConstants.healthDead; // Dead
case 'G': return gConstants.healthGood; // Good
@@ -126,6 +129,7 @@

static int readFromFile(const char* path, char* buf, size_t size)
{
+ if(eee_701) return size;
int fd = open(path, O_RDONLY, 0);
if (fd == -1) {
LOGE("Could not open '%s'", path);
@@ -151,11 +155,13 @@
char buf[SIZE];

jboolean value = false;
+
if (readFromFile(path, buf, SIZE) > 0) {
if (buf[0] == '1') {
value = true;
}
}
+ if (eee_701) value = true;
env->SetBooleanField(obj, fieldID, value);
}

@@ -168,6 +174,7 @@
if (readFromFile(path, buf, SIZE) > 0) {
value = atoi(buf);
}
+ if (eee_701) value = 1;
env->SetIntField(obj, fieldID, value);
}


- vendor/asus/eee_701/BoardConfig.mk (append vga=788 to
BOARD_KERNEL_CMDLINE)
Make install_img and as usual...

Androidphan

unread,
Apr 8, 2009, 3:41:57 AM4/8/09
to android-porting
Doesn't the EEE pc have any battery monitoring? Then the correct paths
can be modified in the Batteryservice in stead of just an unknown
status.

Luca Belluccini

unread,
Apr 8, 2009, 5:43:52 AM4/8/09
to android-porting
I don't know if EeePc battery monitoring has the same "protocol".

Yi Sun

unread,
Apr 9, 2009, 12:12:43 PM4/9/09
to android...@googlegroups.com
How about this ? It works for me so far.
diff --git a/services/jni/com_android_server_BatteryService.cpp
b/services/jni/com_android_server_BatteryService.cpp
index 6636a97..831f44e 100644
--- a/services/jni/com_android_server_BatteryService.cpp
+++ b/services/jni/com_android_server_BatteryService.cpp
@@ -37,7 +37,27 @@
#endif

namespace android {
-
+#if TARGET_PLATFORM == eee_701
+#define AC_ONLINE_PATH "/sys/class/power_supply/AC/online"
+ /*
+ I guess this is for USB power, EeePC does not have this
+ #define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"
+ */
+#define BATTERY_STATUS_PATH "/sys/class/power_supply/BAT0/status"
+ /*
+ I don't think we have this part on EeePC, I could not find this
+ on my Sony either.
+ #define BATTERY_HEALTH_PATH
"/sys/class/power_supply/battery/health"
+ */
+#define BATTERY_PRESENT_PATH "/sys/class/power_supply/BAT0/present"
+#define BATTERY_CAPACITY_PATH
"/sys/class/power_supply/BAT0/energy_full"
+#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/BAT0/voltage_now"
+ /*
+ *Did not find this on my EeePC either
+ #define BATTERY_TEMPERATURE_PATH
"/sys/class/power_supply/battery/batt_temp"
+ */
+#define BATTERY_TECHNOLOGY_PATH
"/sys/class/power_supply/BAT0/technology"
+#else
#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online"
#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"
#define BATTERY_STATUS_PATH "/sys/class/power_supply/battery/status"
@@ -47,7 +67,7 @@ namespace android {
#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/battery/batt_vol"
#define BATTERY_TEMPERATURE_PATH
"/sys/class/power_supply/battery/batt_temp"
#define BATTERY_TECHNOLOGY_PATH
"/sys/class/power_supply/battery/technology"
-
+#endif
struct FieldIds {
// members
jfieldID mAcOnline;
@@ -174,12 +194,21 @@ static void setIntField(JNIEnv* env, jobject obj,
const char* path, jfieldID fie
static void android_server_BatteryService_update(JNIEnv* env, jobject
obj)
{
setBooleanField(env, obj, AC_ONLINE_PATH, gFieldIds.mAcOnline);
+#if TARGET_PLATFORM == eee_701
+ env->SetBooleanField(obj,gFieldIds.mUsbOnline,false);
+#else
setBooleanField(env, obj, USB_ONLINE_PATH, gFieldIds.mUsbOnline);
+#endif
setBooleanField(env, obj, BATTERY_PRESENT_PATH,
gFieldIds.mBatteryPresent);

setIntField(env, obj, BATTERY_CAPACITY_PATH,
gFieldIds.mBatteryLevel);
setIntField(env, obj, BATTERY_VOLTAGE_PATH,
gFieldIds.mBatteryVoltage);
+#if TARGET_PLATFORM == eee_701
+ /*Zero ;)*/
+ env->SetIntField(obj,gFieldIds.mBatteryTemperature,0);
+#else
setIntField(env, obj, BATTERY_TEMPERATURE_PATH,
gFieldIds.mBatteryTemperature);
+#endif

const int SIZE = 128;
char buf[SIZE];
@@ -187,9 +216,13 @@ static void
android_server_BatteryService_update(JNIEnv* env, jobject obj)
if (readFromFile(BATTERY_STATUS_PATH, buf, SIZE) > 0)
env->SetIntField(obj, gFieldIds.mBatteryStatus,
getBatteryStatus(buf));

+
+#if TARGET_PLATFORM == eee_701
+ env->SetIntField(obj, gFieldIds.mBatteryHealth, 'G');
+#else
if (readFromFile(BATTERY_HEALTH_PATH, buf, SIZE) > 0)
env->SetIntField(obj, gFieldIds.mBatteryHealth,
getBatteryHealth(buf));
-
+#endif
if (readFromFile(BATTERY_TECHNOLOGY_PATH, buf, SIZE) > 0)
env->SetObjectField(obj, gFieldIds.mBatteryTechnology,
env->NewStringUTF(buf));
}
diff --git a/services/jni/com_android_server_BatteryService.cpp
b/services/jni/com_android_server_BatteryService.cpp
index 6636a97..831f44e 100644
--- a/services/jni/com_android_server_BatteryService.cpp
+++ b/services/jni/com_android_server_BatteryService.cpp
@@ -37,7 +37,27 @@
#endif

namespace android {
-
+#if TARGET_PLATFORM == eee_701
+#define AC_ONLINE_PATH "/sys/class/power_supply/AC/online"
+ /*
+ I guess this is for USB power, EeePC does not have this
+ #define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"
+ */
+#define BATTERY_STATUS_PATH "/sys/class/power_supply/BAT0/status"
+ /*
+ I don't think we have this part on EeePC, I could not find this
+ on my Sony either.
+ #define BATTERY_HEALTH_PATH
"/sys/class/power_supply/battery/health"
+ */
+#define BATTERY_PRESENT_PATH "/sys/class/power_supply/BAT0/present"
+#define BATTERY_CAPACITY_PATH
"/sys/class/power_supply/BAT0/energy_full"
+#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/BAT0/voltage_now"
+ /*
+ *Did not find this on my EeePC either
+ #define BATTERY_TEMPERATURE_PATH
"/sys/class/power_supply/battery/batt_temp"
+ */
+#define BATTERY_TECHNOLOGY_PATH
"/sys/class/power_supply/BAT0/technology"
+#else
#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online"
#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"
#define BATTERY_STATUS_PATH "/sys/class/power_supply/battery/status"
@@ -47,7 +67,7 @@ namespace android {
#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/battery/batt_vol"
#define BATTERY_TEMPERATURE_PATH
"/sys/class/power_supply/battery/batt_temp"
#define BATTERY_TECHNOLOGY_PATH
"/sys/class/power_supply/battery/technology"
-
+#endif
struct FieldIds {
// members
jfieldID mAcOnline;
@@ -174,12 +194,21 @@ static void setIntField(JNIEnv* env, jobject obj,
const char* path, jfieldID fie
static void android_server_BatteryService_update(JNIEnv* env, jobject
obj)
{
setBooleanField(env, obj, AC_ONLINE_PATH, gFieldIds.mAcOnline);
+#if TARGET_PLATFORM == eee_701
+ env->SetBooleanField(obj,gFieldIds.mUsbOnline,false);
+#else
setBooleanField(env, obj, USB_ONLINE_PATH, gFieldIds.mUsbOnline);
+#endif
setBooleanField(env, obj, BATTERY_PRESENT_PATH,
gFieldIds.mBatteryPresent);

setIntField(env, obj, BATTERY_CAPACITY_PATH,
gFieldIds.mBatteryLevel);
setIntField(env, obj, BATTERY_VOLTAGE_PATH,
gFieldIds.mBatteryVoltage);
+#if TARGET_PLATFORM == eee_701
+ /*Zero ;)*/
+ env->SetIntField(obj,gFieldIds.mBatteryTemperature,0);
+#else
setIntField(env, obj, BATTERY_TEMPERATURE_PATH,
gFieldIds.mBatteryTemperature);
+#endif

const int SIZE = 128;
char buf[SIZE];
@@ -187,9 +216,13 @@ static void
android_server_BatteryService_update(JNIEnv* env, jobject obj)
if (readFromFile(BATTERY_STATUS_PATH, buf, SIZE) > 0)
env->SetIntField(obj, gFieldIds.mBatteryStatus,
getBatteryStatus(buf));

+
+#if TARGET_PLATFORM == eee_701
+ env->SetIntField(obj, gFieldIds.mBatteryHealth, 'G');
+#else
if (readFromFile(BATTERY_HEALTH_PATH, buf, SIZE) > 0)
env->SetIntField(obj, gFieldIds.mBatteryHealth,
getBatteryHealth(buf));
-
+#endif
if (readFromFile(BATTERY_TECHNOLOGY_PATH, buf, SIZE) > 0)
env->SetObjectField(obj, gFieldIds.mBatteryTechnology,
env->NewStringUTF(buf));
Reply all
Reply to author
Forward
0 new messages