• 8.1 Android灯光系统_总体框架


    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占空比

  • 相关阅读:
    病毒写法,资源的释放.
    MinHook库的使用 64位下,过滤LoadLibraryExW
    系统权限远程线程注入到Explorer.exe
    【Unity】4.5 树木创建器
    【Unity】4.4 添加角色控制器
    【Unity】4.3 地形编辑器
    【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包
    【Unity】4.1 创建组件
    【Unity】4.0 第4章 创建基本的游戏场景
    【Unity】3.6 导入图片资源
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9128057.html
Copyright © 2020-2023  润新知