Android灯光系统框架分析
首先别人的APP要能直接访问到你写的硬件或者不经过任何修改的APP能直接使用你的驱动,就需要使用系统自带的JNI,所以我们需要写出符合系统自带JNI文件的HAL文件和驱动程序,下面具体分析一个这个HAL和驱动程序需要实现什么。
灯光系统由以下四个文件组成
APP:电池灯APP,通知灯APP,背光灯APP
JNI :com_android_server_lights_LightsService.cpp
HAL:我们自己实现,实现一个lights.c
驱动:leds_nanopi3.c(JNI需要什么这里就给它提供什么,这里我们实现亮灭闪烁和亮度)
灯光系统的主要功能:
硬件上是属于同一个的有(包括颜色和闪烁):
电池灯:电池电量发生变化时颜色会发生变化
通知灯:有通知会闪烁,比如未接电话或短信调节LCD亮度:
背光灯
驱动部分:
JNI:
com_android_server_lights_LightsService.cpp(不需要我们实现,但我们需要给它提供接口)
里面需要获得hw_module_t结构体,所以我们的HAL需要实现这个结构体
JNI里面的get_device会根据不同的名字调用module->methods->open返回不同的light_device_t结构体,这个结构体里面带有set_light,即不同灯的控制函数
*********************lights.h*********************#define LIGHT_ID_BACKLIGHT "backlight"
#define LIGHT_ID_KEYBOARD "keyboard"
#define LIGHT_ID_BUTTONS "buttons"
#define LIGHT_ID_BATTERY "battery"
#define LIGHT_ID_NOTIFICATIONS "notifications"
#define LIGHT_ID_ATTENTION "attention"
这里我们只实现LIGHT_ID_BACKLIGHT(背光)、LIGHT_ID_BATTERY(电池)、LIGHT_ID_NOTIFICATIONS(通知)
HAL:
把硬件LED再次划分为不同的逻辑灯
1. 实现hw_module_t结构体
2. 实现open函数,它会根据name返回不同的light_device_t结构体
3. 针对不同的灯(背光/电池/通知),实现对应的set_light函数
struct light_device_t {struct hw_device_t common;int (*set_light)(struct light_device_t* dev,struct light_state_t const* state);
};
这里需实现三个set_light函数
set_light_battery (struct light_device_t *dev, struct light_state_t const* state)
set_light_notifications (struct light_device_t *dev, struct light_state_t const* state)
set_light_backlight (struct light_device_t *dev, struct light_state_t const *state)
通过这些函数里面操作驱动程序
驱动程序:
1. 对于RGB三个LED,实现亮灭闪烁三个功能
2. 对于背光灯,设置PWM
总结:
我们只需要实现一个HAL和一个驱动程序,HAL里面我们只需要实现hw_module_t结构体和一个open函数,open函数根据传进来的不同的name构造不同的light_device_t结构体,最后指向不同的set_light函数操作驱动程序,下一章具体实现这些代码。
Android灯光系统框架分析相关推荐
- Android DRM框架分析
Android DRM框架分析 1. DRM框架 2.DRM架构 3.DRM插件 4. 实现 5.DRM插件详情 6.MediaDrm 7.MediaCrypto 8.参考链接 1. DRM框架 An ...
- Android WIFI框架分析(1)
趁做Android WIFI驱动移植,对Android WIFI框架做了深刻的分析,并做此文档共同学习. 对上层WIFI的应用,基本流程为:(1)WIFI初始化 (2)Wifi启动 (3) ...
- MTK Android Led框架分析
1 驱动部分 这部分主要根据驱动源码的初始化部分进行分析 1.1 mtk_leds_drv 路径:/kernel-4.14/drivers/misc/mediatek/leds/mtk_leds_dr ...
- android输入法框架分析,Android与iOS输入法开发框架比较谈
对于任何一个使用手机的人,有一样工具是不可能缺少的,它既不是微信之类的社交工具,也不是支付宝之类的金融工具(事实上这两个都越界了),而是输入法这样的输入工具.更重要的是,输入法还是一种特权工具,因为它 ...
- Android Framework框架分析
转自:微点阅读 https://www.weidianyuedu.com/content/2617738210126.html Android framework analysis (partI z ...
- Android RIL框架分析
1.RIL框架 RIL,Radio Interface Layer.本层为一个协议转换层,提供Android Telephony与无线通信设备之间的抽象层. Android RIL位于Telephon ...
- android输入法框架分析,Android输入法架构.ppt
Android输入法架构 Android输入法架构 裴润升 oppo开发三部 输入法 为系统中其他模块提供输入功能的模块 1 硬键盘 2 软键盘 3 手写 4 语音输入 问题: 输入法和应用分属不同的 ...
- android nfc框架分析,Android NFC架构分析
原创:木头月亮 来自:http://blog.csdn.net/mutouyueliang/archive/2011/03/08/6232028.aspx Android中对NFC的实现代码分布在如下 ...
- Android以太网框架情景分析之启动简介
Android以太网框架情景分析之启动简介 Android网络框架分析系列文章目录: Android P适配以太网功能开发指南 Android以太网框架情景分析之启动简介 Androi ...
最新文章
- 如何做产品路线图规划?
- mysql自动增长恢复_mysql自动增长的有关问题,怎么恢复从1开始
- 关于数据的级联删除和更新
- doc2vec介绍和实践
- {面试题2: 实现 Singleton 模式}
- layui分页limit不显示_小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题...
- 织梦在线报名平台php,DedeCMSv5
- 请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出。
- 用mac的chrome浏览器调试Android手机的网页
- 题目1131:合唱队形(最长递增子序列进阶)
- linux环境下主从复制,Linux之CentOS上配置MariaDB主从复制
- DE 31 Non-linear Autonomous Systems
- MySQL游标(cursor) 定义及使用
- “同心鼓”运动在理想状态下的最佳策略研究
- 笔记本电脑蓝屏代码stop:0x0000007b(0xb84d3524,0xc0000034,0x00000000,0x00000000)
- 【2】C++语法与数据结构之MFC_CList学生管理系统_链表内排序_函数指针
- 【opencv-python不规则多边形 ROI提取】
- Windows控制台的打开方式
- day07面向对象复习+课后练习
- css实现盾牌的动画效果