8.1 Android灯光系统_总体框架
1、框架
APP(java语言实现)
-------------------------------
JNI(c++语言实现) 向上提供Java执行c函数的接口 向下访问HAL
-------------------------------
HAL(c或c++语言实现) 封装硬件操作细节
-------------------------------
Driver(c语言实现) 操作硬件
如果JNI是自己写的,那么其接口就只有自己知道,应用程序只能自己写,因此必须使用android现有的JNI,但是HAL和驱动可以自己写,只要HAL能够满足JNI的需求,那么别人写的应用程序就能通过通用的JNI来访问驱动了。
2、android灯光系统框架
App:电池灯App、通知灯App、背光灯App
---------------------
JNI:com_android_server_lights_LightsService.cpp
---------------------
HAL:自己写:HAL_lights.c
---------------------
驱动:自己写:leds_4412.c
怎么写:
(1):看功能
电池灯和通知灯:在硬件上是同一个,颜色、闪烁
背光灯:调节LCD亮度
(2):写驱动
电池灯和通知灯:三个LED(颜色分别是红绿蓝)在一起,驱动操作者3个LED
背光灯:控制输出PWM的占空比
(3):写HAL
把硬件LED再次划分为不同的逻辑灯
JNI需求分析:
(1)获得hw_modult_t结构体
(2)调用get_device,根据不同的name,调用module->methods->open,得到不同的light_device_t结构体
查看源码中的JNI,可以看到name有很多,我们自己写的HAL仅会实现“LIGHT_ID_BACKLIGHT(背光灯)”、“LIGHT_ID_BATTERY“、”LIGHT_ID_NOTIFICATIONS”
HAL提供分析:
(1)实现hw_module_t
(2)实现open函数,根据不同name返回不同的light_device_t结构体,其里面有hw_device_t结构体和set_light函数,因此针对不同的灯需要实现不同的set_light函数,在set_light函数里面操作驱动程序
驱动分析:
(1)操作红绿蓝三个LED,实现亮、灭、闪烁三个功能;
(2)对于背光灯,设置PWM占空比
8.1 Android灯光系统_总体框架的更多相关文章
- Android系统--输入系统(十二)Dispatch线程_总体框架
Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...
- 10.6 android输入系统_Dispatcher线程_总体框架
图解Android - Android GUI 系统 (5) - Android的Event Input System - 漫天尘沙 - 博客园.htm // 关注里面的Dispatcher处理流程h ...
- Android灯光系统_编写HAL_lights.c【转】
本文转载自:https://blog.csdn.net/qq_33443989/article/details/77074411 1>. 编写灯光系统的HAL层 之 HAL_light.c1&l ...
- 8.6 Android灯光系统_源码分析_背光灯
Change system screen brightness, using android.provider.Settings.System.SCREEN_BRIGHTNESSandroid-er. ...
- 8.5 Android灯光系统_源码分析_通知灯
参考文章(应用程序举例)how to use the LED with Android phonehttp://androidblogger.blogspot.jp/2009/09/tutorial- ...
- 8.4 Android灯光系统_源码分析_电池灯
电池灯的Java代码在batteryservice.java中 电池的状态电量等信息由驱动获得,但驱动不会主动做这些事情,因此肯定有个App调用驱动程序读取电池信息,称这个App为A应用. 还有个Ap ...
- 8.3 Android灯光系统_编写HAL_lights.c
注意在led-classes.c中定义的led_class_attrs[]所建立的文件的属性应该改为0666,否则应用程序无权操作它 同时ledtrig-time.c里面对应新建的那几个delay_o ...
- Android高级_第三方框架Xutils
xutils的功能主要包括有四个部分:(1)布局视图关联:(2)图片下载与缓存:(3)网络请求:(4)数据库: 1. 使用xutils进行视图注入: (1)在控件声明上方添加@ViewInject() ...
- Android核心分析之二十三Andoird GDI之基本原理及其总体框架
Android GDI基本框架 在Android中所涉及的概念和代码最多,最繁杂的就是GDI相关的代码了.但是本质从抽象上来讲,这么多的代码和框架就干了一件事情:对显示缓冲区的操作和管理. GDI主 ...
随机推荐
- vim 计算器寄存器使用
我们可能会在vim的使用中,碰到下面的情况 当我正在写一周预算的时候,我想计算下每天我买菜花2.7,每天买两顿,周死晚上出去吃,周六额外买1.5斤14.8一斤的猪肉... 这时候你打算怎么办呢,是不是 ...
- [Codeforces558E]A Simple Task 线段树
链接 题意:给定一个长度不超过 \(10^5\) 的字符串(小写英文字母),和不超过5000个操作. 每个操作 L R K 表示给区间[L,R]的字符串排序,K=1为升序,K=0为降序. 最后输出最终 ...
- js --- 递归结构图
// 用递归 来求 5 的阶乘 // n! = n * (n-1)! // 定义一个函数,用于求 n 的阶乘 function func(n) { ) { ; } // func(n-1) 因为传递的 ...
- vue --- 全局守卫
vue2.0 实现导航守卫(路由守卫) 路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navi ...
- 【基础篇】Android MediaPlayer基本使用方式
使用MediaPlayer播放音频或者视频的最简单例子: JAVA代码部分: public class MediaPlayerStudy extends Activity { private Butt ...
- Redis学习笔记--Redis客户端(三)
1.Redis客户端 1.1 Redis自带的客户端 (1)启动 启动客户端命令:[root@kwredis bin]# ./redis-cli -h 127.0.0.1 -p 6379 -h:指定访 ...
- HDU 1576 A/B 数论水题
http://acm.hdu.edu.cn/showproblem.php?pid=1576 写了个ex_gcd的模板...太蠢导致推了很久的公式 这里推导一下: 因为 1 = BX + 9973Y ...
- 【习题 8-14 UVA - 1616】Caravan Robbers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分长度. 显然长度越长.就越不可能. 二分的时候.可以不用管精度. 直接指定一个二分次数的上限就好. 判断长度是否可行.直接用贪心 ...
- iOS动画之模拟音量振动条
音量振动条 效果图: 假设实现? 创建3个layer.按顺序播放y轴缩放动画 利用CAReplicatorLayer实现 1.什么是CAReplicatorLayer? 一种能够复制自己子层的laye ...
- BZOJ2806: [Ctsc2012]Cheat(广义后缀自动机,单调队列优化Dp)
Description Input 第一行两个整数N,M表示待检查的作文数量,和小强的标准作文库的行数接下来M行的01串,表示标准作文库接下来N行的01串,表示N篇作文 Output N行,每行一个整 ...