[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/middleware/meta/ft/src/ft_main.c b/mcu/middleware/meta/ft/src/ft_main.c
new file mode 100644
index 0000000..1b505a5
--- /dev/null
+++ b/mcu/middleware/meta/ft/src/ft_main.c
@@ -0,0 +1,1887 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   ft_main.c
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*************************************************************************
+ * Include Statements for KAL
+ *************************************************************************/
+#include "kal_public_defs.h" //MSBB change #include "stack_common.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_msgs.h"
+#ifndef L1_SIM
+#include "task_config.h"
+#endif // #ifndef L1_SIM
+#include "syscomp_config.h"
+#include "md_mw_sap.h"
+#include "mmrf_msgid.h"
+#include "mmrf_msg_interface.h"
+#include "svc_sap.h"
+#include "ft_msgid.h"
+//#include "wndrv_msgid.h"
+#include "l1hisr_msgid.h"
+#include "sim_public_msgid.h"
+#ifdef L1_SIM
+#include "simul_public.h"
+#endif
+/*************************************************************************
+ * System Service header
+ *************************************************************************/
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
+//MSBB remove #include "fctycomp_config.h"
+#include "stdio.h"
+#ifndef L1_SIM
+#include "init.h"
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * NVRAM header
+ *************************************************************************/
+#ifndef L1_SIM
+#include "nvram_data_items.h"
+#include "ft_nvram_def.h"
+#include "nvram_struct.h"
+#include "nvram_enums.h"
+#include "nvram_msgid.h"
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * Custom header
+ *************************************************************************/
+#ifndef L1_SIM
+#include "custom_nvram_config.h"
+#include "custom_equipment.h"
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * HAL header
+ *************************************************************************/
+#ifndef L1_SIM
+#if !defined(__L1_STANDALONE__)
+#include "device.h"  // for GPIO_DEV_LED_MAINLCD and LED_LIGHT_LEVEL5
+#endif
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * FT header
+ *************************************************************************/
+#include "ft_msg.h"
+#include "ft_mem.h"
+#include "ft_private.h"
+#ifndef L1_SIM
+#include "ft_customize.h"
+#endif // #ifndef L1_SIM
+#include "ft_fnc_l1rf.h"
+#ifndef L1_SIM
+#include "ft_fnc_misc.h"
+#include "ft_fnc_misc_ex.h"
+#include "ft_fnc_custom.h"
+#include "ft_fnc_aux.h"
+#endif // #ifndef L1_SIM
+#include "ft_fnc_wcdma.h"
+#include "ft_fnc_tdscdma.h"
+#ifndef L1_SIM
+#include "ft_fnc_fat.h"
+#include "ft_fnc_nvram.h"
+#endif // #ifndef L1_SIM
+#include "ft_fnc_lterf.h"
+#include "ft_fnc_mmrf.h"
+#include "ft_fnc_nrf.h"
+#include "ft_fnc_l4.h"
+#ifndef L1_SIM
+#include "ft_fnc_c2krf.h"
+fp_nvram_read_handler_t FT_ReadFrom_NVRAM             = FT_Nvram_ReadNvramHandler;
+fp_nvram_write_handler_t FT_WriteTo_NVRAM             = FT_Nvram_WriteNvramHandler;
+fp_nvram_read_confirm_handler_t FT_ReadFrom_NVRAM_CNF = FT_Nvram_ReadNvramConfirmHandler;
+fp_nvram_write_confirm_handler_t FT_WriteTo_NVRAM_CNF = FT_Nvram_WriteNvramConfirmHandler;
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * SIM header
+ *************************************************************************/
+#ifndef L1_SIM
+#include "ps2sim_struct.h"
+#endif // #ifndef L1_SIM
+/*************************************************************************
+ * SLA header
+ *************************************************************************/
+#include "meta_sec_support.h"
+/*************************************************************************
+ * Function declaration
+ *************************************************************************/
+void FT_Task(task_entry_struct * task_entry_ptr);
+kal_bool FT_Init(void);
+extern void L1T_DispatchReports(void);
+kal_uint16   ft_gl_token=0;
+kal_uint16   ft_gl_rf_token;
+kal_uint16   ft_gl_l4aud_token;
+kal_uint16   ft_gl_l4aud_ind_token;
+kal_uint16   ft_gl_nvram_token;
+kal_uint16   ft_gl_customer_token;
+kal_uint16          ft_gl_l4aud_current_volume = 3;
+peer_buff_struct    *ft_gl_l4aud_peer_buf = NULL;
+extern kal_uint8    ft_gl_sim_cmd_type;  // sim cmd type from ft_fnc_misc.c
+
+kal_char g_FT_debug_buf[128];
+kal_uint16   FT_GetGolbalToken(void)
+{
+    return ft_gl_token;
+}
+/*************************************************************************
+ * FUNCTION
+ *  ft_create
+ *
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ *
+ * RETURNS
+ *  None
+ *
+ * GLOBALS AFFECTED
+ *
+ *************************************************************************/
+kal_bool ft_create(comptask_handler_struct **handle)
+{
+    static const comptask_handler_struct ft_handler_info =
+    {
+        FT_Task,  /* task entry function */
+        FT_Init,  /* task initialization function */
+        NULL  /* task configuration function */
+    };
+
+    *handle = (comptask_handler_struct *)&ft_handler_info;
+    return KAL_TRUE;
+}
+
+#ifdef L1_SIM
+extern kal_status gs_read_message(module_type, void *, kal_uint16, kal_bool);
+#endif 
+
+
+/* ------------------------------------------------------------------------- */
+
+
+/*******************************************************************************
+ * FUNCTION
+ *   FT_InitCalibrationData
+ *
+ * DESCRIPTION
+ *   The calibration data fetch in power-on stage
+ *
+ * CALLS
+ *
+ * PARAMETERS
+ *   None
+ *
+ * RETURNS
+ *   None
+ *
+ * GLOBALS AFFECTED
+ *   None
+ *******************************************************************************/
+void FT_InitCalibrationData(task_entry_struct *task_entry_ptr)
+{
+#ifndef L1_SIM
+    nvram_startup_req_struct *ptrMsg;
+    ptrMsg = (nvram_startup_req_struct*)construct_local_para(sizeof(nvram_startup_req_struct), TD_CTRL);
+    if(NULL == ptrMsg)
+    {
+        ASSERT(0);
+    }
+    ptrMsg->poweron_mode=NVRAM_POWERON_NORMAL;
+    msg_send5(MOD_FT, MOD_NVRAM, PS_NVRAM_SAP, MSG_ID_NVRAM_STARTUP_REQ, (local_para_struct*)ptrMsg);
+#endif // #ifndef L1_SIM
+}
+
+/*******************************************************************************
+*
+*  Local Functions
+*
+*******************************************************************************/
+#ifdef L1_CATCHER
+void Trc_Init(void);
+#endif
+static void FT_Initialization(task_entry_struct *task_entry_ptr)
+{
+    // active module ID in task_active_module_g
+    kal_set_active_module_id(MOD_FT);
+#ifndef L1_SIM
+    FtInitMemoryPool();
+    // custom init
+    FT_CustomInit();
+#if !defined(__L1_STANDALONE__)
+    // enable main LCD backlight
+    custom_cfg_gpio_set_level(GPIO_DEV_LED_MAINLCD, LED_LIGHT_LEVEL5);
+#endif // #if !defined(__L1_STANDALONE__)
+#endif // #ifndef L1_SIM
+#ifdef L1_CATCHER
+    // L1 logging initialization
+    Trc_Init();
+#endif // #ifdef L1_CATCHER
+    FT_InitCalibrationData(task_entry_ptr);
+    FT_InitFtData();
+#if ( defined(__HSDPA_SUPPORT__) || defined(__HSUPA_SUPPORT__) ) && defined(__MODEM_CARD__)
+    /// clear USB download RTC bit for HSPA data card project
+    INT_SetCmdToSys(SYS_CMD_CLR_DL_FLAG);
+#endif // #if ( defined(__HSDPA_SUPPORT__) || defined(__HSUPA_SUPPORT__) ) && defined(__MODEM_CARD__)
+}
+
+extern kal_bool Custom_META_IsSecureOperation(ilm_struct* ptrMsg);
+
+#ifndef L1_SIM
+void FT_DispatchMessage(ilm_struct* ptrMsg)
+{
+    FT_H  *ft_header;
+    ft_header=(FT_H *)(ptrMsg->local_para_ptr);
+    /* process messages with specific message ID */
+    switch(ptrMsg->msg_id)
+    {
+        case MSG_ID_FT_CAL_DATA_ADD_ONE_REQ:
+        {
+            FT_Misc_CalDataInTargetAddOneRequestHandler(ptrMsg);
+            return;
+        }
+        case MSG_ID_MMRF_UPDATE_RUNTIME_CNF:
+        {
+            FT_Mmrf_UpdateRuntimeConfirmHandler(ptrMsg);
+            return;
+        }
+        default:
+            break;
+    }
+    /* process message with specific source module ID */
+#if !defined(__DHL_MODULE__)
+    if(ptrMsg->src_mod_id == MOD_TST_READER)
+#else
+    if(ptrMsg->src_mod_id == MOD_DHL)
+#endif // #if !defined(__DHL_MODULE__)
+    {
+        ft_gl_token=ft_header->token;
+#ifdef __META_SLA_ENHANCEMENT__
+        if (FT_MetaSLA_Is_Enabled() && !MetaSLA_Is_Verified())
+        {
+            if(KAL_TRUE == Custom_META_IsSecureOperation(ptrMsg))
+            {
+                dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_FT,"[SLA] msg id:%d is dropped since SLA is not verified", ft_header->ft_msg_id);
+                return;
+            }
+        }
+#endif // #ifdef __META_SLA_ENHANCEMENT__
+
+        switch (ft_header->ft_msg_id)
+        {
+            /********************************************
+             * L1 RF test functionality
+             ********************************************/
+#if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+            case FT_RF_TEST_REQ_ID:
+            {
+                FT_Rf_Operation(ptrMsg);
+                break;
+            }
+#endif // #if !defined(__LTE_SM__)&&defined(__MTK_GL1_GSM__)
+            /********************************************
+             * 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__)
+#if !defined(__UL1_TASK_DISABLE__)
+            case FT_URF_TEST_REQ_ID:
+            {
+                FT_FtURfTestReq( ptrMsg );
+                break;
+            }
+#endif // #if !defined(__UL1_TASK_DISABLE__)
+#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+            /********************************************
+             *
+             *  NVRAM functionality
+             *
+             ********************************************/
+            case FT_NVRAM_GET_DISK_INFO_REQ_ID:
+            {
+                ilm_struct ilm_ptr;
+                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(&ilm_ptr,sizeof(FT_NVRAM_GET_DISK_INFO_CNF));
+                ptr_loc_para=(FT_NVRAM_GET_DISK_INFO_CNF *)(ilm_ptr.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_TO_PC(&ilm_ptr);
+                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(MOD_FT, MOD_NVRAM, PS_NVRAM_SAP, MSG_ID_NVRAM_RESET_REQ, &ptr_ilm);
+                break;
+            }
+            case FT_NVRAM_READ_REQ_ID:
+            {
+                ft_gl_nvram_token = ft_header->token;
+                FT_ReadFrom_NVRAM((ft_nvram_read_req_struct_T*)ptrMsg->local_para_ptr, 0);
+                break;
+            }
+            case FT_NVRAM_WRITE_REQ_ID:
+            {
+                ft_gl_nvram_token = ft_header->token;
+                FT_WriteTo_NVRAM((ft_nvram_write_req_struct_T*)ptrMsg->local_para_ptr, ptrMsg->peer_buff_ptr, 0);
+                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(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_3G_TDD_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__)
+#if defined(__LTE_RAT__) || defined(L1_SIM)
+            case FT_ERF_TEST_REQ_ID:
+            {
+                FT_Erf_Operation(ptrMsg);
+                break;
+            }
+            case FT_PHY_TOOL_REQ_ID:
+            {
+                FT_PhyTool_Operation(ptrMsg);
+                break;
+            }
+#endif // #if defined(__LTE_RAT__)
+
+#if defined(__C2K_RAT__)
+            case FT_CRF_TEST_REQ_ID:
+            {
+                FT_Crf_Operation(ptrMsg);
+                break;
+            }
+#endif // #if defined(__C2K_RAT__)
+
+            case FT_MMRF_TEST_REQ_ID:
+            {
+                FT_Mmrf_Operation(ptrMsg);
+                break;
+            }
+
+		    case FT_NRF_TEST_REQ_ID:
+            {
+                FT_Nrf_Operation(ptrMsg);
+                break;
+            }
+#if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) || defined(DUMMY_PROTOCOL)
+            case FT_L4_ATCMD_REQ_ID:
+            {
+                FT_L4_Operation(ptrMsg);
+                break;
+            }
+#endif // #if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT)
+
+            case FT_GET_SLA_STATUS_REQ_ID:
+            {
+                FT_GetSlaStatus();
+                break;
+            }
+
+            case FT_CHECK_SLA_VER_REQ_ID:
+            {
+                FT_CheckSlaVer((FT_CHECK_SLA_VER_REQ *)ptrMsg->local_para_ptr);
+                break;
+            }
+
+            case FT_GET_SLA_PARA_REQ_ID:
+            {
+                FT_GetSlaPara();
+                break;
+            }
+
+            case FT_VERIFY_SLA_RND_REQ_ID:
+            {
+                FT_VerifySla((FT_VERIFY_SLA_RND_REQ *)ptrMsg->local_para_ptr);
+                break;
+            }
+
+            default:
+            {
+                dhl_print(TRACE_INFO, DHL_USER_FLAG_NONE, MOD_FT,"[SLA] unknown msg id:%d", ft_header->ft_msg_id);
+                FT_SendDeniedMsgIdCnf(ft_header->ft_msg_id, FT_CNF_NOT_SUPPORTED);
+                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( KAL_TRUE == FT_Nvram_IsModNvramRespnose(ptrMsg) )
+    {
+       switch (ptrMsg->msg_id)
+       {
+           case MSG_ID_NVRAM_WRITE_CNF:
+           {
+               nvram_write_cnf_struct*  msg_ptr = NULL;
+               ft_gl_token = ft_gl_nvram_token;
+               msg_ptr=(nvram_write_cnf_struct*)ptrMsg->local_para_ptr;
+               /* Check MMRF runtime update */
+               if( KAL_FALSE == FT_Mmrf_PollUpdateRuntimeReady() )
+               {
+                   hold_local_para(ptrMsg->local_para_ptr);
+                   FT_SEND_MSG(MOD_FT, MOD_FT, PS_NVRAM_SAP, MSG_ID_NVRAM_WRITE_CNF, ptrMsg);
+                   break;
+               }
+               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;
+               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));
+               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_TO_PC(&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;
+               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));
+               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_TO_PC(&ilm_ptr);
+               break;
+           }
+#if defined(__MTK_INTERNAL__)
+           case MSG_ID_NVRAM_WRITE_IMEI_CNF:
+           {
+               nvram_write_imei_cnf_struct*    msg_ptr;
+               FT_MISC_CNF           misc_cnf;
+               msg_ptr=(nvram_write_imei_cnf_struct*)ptrMsg->local_para_ptr;
+               misc_cnf.type = FT_MISC_OP_SET_IMEI_VALUE;
+               if(msg_ptr->result == NVRAM_ERRNO_SUCCESS)
+               {
+                   misc_cnf.result.m_u2RecordIndex = msg_ptr->record_index;
+                   misc_cnf.status = FT_CNF_OK;
+               }
+               else
+               {
+                   misc_cnf.result.m_u2RecordIndex = msg_ptr->result;
+                   misc_cnf.status = FT_CNF_FAIL;
+               }
+               FT_MISC_SendCnf(&misc_cnf, NULL);
+               break;
+           }
+#endif  //#if defined(__MTK_INTERNAL__)
+           case MSG_ID_NVRAM_SDS_CNF:
+           case MSG_ID_NVRAM_BIN_REGION_CNF:
+           {
+               FT_MiscEx_NvramConfirmHandler(ptrMsg);
+               break;
+           }
+           default:
+               break;
+       }
+    }
+#endif // end of #if defined(__MOD_NVRAM__)
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+#if !defined(__UL1_TASK_DISABLE__)
+    else if( (ptrMsg->src_mod_id == MOD_UL1) )
+    {
+        FT_UL1TST_SEND_CNF_BACK(ptrMsg);
+    }
+#endif // #if !defined(__UL1_TASK_DISABLE__)
+#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+#if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+    else if( (ptrMsg->src_mod_id == MOD_L1) )
+    {
+        FT_Rf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+#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
+#if defined(__LTE_RAT__)
+    else if( MOD_EL1== ptrMsg->src_mod_id )
+    {
+        FT_Erf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if defined(__LTE_RAT__)
+
+#if defined(__C2K_RAT__)
+    else if( MOD_CL1TST == ptrMsg->src_mod_id )
+    {
+        FT_Crf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if defined(__C2K_RAT__)
+
+    else if( MOD_MMRF_XL1TST == ptrMsg->src_mod_id )
+    {
+        FT_Mmrf_ConfirmHandler(ptrMsg);
+    }
+	
+#if defined(__MD97__)
+	else if( MOD_NL1 == ptrMsg->src_mod_id )
+    {
+        FT_Nrf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if !defined(__MD97__)
+
+#if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) || defined(DUMMY_PROTOCOL)
+    else if( MOD_L4C == ptrMsg->src_mod_id )
+    {
+        FT_L4_Operation(ptrMsg);
+    }
+#endif // #if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) 
+
+}
+#else
+void FT_DispatchMessage(ilm_struct* ptrMsg)
+{
+    FT_H  *ft_header;
+    ft_header=(FT_H *)(ptrMsg->local_para_ptr);
+    /* process messages with specific message ID */
+    switch(ptrMsg->msg_id)
+    {
+        case MSG_ID_MMRF_UPDATE_RUNTIME_CNF:
+        {
+            FT_Mmrf_UpdateRuntimeConfirmHandler(ptrMsg);
+            return;
+        }
+        default:
+            break;
+    }
+    /* process message with specific source module ID */
+#if !defined(__DHL_MODULE__)
+    if(ptrMsg->src_mod_id == MOD_TST_READER)
+#else
+    if(ptrMsg->src_mod_id == MOD_DHL)
+#endif // #if !defined(__DHL_MODULE__)
+    {
+        ft_gl_token=ft_header->token;
+        switch (ft_header->ft_msg_id)
+        {
+            /********************************************
+             * L1 RF test functionality
+             ********************************************/
+#if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+            case FT_RF_TEST_REQ_ID:
+            {
+                FT_Rf_Operation(ptrMsg);
+                break;
+            }
+#endif // #if !defined(__LTE_SM__)&&defined(__MTK_GL1_GSM__)
+            /********************************************
+             * UL1 RF test functionality
+             ********************************************/
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+#if !defined(__UL1_TASK_DISABLE__)
+            case FT_URF_TEST_REQ_ID:
+            {
+                FT_FtURfTestReq( ptrMsg );
+                break;
+            }
+#endif // #if !defined(__UL1_TASK_DISABLE__)
+#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+            /********************************************
+             *
+             *  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 utility command
+             *
+             ********************************************/
+            case FT_UTILITY_COMMAND_REQ_ID:
+            {
+                FT_UtilityCommand(ptrMsg);
+                break;
+            }
+#if defined(__LTE_RAT__) || defined(L1_SIM)
+            case FT_ERF_TEST_REQ_ID:
+            {
+                FT_Erf_Operation(ptrMsg);
+                break;
+            }
+#endif // #if defined(__LTE_RAT__)
+            case FT_MMRF_TEST_REQ_ID:
+            {
+                FT_Mmrf_Operation(ptrMsg);
+                break;
+            }
+
+		    case FT_NRF_TEST_REQ_ID:
+            {
+                FT_Nrf_Operation(ptrMsg);
+                break;
+            }
+			
+#if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) || defined(DUMMY_PROTOCOL)
+            case FT_L4_ATCMD_REQ_ID:
+            {
+                FT_L4_Operation(ptrMsg);
+            }
+#endif // #if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT)
+            default:
+            break;
+        }
+    }
+#if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+#if !defined(__UL1_TASK_DISABLE__)
+    else if( (ptrMsg->src_mod_id == MOD_UL1) )
+    {
+        FT_UL1TST_SEND_CNF_BACK(ptrMsg);
+    }
+#endif // #if !defined(__UL1_TASK_DISABLE__)
+#endif // #if defined(__UMTS_RAT__) && defined(__MTK_UL1_FDD__)
+#if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+    else if( (ptrMsg->src_mod_id == MOD_L1) )
+    {
+        FT_Rf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if !defined(L1_NOT_PRESENT) && !defined(__L1_TASK_DISABLE__) && !defined(DUMMYL1)
+#if defined(__LTE_RAT__)
+    else if( MOD_EL1== ptrMsg->src_mod_id )
+    {
+        FT_Erf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if defined(__LTE_RAT__)
+
+    else if( MOD_MMRF_XL1TST == ptrMsg->src_mod_id )
+    {
+        FT_Mmrf_ConfirmHandler(ptrMsg);
+    }
+#if defined(__MD97__)
+	else if( MOD_NL1 == ptrMsg->src_mod_id )
+    {
+        FT_Nrf_ConfirmHandler(ptrMsg);
+    }
+#endif // #if !defined(__MD97__)
+#if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) || defined(DUMMY_PROTOCOL)
+    else if( MOD_L4C == ptrMsg->src_mod_id )
+    {
+        FT_L4_Operation(ptrMsg);
+    }
+#endif // #if !defined(__L4_TASK_DISABLE__) && !defined(L4_NOT_PRESENT) 
+}
+#endif // #ifndef L1_SIM
+/*******************************************************************************
+ * FUNCTION
+ *   FT_Task
+ *
+ * DESCRIPTION
+ *   Entry point for the factory testing task. The function performs initialisation,
+ *   then sits in an infinite loop reading messages or reports and dispatching
+ *   them.
+ *
+ * CALLS
+ *
+ * PARAMETERS
+ *   None
+ *
+ * RETURNS
+ *   None
+ *
+ * GLOBALS AFFECTED
+ *   None
+ *******************************************************************************/
+
+#define META_Version_Check_Fail  0
+#define META_Version_Check_Required 0
+
+void FT_Task(task_entry_struct * task_entry_ptr)
+{
+    ilm_struct current_ilm;
+    FT_Initialization(task_entry_ptr);
+    while ( 1 )
+    {
+#ifndef L1_SIM
+		msg_receive_extq(&current_ilm );
+#else
+		gs_read_message(MOD_FT, &current_ilm, sizeof(current_ilm), KAL_TRUE);
+#endif //#ifndef L1_SIM
+        FT_DispatchMessage(&current_ilm );
+        destroy_ilm(&current_ilm);
+    }
+}
+kal_eventgrpid MMRF_UPDATE_RUNTIME_EVENT;
+kal_bool FT_Init(void)
+{
+    MMRF_UPDATE_RUNTIME_EVENT = kal_create_event_group("MMRF_UPD");
+    return KAL_TRUE;
+}