扩展一个硬件(比如LED、蓝牙、传感器等),至少需要硬件、驱动、驱动交互模块。至于系统的层面如何把系统库加入自己的体系里面去,就是操作系统自己的事了。这里分析一下以背光调整为例Android。

源码在这里:http://code.google.com/p/flying-on-android/

要调整背光,第一步是搜索并加载驱动交互模块(一个.so库),然后打开设备。看一下这个函数:

void openDevice() { hw_module_t* module; int err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**) &module); assert(!err); hw_device_t* device; err = module->methods->open(module, LIGHT_ID_BACKLIGHT, &device); assert(!err); light = (light_device_t*) device; }

方法中的hw_get_module函数来自libhardware库,它会根据要加载的模块名字(这里是一个宏定义LIGHTS_HARDWARE_MODULE_ID,宏定义的值是"backlight"),去搜索lights.xxx.so,找到之后把这个.so加载到内存中,并把其中包含的模块信息填充进hw_module_t结构体。

Android中与传感器、LED、GPS、ALSA、GRALLOC等硬件交互的.so库都在/system/lib/hw目录下面,搜索是在这个目录下面进行的。lights.xxx.so中的xxx一般代表板子的型号,依次取"ro.hardware","ro.product.board","ro.board.platform","ro.arch"这几个系统属性中的一个。比如,在msm7k平台就是lights.msm7k.so。如果搜索不到,最后就会尝试加载lights.default.so。

模块加载完毕后,再知道一个设备名字,就可以打开这个设备了。具体打开设备的代码是:

module->methods->open(module, LIGHT_ID_BACKLIGHT, &device);

这样,得到device句柄之后,我们就可以操作这个设备了。

Android在应用层中调整背光时只需要一个值,就是brightness,系统会把这个值转化成一个R、G、B值相同的颜色值。看下面的代码:

void setLight(int brightness) { //亮度转化成RGB值,R、G、B的值始终相同。 int color = brightness & 0x000000ff; color = 0xff000000 | (color << 16) | (color << 8) | color; setLight(color, 0, 0, 0, 0); }

最后,把这个颜色值写入驱动:

void setLight(int colorARGB, int flashMode, int onMS, int offMS, int brightnessMode) { light_state_t state; memset(&state, 0, sizeof(light_state_t)); state.color = colorARGB; state.flashMode = flashMode; state.flashOnMS = onMS; state.flashOffMS = offMS; state.brightnessMode = brightnessMode; light->set_light(light, &state); }

至于set_light方法,可以看一下/hardware/msm7k/liblights/lights.c中的set_light_backlight方法,这个方法就是把一个颜色值写进了文件/sys/class/leds/lcd-backlight/brightness。一个简单的字符设备。

Android屏幕背光调整机制相关推荐

  1. Android屏幕方向调整的两种方式

    Android屏幕方向调整 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术 ...

  2. Android Virtual Device(AVD)屏幕大小调整

    (1)各种常用机型的分辨率列表如下: 型号                         宽高值 WXGA800                 480X800 WVGA854            ...

  3. Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方

    Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方 如果你想修改MTK的AAL自动背光调整相关的内容,那么根据情况,可能需要涉及如下文件: 这是Android L版本的 ...

  4. Android 屏幕刷新机制

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 这次就来梳理一下 Android 的屏幕刷新机制,把我这段时间因为研究动画而梳理出来的一些关于屏幕刷新方面的知识点分享出来,能力有限 ...

  5. android屏幕刷新显示机制

    title: android屏幕刷新显示机制 tags: 新建,模板,小书匠 grammar_cjkRuby: true android屏幕刷新显示机制 前言 本文是通过阅读各种文章及代码,总结出来的 ...

  6. Android原生调节屏幕背光流程

    Android 5.1调节背光流程 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. https://mp.csdn.net/mdeditor/ ...

  7. android 屏幕密度350 是xh xxh,Android-绘图机制总结

    这里你将了解到以下内容:Android屏幕相关知识 Android绘图技巧 Android图像处理技巧 SurfaceView的使用 1.屏幕尺寸信息 1.屏幕参数 一块屏幕通常具备以下的几个参数 屏 ...

  8. Android屏幕刷新机制

    Android屏幕刷新机制 一些前置概念 屏幕刷新率 一秒内屏幕刷新的次数(一秒内显示了多少帧的图像),单位 Hz(赫兹),如常见的 60 Hz,90Hz,120Hz(高刷新率).刷新频率取决于硬件的 ...

  9. 【屏幕刷新】Android 屏幕刷新机制

    显示系统基础知识 在一个典型的显示系统中,一般包括CPU.GPU.Display三个部分, CPU负责计算帧数据,把计算好的数据交给GPU, GPU会对图形数据进行渲染,渲染好后放到buffer(图像 ...

最新文章

  1. ESI计算机排名2021年01月,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
  2. sql语句中`和'两个符号的区别
  3. 洛谷 P1340 兽径管理
  4. 数字化让618有了洞悉消费者内心的“大脑”
  5. 联影uEXPLORER全身扫描仪获FDA批准,2019年初将在美国上市...
  6. 相反数-网易校招编程题
  7. POJ2752 (Seek the Name, Seek the Fame,kmp)
  8. 是否采用SD-WAN?你需要先考虑以下问题
  9. 3. file、inode结构体及chardevs数组等相关知识解析
  10. 在matlab中读取二进制文件
  11. qq屏蔽怎么知道对方信息(qq屏蔽怎么让对方知道)
  12. 【Swing】JTextArea文本域组件
  13. 军队文职(数学2+物理)——高等数学 3、求极限(一)
  14. java实现一元线性回归算法
  15. 雅虎创始人--杨致远
  16. 全新商城社区系统整站源码
  17. uni-app使用uni-ui
  18. 计算机科学专刊的区别,EI和SCI期刊的正刊和专刊有区别吗
  19. 产权保护之二:责任原则
  20. 盐城大数据提“颜值”增“气质”

热门文章

  1. Android使用SimpleDateFormat不同手机有时格式化手机不准确
  2. 自清洁半导体异质结衬底
  3. 2020 CES:美团和法雷奥合作无人配送车
  4. 指出 寻址方式,并计算 物理地址(汇编练习题)
  5. Android App 性能优化系列结语篇
  6. 研究称开放式办公布局对大脑有害 转载和评论
  7. 【转帖】Java实现Excel批量导入数据
  8. require import
  9. MATLAB中求一个矩阵的最大值或最小值的两种写法
  10. 全瓷牙冠-市场现状及未来发展趋势