? 加载外部配置文件,主要是INI文件,包括EDID,HDCP,PQ,Volume Curve等,
详见后面的说明;
? 加载客制化配置:MSrv_Control_common::LoadCustomizeSystemCfg(); ? 初始化I2C,GPIO,Keypad,这里结合SN_board_XXX.h里面定义的配置; ? 通过mapi_interface::Build()创建信号处理相关类的实例,如vdec,video out,
demodulator等等,这些实例保存在静态成员数组m_pMapiObj[]里面,后续会经常用到这里面实例化的对象;
? pPcb = new (std::nothrow) device_pcb:定义device_pcb类的实例,主要负责
Tuner,Demod,AudioAmp,DTMB Demod的选择与初始化;
说明2: MUF:
PS:Android机MApplet部分没有使用到。
说明3:
Supernova代码
INI文件
What is the INI file?
在早期的windows桌面系统中主要是用INI文件作为系统的配置文件,从win95以后开始转向使用注册表,但是还有很多系统配置是使用INI文件的。其实INI文件就是简单的text文件,只不过这种txt文件要遵循一定的INI文件格式。现在的WINCE系统上也常常用INI文件作为配置文件,这次研究INI文件的目的就是为了我的GPS定位系统客户端写个系统配置文件。“.INI ”就是英文“initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是\也可以是\,\”或者是\。
Why need the INI file?
如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序出厂后还能根据需要进行必要的配置;配置文件有很多如INI配置文件,XML配置文件,还有就是可以使用系统注册表等。
INI File Format
INI文件的格式很简单,最基本的三个要素是:Keys(properties), Sections, Comments Keys (properties):每个key对应一个name和一个value。 Sections:把Key分组就成为一个Section。 Comments:注释。
关于INI File的更多信息,可参考维基百科:http://en.wikipedia.org/wiki/INI_file
INI File Load&Parse
@/Supernova/projects/msrv/common/src/MSrv_Control_TV.cpp ? BOOL MSrv_Control_TV::Build()
@/Supernova/projects/msrv/common/src/MSrv_Control_common.cpp ? void MSrv_Control_common::PreBuildSystem() @/Supernova/projects/systeminfo/src/SystemInfo.cpp ? BOOL SystemInfo::SetSystemInfo(void)
加载INI file @/Supernova/projects/systeminfo/src/SystemInfo.cpp ? void SystemInfo::LoadIniFile(void)
在LoadIniFile(void)加载\,根据sys.ini的[model] Section,获取gModelName这个name对应的value为/config/model/Customer_1.ini,在通过Customer_1.ini的Section和name,去获取其他配置,如[panel],[ColorMatrix],[PcModeTable],[HDMI_EDID_1],[VGA_EDID],[KEYPAD],[VolumeCurve]等等。
APP概述
TvApp文件结构
TvApp有四个工程,对应四个apk文件:
比较常修改到的是tvsettinghotkey.apk和tvsettingui.apk,其中tvsettingui.apk稍微复杂,下面做个基本剖析:
TVapi.jar:封装了aidl的实现,后面再详细介绍;
framework.jar:framework包,源码在ics/frameworks里面。比如:
framework.jar –> com.tvos.common -> ThreeDimensionManager.class文件
其实现在ics/frameworks/base/tv/java/com/tvos/common/ThreeDimensionManager.java framework包的类,可以直接import包名,然后使用:
tvsettingui/src下文件分析:
com.mstar.tvframework:定义公共基类,实现全局方法,如Channel list键的实现,在基类的onKeyDown方法实现;
com.mstar.tvsettingservice:定义接口;
com.mstar.tvsrvfunc:调用framework,实现接口; mstar.tvsetting.ui:UI实现;
ManiFest文件
AndroidManifest.xml可以理解为android的一个注册表文件,在这个文件中,我们可以声明权限,应用组件和其他配置工作等等。系统启动的时候,由PackageManagerService读取和管理Manifest信息(PackageManagerService是Framework级的Service,源代码在ics/frameworks/base/cmds/am/src/com/android/commands/pm/PackageManagerService.java)。 文件结构:
下面是tvsettinghotkey.apk对应的xml文件: