From fa15c5001b9b3af7e06010fb570c40d456b19938 Mon Sep 17 00:00:00 2001 From: PaulK Date: Sun, 25 Mar 2012 20:54:31 +0200 Subject: Added playlpm and free (CC BY-SA) charging frames --- playlpm/Android.mk | 39 + playlpm/MODULE_LICENSE_GPL | 0 playlpm/charging/LICENSE | 3 + playlpm/charging/charging-0.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-10.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-100.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-20.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-30.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-40.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-50.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-60.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-70.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-80.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging-90.bgra | Bin 0 -> 1536000 bytes playlpm/charging/charging.svg | 4451 ++++++++++++++++++++++++++++++++++++ playlpm/playlpm.c | 198 ++ 16 files changed, 4691 insertions(+) create mode 100644 playlpm/Android.mk create mode 100644 playlpm/MODULE_LICENSE_GPL create mode 100644 playlpm/charging/LICENSE create mode 100755 playlpm/charging/charging-0.bgra create mode 100755 playlpm/charging/charging-10.bgra create mode 100755 playlpm/charging/charging-100.bgra create mode 100755 playlpm/charging/charging-20.bgra create mode 100755 playlpm/charging/charging-30.bgra create mode 100755 playlpm/charging/charging-40.bgra create mode 100755 playlpm/charging/charging-50.bgra create mode 100755 playlpm/charging/charging-60.bgra create mode 100755 playlpm/charging/charging-70.bgra create mode 100755 playlpm/charging/charging-80.bgra create mode 100755 playlpm/charging/charging-90.bgra create mode 100755 playlpm/charging/charging.svg create mode 100644 playlpm/playlpm.c diff --git a/playlpm/Android.mk b/playlpm/Android.mk new file mode 100644 index 0000000..9dfcae1 --- /dev/null +++ b/playlpm/Android.mk @@ -0,0 +1,39 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +TARGET_FRAMES_DIR := $(TARGET_OUT)/media/charging +LOCAL_FRAMES_DIR := $(LOCAL_PATH)/charging + +copy_from := \ + charging-0.bgra \ + charging-10.bgra \ + charging-20.bgra \ + charging-30.bgra \ + charging-40.bgra \ + charging-50.bgra \ + charging-60.bgra \ + charging-70.bgra \ + charging-80.bgra \ + charging-90.bgra \ + charging-100.bgra + +copy_to := $(addprefix $(TARGET_FRAMES_DIR)/,$(copy_from)) +copy_from := $(addprefix $(LOCAL_FRAMES_DIR)/,$(copy_from)) + +$(copy_to) : $(TARGET_FRAMES_DIR)/% : $(LOCAL_FRAMES_DIR)/% | $(ACP) + $(transform-prebuilt-to-target) + +ALL_PREBUILT += $(copy_to) + +include $(CLEAR_VARS) + +LOCAL_MODULE := playlpm +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := playlpm.c + +LOCAL_SHARED_LIBRARIES := liblog libcutils +LOCAL_PRELINK_MODULE := false + +include $(BUILD_EXECUTABLE) diff --git a/playlpm/MODULE_LICENSE_GPL b/playlpm/MODULE_LICENSE_GPL new file mode 100644 index 0000000..e69de29 diff --git a/playlpm/charging/LICENSE b/playlpm/charging/LICENSE new file mode 100644 index 0000000..70206ad --- /dev/null +++ b/playlpm/charging/LICENSE @@ -0,0 +1,3 @@ +Files: charging.svg charging-0.bgra charging-10.bgra charging-20.bgra charging-30.bgra charging-40.bgra charging-50.bgra charging-60.bgra charging-70.bgra charging-80.bgra charging-90.bgra charging-100.bgra +Copyright: Copyright (C) 2012 Paul Kocialkowski +License: Creative Commons BY-SA 3.0 diff --git a/playlpm/charging/charging-0.bgra b/playlpm/charging/charging-0.bgra new file mode 100755 index 0000000..464741e Binary files /dev/null and b/playlpm/charging/charging-0.bgra differ diff --git a/playlpm/charging/charging-10.bgra b/playlpm/charging/charging-10.bgra new file mode 100755 index 0000000..464741e Binary files /dev/null and b/playlpm/charging/charging-10.bgra differ diff --git a/playlpm/charging/charging-100.bgra b/playlpm/charging/charging-100.bgra new file mode 100755 index 0000000..da544fb Binary files /dev/null and b/playlpm/charging/charging-100.bgra differ diff --git a/playlpm/charging/charging-20.bgra b/playlpm/charging/charging-20.bgra new file mode 100755 index 0000000..846dd2e Binary files /dev/null and b/playlpm/charging/charging-20.bgra differ diff --git a/playlpm/charging/charging-30.bgra b/playlpm/charging/charging-30.bgra new file mode 100755 index 0000000..a0c0200 Binary files /dev/null and b/playlpm/charging/charging-30.bgra differ diff --git a/playlpm/charging/charging-40.bgra b/playlpm/charging/charging-40.bgra new file mode 100755 index 0000000..c3ded7c Binary files /dev/null and b/playlpm/charging/charging-40.bgra differ diff --git a/playlpm/charging/charging-50.bgra b/playlpm/charging/charging-50.bgra new file mode 100755 index 0000000..f07a3ae Binary files /dev/null and b/playlpm/charging/charging-50.bgra differ diff --git a/playlpm/charging/charging-60.bgra b/playlpm/charging/charging-60.bgra new file mode 100755 index 0000000..22bf073 Binary files /dev/null and b/playlpm/charging/charging-60.bgra differ diff --git a/playlpm/charging/charging-70.bgra b/playlpm/charging/charging-70.bgra new file mode 100755 index 0000000..edbdf2a Binary files /dev/null and b/playlpm/charging/charging-70.bgra differ diff --git a/playlpm/charging/charging-80.bgra b/playlpm/charging/charging-80.bgra new file mode 100755 index 0000000..b755764 Binary files /dev/null and b/playlpm/charging/charging-80.bgra differ diff --git a/playlpm/charging/charging-90.bgra b/playlpm/charging/charging-90.bgra new file mode 100755 index 0000000..2eb0483 Binary files /dev/null and b/playlpm/charging/charging-90.bgra differ diff --git a/playlpm/charging/charging.svg b/playlpm/charging/charging.svg new file mode 100755 index 0000000..3dc0d34 --- /dev/null +++ b/playlpm/charging/charging.svg @@ -0,0 +1,4451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/playlpm/playlpm.c b/playlpm/playlpm.c new file mode 100644 index 0000000..dec2691 --- /dev/null +++ b/playlpm/playlpm.c @@ -0,0 +1,198 @@ +/** + * PlayLPM + * + * Copyright (C) 2012 Paul Kocialkowski + * + * playlpm is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * playlpm is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with playlpm. If not, see . + * + */ + +#include +#include +#include + +#include +#include +#include + +#define LOG_TAG "PlayLPM" +#include + +#define LPM_LOOP_DELAY 5 +#define LPM_FRAMES_DIR "/system/media/charging" +#define LPM_FRAMES_PREFIX "charging-" +#define LPM_FRAMES_SUFFIX ".bgra" + +void lpm_display_level(int level) +{ + char *frame_file; + unsigned char *frame_data; + int frame_size = -1; + struct stat frame_stat; + + int fd = -1; + + memset(&frame_stat, 0, sizeof(frame_stat)); + + asprintf(&frame_file, "%s/%s%d%s", LPM_FRAMES_DIR, LPM_FRAMES_PREFIX, level, LPM_FRAMES_SUFFIX); + + LOGD("frame file is: %s\n", frame_file); + + stat(frame_file, &frame_stat); + frame_size = frame_stat.st_size; + + if(frame_size < 0) + { + LOGE("Wrong frame size, aborting"); + return; + } + + fd = open(frame_file, O_RDONLY); + free(frame_file); + + if(fd < 0) + { + LOGE("Failed to open frame file, aborting"); + return; + } + + frame_data = malloc(frame_size); + + read(fd, frame_data, frame_size); + + close(fd); + + fd = open("/dev/graphics/fb0", O_WRONLY); + if(fd < 0) + { + LOGE("Failed to open framebuffer node, aborting"); + return; + } + + LOGD("Writing frame for level: %d", level); + write(fd, frame_data, frame_size); + + close(fd); + + free(frame_data); +} + +int lpm_battery_level(void) +{ + int capacity = -1; + int level = -1; + + int fd = -1; + char value[2]; + char status[6]; + + fd = open("/sys/class/power_supply/battery/capacity", O_RDONLY); + if(fd < 0) + { + LOGE("Failed to open capacity node, aborting"); + return 0; + } + + read(fd, value, sizeof(value)); + + close(fd); + + capacity = atoi(value); + if(capacity < 0 || capacity > 100) + { + LOGE("capacity value (%d) is unreliable, aborting", capacity); + return 0; + } + + // Truncate capacity to get a multiple of 10 as level + level = ((capacity - (capacity % 10)) / 10) * 10; + + fd = open("/sys/class/power_supply/battery/status", O_RDONLY); + if(fd < 0) + { + LOGE("Failed to open status node, aborting"); + return 0; + } + + read(fd, status, sizeof(status)); + + close(fd); + + // If status is reported as Full, assume 100% charged + if(strncmp(status, "Full", 4) == 0) + { + level = 100; + } + + LOGD("level is: %d\n", level); + + return level; +} + +// This is the main loop function, where we check battery state +void lpm_loop(void) +{ + int level = -1; + int l; + + while(1) + { + level = lpm_battery_level(); + + // Only refresh the image if the battery level changed + if(level != l) + lpm_display_level(level); + + l = level; + + sleep(LPM_LOOP_DELAY); + } +} + +// Check if the phone is booting in charging mode +int lpm_check(void) +{ + int fd = -1; + char value[2]; + + fd = open("/sys/class/power_supply/battery/charging_mode_booting", O_RDONLY); + if(fd < 0) + { + LOGE("Failed to open charging_mode_booting node, aborting"); + return 0; + } + + read(fd, value, sizeof(value)); + + close(fd); + + if(value[0] == '1') + { + LOGD("Phone is booting in charging mode"); + return 1; + } + + return 0; +} + +int main(int argc, char *argv[]) +{ + // Start loop only if the phone is booting in charging mode + if(lpm_check() == 1) + { + lpm_loop(); + } + + return 0; +} -- cgit v1.1