zoukankan      html  css  js  c++  java
  • [Android] CWM 6.0.2.5 关机充电功能的添加教程。

    感谢:Github无私贡献与分享的大量代码;

    修改文件:bootable/recovery/extendedcommands.c

    修改后的文件对比:diff bootable/recovery/extendedcommands.c.origin bootable/recovery/extendedcommands.c

    21a22
    > #include <pthread.h>
    1537a1539,1633
    > 
    > //add by linksuce start, cwm off mode charging
    > //Origin:github.com/cedesmith/cLK/blob/master/patches/cwm_off_charge_v2.patch
    > static int write_file(char* path, void* data, int data_size)
    > {
    >     int fd;
    >     fd = open(path, O_WRONLY);
    >     if (fd >= 0) {
    >         int written = write(fd, data, data_size);
    >         close(fd);
    >         return written;
    >     }
    >     return -1;
    > }
    > 
    > static int read_file(char* path, void* data, int data_size)
    > {
    >     int fd;
    >     fd = open(path, O_RDONLY);
    >     if(fd >= 0){
    >         int readed = read(fd, data, data_size);
    >         close(fd);
    >         return readed;
    >     }
    >     return -1;
    > }
    > 
    > static void* battery_thread(void *cookie)
    > {
    >     char status[40];
    >     int state=-1;
    >     int dischargeCount=0;
    > 
    >     while(1){
    >         memset(status, 0, sizeof(status));
    >         read_file("/sys/class/power_supply/battery/status", status, sizeof(status)-1);
    >         if(strstr(status, "Full")!=NULL && state!=1){
    >             state=1;
    >             write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1);
    >             write_file("/sys/class/leds/green/brightness", "1\n", sizeof("1\n")-1);
    >         }else if(strstr(status, "Charging")!=NULL && state!=2){
    >             state=2;
    >             write_file("/sys/class/leds/amber/brightness", "1\n", sizeof("1\n")-1);
    >             write_file("/sys/class/leds/green/brightness", "0\n", sizeof("0\n")-1);
    >         }else if(strstr(status, "Discharging")!=NULL){
    >             state=3;
    >             if(dischargeCount==0){ //blink every 2 seconds
    >                 read_file("/sys/class/leds/amber/brightness", status, sizeof(status)-1);
    >                 if(status[0]=='0') write_file("/sys/class/leds/amber/brightness", "1\n", sizeof("1\n")-1);
    >                 else write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1);
    >             }
    >             read_file("/sys/class/power_supply/battery/over_vchg", status, sizeof(status)-1);
    >             dischargeCount=(dischargeCount+1)%4;
    >         }else if(strstr(status,"Not charging")!=NULL && state!=4){
    >             state=4;
    >             write_file("/sys/class/leds/amber/brightness", "0\n", sizeof("0\n")-1);
    >             write_file("/sys/class/leds/green/brightness", "0\n", sizeof("0\n")-1);
    >             sync();
    >             reboot(RB_POWER_OFF);
    >             for(;;);
    >         }
    >         usleep(500000); //wait half a second
    >     }
    >     return NULL;
    > }
    > 
    > void handle_chargemode() {
    > // old code to read /proc/cmdline was broken because file size is always 0 so file_data was always empty string
    >     char cmdline[1024];
    >     memset(cmdline, 0, sizeof(cmdline));
    >     if(read_file("/proc/cmdline", cmdline, sizeof(cmdline)-1) < 0) return;
    > 
    >     if (strstr(cmdline, "androidboot.mode=offmode_charging") != NULL)
    >     {
    >         write_file("/sys/class/leds/lcd-backlight/brightness", "0\n", sizeof("0\n")-1);
    >         write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "powersave\n", sizeof("powersave\n")-1);
    >         write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq", "245000\n", sizeof("245000\n")-1);
    >         write_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "245000\n", sizeof("245000\n")-1);
    > 
    >         pthread_t t;
    >         pthread_create(&t, NULL, battery_thread, NULL);
    > 
    >         // let recovery kernel charge the battery, reboot on any key press so Android will start as user would expect
    > //        ev_init();
    >         struct input_event ev;
    >         do {
    >             ev_get(&ev, 0);
    >             if(ev.type==EV_KEY) write_file("/sys/class/leds/lcd-backlight/brightness", "0\n", sizeof("0\n")-1);
    >         } while (!(ev.type==EV_KEY && ev.code==KEY_END));
    > 
    >         reboot(RB_AUTOBOOT);
    >         for(;;);
    >     }
    > }
    > // add by linkscue end, cwm off mode charging
    ------------
    微博:http://weibo.com/scue
    Github:http://github.com/scue
  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/scue/p/2878367.html
Copyright © 2011-2022 走看看