⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmimain.c

📁 嵌入式展讯mmi层kernel的c 源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//  Modify: Tracy Zhang
//	Note:
/*****************************************************************************/
void MMK_Init(void)
{
//    uint16 *GPIO_UART_KEY  = (uint16 *)0x8C000020; 
    uint16  data;
    
    g_key_code             = KEY_NONE;
    g_backup_keycode       = KEY_NONE;
    g_mmi_waiting_keys_num = 0;
    g_kbd_timer_active     = FALSE;
//	g_timer_status         = 0x0000;

    MMIDEFAULT_InitDefault();

	// 初始化消息队列
    MMK_InitMSGQueue(0);

    // 初始化定时器
    MMK_InitTimer();

	// init the control class and the LCD    
    MMK_InitControlClass();    
    
    // Lcd_Init();
    GUI_LcdInit();
    // DC_Open();

//    #ifndef _WIN32
    
    MMIDEFAULT_SetDeepSleep(FALSE);
   //	SCI_MMI_EnableDeepSleep(0);   // disable deep sleep of mmi---temporary
    // GPIO_SetKeyPadBackLight(1);       //open the lcd back light
    // GPIO_SetLcd1BackLight(1);         //open the keypad back light 
//    PMI_SetJpgMaxUsedMem(APP_JPG_DECODE_USED_MEMORY);// delete by Niuhu, 2006.12.14
//    #endif

	//设置有关的铃声音量
	AUD_SetVolume(AUD_DEV_MODE_HANDHOLD,AUD_TYPE_RING,4);   // 铃声音量
	AUD_SetVolume(AUD_DEV_MODE_HANDHOLD,AUD_TYPE_VOICE,5);  //通话语音
	AUD_SetVolume(AUD_DEV_MODE_HANDHOLD,AUD_TYPE_DTMF_TONE,2); //双音多频音调
	

    // init the mmi theme
    MMITHEME_InitMmiTheme();
}

/*****************************************************************************/
//  Description :初始化U盘
//  Global resource dependence :                     
//  Author: liujinming
//  Note: 
/*****************************************************************************/
LOCAL void Udisk_Init()
{
	if(!FFS_Init(FS_UDISK))
 	{
 		FFS_Format(FS_UDISK,NULL);
 		FFS_Init(FS_UDISK);
 		MMIMGR_CreateDefaultDir(FS_UDISK);
 	}
}
extern BOOLEAN GPIO_CheckSDCardStatus( void );
/*****************************************************************************/
// 	Description : 初始化MMI中与PS有关的所有应用
//	Global resource dependence : 
//  Author: Tracy Zhang
//	Note:
/*****************************************************************************/
void APP_Init(void)
{
	MmiLan_InitSysLanguage();

	Udisk_Init();
	
	MMI_SetSDStatus(FALSE);

	if( GPIO_CheckSDCardStatus( ) )
	{
		SDCardInit();
		if( SD_RegBSD_Opera(1) && FFS_Init(FS_MMC) )
		{
			MMI_SetSDStatus(TRUE);
		}
	}

	//初始化多媒体IC和服务Thread
	MediaStartControlThread();

	// 图象解码线程初始化
	RDT_InitImgThread();
	
	//yulz test 2006-09-01
	MMK_Ex_Init();

 //   MMI_MainMenuInfo_Init() ;
    MMIMGR_Init();

    //init ring and setting
    MMISET_AllInit();

	//init the main application
	main_app_init();
	
	MMIMSD_Init();
    //MMIVC_Init();
    CC_Init();

    MMISMS_AppInit();

    //PHONEBOOK
    MMIPB_InitApp();

    //初始化小区广播
    MMISMSCB_Init();

    //mms
    MMIMMS_AppInit();

    //init wap module add by figo.feng 2004.09.20
    MMIWAP_Init();

    // STK
    MMISTK_AppInit();
    // add by allen 2004.08.18 end
    MMIENG_AppInit();

    // accessory init for alarm EFS data   -- add by taul
    MMIACC_Init();  

    MMIVC_Init();

    //初始化mp3
    MMIMP3_Init();
	
	//@phoebe cr18105  dc init and multim init should not exchange!!
	MMIDC_Init();

    //voicerecord
    MMIRECORD_AppInit();   
    
    // 移到最后,减少出现还没有初始化完成就进入MPEG4播放的问题
	MMITRUEMPEG4_Init();
//#ifdef     MMI_MPEG4
//	MMIMPEG4_Init();
//#endif

    // @wancan.you cstar
    IMM_Init();	
		
    // 初始化开机和IDLE界面的APPLICATION
    MMIPHONE_AppInit();
}

MmiSignalS *MMI_PeekSignal(MmiSignalS **signal)
{
	MmiSignalS *ret;
	static MmiSignalS *mmi_signal = NULL;
	SCI_DisableIRQ();
	if (NULL == mmi_signal)
		mmi_signal = (MmiSignalS *)SCI_PeekSignal(P_APP);
	ret = mmi_signal;
	if (signal) 
	{ 
		*signal = mmi_signal; 
		mmi_signal = NULL; 		
	}
	SCI_RestoreIRQ();
	return ret;
}

void MMI_ProcessMsg(void)
{
	MmiSignalS                  *receiveSignal ;
    MMI_MESSAGE_T           mmi_msg;            // 指向消息结构的指针
    
	if (MMK_GetMSGQueue(&mmi_msg))
    {
        MMK_DispatchMSGQueue(&mmi_msg);

        MMK_FreeMSG(&mmi_msg);
    }
    else
    {
        //Receive the system message(include the PS message and the ROTS message
		if (NULL == MMI_PeekSignal(&receiveSignal))
			MmiReceiveSignal(P_APP, &receiveSignal);  

        MMK_DispatchExtSig(receiveSignal);

        MmiDestroySignal(&receiveSignal);
   
    }// end of if
    
    // @Great.Tian, 2004-07-16, begin
    MMITHEME_UpdateRectExt();
    // @Great.Tian, 2004-07-16, end		
}

/*****************************************************************************/
//  Description : the function of mmi entry
//  Global resource dependence : 
//                              
//                             
//  Author:Louis.wei
//  Modify: Tracy Zhang
//  Note: 
/*****************************************************************************/

void APP_Task(
    uint32 argc, 
    void * argv
)

{
    POWER_RESTART_CONDITION_E   restart_condition = RESTART_BY_NONE;
    MmiSignalS                  *receiveSignal ;
    MMI_MESSAGE_PTR_T           mmi_msg;            // 指向消息结构的指针
    MMISET_ANIMATE_SET_T  animate_info;
    
//    #ifndef WIN32
    SCI_TRACE_LOW("APP_Task: begin init, time = %d", SCI_GetTickCount());
//    #endif
	//@phoebe cr18105
//	g_is_mmimultim_init_ok = FALSE;

	 // 获取资源管理数据的首地址指针
	/*//notes by yulz 2006-08-18
    #ifdef WIN32
    GetMMIResEntry(&MMI_RES_PTR);
    SCI_ASSERT(PNULL != MMI_RES_PTR);
    #endif
	*/
	// 初始化资源		//add by yulz 2006-08-17
	MMI_InitResInfo();

	MMI_GetSystemInfo();	//yulz 2006-9-20

    MMK_Init();

#ifndef WIN32
    restart_condition = POWER_GetRestartCondition();
#else 
	restart_condition = RESTART_BY_POWER_BUTTON;
#endif // WIN32 
   
    SCI_TRACE_LOW("APP_Task: restart_condition is %d",restart_condition);
    // 根据系统启动的不同条件对服务进行注册
    switch (restart_condition)
    {
    case RESTART_BY_POWER_BUTTON:
    case RESTART_BY_SOFTWARE:
		
        //DisplayInitImage(IMAGE_INIT_NORMAL_STARTUP_ANIM);
        //根据不同的开机动画选择不同的图片
        MMISET_GetOpenCloseAnimationInfo(&animate_info);
	//	DisplayInitImage(g_poweron_anim_first_frame[animate_info.animate_id-1]);
        // 注册REF服务
     	APP_RegisterRefService();

        // 注册PS服务
    	APP_RegisterPsService();
        
        // MMI所有的APP初始化 
    	APP_Init();

        // 激活协议栈
        //MNPHONE_StartupPs();
        //@jassmine 激活协议栈放到开机界面初始化里,防止输入开机密码的时候ps要求输入PIN等
        //但是开机密码界面不能紧急呼叫!

        // 开机界面初始化
        MMIPHONE_NormalInit();

        // @Great.Tian, Fix CR25997
        if (!MMIDEFAULT_GetFlipStatus())
        {
            MMIDEFAULT_DirectSetLcdLightTrue();
        }
        MMIDEFAULT_StartLcdBackLightTimer();    
    	break;
    	
    case RESTART_BY_ALARM:
        // 注册REF服务
    	APP_RegisterRefService();
        
        g_startup_condition = STARTUP_ALARM;

        // MMI所有的APP初始化 
    	APP_Init();
    
        // 闹铃界面初始化
        MMIPHONE_AlarmInit();
    	break;
    	
    case RESTART_BY_CHARGE:
        // 注册REF服务
    	APP_RegisterRefService();
        
        // MMI所有的APP初始化 
    	APP_Init();
    
        // 充电界面初始化
        MMIPHONE_ChargeInit();
    	break;
    	
    case RESTART_BY_ASSERT:
        // 注册REF服务
     	APP_RegisterRefService();

        // 注册PS服务
    	APP_RegisterPsService();
        
        // MMI所有的APP初始化 
    	APP_Init();

        // 激活协议栈
        MNPHONE_StartupPs();

        //assert初始化,直接进入idle界面
        MMIPHONE_AssertInit();
        break;

    case RESTART_BY_NONE:
    default:
    	POWER_PowerOff();		// 关机
    	break;
    }

  //  #ifndef WIN32
    SCI_TRACE_LOW("APP_Task: end init, time = %d", SCI_GetTickCount());
  //  #endif

    while (1)
    {
	MMI_ProcessMsg();
        /*
        if (!(g_mmipb_nv_t.sort_t.is_initialized))
        {
            // 如果PB没有初始化完
            receiveSignal = (MmiSignalS*)SCI_PeekSignal(P_APP);

            if (PNULL == receiveSignal)
            {
            //   MMIPB_InitNvList();
            }
            else
            {
                while(1)
                {
                    if (MMK_GetMSGQueue(&mmi_msg))
                    {
                        MMK_DispatchMSGQueue(mmi_msg);

                        // @Great.Tian, 2004-07-16, begin
                        MMITHEME_UpdateRect();
                        // @Great.Tian, 2004-07-16, end

                        MMK_FreeMSG(mmi_msg);
                    }
                    else
                    {
                        break;
                    }
                }

                MMK_DispatchExtSig(&receiveSignal);
                
                MMITHEME_UpdateRect();                

                MmiDestroySignal(&receiveSignal);
            }
        }
        else
        {
        */
 /*           if (MMK_GetMSGQueue(&mmi_msg))
            {
                MMK_DispatchMSGQueue(mmi_msg);

                // @Great.Tian, 2004-07-16, begin
                MMITHEME_UpdateRectExt();
                // @Great.Tian, 2004-07-16, end

                MMK_FreeMSG(mmi_msg);
            }
            else
            {
                //Receive the system message(include the PS message and the ROTS message
                MmiReceiveSignal(P_APP, &receiveSignal);  

                MMK_DispatchExtSig(&receiveSignal);

                // @Great.Tian, 2004-07-16, begin
                MMITHEME_UpdateRectExt();
                // @Great.Tian, 2004-07-16, end

                MmiDestroySignal(&receiveSignal);
           
            }// end of if
        //}
*/
    }  // end while
}  //End of mmi_Task

/*****************************************************************************/
// 	Description : the function of the app_init task
//	Global resource dependence : 
//  Author: Great.Tian
//	Note:
/*****************************************************************************/
void APPINIT_Task(
    uint32 argc, 
    void * argv
)
{
	xSignalHeaderRec* psig = NULL;

 //   #ifndef WIN32
    SCI_TRACE_LOW("APPINIT_Task: begin init, time = %d", SCI_GetTickCount());
 //   #endif

/*	MMIVC_Init();
    //初始化mp3
    MMIMP3_Init();

	//@phoebe cr18105  dc init and multim init should not exchange!!
	MMIDC_Init();

    MMIMULTIM_Init();
*/
    MMIBROWSER_Init();

    FileMgr_BGTask_Init();

  //  #ifndef WIN32
    SCI_TRACE_LOW("APPINIT_Task: end init, time = %d", SCI_GetTickCount());
 //   #endif
    
    // call init function
    while (!MMIPB_IsPBInitialized())
    {
		MMI_RECEIVE_SIGNAL(psig, P_APPINIT);

        switch(psig->SignalCode) 
        {
        case PB_SIG_INIT_NV_REQ:
            MMIPB_InitNvList();
        	break;

        case PB_SIG_INIT_SIM_REQ:
            MMIPB_InitSimList();
            break;

        default:
            break;
        }

        MMI_FREE_SIGNAL(psig);
    }

    SCI_ThreadExit();          
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -