光线系统包括:背光,闪光,led指示灯

 
一.内核层

    Led-class.c (kernel-3.10\drivers\leds) 这个文件给HAL层提供接口
    led_brightness_store是sysfs文件,在"/sys/class/leds/lcd-backlight/brightness"
           __led_set_brightness(led_cdev, i);
                  led_cdev->brightness_set(led_cdev, value); (Leds.h (kernel-3.10\drivers\leds))
 
         
   led_cdev->brightness_set在Leds_drv.c (kernel-3.10\drivers\misc\mediatek\leds)中的probe函数中被赋值
       g_leds_data[i]->cdev.brightness_set = mt65xx_led_set; 
 
 
mt65xx_led_set 
    mt_mt65xx_led_set(led_cdev, level);  
            mt_mt65xx_led_set_cust(&led_data->cust, led_data->level);   在Leds.c (kernel-3.10\drivers\misc\mediatek\leds\mt6735) 中
       
    mt_mt65xx_led_set_cust //因为我们是GPIO模式,所以就会进入这个分支
             case MT65XX_LED_MODE_GPIO:
LEDS_DEBUG("brightness_set_cust:go GPIO mode!!!!!\n");
return ((cust_set_brightness)(cust->data))(level);
 
    cust->data这个函数指针在Cust_leds.c (kernel-3.10\drivers\misc\mediatek\mach\mt6735\lentek6735_65c_l\leds\mt65xx)被赋值
        static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
{"red",               MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK0,{0}},
{"blue",             MT65XX_LED_MODE_NONE, -1,{0}},
{"green",              MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK1,{0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0}},
{"button-backlight",  MT65XX_LED_MODE_NONE, -1,{0}},
{"lcd-backlight",     MT65XX_LED_MODE_GPIO, (long)Cust_Tintele_SetBacklight,{0}},
{"flashlight",        MT65XX_LED_MODE_GPIO, (long)Cust_Tintele_SetFlashlight,{0}},
        };
        
    因为是16节的控制芯片,就是只有16级亮度,用io模拟这种进行控制
        for (; i<=16-level; i++) {
                mt_set_gpio_out(GPIO_LCD_BACKLIGHT_EN | 0x80000000, 0);  
                udelay(2);
                mt_set_gpio_out(GPIO_LCD_BACKLIGHT_EN | 0x80000000, 1);
                udelay(2);
        }
    GPIO_LCD_BACKLIGHT_EN | 0x80000000  //是为了让这个执行更快
 
 
 
 
二.hal层
    Lights.c (vendor\mediatek\proprietary\hardware\liblights)
    set_light_backlight
         write_int(LCD_FILE, brightness);  //LCD_FILE就是/sys/class/leds/lcd-backlight/brightness
    
提供接口给中间层
struct hw_module_t HAL_MODULE_INFO_SYM = {
    .tag = HARDWARE_MODULE_TAG,
    //.version_major = 1,
    //.version_minor = 0,
    .id = LIGHTS_HARDWARE_MODULE_ID,
    .name = "MTK lights Module",
    .author = "MediaTek",
    .methods = &lights_module_methods,
};
 
打开函数
static struct hw_module_methods_t lights_module_methods = {
    .open =  open_lights,
};
 
open_lights
     if (0 == strcmp(LIGHT_ID_BACKLIGHT, name)) {
        set_light = set_light_backlight;
    }
 
 
 
三.jni层
init_native
    hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module); //获得hal层的接口
         get_device(module, LIGHT_ID_BACKLIGHT);
              module->methods->open(module, name, &device); //调用hal层的open函数
 
        finalize_native 和 setLight_native上层可以调用、
 
    static JNINativeMethod method_table[] = {
    { "init_native", "()J", (void*)init_native },
    { "finalize_native", "(J)V", (void*)finalize_native },
    { "setLight_native", "(JIIIIII)V", (void*)setLight_native },
    };
 
int register_android_server_LightsService(JNIEnv *env)
{
    return jniRegisterNativeMethods(env, "com/android/server/lights/LightsService",
            method_table, NELEM(method_table));
}
 
 
 
 
四.framework层
   DisplayPowerController.java (frameworks\base\services\core\java\com\android\server\display)
 // Brightness animation ramp rate in brightness units per second.
    private static final int BRIGHTNESS_RAMP_RATE_FAST = 20000;
    private static final int BRIGHTNESS_RAMP_RATE_SLOW = 2000;
 

我要改变拉动背光条,中间过滤一些数值

    

 

Android light系统分析的更多相关文章

  1. Android Vibrator系统分析

    Vibrator系统的层次结构

  2. I.MX6 Android 5.1 快速合成系统

    /**************************************************************************** * I.MX6 Android 5.1 快速 ...

  3. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

  4. Android 4.4 Kitkat 音频实现及简要分析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/26701899 在 Android 4.4 ...

  5. Android系统编译【转】

    本文转载自;http://blog.csdn.net/zirconsdu/article/details/8005415 Android编译系统分析 概要 由于android编译系统的复杂和使用了不熟 ...

  6. Android 8.0编译过程

    Android编译系统中的Android.bp.Blueprint与Soonghttp://note.qidong.name/2017/08/android-blueprint/ 工具链关系 Andr ...

  7. [Learn AF3]第一章 如何使用App Framework 3.0 构造应用程序

    af3的变化非常大.参见[译]Intel App Framework 3.0的变化 一.应用需要引用的js脚本: af3中不在自己实现dom选择器,而是选择基于jquey或兼容jquery的库如zep ...

  8. android中出现Error retrieving parent for item: No resource found that matches the Theme.AppCompat.Light

    styles.xml中<style name="AppBaseTheme" parent="Theme.AppCompat.Light">提示如下错 ...

  9. 【android】新手容易遇到的[error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.]Theme出错的问题

    一.概述 近期刚接手了一个项目,开发工具为eclipse,由于版本较低,且考虑到如果转android studio项目的话,会其他人的维护带来困难,所以想着还是维护项目原来的开发环境吧. 但是导入项目 ...

随机推荐

  1. 如果只推荐一本 Python 书,我要 Pick 它!

    今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍 ...

  2. Parcelable使用(一)

    android有两种序列化方式:一是实现Serializable接口(是JavaSE本身就支持的),二是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高 ...

  3. Python opencv resize图片并保存原有的图像比例

    参考链接:https://www.jianshu.com/p/3092835eab61 现有的图像是高瘦高瘦的,所以直接resize成矩形不合适.改变了整个结构. 所以采用的是先resize再padd ...

  4. 手写Express.js源码

    上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的.但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express.通过上 ...

  5. 基于Vue.js PC桌面端弹出框组件|vue自定义弹层组件|vue模态框

    vue.js构建的轻量级PC网页端交互式弹层组件VLayer. 前段时间有分享过一个vue移动端弹窗组件,今天给大家分享一个最近开发的vue pc端弹出层组件. VLayer 一款集Alert.Dia ...

  6. ASP.NET Core Authentication系列(四)基于Cookie实现多应用间单点登录(SSO)

    前言 本系列前三篇文章分别从ASP.NET Core认证的三个重要概念,到如何实现最简单的登录.注销和认证,再到如何配置Cookie 选项,来介绍如何使用ASP.NET Core认证.感兴趣的可以了解 ...

  7. ERP的财务凭证的操作与设计--开源软件诞生23

    赤龙ERP财务凭证讲解--第23篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  8. 浅析 AC 自动机

    目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...

  9. C++实现RTMP协议发送H.264编码及AAC编码的直播软件开发音视频

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  10. mac os 10.15安装jdk 1.6

    1.如果出现报错 已经安装了最高版本 下载请看:https://www.jianshu.com/p/3b580c405c7c 请看下面方法处理错误 1.在mac的访达中 找到 "脚本编辑器& ...