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灯光系统_总体框架的更多相关文章

  1. Android系统--输入系统(十二)Dispatch线程_总体框架

    Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...

  2. 10.6 android输入系统_Dispatcher线程_总体框架

    图解Android - Android GUI 系统 (5) - Android的Event Input System - 漫天尘沙 - 博客园.htm // 关注里面的Dispatcher处理流程h ...

  3. Android灯光系统_编写HAL_lights.c【转】

    本文转载自:https://blog.csdn.net/qq_33443989/article/details/77074411 1>. 编写灯光系统的HAL层 之 HAL_light.c1&l ...

  4. 8.6 Android灯光系统_源码分析_背光灯

    Change system screen brightness, using android.provider.Settings.System.SCREEN_BRIGHTNESSandroid-er. ...

  5. 8.5 Android灯光系统_源码分析_通知灯

    参考文章(应用程序举例)how to use the LED with Android phonehttp://androidblogger.blogspot.jp/2009/09/tutorial- ...

  6. 8.4 Android灯光系统_源码分析_电池灯

    电池灯的Java代码在batteryservice.java中 电池的状态电量等信息由驱动获得,但驱动不会主动做这些事情,因此肯定有个App调用驱动程序读取电池信息,称这个App为A应用. 还有个Ap ...

  7. 8.3 Android灯光系统_编写HAL_lights.c

    注意在led-classes.c中定义的led_class_attrs[]所建立的文件的属性应该改为0666,否则应用程序无权操作它 同时ledtrig-time.c里面对应新建的那几个delay_o ...

  8. Android高级_第三方框架Xutils

    xutils的功能主要包括有四个部分:(1)布局视图关联:(2)图片下载与缓存:(3)网络请求:(4)数据库: 1. 使用xutils进行视图注入: (1)在控件声明上方添加@ViewInject() ...

  9. Android核心分析之二十三Andoird GDI之基本原理及其总体框架

     Android GDI基本框架 在Android中所涉及的概念和代码最多,最繁杂的就是GDI相关的代码了.但是本质从抽象上来讲,这么多的代码和框架就干了一件事情:对显示缓冲区的操作和管理. GDI主 ...

随机推荐

  1. Vue v-bind的使用

    1.src <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  2. 7.Web Service 调用天气代码

    1. 2500多个城市天气预报 WEB服务公用事业 Endpoint:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx Disco: ...

  3. 1.实用:Google Chrome 键盘快捷键大全

    转自:https://www.cnbeta.com/articles/soft/64070.htm 窗口和标签页快捷方式 Ctrl+N 打开新窗口 按住 Ctrl‎ 键,然后点击链接 在新标签页中打开 ...

  4. offSet和client和scroll

    这三个是是js盒模型属性 client clientWidth 内容宽度加上左右padding clientHeight 内容高度加上上下padding clientTop 上边框的宽度 client ...

  5. Activemq去除认证

    0.背景介绍 由于项目安全性的约束,不能在配置文件中暴露一些密码信息.   默认情况下,ActiveMQ在进行接发消息的时候会用户认证.通过ActiveMQ-client初始化ActiveMQConn ...

  6. Vue 学习记录<2>

    一.Vue https://vue-loader.vuejs.org/zh-cn/ https://vuejs-templates.github.io/webpack/structure.html

  7. ubuntu-虚拟机分辨率设定

    前两天下载的虚拟机,一直调节不好分辨率,就是说,全屏的时候,虚拟机要么是不能充满屏幕,要么就是在屏幕充满的时候,会出现显示不全,需要滚动条,给人的体验非常的不好.自己调节了好长时间都没有刚好合适的尺寸 ...

  8. 13.AxisUtil

    1. package com.glodon.gspm.adapter.plugin.common; import lombok.SneakyThrows; import org.apache.axis ...

  9. shiro session管理

    http://shiro.apache.org/session-management.html Using Sessions The SessionManager Session Timeout Pe ...

  10. Mybaits中session的应用一

    获取一级缓存session SqlSession session = this.yangchebaoDbManagerImpl.getSqlSessionFactory().openSession(f ...