MTK6225开机过程-系统启动

以下开机过程都是在simulator上跑时得出的结论

 

第一步:启动simulator的时候,直接进入:MMI_task( )

1. iacMemInit();

2.进入一个while(1)循环。以后的过程都是通过消息机制,即:一直在这个循环中读取消息,然后做相应的处理。

第一次进入while(1)之后,OslReceiveMsgExtQ(qid, &Message)就读取到一个消息:PRT_MMI_TIMER_IND。然后就一直在这个循环中读消息。

第二步:Power On

读取到消息:MMI_EQ_POWER_ON_IND

case MMI_EQ_POWER_ON_IND:

       gdi_init();

       switch (p->poweron_mode)      //判断power on的模式

       {

              case POWER_ON_KEYPAD: //用户按下开机键

                     OslMemoryStart(TRUE);

                     g_charbat_context.PowerOnCharger = 0; //不是因为充电而开机的

                     InitializeAll();  //初始化,重点学习

                     OslDumpDataInFile();//这个函数不能进入,直接跳过

                     InitNvramData();    //加载保存在NVRAM中的设置的参数

                     mmi_pwron_entry_animation_screen(); //开机动画

                     break;

              case case POWER_ON_PRECHARGE:

       case POWER_ON_CHARGER_IN:

           g_pwr_context.PowerOnMode = p->poweron_mode; 

           InitializeChargingScr();

           break;

       case POWER_ON_ALARM:          //定时开机

           AlmInitRTCPwron();

           break;

      case POWER_ON_EXCEPTION:  //For abnormal reset when invalid SIM

           OslMemoryStart(TRUE);

           SetAbnormalReset();

           InitializeAll();

           OslDumpDataInFile();

           ClearInputEventHandler(MMI_DEVICE_ALL);

           ClearKeyHandler(KEY_END, KEY_LONG_PRESS);

           InitNvramData();

           AlmReInitialize();

           InitAllApplications();

           mmi_pwron_exception_check_display();

           break;  

}

执行过开机之后,就不会进入这里了。

 

第三步、在模拟器上随便按键,就进入defalt这里:

       default:

          ProtocolEventHandler(

                            (U16) Message.oslMsgId,

                            (void*)Message.oslDataPtr,

                            (int)Message.oslSrcId,

                            (void*)Message.oslPeerBuffPtr);

          break;

 

以上是总体的开机过程。下面学习蓝色部分具体内容:

InitializeAll()

{

       InitUnicodeSupport();  //设置使用的编码函数

       gdi_init();            //图形库初始

       mdi_audio_init();      //音频初始化

       jdi_audio_init();

      

    InitProtocolEvents();  //初始化协议事件(函数是空的)

    InitFramework();       //初始化事件的处理函数,以及histroy等。

    {

      InitEvents();                 //Initialize event handlers

      InitProcessKeyEvent();       //Initialize keyprocess

      InitHistory();                //Initialize history

    }

    InitHardwareEvents();         //设置一些硬件事件的protocol handler。

    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的图像是                                 空的,即在显示时,即使设置了显示的image ID,但还是没有图                           片。只有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         (情景模式)

                     没有装载其child MENU。

                    

                     加载以上MENU中需要使用的STRING和IMAGE。

              (4)PopulateIdleMenuRes();加载IDLE application使用的资源

                       {

                                   PopulateStatusIconResources(); 加载IDLE界面的image

                                   PopulateCommonCategoryResources();

                               PopulateThemeResources();

                       }

              (5)PopulatePbResData ();   Populate phone book resource data

                            加载【电话簿】中的每个EMNU的child menu,stirng,image。

              (6)PopulateMainDemoRes();                   Populating Main Demo Resources

              (7)populateSettingMenu();                Populating Setting Resources

                加载【功能设置】中的每个child menu的各种资源。包括:话机设置,              通话设置,网络设置,GPRS连接设置,安全设置,恢复出厂值,音效,          蓝牙。

                {

                            加载[话机设置]的child menu,string和image,以及下一层…的                              child menu,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();           Populating Fun & Games Resources

              (9)PopulateSimDetectionMenuRes();       Populating SIM Detect Resources

              (10)PopulateChgrPwrOnScrRes();          Populating Charger Power On

              (11)PopulateCommonScreensResData();Populating Common Screen

          (12)PopulateEMSObjectResources();      Populating EMS object Resources

              (13)PopulateCmResData();                     Populating CM Resources

                                                                             加载通话过程中使用的各种资源

                     首先加载来电时,各种状态下的资源:MENU,STIRNG,IMAGE

                     然后调用PopulateCmOutResData();加载呼出电话时各种资源

          (14)PopulateQuickAccessData();            Populating Quick Access Resources

              (15)PopulateInputMethodRes();              Populating Input Method Resources

              (16)PopulateprofileMenu();               Populating Profiles Resources

               。。。。。。

       }//加载资源结束

    PopulateResGetBaseIDTable();

    PowerAndEndKeyHandler();           //sets power key & end key handlers

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值