文档章节

Android系统电量指示灯 Cubietruck

yeyunxiaopan
 yeyunxiaopan
发布于 2014/12/02 19:09
字数 958
阅读 1697
收藏 8

请先移步,对led的操作,我们使用相同的battrey_leds.sh
http://forum.cubietech.com/forum.php?mod=viewthread&tid=3212&highlight=%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0
[嵌入式学习]led 子系统与led trigger

参考以下三篇博文

1. 系统服务的启动方式

http://blog.csdn.net/windskier/article/details/6417657


2. Android之BatteryService

http://www.cnblogs.com/armlinux/archive/2010/09/15/2396916.html


3. android 2.3 电量管理

http://blog.csdn.net/z642010820/article/details/7341469


android下面也是调用相同的battrey_leds.sh文件
不过android的uevent触发事件已经在系统自带的电池服务里有了,我们只需在其中执行脚本battrey_leds.sh即可
从上图可以看到, 只需在JNI更新电流值之后,执行sh即可

=====对上图做一个简要说明========

1. android系统服务

V2.0_A20\android\frameworks\base\services\java\com\android\server\SystemServer.java

  battery = new BatteryService(context, lights); //电池服务



2. android电池服务

V2.0_A20\android\frameworks\base\services\java\com\android\server\BatteryService.java

mPowerSupplyObserver.startObserving("SUBSYSTEM=power_supply");//注册Uevent,监听power_supply


//UEvent与内核socket通讯,一个死循环,内核有事件上报,就触发onUEvent


public void onUEvent(UEventObserver.UEvent event) {
    synchronized (mLock) {
        updateLocked(); //看309L
    }
        }


  native_update(); //刷新电量,调用电池服务JNI层的函数
processValuesLocked();//发布电量更新的广播



3. android电池服务JNI

V2.0_A20\android\frameworks\base\services\jni\com_android_server_BatteryService.cpp


//这个JNI与java层共享变量

//电量等参数在java层定义,即在BatteryService.java中定义,在这里使用

android_server_BatteryService_update //刷新电量等参数

4. android UEvent

V2.0_A20\android\\frameworks\base\core\java\android\os\UEventObserver.java


while(true) // 线程里的一个死循环,一直等待内核上报事件
observer.onUEvent(event);//回调观察者注册的 onUEvent函数 ,最终调用BatteryService.java里的onUEvent



====具体实施步骤====
1. 在电池服务的JNI层com_android_server_BatteryService.cpp里增加脚本执行函数

static int exeCmd(const char* cmd)
{  

    if (!cmd)
        return -1;
                          
    int ret = system(cmd);  
        if(ret < 0){
                ALOGE("==========exeCmd error '%s'", cmd);         
        }
        
    return 0;
}

暴露给BatteryService.java 的接口native_setBatLeds

//设置电池灯

static void android_server_BatteryService_setBatLeds(){  
    ALOGE("==========android_server_BatteryService_setBatLeds");  

        exeCmd("sh /system/bin/battrey_leds.sh");  
}

//增加设置电池灯native_setBatLeds
static JNINativeMethod sMethods[] = {
     /* name, signature, funcPtr */
        {"native_update", "()V", (void*)android_server_BatteryService_update},
    {"native_shutdown","()V",(void*)android_server_BatteryService_shutDownNotFromPMS},        
    {"native_setBatLeds","()V",(void*)android_server_BatteryService_setBatLeds},           
};

2. 在电池服务 BatteryService.java里 声明JNI接口

private native void native_setBatLeds();

在updateLocked()里调用即可

private void updateLocked() {
        if (!mUpdatesStopped) {
            // Update the values of mAcOnline, et. all.
            native_update();

                        //JNI层设置电池灯
                    native_setBatLeds();
                                
            // Process the new values.
            processValuesLocked();
        }
    }        

   


3. 不过需要注意文件节点的权限
在android/device/softwinner/sugar-cubietruck/init.sun7i.rc

chown system system /sys/class/leds/xxx/brightness
chown system system /sys/class/leds/xxx/trigger  
chomd 0777 /sys/class/leds/XXX/brightness
chomd 0777 /sys/class/leds/XXX/trigger

xxx替换成你想操作的led灯即可

5. 把battrey_leds.sh放到 
android/out/target/product/sugar-cubietruck/system/bin
chmod +x

这里还可以用另外的方法 把battrey_leds.sh文件copy进文件系统
可以参考
android\device\softwinner\sugar-cubietruck\sugar_cubietruck.mk
android/device/softwinner/wing-common/ProductCommon.mk
里的PRODUCT_COPY_FILES字段

=====================================================
最后奉上我的android编译步骤总结

---------------install JDK--------------
$ wget dl.cubieboard.org/software/tools/android/jdk1.6.0_45.tar.gz
$ sudo vim ~/.bashrc

Add :
JAVA_HOME=/work/tools/jdk1.6.0_45
export JRE_HOME=/work/tools/jdk1.6.0_45/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

$ source ~/.bashrc


---------------install tools--------------
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev

$ sudo apt-get install xsltproc
$ sudo apt-get install bison
$ sudo apt-get install flex
$ sudo apt-get install gperf
$ sudo apt-get install g++
$ sudo apt-get install gcc-multilib
$ sudo apt-get install libxml2-utils


---------------download source code--------------
$ mkdir /home/box/work/android_build
$ wget http://dl.cubieboard.org/softwar ... droid_source.tar.gz
$ tar -zxvf v2.0_A20_android_source.tar.gz


---------------build kernel--------------
$ cd lichee/linux-3.4
$ make clean
$ cp arch/arm/configs/cubietruck_config .config   
$ cd ..
$ ./build.sh -p sun7i_android





---------------build android--------------
$ cd ../android
$ source build/envsetup.sh
$ lunch  
$ 16     //note:select sugar_cubietruck-eng  //有针对性的查看一下,后缀eng 表示工程机    userdebug开发调试机   user最终用户机
$ extract-bsp   //它的作用就是将内核中生成的驱动等拷贝到产品中  拷贝内核生成的module 和  *.image
$ make -j8  //第一次这里最好不要加j8,否则内存不够会出错,如果出错,尝试用j2, j4 试试
$ pack


© 著作权归作者所有

yeyunxiaopan

yeyunxiaopan

粉丝 2
博文 5
码字总数 2248
作品 0
南京
私信 提问
谷歌 Android P 电量提醒升级:智能计算剩余使用时间

在I/O 2018上,谷歌已经正式宣布了Android P系统,并且面向vivo、OPPO、小米、一加、诺基亚等8个品牌的11款手机开放公测版系统升级,喜欢折腾的小伙伴现在即可刷机体验。 关于Android P系统,...

h4cd
2018/05/13
951
1
Android性能专项测试之耗电量统计

电量统计(1)-原理- http://duanqz.github.io/2015-07-21-batterystats-part1 Android性能专项测试之耗电量统计API- https://blog.csdn.net/itfootball/article/details/49155979 -- Android......

desaco
02/13
0
0
Android Power Placeholder | 中文教学视频

持久稳定的电量是每一位用户,各个设备厂商,以及开发者的共同诉求。Android 9 Pie 在之前版本的基础上,继续优化电量管理,并推出了电量功能如下: 1.应用待机分组 (App Standby Buckets) ...

谷歌开发者
2018/10/22
0
0
更强续航,尽在 Android 9 Pie

作者: Madan Ankapura, Android 产品经理 本文为 Android 电量管理系列连载的第一篇,希望开发者能从阅读过程中收获设备续航方面的战略洞见及实践指南。 电池性能和续航时间是很多用户关心的...

Android_开发者
2018/09/25
0
0
Android电池电量监控初步

引言 ,学习了包括Activity、Service、AppWidget、Broadcast、Intent、Notification、XML布局、XML配置等基础知识之后,尝试着做一个小玩意儿——电池监控,期间也是阻挠多多,现在基本完成了...

鉴客
2012/01/29
3.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部