ery003" },
{ &gBackgroundIcon[BACKGROUND_ICON_CHARGE3], "battery004" },
{ &gBackgroundIcon[BACKGROUND_ICON_CHARGE4], "battery005" },
{ &gBackgroundIcon[BACKGROUND_ICON_CHARGE5], "battery006" },
{ NULL, NULL },
};
static int readFromFile(const char* path, char* buf, size_t size)
{
int fd = open(path, O_RDONLY, 0);
if (fd == -1) {
//LOGE("Could not open '%s'", path);
return -1;
}
size_t count = read(fd, buf, size);
if (count > 0) {
count = (count < size) count : size - 1;
while (count > 0 && buf[count-1] == '\n') count--;
buf[count] = '\0';
} else {
buf[0] = '\0';
}
close(fd);
return count;
}
static int getBatteryStatus(const char* status)
{
switch (status[0]) {
case 'C': return STATUSCHARGING; // Charging
case 'D': return STATUSDISCHARGING; // Discharging
case 'F': return STATUSFULL; // Not charging
case 'N': return STATUSNOTCHARGING; // Full
case 'U': return STATUSUNKNOWN; // Unknown
default: {
printf("Unknown battery status '%s'", status);
return STATUSUNKNOWN;
}
}
}
static int getBatteryHealth(const char* status)
{
switch (status[0]) {
case 'D': return HEALTHDEAD; // Dead
case 'G': return HEALTHGOOD; // Good
case 'O': {
if (strcmp(status, "Overheat") == 0) {
return HEALTHOVERHEAT;
} else if (strcmp(status, "Over voltage") == 0) {
return HEALTHOVERVOLTAGE;
}
printf("Unknown battery health[1] '%s'", status);
return HEALTHUNKNOWN;
}
case 'U': {
if (strcmp(status, "Unspecified failure") == 0) {
return HEALTHUNSPECIFIEDFAILURE;
} else if (strcmp(status, "Unknown") == 0) {
return HEALTHUNKNOWN;
}
// fall through
}
default: {
printf("Unknown battery health[2] '%s'", status);
return HEALTHUNKNOWN;
}
}
}
static void ui_set_background(int icon)
{
gr_surface gIcon;
gIcon=gBackgroundIcon[icon];
gr_color(0, 0, 0, 255);
gr_fill(0, 0, gr_fb_width(), gr_fb_height());
if (gIcon) {
//printf("set backgroupd:%s\n\r",gBackgroundIcon[icon].name);
int iconWidth = gr_get_width(gIcon);
int iconHeight = gr_get_height(gIcon);
int iconX = (gr_fb_width() - iconWidth) / 2;
int iconY = (gr_fb_height() - iconHeight) / 2;
gr_blit(gIcon, 0, 0, iconWidth, iconHeight, iconX, iconY);
}
gr_flip();
}
static void ui_init()
{
gr_init();
ev_init();
int i;
for (i = 0; BITMAPS[i].name != NULL; ++i) {
int result = res_create_surface(BITMAPS[i].name, BITMAPS[i].surface);
if (result < 0) {
printf("Missing bitmap %s\n(Code %d)\n", BITMAPS[i].name, result);
*BITMAPS[i].surface = NULL;
}
//else printf("create:%s\n\r",BITMAPS[i].name);
}
}
const int SIZE = 128;
int power_ac()
{
char buf[SIZE];
if (readFromFile(AC_ONLINE_PATH, buf, SIZE) > 0) {
if (buf[0] == '1') {
return 1;
}
}
return 0;
}
/*
function to indicate if the battery is present.
*/
int battery_present()
{
char buf[SIZE];
if (readFromF