1. 程式人生 > >android中的背光碟機動層次分析

android中的背光碟機動層次分析

其實Android的底層就是Linux,所以其驅動本質就是Linux驅動,但是這些Linux驅動是服務上層Android的,所以需遵循上Android的一些介面規範。所以涉及到的Android驅動都應應密切關注上層傳遞的介面。本文介紹的LCD背光碟機動就是從上層一直往下層展現,但是筆者畢竟不是專注於Android上層,礙於知識不充裕,所以對上層的東西介紹得相對簡單。

1.Android的Setting

Android的設定裡面管理了Andoird系統的所有設定,其中當然包括了螢幕亮度設定。 Setting的原始碼目錄在: mydroid/packages/apps/Settings/src/com/android/settings
亮度設定的java原始檔在: mydroid/packages/apps/Settings/src/com/android/settings/BrightnessPreference.java
開啟這個檔案看到:
  1. public
    class BrightnessPreference extends SeekBarDialogPreference implements
  2.         SeekBar.OnSeekBarChangeListener, CheckBox.OnCheckedChangeListener {  
  3. private SeekBar mSeekBar;  
  4. private CheckBox mCheckBox;  
  5. privateint mOldBrightness;  
  6. privateint mOldAutomatic;  
  7. privateboolean mAutomaticAvailable;  
  8. privateboolean mRestoredOldState;  
  9. // Backlight range is from 0 - 255. Need to make sure that user 
  10. // doesn't set the backlight to 0 and get stuck 
  11. privateint mScreenBrightnessDim =  
  12. ...  
  1. publicclass BrightnessPreference extends SeekBarDialogPreference implements
  2.         SeekBar.OnSeekBarChangeListener, CheckBox.OnCheckedChangeListener {  
  3.     private SeekBar mSeekBar;  
  4.     private CheckBox mCheckBox;  
  5.     privateint mOldBrightness;  
  6.     privateint mOldAutomatic;  
  7.     privateboolean mAutomaticAvailable;  
  8.     privateboolean mRestoredOldState;  
  9.     // Backlight range is from 0 - 255. Need to make sure that user
  10.     // doesn't set the backlight to 0 and get stuck
  11.     privateint mScreenBrightnessDim =  
  12. ...  
Android的最上層已經將背光亮度量化為了[0,255]個等級,並且提示注意不要設定為0,所以在進行最低層的背光碟機動編寫時,可以合理按這個範圍部署背光的亮度。

2.Android的背光JNI層

背光的JNI層原始碼在: mydroid/frameworks/base/services/jni/com_android_server_LightsService.cpp
這一層就是呼叫HAL層的方法,為上一層實現一個設定亮度介面。

3.Android的背光HAL層

Java App和JNI一般是google維護的,所以原始碼位置相對固定,HAL有產品商開發維護的,所以位置是不固定的,看產品上喜好,筆者使用的TI OMAP4平臺,背光的HAL層程式碼就在: mydroid/device/ti/xxx_product/liblights/light.c
先瀏覽欣賞一下light.c先
  1. /* 
  2.  * Copyright (C) 2008 The Android Open Source Project 
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  */
  16. #define LOG_TAG "lights" 
  17. #include <cutils/log.h> 
  18. #include <stdint.h> 
  19. #include <string.h> 
  20. #include <unistd.h> 
  21. #include <errno.h> 
  22. #include <fcntl.h> 
  23. #include <pthread.h> 
  24. #include <sys/ioctl.h> 
  25. #include <sys/types.h> 
  26. #include <hardware/lights.h> 
  27. /******************************************************************************/
  28. static pthread_once_t g_init = PTHREAD_ONCE_INIT;  
  29. static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;  
  30. charconst*const LCD_FILE  
  31.         = "/sys/class/leds/lcd-backlight/brightness";  
  32. charconst*const KEYBOARD_FILE  
  33.         = "/sys/class/leds/keyboard-backlight/brightness";  
  34. charconst*const CHARGING_LED_FILE  
  35.         = "/sys/class/leds/battery-led/brightness";  
  36. /*RGB file descriptors */
  37. charconst*const RED_LED_FILE  
  38.         = "/sys/class/leds/red/brightness";  
  39. charconst*const RED_DELAY_ON_FILE  
  40.         = "/sys/class/leds/red/delay_on";  
  41. charconst*const RED_DELAY_OFF_FILE  
  42.         = "/sys/class/leds/red/delay_off";  
  43. charconst*const GREEN_LED_FILE  
  44.         = "/sys/class/leds/green/brightness";  
  45. charconst*const GREEN_DELAY_ON_FILE  
  46.         = "/sys/class/leds/green/delay_on";  
  47. charconst*const GREEN_DELAY_OFF_FILE  
  48.         = "/sys/class/leds/green/delay_off";  
  49. charconst*const BLUE_LED_FILE  
  50.         = "/sys/class/leds/blue/brightness";  
  51. charconst*const BLUE_DELAY_ON_FILE  
  52.         = "/sys/class/leds/blue/delay_on";  
  53. charconst*const BLUE_DELAY_OFF_FILE  
  54.         = "/sys/class/leds/blue/delay_off";  
  55. ...  
  1. /* 
  2.  * Copyright (C) 2008 The Android Open Source Project 
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  5.  * you may not use this file except in compliance with the License. 
  6.  * You may obtain a copy of the License at 
  7.  * 
  8.  *      http://www.apache.org/licenses/LICENSE-2.0 
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software 
  11.  * distributed under the License is distributed on an "AS IS" BASIS, 
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  13.  * See the License for the specific language governing permissions and 
  14.  * limitations under the License. 
  15.  */
  16. #define LOG_TAG "lights"
  17. #include <cutils/log.h>
  18. #include <stdint.h>
  19. #include <string.h>
  20. #include <unistd.h>
  21. #include <errno.h>
  22. #include <fcntl.h>
  23. #include <pthread.h>
  24. #include <sys/ioctl.h>
  25. #include <sys/types.h>
  26. 相關推薦

    android光碟機動層次分析

    其實Android的底層就是Linux,所以其驅動本質就是Linux驅動,但是這些Linux驅動是服務上層Android的,所以需遵循上Android的一些介面規範。所以涉及到的Android驅動都應應密切關注上層傳遞的介面。本文介紹的LCD背光碟機動就是從上層一直往下層展現,但是筆者畢竟不是專注於And

    IMX6 Android PWM光碟機動修改

    硬體平臺:IMX6Q 軟體作業系統:android 4.3 修改pwm通道,通道0改成通道1 修改bootable/bootloader/uboot-imx/board/freescale/mx6q_sabresd/mx6q_sabresd.c di

    imx6q上的光碟機動分析

    pwm-backlight { compatible = "pwm-backlight"; pwms = <&pwm1 0 50000>; brightness-levels = < 0 1 2 3 4 5 6

    RK292X-PWM光碟機動分析及修改

    原文連結[http://blog.chinaunix.net/uid-28623414-id-3618965.html] 相關檔案 kernel/arch/arm/mach-rk2928/board-rk2926-sdk.c kernel/drivers/video/backligh

    DLT-RK3288 Android 光碟機動開發指南

    讀者物件本文件(本指南)主要適用於以下工程師:技術支援工程師軟體開發工程師1 驅動檔案與 DTS 節點驅動檔案所在位置:dlt-rk3288/kernel/drivers/video/backlight/pwm_bl.c Dts檔案所在位置:dlt-rk3288\kernel

    android倒計時控件CountDownTimer分析

    構造方法 stat 一個 情況 onfinish future 控件 pre 計算 android中倒計時控件CountDownTimer分析 1 示例代碼 new CountDownTimer(10000, 1000) { public void onTic

    LCD光碟機動IC

    對於40Pin標準RGBLCD,需要背光碟機動電路,現有如下三種參考設計,這三種均是恆流驅動: 1.UM1661 (某寶價格1元左右) 輸入:2~6V  輸出電壓:高達24V 內部開關頻率:2MHZ 最大輸出電流:1.6A EN腳可接入PWM訊號,實

    從零開始之驅動發開、linux驅動(三十二、簡單方式的lcd的光碟機動

    前面lcd章節我們知道了LCD的背光可以由兩種方式決定調節: 1.一種是I/O口直接輸出高低電平來控制背光的量滅,這種方式簡單,但不能調背光亮度。 2.另一種是採用PWM調節脈衝寬度的方式來控制背光,這種方式需要採用PWM驅動來實現,優點是可以調節螢幕亮度,節省電量。  

    androidstagefright和OMXCodec原理分析

    1. 框架結構 1.1StageFright和openCore和NuPlayer的關係 上圖可知,stagefright是在MediaPlayerService這一層加入的,和opencZ喎�"/kf/ware/vc/" target="_blank" class=

    fandar 液晶屏LCD光碟機動晶片MP3302

    學習1.在製作LCD PCB的時候,液晶屏LCD背光碟機動晶片MP3302 LED的驅動電路想省事 ,直接接上VCC·GND ,結果就是不行,因為液晶的led串聯,分壓基本上就分乾淨了,2.然後出現了一

    tiny4412 裝置樹之LCD光碟機動(五)

    開發板:tiny4412(1611) 核心:linux4.4 編譯器: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320) 4412晶片gpx1 2接到雙向電平轉換器上: LCD上有一個

    linux光碟機動解析

    一、核心驅動相應的程式碼:kernel/drivers/video/backlight/backlight.c 1、驅動初始化基本流程及關鍵資訊 postcore_initcall(backlight_class_init);//初始化backlight類

    AndroidGC機制的相關分析

    前言 我們知道在Android開發中,由於有垃圾回收機制,所以我們不用花費太多的心思在記憶體分配或釋放上,但是這不是說我們要完全忽略。我們知道系統分配給每個應用程式的記憶體是有限的,這個記憶體的上限叫做“堆大小”(Heap Size),不同的手機,所分配的大小

    深入淺出Android的App啟動流程分析

    App啟動是指使用者點選手機桌面的app對應的icon開始,所以我們需要明白幾點基礎知識: 1.桌面也是一個Activity叫Launcher.java 2.在桌面點選icon啟動app跟在app內部啟動另一個Activity是一樣的都是呼叫startAct

    Coredump介紹及如何在Android開啟和使用來分析Crash等問題

    文章目錄:Coredump簡介及使用... 1目錄... 2一、什麼是Coredump. 3二、Coredump產生的原因... 3三、如何控制產生Coredump. 4四、使用Coredump的準備... 4五、開始使用Coredump. 5一、什麼是Coredump有些C/C++程式或者通過JNI呼叫了C

    Android 的dm-verity原理分析

    Android 中的Verified Boot之dm-verity 之前做了一個Verified Boot模組相關的工作,但是在網上只有找到google的文件和一個nexus的patch。雖然有patch,但在不同版本的程式碼上實現起來卻可能有一些bug,所以特此記錄一下debug這個東西的過程

    androidwindow和windowManager原始碼分析android-api-23)

    一、前言 在android中window無處不在,如activity、dialog、toast等。它是view所依附的載體,每個window都對應於一個View和一個ViewRootImpl。ViewRootImpl就是Window和view的連線紐帶。windowMana

    Android使用Zxing整合、分析與優化

    Zxing使用 zxing是Google推出的用於識別QRCode、ISBN等圖形碼的解決方案。本文主要介紹Android移動端對Zxing的使用,以及官方demo的整合。 新增依賴: compile 'com.google.Zxing:core:3.2.1

    android黑科技系列——Wireshark和Fiddler分析Android的TLS協議包數據(附帶案例樣本)

    以管理員身份運行 inter pca lar stop 解析失敗 dash 獲取 程序 一、前言 在之前一篇文章已經介紹了一款網絡訪問軟件的破解教程,當時采用的突破口是應用程序本身的一個漏洞,就是沒有關閉日誌信息,我們通過抓取日誌獲取到關鍵信息來找到突破口進行破解的。那篇

    AndroidParcel的分析以及使用

    label nbsp default ext ews nal itl activit tag 簡單點來說:Parcel就是一個存放讀取數據的容器, Android系統中的binder進程間通信(IPC)就使用了Parcel類來進行客戶端與服務端數據的交互,而且AIDL的數據