首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 系统开发之背阴

2012-08-30 
Android 系统开发之背光不知不觉喜欢上了写Blog,这还是一种不错的休闲方式,所噶~~,会不会也害怕过周末呢?

Android 系统开发之背光
不知不觉喜欢上了写Blog,这还是一种不错的休闲方式,所噶~~,会不会也害怕过周末呢?因为寂寞~~啥样儿的生活才让觉得舒适哦~单身好~哈哈。搞了两天,还是姚哥一语惊醒梦中人啊~忽略了Linux下的权限问题,让我纠结了好几个小时啊。首先说明一下,这次学习中让我学到的东西:

         最主要的莫过于是了解了Android中jni编程,游荡整个Android源码,可以看到很多直接操作底层驱动接口,封装成so库,供Java调用的例子哦。

这次学习,也正是出于这样的想法,没想到这个设想高手们早就实现了哦,菜鸟现在也只能算是验证了。诶,菜鸟就是菜鸟,有虫子吃,就兴奋的不得了。

驱动架构略,这里只讨论jni接口的实现。

 

一、我的设想

    其实设想很简单,找到背光驱动提供给上层的API接口,人家Android还不是一样需要一层一层的抽象(HAL、Framework),高手们考虑的东东很多,所以才一层层抽象封装,既然这样,咱菜鸟不就一根筋,有虫吃就是王道啊,我为什么不能直接将这个驱动接口封装成jni提供给Java呢?其实这想法很早就有了,只是到现在才验证,确实可以啊。其实Android中还是有N多这样的例子的。

 

    背光驱动提供的接口是:/sys/class/leds/lcd-backlight/brightness。至于这个接口是怎么来的??那就要去看驱动结构了。驱动注册此接口的源码位于:

Kernel/driver/leds/led-class.c中。

这个文件只是实现了提供上层的接口,至于真正操作硬件的驱动程序,可以给出其源码路径为:(硬件操作其实就是脉宽调制(PWM)),mediatek\source\kernel\drivers\leds

 

二、设想验证

    这里关键就是要清楚jni的接口实现规则咯,不过环境搭建也比较麻烦(ndk编译环境)。

环境搭建另外给出日志。

Jni接口的源码如下:

 

  • static int    
  • set_light_backlight(struct light_device_t* dev,    
  •         struct light_state_t const* state)    
  • {    
  •     int err = 0;    
  •     int brightness = rgb_to_brightness(state);    
  •     pthread_mutex_lock(&g_lock);    
  •     LOGD("%s: brightness=%d start+++\n", __func__, brightness);    
  •     g_backlight = brightness;    
  •     err = write_int(LCD_FILE, brightness);    
  •     if (g_haveTrackballLight) {    
  •         handle_trackball_light_locked(dev);    
  •     }    
  •     pthread_mutex_unlock(&g_lock);    
  •     return err;    
  • }  


     

    当你认真看完lights.c会发现其基本思想跟之前的设想一样,只是人家是高手,我是菜鸟,人家看到赤裸裸的美女不是表面,而是艺术~~~~!!

     

     

    通过这个分析,可以延伸了解到led灯的结构。


  • 热点排行