归志宁无五亩园,读书本意在元元。这篇文章主要讲述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,实现亮、灭、闪烁三个功能;
【8.1 Android灯光系统_总体框架】(2)对于背光灯,设置PWM占空比
推荐阅读
- 判断Android 当前版本是否为debug版本
- Polymerjs paper-progress元素
- Polymerjs platinum元素
- Polymerjs paper-material
- Polymerjs paper-listbox元素
- Polymerjs paper-menu菜单元素
- Polymerjs paper-input元素
- Polymerjs paper-icon-button按钮
- Polymerjs paper-dropdown下拉菜单