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

📄 mmimain.c

📁 嵌入式展讯mmi层kernel的c 源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
** File Name:      MMIMAIN.C                                               *
** Author:                                                                 *
** Date:           03/11/2003                                              *
** Copyright:      2003 Spreatrum, Incoporated. All Rights Reserved.       *
** Description:    This file is used to describe the MMI Kernel            *
/****************************************************************************
**                         Important Edit History                          *
** ------------------------------------------------------------------------*
** DATE           NAME             DESCRIPTION                             *
** 11/2003       Louis.wei         modify
** 12/2003       Tracy Zhang       对任务初始化和对服务的注册进行修改      *
****************************************************************************/

//#include "tb_hal.h"
#include "mmi_osbridge.h"
#include "mmk_msg.h"
#include "mmk_kbd.h"
#include "tb_dal.h"
#include "mmk_timer.h"
#include "mmk_app.h"
#include "mmi_theme.h"
#include "jpg_gif_decode.h"
#include "sd.h"
//#include "sd_bsd.h"

#include "mmiphone.h"
#include "mmisms_app.h"
#include "mmidc.h"
#include "mmimp3.h"
#include "ccapp.h"

#include "mmiwap.h"
#include "mmibrowser.h"

// add by allen 2004.08.17  begin
#include "mmistk_app.h"
// add by allen 2004.08.17  end
#include "mmieng_main.h"

#include "mmirecord.h"

#include "mmipb_signal.h"
#include "mmipb.h"

#include "mmi_signal.h"

#include "mmi_id.h"

#include "guilcd.h"
#include "u_disk_api.h"
#include "mmiset.h"

//#ifndef WIN32
#include "arm_reg.h"
//#endif

#include "mmi_image.h"
#include "mmi_resource_def.h"
#include "mmimultim.h"

#include "ffs.h"

#include "mmitruempeg4.h"
//#include "mmimms_internal.h"	//yulz temp
#include "res_access.h"
#include "mmk_ex.h"
#include "mmi_sysinfo.h"
#include "tabpagemenu_data.h"
#include "mmi_language.h"

/*-------------------------------------------------------------------------*/
/*                         TYPES/CONSTANTS                                 */
/*-------------------------------------------------------------------------*/
extern uint8    g_key_code;

extern uint32 g_backup_keycode; // 消息队列中的key code
extern uint8  g_mmi_waiting_keys_num; // 消息队列中的KeyNum 

extern BOOLEAN  g_kbd_timer_active;

extern PHONE_STARTUP_CONDITION_E   g_startup_condition;    // 记录开机的原因

extern PUBLIC BOOLEAN LCD_IsExistSubLcd(void);

extern void FileMgr_BGTask_Init(void);

/*---------------------------------------------------------------------------*/
/*                          LOCAL FUNCTION DECLARE                           */
/*---------------------------------------------------------------------------*/
/*****************************************************************************/
//  Description : handle charge call back function
//  Global resource dependence :                      
//  Author:
//  Note: 
/*****************************************************************************/
LOCAL void ChargeCallBackFunc(
                              uint32    taskid,		// the client's task id
                              uint32	event_id,	// the event type
                              void	    *param_ptr	// data follow the even
                              );


/*****************************************************************************/
//  Description : handle udisk call back function
//  Global resource dependence :                          
//  Author: Jassmine.Meng
//  Note: 
/*****************************************************************************/
LOCAL void UdiskCallBackFunc(
                              uint32    taskid,		// the client's task id
                              uint32	event_id,	// the event type
                              void	    *param_ptr	// data follow the even
                              );

/*****************************************************************************/
//  Description : handle keypad call back function
//  Global resource dependence :                     
//  Author: Great.Tian
//  Note: 
/*****************************************************************************/
LOCAL void KeypadCallBackFunc(
                              BLOCK_ID id,    // Client thread ID
                              uint32   argc,  // Signal code
                              void     *argv  // Key Code
                              );

/*****************************************************************************/
//  Description : handle touch panel call back function
//  Global resource dependence :                     
//  Author: Robert.Lu
//  Note: 
/*****************************************************************************/
LOCAL void TPCallBackFunc(
                          BLOCK_ID id,    // Client thread ID
                          uint32   argc,  // Signal code
                          void     *argv  // Key Code
                          );

/*****************************************************************************/
//  Description : handle keypad call back function
//  Global resource dependence :                     
//  Author: Great.Tian
//  Note: 
/*****************************************************************************/
LOCAL void KeypadCallBackFunc(
                              BLOCK_ID id,    // Client thread ID
                              uint32   argc,  // Signal code
                              void     *argv  // Key Code
                              )
{
	MmiSignalS* sendSignal  = PNULL;
    uint32      key_code    = (uint32)argv;
    uint16      single_code = (uint16)(argc & 0xFFFF);

    SCI_TRACE_LOW("KeypadCallBackFunc: key_code = %d, single_code = %d!", key_code, single_code);
	
    // check the key message
    if (MMK_CheckKeySingle(single_code, key_code))
    {
	    // create the signal to send requesting task
	    MmiCreateSignal(single_code, sizeof(MmiKeyPress), &sendSignal);

	    sendSignal->sig.keyPress.keyCode = key_code;
        sendSignal->send = KPDSVR;
	    MmiSendSignal(TASK_FL_ID, sendSignal);
    }
    else
    {
        SCI_TRACE_LOW("KeypadCallBackFunc: the key message is too much!");
    }
}

/*****************************************************************************/
//  Description : display the init image
//  Global resource dependence :                     
//  Author: Great.Tian
//  Note: 
/*****************************************************************************/
LOCAL void DisplayInitImage(
                            uint32 image_id
                            )
{
	int16          mainscreen_width  = MMI_GetFullScreenWidth();
	int16          mainscreen_height = MMI_GetFullScreenHeight();
	GUI_RECT_T     sublcd_rect       = MMI_GetSubLcdRect();
    GUI_DisplayStaticBmp(
        MAINLCD_ID,
        0,
        0,
        image_id);

    LCD_InvalidateRect(
        MAINLCD_ID, 
        0,
        0, 
        mainscreen_width-1, 
        mainscreen_height-1); 

    //@Lin.Lin, 2005-2-25, to display background in subscreen when power on
	//edison,由于小屏幕合盖和开盖都是一样的image, 因此修改
	if(LCD_IsExistSubLcd())
	{
		GUI_DisplayStaticBmp(SUBLCD_ID, 0, 0, IMAGE_SUBLCD_ICON_BG);	//临时替换,应使用子屏背景图
		LCD_InvalidateRect(SUBLCD_ID, 0, 0, sublcd_rect.right, sublcd_rect.bottom);
	}

    // 因为MMIDEFAULT_SetLcdBackLight函数中会调用MMITHEME_UpdateRect函数
    // MMIDEFAULT_SetLcdBackLight(TRUE);
    MMIDEFAULT_DirectSetLcdLightTrue();

//    #ifndef WIN32
    SCI_TRACE_LOW("DisplayInitImage: time = %d", SCI_GetTickCount());
//    #endif
}



/*-------------------------------------------------------------------------*/
/*                         FUNCTIONS                                       */
/*-------------------------------------------------------------------------*/

/*****************************************************************************/
//  Description : register the MN signal and callback function  
//  Global resource dependence : 
//                             
//  Author:
//  Note: 
/*****************************************************************************/
LOCAL void APP_RegisterPsService( void )
{
    //Register phone event
    SCI_RegisterMsg( MN_APP_PHONE_SERVICE, 
        EV_MN_APP_NETWORK_STATUS_IND_F, 
        MAX_MN_APP_PHONE_EVENTS_NUM - 1, 
        SCI_NULL);
    SCI_TRACE_LOW("Phone event is registered successfully");
    //Register call event
    SCI_RegisterMsg( MN_APP_CALL_SERVICE, 
        EV_MN_APP_CALL_START_IND_F, 
        MAX_MN_APP_CALL_EVENTS_NUM - 1, 
        SCI_NULL); 
    SCI_TRACE_LOW("call event is registered successfully");
    //Register sms event
    SCI_RegisterMsg( MN_APP_SMS_SERVICE, 
        EV_MN_APP_SMS_READY_IND_F, 
        MAX_MN_APP_SMS_EVENTS_NUM - 1, 
        SCI_NULL); 
    SCI_TRACE_LOW("sms event is registered successfully");
    //Register smscb event
    SCI_RegisterMsg( MN_APP_SMSCB_SERVICE, 
        EV_MN_APP_SMSCB_MSG_IND_F, 
        MAX_MN_APP_SMSCB_EVENTS_NUM - 1, 
        SCI_NULL);
    SCI_TRACE_LOW("smscb event is registered successfully");
    //Register ss event
    SCI_RegisterMsg( MN_APP_SS_SERVICE, 
        EV_MN_APP_BEGIN_REGISTER_SS_F, 
        MAX_MN_APP_SS_EVENTS_NUM - 1, 
        SCI_NULL); 
    SCI_TRACE_LOW("ss event is registered successfully");
    //Register SIM event
    SCI_RegisterMsg( MN_APP_SIM_SERVICE, 
        EV_MN_APP_MSISDN_UPDATE_CNF_F, 
        MAX_MN_APP_SIM_EVENTS_NUM - 1, 
        SCI_NULL); 
    SCI_TRACE_LOW("SIM event is registered successfully");
    //Register STK event
    SCI_RegisterMsg( MN_APP_SIMAT_SERVICE,
        EV_MN_APP_SIMAT_DISPLAY_TEXT_IND_F, 
        SIMAT_EVENT_NUM - 1, 
        SCI_NULL );
	SCI_RegisterMsg( MN_APP_SIMAT_SERVICE,
        EV_MN_APP_REGISTER_SS_CNF_F, 
        MAX_MN_APP_SS_EVENTS_NUM - 1, 
        SCI_NULL );
	SCI_TRACE_LOW("STK event is registered successfully");
	//add by figo.feng 2004.09.24
	SCI_RegisterMsg(MN_APP_GPRS_SERVICE,
		        EV_MN_APP_SET_PDP_CONTEXT_CNF_F,
		        MAX_MN_APP_GPRS_EVENTS_NUM - 1,
		        SCI_NULL); 
    SCI_TRACE_LOW("GPRS_SERVICE event is registered successfully");
}

/*****************************************************************************/
//  Description : register the REF signal and callback function  
//  Global resource dependence : 
//                             
//  Author:
//  Note: 
/*****************************************************************************/
LOCAL void APP_RegisterRefService( void )
{
    //Register key event
    SCI_RegisterMsg( KEYPAD_SERVICE, 
        KPD_DOWN, 
        KPD_UP, 
        KeypadCallBackFunc);

    //Register TIME and ALARM event
    SCI_RegisterMsg( TIME_SERVICE, 
			   MISC_MSG_RTC_MIN, 
			   MISC_MSG_MAX - 1, 		
			   SCI_NULL);    

    //Register CHARGE event
    SCI_RegisterMsg( CHR_SERVICE, 
		        CHR_CAP_IND, 
		        CHR_MSG_MAX_NUM - 1, 
		        ChargeCallBackFunc);
    
    //Register UDISK event
#ifndef WIN32 
    SCI_RegisterMsg( UDISK_SERVICE, 
		        UDISK_PLUGIN, 
		        UDISK_MSG_MAX - 1, 
		        UdiskCallBackFunc);

    //Register record(录音) event
    SCI_RegisterMsg( AUDIO_SERVICE, 
		        AUDIO_SUCCESS, 
		        MAX_AUDIO_EVENTS_NUM - 1, 
		        SCI_NULL);
#endif
}

/*****************************************************************************/
//  Description : handle charge call back function
//  Global resource dependence :                     
//  Author: Jassmine.Meng
//  Note: 
/*****************************************************************************/
LOCAL void ChargeCallBackFunc(
                              uint32    taskid,		// the client's task id
                              uint32	event_id,	// the event type
                              void	    *param_ptr	// data follow the even
                              )
{
    uint16                signal_size;  
    uint16                signal_code;
    xSignalHeaderRec      *signal_ptr = PNULL;

    switch (event_id)
    {
	case CHR_CAP_IND :
		SCI_TRACE_LOW("Receive CHR_CAP_IND");
        signal_code = CHR_CAP_IND;
        signal_size = sizeof(xSignalHeaderRec);
		break;

	case CHR_CHARGE_START_IND:
		SCI_TRACE_LOW("Receive CHR_CHARGE_START_IND");
	    signal_code = CHR_CHARGE_START_IND;
        signal_size = sizeof(xSignalHeaderRec);
		break;

	case CHR_CHARGE_END_IND:
		SCI_TRACE_LOW("Receive CHR_CHARGE_END_IND");
		signal_code = CHR_CHARGE_END_IND;
        signal_size = sizeof(xSignalHeaderRec);
		break;

	case CHR_WARNING_IND:
		SCI_TRACE_LOW("Receive CHR_WARNING_IND");
		signal_code = CHR_WARNING_IND;
        signal_size = sizeof(xSignalHeaderRec);
		break;

	case CHR_SHUTDOWN_IND:
		SCI_TRACE_LOW("Receive CHR_SHUTDOWN_IND");
		signal_code = CHR_SHUTDOWN_IND;
        signal_size = sizeof(xSignalHeaderRec);
		break;

    case CHR_CHARGE_FINISH:
        SCI_TRACE_LOW("Receive CHR_CHARGE_FINISH");
        signal_code = CHR_CHARGE_FINISH;
        signal_size = sizeof(xSignalHeaderRec);
        break;

    case CHR_CHARGE_DISCONNECT:
        SCI_TRACE_LOW("Receive CHR_CHARGE_DISCONNECT");
        signal_code = CHR_CHARGE_DISCONNECT;
        signal_size = sizeof(xSignalHeaderRec);
        break;

	default :
        SCI_TRACE_LOW("ChargeCallBackFunc:event_id = %d",event_id);
		return;
        break;
	}

    MMI_CREATE_SIGNAL(signal_ptr,signal_code,signal_size,SCI_IdentifyThread());

    // Send the signal to the dedicated task's queue
    MMI_SEND_SIGNAL((xSignalHeaderRec*)signal_ptr, taskid);
}

/*****************************************************************************/
//  Description : handle udisk call back function
//  Global resource dependence :                          
//  Author: Jassmine.Meng
//  Note: 
/*****************************************************************************/
LOCAL void UdiskCallBackFunc(
                              uint32    taskid,		// the client's task id
                              uint32	event_id,	// the event type
                              void	    *param_ptr	// data follow the even
                              )
{
    uint16                signal_size;  
    uint16                signal_code;
    xSignalHeaderRec      *signal_ptr = PNULL;

    switch (event_id)
    {
    case UDISK_PLUGIN :
		SCI_TRACE_LOW("Receive UDISK_PLUGIN");
        signal_code = UDISK_PLUGIN;
        signal_size = sizeof(xSignalHeaderRec);

	    MMI_CREATE_SIGNAL(signal_ptr,signal_code,signal_size,SCI_IdentifyThread());

	    // Send the signal to the dedicated task's queue
	    MMI_SEND_SIGNAL((xSignalHeaderRec*)signal_ptr, taskid);
		break;

	case UDISK_PLUGOUT :
		SCI_TRACE_LOW("Receive UDISK_PLUGOUT");
        signal_code = UDISK_PLUGOUT;
        signal_size = sizeof(xSignalHeaderRec);

        MMI_CREATE_SIGNAL(signal_ptr,signal_code,signal_size,SCI_IdentifyThread());

        // Send the signal to the dedicated task's queue
        MMI_SEND_SIGNAL((xSignalHeaderRec*)signal_ptr, taskid);
		break;

    case UDISK_START_CNF:
        break;

    case UDISK_STOP_CNF:
        break;

    case UDISK_FAIL:
        SCI_TRACE_LOW("Receive UDISK_FAIL");
        signal_code = UDISK_FAIL;
        signal_size = sizeof(xSignalHeaderRec);

        MMI_CREATE_SIGNAL(signal_ptr,signal_code,signal_size,SCI_IdentifyThread());

        // Send the signal to the dedicated task's queue
        MMI_SEND_SIGNAL((xSignalHeaderRec*)signal_ptr, taskid);
        break;

	default :
        SCI_TRACE_LOW("UdiskCallBackFunc:event_id = %d",event_id);
        break;
	}
}

/*****************************************************************************/
// 	Description : init MMK
//                MMI Message
//	Global resource dependence : 
//  Author:Louis wei

⌨️ 快捷键说明

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