[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-tele-ril/lynq-riltel/em/em.cpp b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/em/em.cpp
new file mode 100644
index 0000000..7e9609f
--- /dev/null
+++ b/src/lynq/lib/liblynq-tele-ril/lynq-riltel/em/em.cpp
@@ -0,0 +1,734 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER 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 RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'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 RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+#include "em/em.h"
+
+#include <vendor-ril/telephony/ril.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <cutils/jstring.h>
+#include <log/log.h>
+#include <unistd.h>
+#include <math.h>
+#include  "common.h"
+
+#if EM_MODE_SUPPORT
+
+#undef LOG_TAG
+#define LOG_TAG "EM_ENTRY"
+
+#define NUM_ITEMS(a)     (sizeof (a) / sizeof (a)[0])
+em_arry_t lte_info[] = {
+    //{"4G ERRC Misc Info",0,NULL,1,1},
+    //{"4G LTE Support Band",0,NULL,1,1},
+    //{"4G Active Intra-RAT Meas (LTE)",0,NULL,1,1},
+    //{"4G Active Inter-RAT Meas (UMTS)",0,NULL,1,1},
+    //{"4G Active Inter-RAT Meas (GSM)",0,NULL,1,1},
+    //{"4G SIB Receive Status",0,NULL,1,1},
+    //{"4G CSG Autonomous Search",0,NULL,1,1},
+    //{"4G Config Info",0,NULL,1,1},
+    //{"ESM",0,NULL,1,1},
+    //{"EMM",0,NULL,1,1},
+    //{"MMDC",0,NULL,1,1},
+    {"EL1",0,NULL,1,1},
+    //{"Timer Information",0,NULL,1,1},
+    //{"TDD TAS",0,NULL,1,1},
+    //{"GSM TAS",0,NULL,1,1},
+    //{"WCDMA TAS",0,NULL,1,1},
+    //{"LTE TAS",0,NULL,1,1},
+};
+em_arry_t ims_setting[] = {
+    {"get",0,NULL,0,0},
+    {"set",0,NULL,0,0},
+};
+em_arry_t ims_common[] = {
+    {"operator_code",2,ims_setting,0,0},
+    {"sms_support",2,ims_setting,0,0},
+    {"voice_support",2,ims_setting,0,0}
+};
+em_arry_t ims_call[] = {
+    {"UA_call_codec_order1",2,ims_setting,0,0},
+    {"UA_call_codec_order2",2,ims_setting,0,0},
+    {"UA_call_codec_order3",2,ims_setting,0,0},
+    {"silence_dropcall_threshold",2,ims_setting,0,0},
+    {"jbm_load_params_enable",2,ims_setting,0,0},
+    {"jbm_prebuf_len",2,ims_setting,0,0},
+};
+em_arry_t ims_registration[] = {
+    {"emergency_reg_retain_timer",2,ims_setting,0,0},
+    {"UA_reg_auth_password",2,ims_setting,0,0},
+    {"UA_reg_auth_name",2,ims_setting,0,0},
+    {"VoLTE_Setting_SIP_TCP_On_Demand",2,ims_setting,0,0},
+};
+em_arry_t ims[] = {
+    {"Common",NUM_ITEMS(ims_common),ims_common,1,1},
+    {"Call",NUM_ITEMS(ims_call),ims_call,1,1},
+    {"Registration",NUM_ITEMS(ims_registration),ims_registration,1,1},
+};
+em_arry_t gprs[] = {
+    {"ATTACH",0,NULL,1,1},
+    {"DETACH",0,NULL,1,1},
+    {"ATTACH_CONTINUE",0,NULL,1,1},
+    {"DETACH_CONTINUE",0,NULL,1,1},
+    {"SELECT_ATTACH_TYPE_1",0,NULL,1,1},
+    {"SELECT_ATTACH_TYPE_0",0,NULL,1,1},
+};
+em_arry_t networkselection[] = {
+    {"GSM/WCDMA (WCDMA preferred)",0,NULL,1,1},
+    {"GSM only",0,NULL,1,1},
+    {"WCDMA only",0,NULL,1,1},
+    {"GSM/WCDMA (auto)",0,NULL,1,1},
+    {"LTE only",0,NULL,1,1},
+    {"4G/3G/2G(auto)",0,NULL,1,1},
+    {"4G/3G",0,NULL,1,1},
+};
+em_arry_t modem_cta[] = {
+    {"Integrity Check",0,NULL,1,1},
+    {"RLC TL1",0,NULL,1,1},
+    {"K1297",0,NULL,1,1},
+    {"SN Conflict",0,NULL,1,1},
+    {"CF query",0,NULL,1,1},
+    {"DLMN lock",0,NULL,1,1},
+    {"Measurement open",0,NULL,1,1},
+    {"Disable DPA",0,NULL,1,1},
+    {"Intra CMR",0,NULL,1,1},
+};
+em_arry_t modem_fta[] = {
+    {"ANITE",0,NULL,1,1},
+    {"CRTUG",0,NULL,1,1},
+    {"CRTUW",0,NULL,1,1},
+    {"ANRITSU",0,NULL,1,1},
+    {"CMW500",0,NULL,1,1},
+};
+em_arry_t modem_C2K_Test_MODEM[] = {
+    { "NONE", 0, NULL, 1, 1 },
+    { "SPIRENT", 0,NULL, 1, 1 },
+};
+em_arry_t modemtest[] = {
+    {"NONE",0,NULL,1,1},
+    {"CTA",NUM_ITEMS(modem_cta),modem_cta,1,1},
+    {"FTA",NUM_ITEMS(modem_fta),modem_fta,1,1},
+    {"IOT",0,NULL,1,1},
+    {"OPERATOR",0,NULL,1,1},
+    {"FACTORY",0,NULL,1,1},
+    {"CDMA Test Mode", NUM_ITEMS(modem_C2K_Test_MODEM),modem_C2K_Test_MODEM,1,1},
+};
+em_arry_t hspa[] = {
+    {"QUERY",0,NULL,1,1},
+};
+em_arry_t cfu[] = {
+    {"Default",0,NULL,1,1},
+    {"Always query",0,NULL,1,1},
+    {"Always not query",0,NULL,1,1},
+};
+em_arry_t bandmode[] = {
+    {"getcurrentband",0,NULL,1,1},
+    {"setBand(eg: 1.1=1 add band, 1.1=0 remove band) or getSupportBand",0,NULL,1,1},
+};
+em_arry_t networkinfo[] = {
+    {"RR Cell Sel",0,NULL,1,1},
+    {"RR Ch Dscr",0,NULL,1,1},
+    {"RR Ctrl chan",0,NULL,1,1},
+    {"RR RACH Ctrl",0,NULL,1,1},
+    {"RR LAI Info",0,NULL,1,1},
+    {"RR Radio Link",0,NULL,1,1},
+    {"RR Meas Rep",0,NULL,1,1},
+    {"RR Ca List",0,NULL,1,1},
+    {"RR Control Msg",0,NULL,1,1},
+    {"RR SI2Q Info",0,NULL,1,1},
+    {"RR MI Info",0,NULL,1,1},
+    {"RR BLK Info",0,NULL,1,1},
+    {"RR TBF Info",0,NULL,1,1},
+    {"RR GPRS Gen",0,NULL,1,1},
+    {"SMEmInfo",0,NULL,1,1},
+    {"3GMmEmInfo",0,NULL,1,1},
+    {"GmmEmInfo",0,NULL,1,1},
+#if 1
+    {"3GTcmMmiEmInfo",0,NULL,1,1},
+    {"3GGeneralStatusInd",0,NULL,1,1},
+    {"xGCsceEMNeighCellSStatusInd",0,NULL,1,1},
+    {"3GCsceEMServCellSStatusInd",0,NULL,1,1},
+    {"3GCsceEmInfoMultiPlmn",0,NULL,1,1},
+    {"3GMemeEmPeriodicBlerReportInd",0,NULL,1,1},
+    {"3GUrrUmtsSrncId",0,NULL,1,1},
+    {"3GMemeEmInfoHServCellInd",0,NULL,1,1},
+#endif
+#if 1//fdd
+    {"3GMemeEmInfoUmtsCellStatus",0,NULL,1,1},
+    {"3GSlceEmPsDataRateStatusInd",0,NULL,1,1},
+#endif
+#if 0//tdd
+    {"3GHandoverSequenceIndStuct",0,NULL,1,1},
+    {"3GUl2EmAdmPoolStatusIndStruct",0,NULL,1,1},
+    {"3GUl2EmPsDataRateStatusIndStruct",0,NULL,1,1},
+    {"3GUl2EmHsdschReconfigStatusIndStruct",0,NULL,1,1},
+    {"3GUl2EmUrlcEventStatusIndStruct",0,NULL,1,1},
+    {"3G Ul2EmPeriodicBlerReportInd",0,NULL,1,1},
+#endif
+#if 0 //lte
+    {"3G speech codec",0,NULL,1,1},//lte
+    {"Security Configuration",0,NULL,1,1},//lte
+#endif
+};
+
+em_arry_t antenna_setmodes_4g[] {
+    {"RX1&RX2", 0, NULL, 1, 1},
+    {"RX1", 0, NULL, 1, 1},
+    {"RX2", 0, NULL, 1, 1},
+};
+
+em_arry_t antenna_setmodes_3g[] {
+    {"RX1", 0, NULL, 1, 1},
+    {"RX2", 0, NULL, 1, 1},
+    {"RX1&RX2", 0, NULL, 1, 1},
+    {"Resume default setting", 0, NULL, 1, 1},
+};
+
+em_arry_t antenna_setmodes_c2k[] {
+    {"Resume default setting", 0, NULL, 1, 1},
+    {"RX1", 0, NULL, 1, 1},
+    {"RX2", 0, NULL, 1, 1},
+    {"RX1&RX2", 0, NULL, 1, 1},
+};
+
+em_arry_t antenna_4Gmode[] = {
+    {"getmode",0,NULL,1,1},
+    {"setmode",NUM_ITEMS(antenna_setmodes_4g),antenna_setmodes_4g,1,1},
+};
+
+em_arry_t antenna_3Gmode[] = {
+    {"getmode",0,NULL,1,1},
+    {"setmode",NUM_ITEMS(antenna_setmodes_3g),antenna_setmodes_3g,1,1},
+};
+
+em_arry_t antenna_c2kmode[] = {
+    {"getmode",0,NULL,1,1},
+    {"setmode",NUM_ITEMS(antenna_setmodes_c2k),antenna_setmodes_c2k,1,1},
+};
+
+em_arry_t antennatest[] = {
+    {"4G",NUM_ITEMS(antenna_4Gmode),antenna_4Gmode,1,1},
+    {"3G",NUM_ITEMS(antenna_3Gmode),antenna_3Gmode,1,1},
+    {"CDMA",NUM_ITEMS(antenna_c2kmode),antenna_c2kmode,1,1},
+};
+
+em_arry_t time_reg[] = {
+    { "disable", 0,NULL, 1, 1 },
+    { "enable", 0, NULL, 1, 1 },
+};
+
+em_arry_t c2k_modem_setting[] {
+        {"TIME REG",NUM_ITEMS(time_reg),time_reg,1,1},
+};
+
+em_arry_t rfdesense_setting[] = {
+    {"start",0,NULL,0,0},
+    {"set",0,NULL,0,0},
+//    {"set_check_Limit",0,NULL,0,0},
+//    {"get_check_Limit",0,NULL,0,0},
+};
+
+em_arry_t set_get[] = {
+        {"get",0,NULL,0,0},
+        {"set",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_gsm_band[] = {
+        {"GSM 850",0,NULL,0,0},
+        {"P-GSM 900",0,NULL,0,0},
+        {"E-GSM 900",0,NULL,0,0},
+        {"R-GSM 900",0,NULL,0,0},
+        {"DCS 1800",0,NULL,0,0},
+        {"PCS 1900",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_gsm_pattern[] = {
+        {"RFTOOL_NB_TX_RANDOM_WITH_TSC",0,NULL,0,0},
+        {"RFTOOL_NB_TX_ALL_ONES_WITHOUT_TSC",0,NULL,0,0},
+        {"RFTOOL_AB_TX_RANDOM_WITH_SYNC_SEQ",0,NULL,0,0},
+        {"RFTOOL_CONT_TX_ALL_ZEROS",0,NULL,0,0},
+        {"RFTOOL_CONT_TX_ALL_ONES",0,NULL,0,0},
+        {"RFTOOL_CONT_TX_ALTERNATE_BITS",0,NULL,0,0},
+        {"RFTOOL_CONT_TX_PSEUDO_RANDOM",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_gsm_sub[] = {
+        {"Band",NUM_ITEMS(rfdesense_gsm_band),rfdesense_gsm_band,0,0},
+        {"Channel(ARFCN)",NUM_ITEMS(set_get),set_get,0,0},
+        {"Power Level",NUM_ITEMS(set_get),set_get,0,0},
+        {"AFC",NUM_ITEMS(set_get),set_get,0,0},
+        {"TSC",NUM_ITEMS(set_get),set_get,0,0},
+        {"PATTERN",NUM_ITEMS(rfdesense_gsm_pattern),rfdesense_gsm_pattern,0,0},
+};
+
+em_arry_t rfdesense_gsm[] = {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_gsm_sub),rfdesense_gsm_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdscdma_band[] = {
+        {"Band A",0,NULL,0,0},
+        {"Band F",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdscdma_sub[] = {
+        {"Band",NUM_ITEMS(rfdesense_tdscdma_band),rfdesense_tdscdma_band,0,0},
+        {"Channel(ARFCN)",NUM_ITEMS(set_get),set_get,0,0},
+        {"Power Level(dBm)",NUM_ITEMS(set_get),set_get,0,0},
+};
+
+em_arry_t rfdesense_tdscdma[] = {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_tdscdma_sub),rfdesense_tdscdma_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_wcdma_band[] = {
+        {"Band 1",0,NULL,0,0},
+        {"Band 2",0,NULL,0,0},
+        {"Band 3",0,NULL,0,0},
+        {"Band 4",0,NULL,0,0},
+        {"Band 5",0,NULL,0,0},
+        {"Band 6",0,NULL,0,0},
+        {"Band 7",0,NULL,0,0},
+        {"Band 8",0,NULL,0,0},
+        {"Band 9",0,NULL,0,0},
+        {"Band 10",0,NULL,0,0},
+        {"Band 11",0,NULL,0,0},
+        {"Band 12",0,NULL,0,0},
+        {"Band 13",0,NULL,0,0},
+        {"Band 14",0,NULL,0,0},
+        {"Band 19",0,NULL,0,0},
+        {"Band 20",0,NULL,0,0},
+        {"Band 21",0,NULL,0,0},
+        {"Band 22",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_wcdma_sub[] = {
+        {"Band",NUM_ITEMS(rfdesense_wcdma_band),rfdesense_wcdma_band,0,0},
+        {"Channel(ARFCN)",NUM_ITEMS(set_get),set_get,0,0},
+        {"Power Level(dBm)",NUM_ITEMS(set_get),set_get,0,0},
+};
+
+em_arry_t rfdesense_wcdma[] {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_wcdma_sub),rfdesense_wcdma_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_lte_mode[] = {
+        {"single tone",0,NULL,0,0},
+        {"modulation signal",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_fdd_band[] = {
+        {"1",0,NULL,0,0},
+        {"2",0,NULL,0,0},
+        {"3",0,NULL,0,0},
+        {"4",0,NULL,0,0},
+        {"5",0,NULL,0,0},
+        {"6",0,NULL,0,0},
+        {"7",0,NULL,0,0},
+        {"8",0,NULL,0,0},
+        {"9",0,NULL,0,0},
+        {"10",0,NULL,0,0},
+        {"11",0,NULL,0,0},
+        {"12",0,NULL,0,0},
+        {"13",0,NULL,0,0},
+        {"14",0,NULL,0,0},
+        {"15",0,NULL,0,0},
+        {"16",0,NULL,0,0},
+        {"17",0,NULL,0,0},
+        {"18",0,NULL,0,0},
+        {"19",0,NULL,0,0},
+        {"20",0,NULL,0,0},
+        {"21",0,NULL,0,0},
+        {"22",0,NULL,0,0},
+        {"23",0,NULL,0,0},
+        {"24",0,NULL,0,0},
+        {"25",0,NULL,0,0},
+        {"26",0,NULL,0,0},
+        {"27",0,NULL,0,0},
+        {"28",0,NULL,0,0},
+        {"29",0,NULL,0,0},
+        {"30",0,NULL,0,0},
+        {"31",0,NULL,0,0},
+        {"66",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_lte_bandwidth[] = {
+        {"1.4M",0,NULL,0,0},
+        {"3M",0,NULL,0,0},
+        {"5M",0,NULL,0,0},
+        {"10M",0,NULL,0,0},
+        {"15M",0,NULL,0,0},
+        {"20M",0,NULL,0,0},
+};
+
+em_arry_t  rfdesense_lte_mcs[] = {
+        {"QPSK",0,NULL,0,0},
+        {"16QAM",0,NULL,0,0},
+        {"64QAM",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_fdd_sub[] = {
+        {"mode",NUM_ITEMS(rfdesense_lte_mode),rfdesense_lte_mode,0,0},
+        {"band",NUM_ITEMS(rfdesense_fdd_band),rfdesense_fdd_band,0,0},
+        {"UL Bandwidth",NUM_ITEMS(rfdesense_lte_bandwidth),rfdesense_lte_bandwidth,0,0},
+        {"UL Freq(100kHz)",NUM_ITEMS(set_get),set_get,0,0},
+        {"VRB Start(0-99)",NUM_ITEMS(set_get),set_get,0,0},
+        {"VRB Length(1-100)",NUM_ITEMS(set_get),set_get,0,0},
+        {"MCS",NUM_ITEMS(rfdesense_lte_mcs),rfdesense_lte_mcs,0,0},
+        {"Power Level(dbm)(-50_23)",NUM_ITEMS(set_get),set_get,0,0},
+};
+
+em_arry_t rfdesense_lte_fdd[] = {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_fdd_sub),rfdesense_fdd_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdd_band[] = {
+        {"33",0,NULL,0,0},
+        {"34",0,NULL,0,0},
+        {"35",0,NULL,0,0},
+        {"36",0,NULL,0,0},
+        {"37",0,NULL,0,0},
+        {"38",0,NULL,0,0},
+        {"39",0,NULL,0,0},
+        {"40",0,NULL,0,0},
+        {"41",0,NULL,0,0},
+        {"42",0,NULL,0,0},
+        {"43",0,NULL,0,0},
+        {"44",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdd_config[] = {
+        {"0",0,NULL,0,0},
+        {"1",0,NULL,0,0},
+        {"2",0,NULL,0,0},
+        {"3",0,NULL,0,0},
+        {"4",0,NULL,0,0},
+        {"5",0,NULL,0,0},
+        {"6",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdd_special[] = {
+        {"0",0,NULL,0,0},
+        {"1",0,NULL,0,0},
+        {"2",0,NULL,0,0},
+        {"3",0,NULL,0,0},
+        {"4",0,NULL,0,0},
+        {"5",0,NULL,0,0},
+        {"6",0,NULL,0,0},
+        {"7",0,NULL,0,0},
+        {"8",0,NULL,0,0},
+        {"9",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_tdd_sub[] = {
+        {"mode",NUM_ITEMS(rfdesense_lte_mode),rfdesense_lte_mode,0,0},
+        {"band",NUM_ITEMS(rfdesense_tdd_band),rfdesense_tdd_band,0,0},
+        {"UL Bandwidth",NUM_ITEMS(rfdesense_lte_bandwidth),rfdesense_lte_bandwidth,0,0},
+        {"UL Freq(100kHz)",NUM_ITEMS(set_get),set_get,0,0},
+        {"TDD Config Index",NUM_ITEMS(rfdesense_tdd_config),rfdesense_tdd_config,0,0},
+        {"TDD Special SF Config Index",NUM_ITEMS(rfdesense_tdd_special),rfdesense_tdd_special,0,0},
+        {"VRB Start(0-99)",NUM_ITEMS(set_get),set_get,0,0},
+        {"VRB Length(1-100)",NUM_ITEMS(set_get),set_get,0,0},
+        {"MCS",NUM_ITEMS(rfdesense_lte_mcs),rfdesense_lte_mcs,0,0},
+        {"Power Level(dbm)(-50_23)",NUM_ITEMS(set_get),set_get,0,0},
+};
+
+em_arry_t rfdesense_lte_tdd[] = {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_tdd_sub),rfdesense_tdd_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_cdma_band[] = {
+        {"Band 0",0,NULL,0,0},
+        {"Band 1",0,NULL,0,0},
+        {"Band 2",0,NULL,0,0},
+        {"Band 3",0,NULL,0,0},
+        {"Band 4",0,NULL,0,0},
+        {"Band 5",0,NULL,0,0},
+        {"Band 6",0,NULL,0,0},
+        {"Band 7",0,NULL,0,0},
+        {"Band 8",0,NULL,0,0},
+        {"Band 9",0,NULL,0,0},
+        {"Band 10",0,NULL,0,0},
+        {"Band 11",0,NULL,0,0},
+        {"Band 12",0,NULL,0,0},
+        {"Band 13",0,NULL,0,0},
+        {"Band 14",0,NULL,0,0},
+        {"Band 15",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_cdma_modulation[] = {
+        {"1X",0,NULL,0,0},
+        {"EVDO",0,NULL,0,0},
+};
+
+em_arry_t rfdesense_cdma_sub[] = {
+        {"Band",NUM_ITEMS(rfdesense_cdma_band),rfdesense_cdma_band,0,0},
+        {"modulation",NUM_ITEMS(rfdesense_cdma_modulation),rfdesense_cdma_modulation,0,0},
+        {"Channel(ARFCN)",NUM_ITEMS(set_get),set_get,0,0},
+        {"Power Level(dBm)",NUM_ITEMS(set_get),set_get,0,0},
+};
+
+em_arry_t rfdesense_cdma[] = {
+        {"start",0,NULL,0,0},
+        {"Parameters_set",NUM_ITEMS(rfdesense_cdma_sub),rfdesense_cdma_sub,0,0},
+        {"show default",0,NULL,0,0},
+};
+
+em_arry_t sub_tx_test[] = {
+    { "GSM", NUM_ITEMS(rfdesense_gsm),rfdesense_gsm, 1, 1 },
+    { "TDSCDMA", NUM_ITEMS(rfdesense_tdscdma), rfdesense_tdscdma, 1, 1 },
+    { "WCDMA", NUM_ITEMS(rfdesense_wcdma), rfdesense_wcdma, 1, 1 },
+    { "LTE(FDD)", NUM_ITEMS(rfdesense_lte_fdd), rfdesense_lte_fdd, 1, 1 },
+    { "LTE(TDD)", NUM_ITEMS(rfdesense_lte_tdd), rfdesense_lte_tdd, 1, 1 },
+#ifdef C2K_SUPPORT
+    { "CDMA(EVDO)", NUM_ITEMS(rfdesense_cdma), rfdesense_cdma, 1, 1 },
+    { "CDMA(1x)", NUM_ITEMS(rfdesense_cdma), rfdesense_cdma, 1, 1 },
+#endif/*C2K_SUPPORT*/
+};
+
+em_arry_t desense_test[] {
+        {"Tx Test",NUM_ITEMS(sub_tx_test),sub_tx_test,1,1},
+};
+
+em_arry_t no_support[] {
+        {"NO SUPPORT",0,NULL,0,0},
+};
+
+em_arry_t emmain[] = {
+    {"CDMA modem setting",NUM_ITEMS(c2k_modem_setting),c2k_modem_setting,0,0},
+    {"RF Desense Test ",NUM_ITEMS(desense_test),desense_test,0,0},
+    {"Modem Test",NUM_ITEMS(modemtest),modemtest,0,0},
+    {"HSPA",NUM_ITEMS(hspa),hspa,0,0},
+    {"CFU",NUM_ITEMS(cfu),cfu,0,0},
+    {"Antenna Test",NUM_ITEMS(antennatest),antennatest,0,0},
+    {"Band Mode",NUM_ITEMS(bandmode),bandmode,0,0},
+    {"IMS",NUM_ITEMS(ims),ims,0,0},
+    //{"Network Info",NUM_ITEMS(networkinfo),networkinfo,0,0},
+    {"Network Info",NUM_ITEMS(no_support),no_support,0,0},
+    {"LTE",NUM_ITEMS(lte_info),lte_info,0,0},
+    //{"GPRS Attach",NUM_ITEMS(gprs),gprs,0,0}, // replace data allow script
+    //{"NetworkSelection",NUM_ITEMS(networkselection),networkselection,0,0}, // repplace with script
+};
+typedef enum {
+    C2K_MODEM_SETTING = 0,
+    RF_DESENSE_TEST,
+    MODEM_TEST_ITEM,
+    HSPA_ITEM,
+    CFU_ITEM,
+    ANTENNATEST_ITEM,
+    BANDMODE_ITEM,
+    IMS_ITEM,
+    NO_SUPPORT,
+    //NETWORKINFO_ITEM,
+    LTE_ITEM,
+}EM_MAIN_ITEM;
+em_arry_t em = {"Telephony",NUM_ITEMS(emmain),emmain,0,0};
+int em_main(int len, int *item, int multilen, char *value[]) {
+    int testclass = item[0];
+    RLOGD("em_main testclase %d", testclass);
+    switch (testclass) {
+    case C2K_MODEM_SETTING:
+        emC2kModemSettingStart(len - 1, multilen, &item[1]);
+        break;
+    case RF_DESENSE_TEST:
+        emRfDesenseStart(len - 1, &item[1], multilen, value);
+        break;
+    case MODEM_TEST_ITEM:
+        emModemtestStart(len - 1, multilen, &item[1]);
+        break;
+    case HSPA_ITEM:
+        emHspaStart(len - 1, &item[1]);
+        break;
+    case CFU_ITEM:
+        emCfuStart(len - 1, &item[1]);
+        break;
+    case ANTENNATEST_ITEM:
+        emAntennaTestStart(len - 1, &item[1],(value != NULL ? value[0] : NULL));
+        break;
+    case BANDMODE_ITEM:
+        emBandmodeStart(len - 1, &item[1], multilen, value);
+        break;
+    case IMS_ITEM:
+        emImsStart(len - 1, &item[1], (value != NULL ? value[0] : NULL));
+        break;
+//    case NETWORKINFO_ITEM:
+//        emNwInfoStart(len - 1, multilen, &item[1]);
+//        break;
+    case LTE_ITEM:
+        //lte_em_start(len - 1, multilen, &item[1]);
+        em_el1_start(len - 1, multilen, &item[1]);
+        break;
+    case NO_SUPPORT:
+        android::emResultNotify("don't support\n");
+        break;
+    default:
+        break;
+    }
+    return 0;
+}
+
+int em_start(int argc, char *argv[], RIL_SOCKET_ID socket_id, RequestInfo *pRI)
+{
+    RLOGD("em_start called");
+    int i = 0;
+    em_arry_t *em_test = &em;
+    em_arry_t *em_sub = NULL;
+    RLOGD("Welcome to EM %s",em_test->name);
+    char output[2048] = {0};
+    int len = 0;
+
+    if(argc < 2){
+        for(i = 0; i < em_test->subcnt; i++){
+            sprintf(output+len,"%d:%s\n",i+1,em_test->subarray[i].name);
+            len = strlen(output);
+        }
+        RLOGD("%s",output);
+        android::emResultNotify(output);
+        return 0;
+    }
+    int itemlevel = 0;
+    int select_argvi[32] = {0};
+    int current_argvi = -1;
+    for(itemlevel = 1; itemlevel < argc; itemlevel++){
+        select_argvi[itemlevel-1] = atoi(argv[itemlevel]) - 1;
+        current_argvi = select_argvi[itemlevel-1];
+        if (em_test->subcnt < current_argvi + 1) {
+            sprintf(output, "the select index %d is out of bounds, please reselect.\nfail\n",current_argvi + 1);
+            android::emResultNotify(output);
+            return -1;
+        }
+        if(em_test->subarray[current_argvi].subarray == NULL){
+            for(i = 0 ; i < (argc - itemlevel - 1); i++){
+                select_argvi[itemlevel + i] = atoi(argv[itemlevel+1+i]) - 1;
+            }
+            RLOGD("em_test->subarray[%d].name: %s",current_argvi, em_test->subarray[current_argvi].name);
+            if(strncmp(em_test->subarray[current_argvi].name,"set",3) == 0){
+                em_main(itemlevel,&select_argvi[0],(argc - itemlevel - 1),&argv[itemlevel+1]);
+            }
+            else{
+                RLOGD("item level %d",itemlevel);
+                em_main(itemlevel,&select_argvi[0],(argc - itemlevel - 1),NULL);
+            }
+            //android::emResultNotify("done\n");
+            break;
+        }else{
+            RLOGD("em_sub[%d].name: %s, itemlevel: %d, argc: %d ",current_argvi, (em_test->subarray[current_argvi].name), itemlevel, argc);
+            em_sub = &em_test->subarray[current_argvi];
+            if(itemlevel == (argc - 1)){
+                memset(output,0,2048);
+                len = 0;
+
+                for(i = 0; i < em_sub->subcnt; i++){
+                    //RLOGD("%d:%s",i+1,em_sub->subarray[i].name);
+                    sprintf(output+len,"%d:%s\n",i+1,em_sub->subarray[i].name);
+                    len = strlen(output);
+                }
+                RLOGD("%s",output);
+                android::emResultNotify(output);
+            }
+            em_test = em_sub;
+        }
+    }
+    return 0;
+}
+
+extern void ARspRequestWithArg(int request, const char* arg, RIL_SOCKET_ID soc_id);
+
+void emSendATCommand(const char *cmd, int soc_id)
+{
+    ARspRequestWithArg(RIL_REQUEST_OEM_HOOK_RAW, cmd, (RIL_SOCKET_ID)soc_id);
+}
+
+void emEnableRadio(bool isEnable, int soc_id) {
+    //check main phone
+    ARspRequestWithArg(RIL_REQUEST_RADIO_POWER, (isEnable ? "1" : "0"), (RIL_SOCKET_ID)soc_id);
+}
+
+std::vector<std::string> getCdmaCmdArr(std::vector<std::string> cmdArray) {
+#ifndef MD_93_SUPPORT
+    return cmdArray;
+#else
+    std::vector<std::string> cmdArrayNew(2);
+    cmdArrayNew[0] = cmdArray[0];
+    cmdArrayNew[1] = cmdArray[1];
+    return cmdArrayNew;
+#endif /*MD_93_SUPPORT*/
+}
+
+int emResultNotifyWithDone(std::string str) {
+    std::string tmp = str + std::string("\ndone\n");
+    android::emResultNotify(tmp.c_str());
+    return 0;
+}
+
+int emResultNotifyEx(std::string str) {
+    std::string tmp = str + std::string("\n");
+    android::emResultNotify(tmp.c_str());
+    return 0;
+}
+
+int em_result_only_msg(std::string str) {
+    std::string tmp = str + std::string("\nonly_em_message\n");
+    android::emResultNotify(tmp.c_str());
+    return 0;
+}
+
+int em_result_notify_fail(std::string str) {
+    std::string tmp = "fail, " + str;
+    emResultNotifyWithDone(tmp);
+    return 0;
+}
+
+int em_result_notify_ok(std::string str) {
+    std::string tmp = "OK, " + str;
+    emResultNotifyWithDone(tmp);
+    return 0;
+}
+
+int em_result_notify_error(std::string str) {
+    std::string tmp = "error, " + str;
+    emResultNotifyWithDone(tmp);
+    return 0;
+}
+#endif
+