zoukankan      html  css  js  c++  java
  • 【StaticSettings】Camera静态配置

    • 介绍
    • 模块设计   ---详细设计
    • 系统设计 - 系统中的模块 
    • 系统中的StaticSettings 系统配置模块

     注:设计和应用分离,抽象和平台分离,原理和使用分离

    1.介绍

    <!- -模块在系统中的作用, 模块结构概述, 模块原理概述 。。。-->

    StaticSettings为Camera业务系统的配置单元,完成配置数据的加载,更新,访问等 功能。

    Android&Qual Camera系统的配置从配置文件中加载,配置文件分为两部分存放:默认配置和自定义配置。那么,这些配置文件在哪呢?怎么用的呢?

    系统的配置文件:

    • 默认配置 - AOSP/vendor/qcom/proprietary/camx/src/settings/g_camxsettings.xml, 系统编译时会生成对应的.cpp/.h 将配置参数加载为程序的静态参数。
    • 自动以配置 - Device/vendor/etc/camera/camxoverridesettings.txt, 系统运行时加载文件中的配置到StaticSettings。

    配置文件处理:

    • g_camxsettings.xml配置处理:AOSP/vendor/qcom/proprietary/camx/src/settings/    settingscomposer.py,settingsgenerator.pl脚本会根据g_camxsettings.xml生成对应的程序文件,配置文件中的数据会以程序变量的方式在程序构建时带到系统程序中。
    • camxoverridesettings.txt配置的加载:StaticSettings模块创建时会通过OverrideSettingsFile类加载到程序中。
    • xx:AOSP/vendor/qcom/proprietary/camx/build/infrastructure/tools     这个还不清楚

    StaticSettings模块作用:将配置文件的数据加载带到系统中,系统根据配置配置运行。

    2.StaticSettings内部

    2.1 StaticSettings设计

    StaticSettings模块组成:

    • StaticSettings管理
    • StaticSettings数据
    • StaticSettings接口    提供给外部的访问接口

    StaticSettings模块分层:

    • 模块抽象层
    • Titan17x平台依赖层

      

    图x-x SettingsManager和Titan17xSettingsManager的关系

     图x-x系统启动阶段系统配置的加载

     

    StaticSettings模块功能:

    • 解析配置文件
    • 加载配置到内存
    • 更新配置
    • 提供配置服务

    2.1.1 StaticSettings UML静态结构

     图 2-1 StaticSettings模块的UML静态结构图

        StaticSettings通过SettingsManager和StaticSettings实现配置的数据与操作分离。

        SettingsManager类是对配置管理模块的抽象,在对象创建初始化时通过OverrideSettingsFile搜索、加载camxoverridesettings.txt用户设置的配置参数到HashMap。OverrideSettingsFile向SettingsManager提供IOverrideSettingsStore接口,用于对私有HashMap中存储的配置数据的访问。

        HwEnvironment通过Titan17xGetStaticEntryMethods获取Titan17x平台的静态访问的一组操作句柄(HwContextStaticEntry),根据这组句柄中CreateHwFactory句柄,创建Titan17x平台对应的抽象工厂Titan17xFactory,这个工厂生产两种产品:Node和SettingsManager。之后HwEnvironment让HwFactory工厂(实际Titan17xFactory)生产一个SettingsManager(实际为Titan17xSettingsManager)。

    2.1.2 SettingsManager管理

    SettingsManager作为静态配置模块的管理者,负责Settings数据的管理。SettingsManager加载Settings数据的两种方式:

      * SettingsManager创建时传入被管理对象StaticSettings.

      * SettingsManager对象加载配置文件中的配置数据创建对应的被管理对象StaticSettings.

    这里主要介绍SettingsManager根据配置文件创建的配置数据这种实现。说到这种实现,会有个疑问:配置是如何从配置文件中加载到程序中的呢?

     1.SettingsManager加载配置的过程

     配置文件加载发生在SettingsManager对象创建阶段。由以下6步完成系统配置文件.xml加载:

     step0: 配置合成

      AOSP/vendor/qcom/proprietary/camx/build/infrastructure/android/autogen.mk 脚本通过settingscomposer.py和settingsgenerator.pl在系统构建阶段进行配置合成。

      step1:创建OverrideSettingsFile加载用户配置

      OverrideSettingsFile类实现camxoverridesettings.xml文件查找,然后完成内容的解析,并将解析出的配置保存到私有成员HashMap结构中,这样camxoverridesettings.xml中的配置数据就从磁盘进入了内存。OverrideSettingsFile是IOverrideSettingsStore接口的实现类,以IOverrideSettingsStore接口向SettingsManager类提供私有数据(如HashMap中数据)的访问。

      step2:系统默认配置加载

      这里会涉及SettingsManager类部分接口(InitializeDefaultSettings、)的实现。在系统构建阶段通过settingsgenerator.pl脚本生成。

      脚本生成SettingsManager类方法:

      settingsgenerator.pl脚本根据g_camxsettings.xml生成SettingsManager部分方法的实现:g_camxsettings.h、g_camxsettings.cpp。

      其中主要方法有:InitializeDefaultSettings系统默认配置初始值设置、InitializeDefaultDebugSettings系统默认调试配置初始值设置、LoadOverrideSettings加载重写配置、LoadOverrideProperties加载重写properties、DumpSettings导出配置参数。

      SettingsManager对象在初始化时会调用脚本生成的部分接口加载g_camxsettings.xml对应的配置数据到SettingsManager管理的StaticSettings成员变量中。

      step3:用用户配置覆盖系统默认配置

      将step1加载到HashMap中的用户设置的配置参数重写到SettingsManager成员变量StaticSettings。即用camxoverridesettings.txt中用户设置的系统配置参数重写系统默认配置(g_camxsettings.xml)。

      step4.用用户properties覆盖系统默认加载

      加载到OverrideSettingsStore中的properties重写SettingsManager的StaticSettings成员。

      step5.StaticSettings系统静态参数的验证

      目前没有实现

      step6.更新静态参数到系统Log模块

        由于用户可以通过修改properties或者修改文件系统中的camxoverridesettings.txt文件来修改Log调试配置,Log模块在Settings管理模块前初始化,所以这里SettingsManager加载配置后需要更新相关配置到Log模块。

     2.更新系统配置

     3.提供配置服务

      配置读、配置写

    2.1.3 SettingsManager数据

    2.1.4 SettingsManager访问

    2.2 SettingsManager使用

     3.系统构建阶段的配置处理

    • 配置处理input file
    • 配置处理output file
    • 配置处理工具 tool
    • 逻辑抽象

    3.1 settingsgenerator.pl 中平台依赖接口生成 eg:    print $FILE "struct ${hardwareNameUpper}StaticSettings";     

  • 相关阅读:
    MD代码块指定语言类型
    spring通过bean名称,方法名,反射调用服务。
    h5魔塔开坑记
    意识流CSP2021游记
    Android开发byte version = 0x80错误: 不兼容的类型: 从int转换到byte可能会有损失
    Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager解决方法
    Android开发androidstudio调试smali代码
    Android开发修改手机ro.debuggable=1便于调试应用程序
    window环境下载Android系统源代码的方法
    android开发jni开发遍历文件夹下的文件以及目录
  • 原文地址:https://www.cnblogs.com/yemaomao/p/13176027.html
Copyright © 2011-2022 走看看