diff options
author | Dima Zavin <dima@android.com> | 2011-09-30 11:23:27 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-09-30 11:23:27 -0700 |
commit | 01851eac692286bcd842abf5c4f50654e3a4100c (patch) | |
tree | 3f936770deb26bae43282e1495ec0d333e2b34aa /charger | |
parent | 9892aa5d041132f1048f6707e09a434c25f06862 (diff) | |
parent | 823ebc4d824ea70e5ec7d376adf2fbce50eb9cb2 (diff) | |
download | system_core-01851eac692286bcd842abf5c4f50654e3a4100c.zip system_core-01851eac692286bcd842abf5c4f50654e3a4100c.tar.gz system_core-01851eac692286bcd842abf5c4f50654e3a4100c.tar.bz2 |
am 823ebc4d: charger: dump the last_kmsg when going into charger mode
* commit '823ebc4d824ea70e5ec7d376adf2fbce50eb9cb2':
charger: dump the last_kmsg when going into charger mode
Diffstat (limited to 'charger')
-rw-r--r-- | charger/charger.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/charger/charger.c b/charger/charger.c index 0ade250..5d04a0f 100644 --- a/charger/charger.c +++ b/charger/charger.c @@ -37,6 +37,7 @@ #include <cutils/android_reboot.h> #include <cutils/klog.h> #include <cutils/list.h> +#include <cutils/misc.h> #include <cutils/uevent.h> #include "minui/minui.h" @@ -60,6 +61,9 @@ #define BATTERY_FULL_THRESH 95 +#define LAST_KMSG_PATH "/proc/last_kmsg" +#define LAST_KMSG_MAX_SZ (32 * 1024) + #define LOGE(x...) do { KLOG_ERROR("charger", x); } while (0) #define LOGI(x...) do { KLOG_INFO("charger", x); } while (0) #define LOGV(x...) do { KLOG_DEBUG("charger", x); } while (0) @@ -188,6 +192,53 @@ static void clear_screen(void) gr_fill(0, 0, gr_fb_width(), gr_fb_height()); }; +#define MAX_KLOG_WRITE_BUF_SZ 256 + +static void dump_last_kmsg(void) +{ + char *buf; + char *ptr; + unsigned sz = 0; + int len; + + LOGI("\n"); + LOGI("*************** LAST KMSG ***************\n"); + LOGI("\n"); + buf = load_file(LAST_KMSG_PATH, &sz); + if (!buf || !sz) { + LOGI("last_kmsg not found. Cold reset?\n"); + goto out; + } + + len = min(sz, LAST_KMSG_MAX_SZ); + ptr = buf + (sz - len); + + while (len > 0) { + int cnt = min(len, MAX_KLOG_WRITE_BUF_SZ); + char yoink; + char *nl; + + nl = memrchr(ptr, '\n', cnt - 1); + if (nl) + cnt = nl - ptr + 1; + + yoink = ptr[cnt]; + ptr[cnt] = '\0'; + KLOG_INFO("", "%s", ptr); + ptr[cnt] = yoink; + + len -= cnt; + ptr += cnt; + } + + free(buf); + +out: + LOGI("\n"); + LOGI("************* END LAST KMSG *************\n"); + LOGI("\n"); +} + static int read_file(const char *path, char *buf, size_t sz) { int fd; @@ -863,6 +914,10 @@ int main(int argc, char **argv) klog_init(); klog_set_level(CHARGER_KLOG_LEVEL); + dump_last_kmsg(); + + LOGI("--------------- STARTING CHARGER MODE ---------------\n"); + gr_init(); gr_font_size(&char_width, &char_height); |