Esempio n. 1
0
/********************************************************************************
//FUNCTION:
//		FT_DispatchMessage
//DESCRIPTION:
//		this function is called to switch the testcase, del the header of peer buf.
//
//PARAMETERS:
//		Local_buf:	[IN]	local buf (cnf cmd)
//		Local_len: 	[IN]	local buf size
//		pPeerBuf		[IN]	peer buff
//		Peer_len:		[IN]	peer buff size
//RETURN VALUE:
//		TRUE is success, otherwise is fail
//
//DEPENDENCY:
//		the FT module must have been loaded.
//
//GLOBALS AFFECTED
//		None
********************************************************************************/
void FT_DispatchMessage(void *pLocalBuf, void *pPeerBuf, int local_len, int peer_len)
{
    FT_H  *ft_header;
    ft_header =(FT_H *)pLocalBuf;
    kal_int16 ft_peer_len = peer_len -8;	//del the size of peer buf header
    char *pft_PeerBuf = (char *)pPeerBuf;
    
    pft_PeerBuf += 8; // skip the header of peer buffer
    
    FT_LOG("[FTT_Drv:] FTMainThread ID : %d ", ft_header->id);
    
    switch (ft_header->id)
    {
        case FT_IS_ALIVE_REQ_ID:				//test alive
            FT_TestAlive((FT_IS_ALIVE_REQ *)pLocalBuf);
            break;
        #ifdef FT_WIFI_FEATURE
        case FT_WIFI_REQ_ID:					//wifi test
            FT_WIFI_OP((FT_WM_WIFI_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        #endif
        case FT_SDCARD_REQ_ID:                  //sdcard test
            FT_SDcard_OP((SDCARD_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_READ_REQ_ID:				//nvram read
            FT_APEditorRead_OP((FT_AP_Editor_read_req *)pLocalBuf);
            break;
        case FT_NVRAM_WRITE_REQ_ID:				//nvram write
            FT_APEditorWrite_OP((FT_AP_Editor_write_req *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_RESET_REQ_ID:				//nvram reset
            FT_APEditorReset_OP((FT_AP_Editor_reset_req *)pLocalBuf);
            break;
        case FT_GPIO_REQ_ID:
            FT_GPIO_OP((GPIO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_VER_INFO_REQ_ID:				//get version info
            FT_GetVersionInfo((FT_VER_INFO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        /*
        case FT_CHECK_META_VER_REQ_ID:			//require meta dll version
            FT_CheckMetaDllVersion((FT_CHECK_META_VER_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        */
        case FT_POWER_OFF_REQ_ID:				//power off target
            FT_PowerOff((FT_POWER_OFF_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_REG_WRITE_ID:					//baseband reg wirte
            FT_CPURegW_OP((FT_REG_WRITE_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_REG_READ_ID:					//baseband reg read
            FT_CPURegR_OP((FT_REG_READ_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_CCT_REQ_ID:
            FT_CCAP_OP((FT_CCT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_UTILITY_COMMAND_REQ_ID:			//utility command
            FT_Peripheral_OP((FT_UTILITY_COMMAND_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_PMIC_REG_READ_ID:				//pmic read
            FT_PMICRegR_OP((FT_PMIC_REG_READ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_PMIC_REG_WRITE_ID:				//pmic write
            FT_PMICRegW_OP((FT_PMIC_REG_WRITE *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
    #ifdef FT_BT_FEATURE 
        case FT_BT_REQ_ID:						//bt test
            FT_BT_OP((BT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#endif
        /*
        case FT_WM_DVB_REQ_ID:					//dvb test
            FT_DVBT_OP((FT_DVB_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_WM_BAT_REQ_ID:
            FT_BAT_OP((FT_BATT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        */
        case FT_ADC_GETMEADATA_ID:				//adc test
            FT_AUXADC_OP((AUXADC_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#ifdef FT_GPS_FEATURE		
        case FT_GPS_REQ_ID:
            FT_GPS_OP((GPS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
    #endif
        case FT_BATT_READ_INFO_REQ_ID:
            FT_BAT_FW_OP((FT_BATT_READ_INFO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_BAT_CHIPUPDATE_REQ_ID:
            FT_BAT_ChipUpdate_OP((FT_BATT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#ifdef FT_FM_FEATURE 	
        case FT_FM_REQ_ID:
            FT_FM_OP((FM_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#endif
        case FT_L4AUD_REQ_ID:
            FT_L4AUDIO_OP((FT_L4AUD_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_LOW_POWER_REQ_ID:
            FT_LOW_POWER_OP((FT_LOW_POWER_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_BACKUP_REQ_ID:
            FT_NVRAM_Backup_OP((FT_NVRAM_BACKUP_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_RESTORE_REQ_ID:
            FT_NVRAM_Restore_OP((FT_NVRAM_RESTORE_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GSENSOR_REQ_ID:
            FT_GSENSOR_OP((GS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_MATV_CMD_REQ_ID:
        #ifdef FT_MATV_FEATURE		
            FT_MATV_OP((FT_MATV_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
		#else
            FT_MATV_CNF matv_cnf;
	       memset(&matv_cnf, 0, sizeof(FT_MATV_CNF));
           matv_cnf.header.id = FT_MATV_CMD_CNF_ID;
	       matv_cnf.header.token = ((FT_MATV_REQ *)pLocalBuf)->header.token;
           matv_cnf.status = META_NOT_SUPPORT;
           matv_cnf.type = ((FT_MATV_REQ *)pLocalBuf)->type;
		  WriteDataToPC(&matv_cnf, sizeof(matv_cnf), NULL, 0);
        #endif
            break;
        // Reboot device
        case FT_REBOOT_REQ_ID:
        FT_Reboot((FT_META_REBOOT_REQ *)pLocalBuf);
        break;
        case FT_CUSTOMER_REQ_ID:
            FT_CUSTOMER_OP((FT_CUSTOMER_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GET_CHIPID_REQ_ID:
            FT_GET_CHIPID_OP((FT_GET_CHIPID_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_MSENSOR_REQ_ID:
            FT_MSENSOR_OP((FT_MSENSOR_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_ALSPS_REQ_ID:
            FT_ALSPS_OP((FT_ALSPS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GYROSCOPE_REQ_ID:
            FT_GYROSENSOR_OP((GYRO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
		// Touch panel
		case FT_CTP_REQ_ID:
			FT_CTP_OP((Touch_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
		break;
	// Get version info V2
    	case FT_VER_INFO_V2_REQ_ID:
        	FT_GetVersionInfoV2((FT_VER_INFO_V2_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
        	break;
        	
        #ifdef FT_NFC_FEATURE
        case FT_NFC_REQ_ID:
               FT_NFC_OP((NFC_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
               break;
        #endif
    #ifdef FT_EMMC_FEATURE
		case FT_EMMC_REQ_ID:
			FT_CLR_EMMC_OP((FT_EMMC_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		case FT_CRYPTFS_REQ_ID:
			FT_CRYPTFS_OP((FT_CRYPTFS_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		#endif
		
		case FT_BUILD_PROP_REQ_ID:
			FT_BUILD_PROP_OP((FT_BUILD_PROP_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		case FT_MODEM_REQ_ID:
			FT_MODEM_INFO_OP((FT_MODEM_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;

		case FT_SIM_NUM_REQ_ID:
			FT_SIM_NUM_OP((FT_GET_SIM_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		case FT_DFO_REQ_ID:
			FT_DFO_OP((FT_DFO_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		case FT_ADC_REQ_ID:
			FT_ADC_OP((ADC_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
			break;
        default:
            //printf((TEXT("[FTT_Drv:] FTMainThread Error:!!! ID: %hu "), ft_header->id));
            FT_LOG("[FTT_Drv:] FTMainThread Error:!!! ID ");
        break;
    }
}
/********************************************************************************
//FUNCTION:
//		FT_DispatchMessage
//DESCRIPTION:
//		this function is called to switch the testcase, del the header of peer buf.
//
//PARAMETERS:
//		Local_buf:	[IN]	local buf (cnf cmd)
//		Local_len: 	[IN]	local buf size
//		pPeerBuf		[IN]	peer buff
//		Peer_len:		[IN]	peer buff size
//RETURN VALUE:
//		TRUE is success, otherwise is fail
//
//DEPENDENCY:
//		the FT module must have been loaded.
//
//GLOBALS AFFECTED
//		None
********************************************************************************/
void FT_DispatchMessage(void *pLocalBuf, void *pPeerBuf, int local_len, int peer_len)
{
    FT_H  *ft_header;
    ft_header =(FT_H *)pLocalBuf;
    kal_int16 ft_peer_len = peer_len -8;	//del the size of peer buf header
    char *pft_PeerBuf = (char *)pPeerBuf;
    
    pft_PeerBuf += 8; // skip the header of peer buffer
    
    FT_LOG("[FTT_Drv:] FTMainThread ID : %d ", ft_header->id);
    
    switch (ft_header->id)
    {

        case FT_IS_ALIVE_REQ_ID:				//test alive
            FT_TestAlive((FT_IS_ALIVE_REQ *)pLocalBuf);
            break;
        #ifdef FT_WIFI_FEATURE
        case FT_WIFI_REQ_ID:					//wifi test
            FT_WIFI_OP((FT_WM_WIFI_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        #endif
        case FT_SDCARD_REQ_ID:                  //sdcard test
            FT_SDcard_OP((SDCARD_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_READ_REQ_ID:				//nvram read
            FT_APEditorRead_OP((FT_AP_Editor_read_req *)pLocalBuf);
            break;
        case FT_NVRAM_WRITE_REQ_ID:				//nvram write
            FT_APEditorWrite_OP((FT_AP_Editor_write_req *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_RESET_REQ_ID:				//nvram reset
            FT_APEditorReset_OP((FT_AP_Editor_reset_req *)pLocalBuf);
            break;
	case FT_VER_INFO_REQ_ID:				//get version info
            FT_GetVersionInfo((FT_VER_INFO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GPIO_REQ_ID:
            FT_GPIO_OP((GPIO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;

        /*
        case FT_CHECK_META_VER_REQ_ID:			//require meta dll version
            FT_CheckMetaDllVersion((FT_CHECK_META_VER_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        */
        case FT_POWER_OFF_REQ_ID:				//power off target
            FT_PowerOff();
            break;
        case FT_REG_WRITE_ID:					//baseband reg wirte
            FT_CPURegW_OP((FT_REG_WRITE_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_REG_READ_ID:					//baseband reg read
            FT_CPURegR_OP((FT_REG_READ_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_CCT_REQ_ID:
            FT_CCAP_OP((FT_CCT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;

        case FT_UTILITY_COMMAND_REQ_ID:			//utility command
            FT_Peripheral_OP((FT_UTILITY_COMMAND_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
    #ifdef FT_BT_FEATURE 
        case FT_BT_REQ_ID:						//bt test
            FT_BT_OP((BT_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#endif
        case FT_ADC_GETMEADATA_ID:				//adc test
            FT_AUXADC_OP((AUXADC_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#ifdef FT_GPS_FEATURE		
        case FT_GPS_REQ_ID:
            FT_GPS_OP((GPS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
    #endif
	#ifdef FT_FM_FEATURE 	
        case FT_FM_REQ_ID:
            FT_FM_OP((FM_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
	#endif
        case FT_L4AUD_REQ_ID:
            FT_L4AUDIO_OP((FT_L4AUD_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_BACKUP_REQ_ID:
            FT_NVRAM_Backup_OP((FT_NVRAM_BACKUP_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_NVRAM_RESTORE_REQ_ID:
            FT_NVRAM_Restore_OP((FT_NVRAM_RESTORE_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GSENSOR_REQ_ID:
            FT_GSENSOR_OP((GS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_META_MODE_LOCK_REQ_ID:
            FT_META_MODE_LOCK((FT_META_MODE_LOCK_REQ *)pLocalBuf);
            break;
        #ifdef FT_MATV_FEATURE		
        case FT_MATV_CMD_REQ_ID:
            FT_MATV_OP((FT_MATV_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        #endif		
        case FT_REBOOT_REQ_ID:
        FT_Reboot((FT_META_REBOOT_REQ *)pLocalBuf);
        break;
        case FT_CUSTOMER_REQ_ID:
            FT_CUSTOMER_OP((FT_CUSTOMER_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GET_CHIPID_REQ_ID:
            FT_GET_CHIPID_OP((FT_GET_CHIPID_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_MSENSOR_REQ_ID:
            FT_MSENSOR_OP((FT_MSENSOR_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_ALSPS_REQ_ID:
            FT_ALSPS_OP((FT_ALSPS_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
        case FT_GYROSCOPE_REQ_ID:
            FT_GYROSENSOR_OP((GYRO_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
            break;
		case FT_CTP_REQ_ID:
			FT_CTP_OP((Touch_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
		break;
    	case FT_VER_INFO_V2_REQ_ID:
        	FT_GetVersionInfoV2((FT_VER_INFO_V2_REQ *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
        	break;
#ifdef FT_CMMB_FEATURE
	case FT_CMMB_REQ_ID:
		FT_CMMB_OP((MetaCmmbReq *)pLocalBuf, (char *)pft_PeerBuf, ft_peer_len);
		break;
#endif
		case FT_BUILD_PROP_REQ_ID:
			FT_BUILD_PROP_OP((FT_BUILD_PROP_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		#ifdef FT_EMMC_FEATURE
		case FT_EMMC_REQ_ID:
			FT_CLR_EMMC_OP((FT_EMMC_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		case FT_CRYPTFS_REQ_ID:
			FT_CRYPTFS_OP((FT_CRYPTFS_REQ *)pLocalBuf,(char *)pft_PeerBuf, ft_peer_len);
			break;
		#endif
        default:
            FT_LOG("[FTT_Drv:] FTMainThread Error:!!! ID ");
        break;
    }
}
void FT_DispatchMessage(ilm_struct* ptrMsg)
{
    FT_H  *ft_header;
    ft_header=(FT_H *)(ptrMsg->local_para_ptr);
    if( (ptrMsg->src_mod_id == MOD_TST_READER) )
    {
        ft_gl_token=ft_header->token;
#ifdef __TOOL_ACCESS_CTRL__
        // if it's not basic META mode operation, check the limited operation state
        if(!FT_META_IsBasicOperation(ft_header->ft_msg_id))
        {
            // check if the operation is allowed
            if(KAL_TRUE != Custom_META_IsAllowedLimitedStateOperation(ptrMsg))
            {
                return;
            }
        }
#endif // #ifdef __TOOL_ACCESS_CTRL__
        switch (ft_header->ft_msg_id)
        {
            /********************************************
             * L1 RF test functionality
             ********************************************/
            case FT_RF_TEST_REQ_ID:
            {
                FT_FtRfTestReq((ft_rf_test_req_T*)ptrMsg->local_para_ptr, ptrMsg->peer_buff_ptr);
                break;
            }
            /********************************************
             * BB test functionality
             ********************************************/
            case FT_REG_READ_ID:
            {
                FT_FtRegisterRead((ft_RegisterRead_req_T*)ptrMsg->local_para_ptr,FT_BaseBandReg);
                break;
            }
            case FT_REG_WRITE_ID:
            {
                FT_FtRegisterWrite((ft_RegisterWrite_req_T*)ptrMsg->local_para_ptr,FT_BaseBandReg);
                break;
            }
            case FT_PMIC_REG_READ_ID:
            {
                FT_FtPMICRegisterRead((ft_PMICRegisterRead_req_T*)ptrMsg->local_para_ptr,FT_PMICReg);
                break;
            }
            case FT_PMIC_REG_WRITE_ID:
            {
                FT_FtPMICRegisterWrite((ft_PMICRegisterWrite_req_T*)ptrMsg->local_para_ptr,FT_PMICReg);
                break;
            }
            case FT_ADC_GETMEADATA_ID:
            {
                FT_FtADC_GetMeaData((ft_FtADC_GetMeaData_req_T*)ptrMsg->local_para_ptr);
                break;
            }
            /********************************************
             * UL1 RF test functionality
             ********************************************/
#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
            case FT_URF_TEST_REQ_ID:
            {
                if(KAL_TRUE == UL1_IS_3G_FDD_EXIST())  //20130206
                {
                FT_FtURfTestReq( (ft_urf_test_req_T*)ptrMsg->local_para_ptr, ptrMsg->peer_buff_ptr );
                }
                else
                {
                    sprintf(g_FT_debug_buf, "[FT_DispatchMessage][FT_URF_TEST_REQ_ID] HW FDD does not exist.");
            	  tst_sys_trace(g_FT_debug_buf);
                }    
                break;
            }
#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
            /********************************************
             *
             *  NVRAM functionality
             *
             ********************************************/
            case FT_NVRAM_GET_DISK_INFO_REQ_ID:
            {
                ilm_struct ptr_ilm;
                FT_NVRAM_GET_DISK_INFO_CNF *ptr_loc_para;
                // store nvram token id, because any of NVRAM command won't return immediately.
                ft_gl_nvram_token = ft_header->token;
                FT_ALLOC_OTHER_MSG(&ptr_ilm,sizeof(FT_NVRAM_GET_DISK_INFO_CNF));                
                ptr_loc_para=(FT_NVRAM_GET_DISK_INFO_CNF *)(ptr_ilm.local_para_ptr);
                /* if ptr_ilm != NULL*/
                ptr_loc_para->header.ft_msg_id=FT_NVRAM_GET_DISK_INFO_CNF_ID;
#if defined(__MOD_NVRAM__)
                if(nvram_get_disk_file_info(&(ptr_loc_para->diskfilesize), &(ptr_loc_para->freespace), &(ptr_loc_para->overhead))) {
                    ptr_loc_para->status = 0;
                }
                else {
                    ptr_loc_para->diskfilesize = 0;
                    ptr_loc_para->freespace = 0;
                    ptr_loc_para->overhead = 0;
                    ptr_loc_para->status = 1;
                }
#endif // #if defined(__MOD_NVRAM__)
                /* FT_SEND_MSG(src_mod, dest_mod, sap_id, msg_id, ilm_ptr) */
                FT_SEND_MSG(MOD_FT, MOD_TST, FT_TST_SAP, MSG_ID_FT_TO_TST, &ptr_ilm);
                break;
            }
            case FT_NVRAM_RESET_REQ_ID:
            {   
                ilm_struct ptr_ilm;
                nvram_reset_req_struct *ptr_loc_para;
                // store nvram token id, because any of NVRAM command won't return immediately.
                ft_gl_nvram_token = ft_header->token;
                FT_ALLOC_OTHER_MSG(&ptr_ilm,sizeof( nvram_reset_req_struct));
                /* if ptr_ilm != NULL*/
                ptr_loc_para=(nvram_reset_req_struct *)(ptr_ilm.local_para_ptr);

                if( ((ft_nvram_reset_req_struct_T*)ptrMsg->local_para_ptr)->reset_category == 0) // reset all
                {

                    ptr_loc_para->reset_category= NVRAM_RESET_ALL; 
                } 
                else if( ((ft_nvram_reset_req_struct_T*)ptrMsg->local_para_ptr)->reset_category == 3) // reset certain
                {

                    ptr_loc_para->reset_category= NVRAM_RESET_CERTAIN; 
                } 
                else if( ((ft_nvram_reset_req_struct_T*)ptrMsg->local_para_ptr)->reset_category == 4) // reset factory
                {
                    ptr_loc_para->reset_category= NVRAM_RESET_FACTORY; 
                }
                else
                {
                    destroy_ilm(&ptr_ilm);
                    break; // directly break!, Let PC side timeout!
                }
                ptr_loc_para->app_id = NVRAM_APP_RESERVED;
                ptr_loc_para->LID=((ft_nvram_reset_req_struct_T*)ptrMsg->local_para_ptr)->file_idx;
                /* FT_SEND_MSG(src_mod, dest_mod, sap_id, msg_id, ilm_ptr) */
                FT_SEND_MSG(MOD_FT, MOD_NVRAM, PS_NVRAM_SAP, MSG_ID_NVRAM_RESET_REQ, &ptr_ilm);
                break;
            }
            case FT_NVRAM_READ_REQ_ID:
            {
                // store nvram token id, because any of NVRAM command won't return immediately.
                ft_gl_nvram_token = ft_header->token;
                FT_ReadFrom_NVRAM((ft_nvram_read_req_struct_T*)ptrMsg->local_para_ptr);
                break;
            }
            case FT_NVRAM_WRITE_REQ_ID:
            {
                ft_nvram_write_req_struct_T  *ptr_msg = (ft_nvram_write_req_struct_T*)( ptrMsg->local_para_ptr );
                // store nvram token id, because any of NVRAM command won't return immediately.
                ft_gl_nvram_token = ft_header->token;
                FT_WriteTo_NVRAM(ptr_msg,ptrMsg->peer_buff_ptr, ptrMsg);
                // ptrMsg->peer_buff_ptr=NULL;/* make sure the NVRAM will release the mem*/
                break;
            }
            case FT_NVRAM_LOCK_REQ_ID:
            {
                ilm_struct ptr_ilm;
                nvram_set_lock_req_struct *ptr_loc_para;
                ft_nvram_lock_req_struct_T  *ptr_msg = (ft_nvram_lock_req_struct_T *)(ptrMsg->local_para_ptr);
                // store nvram token id, because NVRAM command won't return immediately.
                ft_gl_nvram_token = ft_header->token;
                FT_ALLOC_OTHER_MSG(&ptr_ilm, sizeof(nvram_set_lock_req_struct));
                /* if ptr_ilm != NULL*/
                ptr_loc_para=(nvram_set_lock_req_struct *)(ptr_ilm.local_para_ptr);
                // if OTP lock or NVRAM lock
                if( NVRAM_LOCK_OTP == ptr_msg->lock_en ) {
                    ptr_loc_para->lock_en = NVRAM_LOCK_OTP;
                }
                else {
                    ptr_loc_para->lock_en = NVRAM_LOCK_ENABLE;
                }
                /* FT_SEND_MSG(src_mod, dest_mod, sap_id, msg_id, ilm_ptr) */
                FT_SEND_MSG(MOD_FT, MOD_NVRAM, PS_NVRAM_SAP, MSG_ID_NVRAM_SET_LOCK_REQ, &ptr_ilm);
                break;
            }
            /********************************************
             *
             *  FAT functionality
             *
             ********************************************/
            case FT_FAT_OPERATION_ID:
            {
                FT_FAT_Operation((FT_FAT_OPERATION *)ptrMsg->local_para_ptr, ptrMsg->peer_buff_ptr);
                break;
            }
            /********************************************
             *
             *  Version Info functionality
             *
             ********************************************/
            case FT_VER_INFO_REQ_ID:
            {
                FT_GetVersionInfo();
                break;
            }

            /********************************************
             *
             *  FT task test alive
             *
             ********************************************/
            case FT_IS_ALIVE_REQ_ID:
            {
                FT_TestAlive();
                break;
            }
            /********************************************
             *
             *  FT task Power Off
             *
             ********************************************/
            case FT_POWER_OFF_REQ_ID:
            {
                FT_PowerOff();
                break;
            }
            /********************************************
             *
             *  FT task utility command
             *
             ********************************************/
            case FT_UTILITY_COMMAND_REQ_ID:
            {
                FT_UtilityCommand(ptrMsg);
                break;
            }
            /********************************************
             *
             *  Misc utility command
             *
             ********************************************/
            case FT_MISC_CMD_REQ_ID:
            {
                FT_MISC_Operation(ptrMsg);
                break;
            }

            /********************************************
             *
             *  Misc EX utility command
             *
             ********************************************/
            case FT_MISC_EX_CMD_REQ_ID:
            {
                FT_MISC_EX_Operation(ptrMsg);
                break;
            }
            case FT_CUSTOM_REQ_ID:
            {
                // send message to FTC task
                ft_gl_customer_token = ft_header->token;
                FT_Custom_Operation(ptrMsg);
                break;
            }
#if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)
            case FT_AUX_REQ_ID:
            {
                if(KAL_TRUE == tl1_is_tdd_hw_exist())  //20130206
                {
                // send message to FTA task
                ft_gl_customer_token = ft_header->token;
                FT_Aux_Operation(ptrMsg);
                }
                else
                {
                    sprintf(g_FT_debug_buf, "[FT_DispatchMessage][FT_AUX_REQ_ID] HW TDD does not exist.");
            	  tst_sys_trace(g_FT_debug_buf);
                }               
                break;
            }
#endif // #if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)
            default:
            break;
        }
    }
    else if( (ptrMsg->src_mod_id == MOD_FTC) )
    {
        ft_gl_token = ft_gl_customer_token;
        FT_Handle_FTC_CNF(ptrMsg);
        ptrMsg->peer_buff_ptr=NULL; /* make sure the TST will release the mem*/
    }
#if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)
    else if( (ptrMsg->src_mod_id == MOD_FTA) )
    {
        ft_gl_token = ft_gl_customer_token;
        FT_Handle_FTA_CNF(ptrMsg);
        ptrMsg->peer_buff_ptr=NULL; /* make sure the TST will release the mem*/
    }
#endif // #if defined(__UMTS_TDD128_MODE__) && defined(__AST_TL1_TDD__)

#if defined(__MOD_NVRAM__)

    else if( (ptrMsg->src_mod_id == MOD_NVRAM) )
    {
       switch (ptrMsg->msg_id)
       {
           case MSG_ID_NVRAM_READ_CNF:
           {
               nvram_read_cnf_struct *msg_ptr = NULL;
               // restore the previous token id to ft_gl_token, ft_gl_token will be used in FT_SEND_MSG().
               ft_gl_token = ft_gl_nvram_token;
               msg_ptr=(nvram_read_cnf_struct*)ptrMsg->local_para_ptr;
               FT_ReadFrom_NVRAM_CNF(msg_ptr, ptrMsg->peer_buff_ptr );
               ptrMsg->peer_buff_ptr=NULL; /* make sure the TST will release the mem*/
               break;
           }
#if defined(__MOD_NVRAM__)&& defined(__SYSDRV_BACKUP_DISK_RAW__)
           case MSG_ID_NVRAM_CREATE_IMAGE_CNF:
           case MSG_ID_NVRAM_VERIFY_IMAGE_CNF:
           {
               FT_Handle_CNF_From_NVRAM(ptrMsg);
               break;
           }
#endif // #if defined(__MOD_NVRAM__)&& defined(__SYSDRV_BACKUP_DISK_RAW__)

           case MSG_ID_NVRAM_WRITE_CNF:
           {
               nvram_write_cnf_struct*  msg_ptr = NULL;
               // restore the previous token id to ft_gl_token, ft_gl_token will be used in FT_SEND_MSG().
               ft_gl_token = ft_gl_nvram_token;
               msg_ptr=(nvram_write_cnf_struct*)ptrMsg->local_para_ptr;
               FT_WriteTo_NVRAM_CNF(msg_ptr);
               break;
           }
           case MSG_ID_NVRAM_RESET_CNF:
           {
               nvram_reset_cnf_struct*       msg_ptr;
               ilm_struct                    ilm_ptr;
               ft_nvram_reset_cnf_struct_T*  pMsg;
               // restore the previous token id to ft_gl_token, ft_gl_token will be used in FT_SEND_MSG().
               ft_gl_token = ft_gl_nvram_token;
               msg_ptr=(nvram_reset_cnf_struct*)ptrMsg->local_para_ptr;
               FT_ALLOC_MSG(&ilm_ptr, sizeof(ft_nvram_reset_cnf_struct_T));
               /* if ptrMsg != NULL*/
               pMsg=(ft_nvram_reset_cnf_struct_T*)ilm_ptr.local_para_ptr;
               pMsg->header.ft_msg_id=FT_NVRAM_RESET_CNF_ID;
               pMsg->status = msg_ptr->result;
               /* FT_SEND_MSG(src_mod, dest_mod, sap_id, msg_id, ilm_ptr) */
               FT_SEND_MSG(MOD_FT, MOD_TST, FT_TST_SAP, MSG_ID_FT_TO_TST, &ilm_ptr);
               break;
           }
           case MSG_ID_NVRAM_SET_LOCK_CNF:
           {
               nvram_set_lock_cnf_struct*    msg_ptr;
               ilm_struct                    ilm_ptr;
               ft_nvram_lock_cnf_struct_T*   pMsg;
               // restore the previous token id to ft_gl_token, ft_gl_token will be used in FT_SEND_MSG().
               ft_gl_token = ft_gl_nvram_token;
               msg_ptr=(nvram_set_lock_cnf_struct*)ptrMsg->local_para_ptr;
               FT_ALLOC_MSG(&ilm_ptr, sizeof(ft_nvram_lock_cnf_struct_T));
               /* if ptrMsg != NULL*/
               pMsg=(ft_nvram_lock_cnf_struct_T*)ilm_ptr.local_para_ptr;
               pMsg->header.ft_msg_id=FT_NVRAM_LOCK_CNF_ID;
               pMsg->status = msg_ptr->result;
               /* FT_SEND_MSG(src_mod, dest_mod, sap_id, msg_id, ilm_ptr) */
               FT_SEND_MSG(MOD_FT, MOD_TST, FT_TST_SAP, MSG_ID_FT_TO_TST, &ilm_ptr);
               break;
           }
#if defined(__MTK_INTERNAL__)
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif  //#if defined(__MTK_INTERNAL__)
           case MSG_ID_NVRAM_SDS_CNF:
           case MSG_ID_NVRAM_BIN_REGION_CNF:           	
           {
               FT_Handle_CNF_From_NVRAM(ptrMsg);
               break;
           }
           default:
               break;
       }
    }
#endif // end of #if defined(__MOD_NVRAM__)
#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
    else if( (ptrMsg->src_mod_id == MOD_UL1TST) )
    {
       FT_UL1TST_SEND_CNF_BACK(ptrMsg);
    }
#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
    else if(  MOD_L1HISR == ptrMsg->src_mod_id && MSG_ID_L1TASK_WAKEUP == ptrMsg->msg_id )
    {
        /********************************************
         *
         *  Dispatch report from L1
         *
         ********************************************/
        L1T_DispatchReports();
    }
#ifndef SIM_NOT_PRESENT
    else if( (ptrMsg->src_mod_id == MOD_SIM) && (ft_gl_sim_cmd_type != FT_MISC_OP_CHECK_GEMINI_PLUS_SIM_INSERTED))
    {
       switch (ptrMsg->msg_id)
       {
           case MSG_ID_SIM_RESET_CNF:
           {
               FT_MISC_CNF misc_cnf;
               sim_reset_cnf_struct *msg_ptr;
               msg_ptr=(sim_reset_cnf_struct*)ptrMsg->local_para_ptr;
               misc_cnf.type = FT_MISC_OP_CHECK_SIM1_INSERTED;
               misc_cnf.result.m_u1SIMInserted = (kal_bool)msg_ptr->is_sim_inserted; // get SIM inserted status here.  1:insert  , 0: not insert
               misc_cnf.status = FT_CNF_OK;
               FT_MISC_SendCnf(&misc_cnf, NULL);
           }
               break;
           default:
               break;
       }
    }
#ifdef __GEMINI__
    else if((ptrMsg->src_mod_id == MOD_SIM_2) && (ft_gl_sim_cmd_type != FT_MISC_OP_CHECK_GEMINI_PLUS_SIM_INSERTED))
    {
        switch (ptrMsg->msg_id)
        {
            case MSG_ID_SIM_RESET_CNF:
            {
                FT_MISC_CNF misc_cnf;
                sim_reset_cnf_struct *msg_ptr;
                msg_ptr=(sim_reset_cnf_struct*)ptrMsg->local_para_ptr;
                misc_cnf.type = FT_MISC_OP_CHECK_SIM2_INSERTED;
                misc_cnf.result.m_u1SIMInserted = (kal_bool)msg_ptr->is_sim_inserted; // get SIM inserted status here.  1:insert  , 0: not insert
                misc_cnf.status = FT_CNF_OK;
                FT_MISC_SendCnf(&misc_cnf, NULL);
                break;
            }
            default:
                break;
        }
    }
#endif // __GEMINI__
#ifdef GEMINI_PLUS
    else if((ptrMsg->src_mod_id >= MOD_SIM) && (ptrMsg->src_mod_id < MOD_SIM + GEMINI_PLUS) && 
            (ft_gl_sim_cmd_type == FT_MISC_OP_CHECK_GEMINI_PLUS_SIM_INSERTED))
    {
        switch (ptrMsg->msg_id)
        {
            case MSG_ID_SIM_RESET_CNF:
            {
                FT_MISC_CNF misc_cnf;
                sim_reset_cnf_struct *msg_ptr;
                msg_ptr=(sim_reset_cnf_struct*)ptrMsg->local_para_ptr;
                misc_cnf.type = FT_MISC_OP_CHECK_GEMINI_PLUS_SIM_INSERTED;
                misc_cnf.result.m_u1SIMInserted = (kal_bool)msg_ptr->is_sim_inserted; // get SIM inserted status here.  1:insert  , 0: not insert
                misc_cnf.status = FT_CNF_OK;
                FT_MISC_SendCnf(&misc_cnf, NULL);
                break;
            }
            default:
                break;
        }
    }
#endif // GEMINI_PLUS
#endif // SIM_NOT_PRESENT
}