MTK平台相关资料(4)

2019-06-02 14:03

(void*)Message.oslPeerBuffPtr); break;

以上是总体的开机过程。下面学习蓝色部分具体内容: InitializeAll() { InitUnicodeSupport();//设置使用的编码函数 gdi_init(); //图形库初始 mdi_audio_init(); //音频初始化 jdi_audio_init(); InitProtocolEvents();//初始化协议事件(函数是空的) InitFramework(); //初始化事件的处理函数,以及histroy等。 { InitEvents(); //Initializeeventhandlers InitProcessKeyEvent(); //Initializekeyprocess InitHistory(); //Initializehistory } InitHardwareEvents(); //设置一些硬件事件的protocolhandler。 InitTime(); InitMMI_App(); setup_UI_wrappers(); //初始化图形界面相关的参数 PopulateResData(); //装载资源包括:menu,string,image {

增加applications

ADD_APPLICATION(APP_MAINMNNU,APP_IDLEAPP,APP_BOOTUP, APP_SIMTOOLKIT,APP_GLOBALDEFS, APP_CHARGER,APP_UIFRAMEWORK, APP_HONEBOOK,APP_SHORTCUTS, APP_SERVICES,APP_ORGANIZER,

APP_MESSAGES,APP_CHAT,APP_SETTINGS, APP_CALLMANAGEMENT,APP_DEMOAPP, APP_CLLHISTORY,APP_CALLSETUP, APP_PROFILES,APP_NEWORKSETUP, APP_DATAACCOUNT,APP_PHONESETUP, APP_TODOLIST,APP_INPUTMETHOD。。。。。。);

装载每一个application的资源(MUNE,IMAGE,STRING) (1)PopulateNFBProgressImg(); //0—9及其他的image (2)PopulateGlobalData();

装载全局资源:主要就是加载字串

ADD_APPLICATION_STRING2和加载图像

ADD_APPLICATION_IMAGE2。注意:有很多image的图像是空的,即在显示时,即使设置了显示的imageID,但还是没有图片。只有STRING。 (3)PopulateMainMenuRes();

在代码中有3个此函数,利用宏的控制以达到不同的应用。 GW606进入的是中间的这个函数,即:宏

__MMI_BI_DEGREE_MAIN_MENU_STYLE__关闭,宏__MMI_VERSION_2__打开。 加载左软件开始进入的九宫图MENU。 ADD_APPLICATION_MENUITEM(( IDLE_SCREEN_MENU_ID,0,9, MAIN_MENU_PHONEBOOK_MENUID, MAIN_MENU_MESSAGES_MENUID, MAIN_MENU_CALL_HISTORY, MAIN_MENU_SETTINGS_MENUID, MAIN_MENU_MULTIMEDIA_MENUID, MAIN_MENU_FILE_MNGR_MENUID, MAIN_MENU_PROFILES_MENUID, MAIN_MENU_EXTRA_MENUID, MAIN_MENU_SERVICES_MENUID, 0,INSERTABLE, MATRIX_MENU MAIN_MENU_MENU_TEXT, MAIN_MENU_PHONEBOOK_ICON)); 装载电话簿的MENU(SIM卡有效) ADD_APPLICATION_MENUITEM(( MAIN_MENU_PHONEBOOK_MENUID。。。 装载电话簿的MENU(SIM卡无效) ADD_APPLICATION_MENUITEM(( MAIN_MENU_PHONEBOOK_NO_SIM_MENUID。。。 装载通话记录的MENU ADD_APPLICATION_MENUITEM(( MAIN_MENU_CALL_HISTORY。。。 装载功能设置的MENU ADD_APPLICATION_MENUITEM(( MAIN_MENU_SETTINGS_MENUID。。。 装载没有SIM卡时,电话设置的MENU ADD_APPLICATION_MENUITEM(( MAIN_MENU_SETTINGS_NO_SIM_MENUID, MENU_SIM_OPTION_ID, 。。。 装载多媒体娱乐的MENU ADD_APPLICATION_MENUITEM(( MAIN_MENU_MULTIMEDIA_MENUID 装载文件管理的MENU ADD_APPLICATION_MENUITEM(( MAIN_MENU_FILE_MNGR_MENUID。。。 装载网络服务的MENU ADD_APPLICATION_MENUITEM2(( MAIN_MENU_SERVICES_MENUID。。。 装载工具箱的MENU

ADD_APPLICATION_MENUITEM(( MAIN_MENU_EXTRA_MENUID。。。 到这里,就装载了九宫图的MENU,以及其其大部分MENU的child MENU。红色的两个: MAIN_MENU_MESSAGES_MENUID (信息) MAIN_MENU_PROFILES_MENUID (情景模式) 没有装载其childMENU。 加载以上MENU中需要使用的STRING和IMAGE。 (4)PopulateIdleMenuRes();加载IDLEapplication使用的资源 { PopulateStatusIconResources();加载IDLE界面的image PopulateCommonCategoryResources(); PopulateThemeResources(); } (5)PopulatePbResData(); Populatephonebookresourcedata 加载【电话簿】中的每个EMNU的childmenu,stirng,image。 (6)PopulateMainDemoRes(); PopulatingMainDemoResources (7)populateSettingMenu(); PopulatingSettingResources 加载【功能设置】中的每个childmenu的各种资源。包括:话机设置, 通话设置,网络设置,GPRS连接设置,安全设置,恢复出厂值,音效,蓝牙。 { 加载[话机设置]的childmenu,string和image,以及下一层?的childmenu,stirng,image。 ADD_APPLICATION_MENUITEM(( MENU9102_INITIAL_SETUP。。。 PopulateNetworkSetupResData(); //加载【网络设置】资源 populateManageCalls(); //加载【通话设置】资源 PopulatePhoneSetupResData();//刚进入populateSettingMenu() 的时候,加载了【话机设置】中一部分的资源。更 多的资源是在这个函数中加载的。 populateSecuritySetup(); //加载【安全设置】资源 PopulateLanguageStrings(); #ifdef__MMI_SOUND_EFFECT__ PopulateSoundEffectResData(); #endif #ifdef__FLIGHT_MODE_SUPPORT__ PopulateFlightModeResData(); PopulateConnectSetting(); #endif }

(8)populateFunAndGamesMenu(); PopulatingFun&GamesResources (9)PopulateSimDetectionMenuRes(); PopulatingSIMDetectResources (10)PopulateChgrPwrOnScrRes(); PopulatingChargerPowerOn (11)PopulateCommonScreensResData();PopulatingCommonScreen (12)PopulateEMSObjectResources(); PopulatingEMSobjectResources (13)PopulateCmResData(); PopulatingCMResources 加载通话过程中使用的各种资源 首先加载来电时,各种状态下的资源:MENU,STIRNG,IMAGE 然后调用PopulateCmOutResData();加载呼出电话时各种资源 (14)PopulateQuickAccessData(); PopulatingQuickAccessResources (15)PopulateInputMethodRes(); PopulatingInputMethodResources (16)PopulateprofileMenu(); PopulatingProfilesResources 。。。。。。 }//加载资源结束

PopulateResGetBaseIDTable(); PowerAndEndKeyHandler(); //setspowerkey&endkeyhandlers

MTK开机流程—应用部分

应用启动四个阶段:系统资源配置等待开机事件开机动画进入待机界面。 1 说明:

(适用于MTK6223平台)

在分析开机流程的过程中,我们首先需要学习平台的相关文档,并阅读代码,有初步的了解后,再搭建调试环境,通过跟踪和打印LOG来分析验证实际的开机流程。由于目前的条件限制以及平台存在的一些缺陷,目前我调试的方法是结合串口打印和模拟器打印、跟踪的方法来调试的。

因为开机流程跟开机触发原因、卡状态、网络状态、本机设置以及用户交互都有关系,流程各不相同,本文档只分析其中一种过程,在这个过程下学会分析问题和解决问题的方法之后,其他的流程可按此方法分析得来。 2 应用启动第一阶段—系统资源配置:

应用启动的第一阶段是创建系统环境,对TARGET开发板来说,就是启动底层硬件、配置MCU、配置外围器件,创建操作系统、配置系统资源、创建各种任务等;对模拟器了说,主要是创建工作环境来模拟开发板,并提供一套GUI来提供输入输出,和用户交互。下图是模拟器在启动但没开机的时候的串口信息,目标板的信息与之相似: 3 应用启动第二阶段—等待开机事件: 下图是在添加打印语句后在模拟器上得到的打印信息:

由于模拟器是无法完全模拟TARGET上的硬件信息和嵌入式系统的BOOT过程、操作系统创建、任务加载过程的,所以我们目前暂时先不重点关注这个部分,本文档的目的

也是在模拟器能完成的应用启动流程上进行说明和介绍。 从上图我们可以看到,在应用启动的过程中,先是创建mmi_task(),然后进入MMI_task()功能实体,进行MMI应用的初始化,并进入无限循环等待事件处理。在最开始的时候,是等待开机事件,进行应用部分的开机。

开机事件是MSG_ID_MMI_EQ_POWER_ON_IND,在MMI_task收到这个事件后,进入函数分支: ??

switch(p->poweron_mode) casePOWER_ON_KEYPAD: …… mmi_bootup_entry_disk_check(); 然后再逐层调用:

mmi_bootup_exit_disk_check()

mmi_bootup_entry_flight_mode_query() FlightModeCheckBeforeAnimation() MTPNP_AD_Bootup()

(这个调用过程到这里就结束了,这个函数是底层封装函数,通过反汇编以及函数调用栈,我们可以看到程序的运行状态。)

我们可以看到,这个封装函数调用了MTPNP_PFAL_Master_Startup_Normal(),再看MTPNP_PFAL_Master_Startup_Normal()的反汇编函数,如下: 调用了PowerOnNormalMode()。

所以程序能够继续运行下去,整个开机过程的栈结构如下: 4 应用启动第三阶段—开机动画: PowerOnNormalMode()的执行过程如下: 具体的实现我们可以参照代码来阅读。可以看到此时手机还处在播放开机动画的过程当中,调用SimPasswdReqResponse()进入其中的一个函数分支。

到开机动画播放完后,会有一个定时器事件上面给MMITASK,进行相关的处理后,退出动画播放,再调用SimPasswdReqResponse()进入它的另一个分支,下面是动画播放完后的函数调用关系。

最后调用到mmi_ready_to_idle_screen_ind(),该函数是MOD_MMI任务自己给自己发一个MSG_ID_MMI_READY_TO_IDLE_SCREEN_IND消息到外部消息队列,并设置好该事件的处理函数mmi_ready_to_idle_screen_ind_hdlr(),本轮消息处理调用过程结束。 5 应用启动第四阶段—进入待机界面:

在MMI_task主循环里收到事件MSG_ID_MMI_READY_TO_IDLE_SCREEN_IND,根据注册的事件处理函数,调用mmi_ready_to_idle_screen_ind_hdlr(),具体的处理过程见下面的函数调用栈:

下面是该过程的串口打印信息,注意看函数的执行过程,与调用栈的阅读方式是相反的。到这个过程执行完成,就进入了待机界面了,我们的应用开机过程就基本完成了。

MTKPhoneBook开机流程

开机之后,初始化时,设置如下三个PS消息CBack函数: InitializeAll()

mmi_phb_init_protocol()


MTK平台相关资料(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如果你还这样,注定是个卢瑟

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: