示例#1
0
int COM_Init (int *fd_atcmd, int *fd_uart, int *hUsbComPort)
{
    char dev_node[32];
    if(is_support_modem(1))
    {
        snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS1));
        fd_atcmd = openDeviceWithDeviceName(dev_node);
    }

    else if(is_support_modem(2))
    {

		snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2));
        fd_atcmd = openDeviceWithDeviceName(dev_node);

    }



    if((is_support_modem(1) || is_support_modem(2)) && (*fd_atcmd == -1)) {
		LOGE(TAG "Open ccci port fail\r\n" );
        return *fd_atcmd;
    }
    
    //ATE Tool use 115200 baud rate
    *fd_uart = open_uart_port(UART_PORT1, 115200, 8, 'N', 1);
	if(*fd_uart == -1) {
        LOGE(TAG "Open uart port %d fail\r\n" ,UART_PORT1);
        return *fd_uart;
    }
    else
        LOGD(TAG "Open uart port %d success\r\n" ,UART_PORT1);
  	
           
	//*hUsbComPort = open("/dev/ttyGS0",O_RDWR | O_NOCTTY | /*O_NONBLOCK | */O_NDELAY);
	*hUsbComPort = open_usb_port(UART_PORT1, 115200, 8, 'N', 1);
	if(*hUsbComPort == -1)
	{
		LOGE(TAG "Open usb fail\r\n");
		return *hUsbComPort;
	}
	else
	{
		//initTermIO(*hUsbComPort);
		LOGD(TAG "Open usb success\r\n");
	}

	return 0;
}
示例#2
0
文件: ftm_idle.c 项目: LuckJC/pro-mk
int idle_entry(struct ftm_param *param, void *priv)
{
    struct ftm_idle *idle = (struct ftm_idle *)priv;
    struct textview *tv = &idle->tv;

    int fd_suspend = -1, fd_backlight = -1, fd_mdm = -1;
    int ret = 0, key = 0, i = 0;

    char *s_state_mem = "mem";
    char *s_state_on = "on";
    char *s_backlight_on = "102";
    char *s_backlight_off = "0";
    char *s_mdm_txpwr_disable = "0";
    char *close_com_port = "close com port!";

    #ifdef MTK_ENABLE_MD1
    char ccci_md1_dev[32];
    #endif

    #ifdef MTK_ENABLE_MD2
    char ccci_md2_dev[32];
    #endif

    #ifdef MTK_MD_SHUT_DOWN_NT
    char ccci_md1_power_ioctl_dev[32];
    char ccci_md2_power_ioctl_dev[32];
    #endif

    const char *atcmd_ret;

    LOGD(TAG "%s: idle_entry\n", __FUNCTION__);

    init_text(&idle->title, param->name, COLOR_YELLOW);

    ui_init_textview(tv, idle_key_handler, (void*)idle);
    tv->set_title(tv, &idle->title);

    /* Make MD into flight mode */
    #ifdef MTK_ENABLE_MD1
        snprintf(ccci_md1_dev, 32, "%s", ccci_get_node_name(USR_FACTORY_IDLE, MD_SYS1));
        LOGD(TAG "Open CCCI MD1 dev node: %s\n", ccci_md1_dev);
        fd_atcmd = openDeviceWithDeviceName(ccci_md1_dev);
        if (-1 == fd_atcmd)
        {
            LOGD(TAG "Fail to open CCCI interface\n");
            return 0;
        }
        for (i = 0; i < 30; i++) usleep(50000); // sleep 1s wait for modem bootup

        #ifdef MTK_MD_SHUT_DOWN_NT
            snprintf(ccci_md1_power_ioctl_dev, 32, "%s", ccci_get_node_name(USR_FACTORY_IDLE_IOCTL, MD_SYS1));
            LOGD(TAG "Open CCCI MD1 Power IOCTL dev node: %s\n", ccci_md1_power_ioctl_dev);
            fd_ioctl = openDeviceWithDeviceName(ccci_md1_power_ioctl_dev);
            if (-1 == fd_ioctl)
            {
                LOGD(TAG "Fail to open CCCI IOCTL interface\n");
                return 0;
            }

            ExitFlightMode_PowerOffModem(fd_atcmd,fd_ioctl,FALSE);
        #else
            ExitFlightMode(fd_atcmd, FALSE);
        #endif
    #endif
    #ifdef MTK_ENABLE_MD2
        snprintf(ccci_md2_dev, 32, "%s", ccci_get_node_name(USR_FACTORY_IDLE, MD_SYS2));
        LOGD(TAG "Open CCCI MD2 dev node: %s\n", ccci_md2_dev);
        fd_atcmd2 = openDeviceWithDeviceName(ccci_md2_dev);
        if (-1 == fd_atcmd2)
        {
            LOGD(TAG "Fail to open MD2 CCCI interface\n");
            return 0;
        }
        for (i = 0; i < 30; i++) usleep(50000); // sleep 1s wait for modem bootup

        #ifdef MTK_MD_SHUT_DOWN_NT
            snprintf(ccci_md2_power_ioctl_dev, 32, "%s", ccci_get_node_name(USR_FACTORY_IDLE_IOCTL, MD_SYS2));
            LOGD(TAG "Open CCCI MD2 Power IOCTL dev node: %s\n", ccci_md2_power_ioctl_dev);
            fd_ioctlmd2 = openDeviceWithDeviceName(ccci_md2_power_ioctl_dev);
            if (-1 == fd_ioctlmd2)
            {
                LOGD(TAG "Fail to open CCCI MD2 IOCTL interface\n");
                return 0;
            }
            ExitFlightMode_PowerOffModem(fd_atcmd2,fd_ioctlmd2,FALSE);
        #else
            ExitFlightMode(fd_atcmd2, FALSE);
        #endif
    #endif
    #if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT)
        #if defined(PURE_AP_USE_EXTERNAL_MODEM)
            fd_atcmd_dt = openDeviceWithDeviceName(CCCI_MODEM_MT8135);
        #else
            fd_atcmd_dt= openDeviceWithDeviceName(CCCI_MODEM_MT6252);
        #endif

        if (-1 == fd_atcmd_dt)
        {
            LOGD(TAG "Fail to open CCCI interface\n");
            return 0;
        }
		
        #if defined(PURE_AP_USE_EXTERNAL_MODEM)
            initTermIO(fd_atcmd_dt, 5);
        #endif
		
        for (i = 0; i < 30; i++) usleep(50000); // sleep 1s wait for modem bootup

        ExitFlightMode(fd_atcmd_dt, FALSE);
    #endif

    /* Turn off thermal query MD TXPWR function */
    fd_mdm = open("/proc/mtk_mdm_txpwr/txpwr_sw", O_RDWR, 0);
    if (fd_mdm == -1) 
    {
        idle->mod->test_result = FTM_TEST_FAIL;
        LOGD(TAG "%s: cannot open /proc/mtk_mdm_txpwr/txpwr_sw, not support\n", __FUNCTION__);
    }
    else
    {
        ret = write(fd_mdm, s_mdm_txpwr_disable, strlen(s_mdm_txpwr_disable));
    }

    /* Turn off backlight */
    fd_backlight = open("/sys/class/leds/lcd-backlight/brightness", O_RDWR, 0);
    if (fd_backlight == -1) 
    {
        idle->mod->test_result = FTM_TEST_FAIL;
        LOGD(TAG "%s: cannot open /sys/class/leds/lcd-backlight/brightness\n", __FUNCTION__);
        return -1;
    }
    ret = write(fd_backlight, s_backlight_off, strlen(s_backlight_off));

    /* Make AP enter sleep mode */
    fd_suspend = open("/sys/power/state", O_RDWR, 0);
    if (fd_suspend == -1) 
    {
        idle->mod->test_result = FTM_TEST_FAIL;
        LOGD(TAG "%s: cannot open /sys/power/state\n", __FUNCTION__);
        return -1;
    }
    ret = write(fd_suspend, s_state_mem, strlen(s_state_mem));

    if(!get_is_ata())
    {
        while (1)
        {
            key = ui_wait_phisical_key();
            LOGD(TAG "%s: %d\n", __FUNCTION__, key);

            ret = write(fd_suspend, s_state_on, strlen(s_state_on));
            close(fd_suspend);
            LOGD(TAG "%s: exit from suspend\n", __FUNCTION__);

            break;
        }
    }
    else
    {
        int write_len = write(usb_com_port, close_com_port, strlen(close_com_port));
        LOGD(TAG "after write data to pc\n");
        if(write_len != strlen(close_com_port))
        {
            LOGD(TAG "write data to pc fail\n");
        }

        close_usb();

        while(is_USB_State_PlugIn())
        {
            sleep(1);
        }

        sleep(2);

        while(!is_USB_State_PlugIn())
        {
            sleep(1);
        }

        ret = write(fd_suspend, s_state_on, strlen(s_state_on));
        close(fd_suspend);
        LOGD(TAG "%s: exit from suspend\n", __FUNCTION__);

        usb_plug_in = 1;
    }

    close(fd_mdm);

    /* Turn on backlight */
    ret = write(fd_backlight, s_backlight_on, strlen(s_backlight_on));
    close(fd_backlight);

    #ifdef MTK_ENABLE_MD1
        #ifdef MTK_MD_SHUT_DOWN_NT
            ExitFlightMode_PowerOffModem(fd_atcmd,fd_ioctl,TRUE);
            closeDevice(fd_ioctl);
        #endif
        closeDevice(fd_atcmd);
    #endif
    #ifdef MTK_ENABLE_MD2
        #ifdef MTK_MD_SHUT_DOWN_NT
            ExitFlightMode_PowerOffModem(fd_atcmd2,fd_ioctlmd2,TRUE);
            closeDevice(fd_ioctlmd2);
        #endif
        closeDevice(fd_atcmd2);
    #endif
    #if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT)
        closeDevice(fd_atcmd_dt);
    #endif

    idle->mod->test_result = FTM_TEST_PASS;
    return 0;
}
示例#3
0
/// The below is for ATE signal test.
void ate_signal(void)
{
    struct itemview ate;
    text_t ate_title, info;
    char buf[100];
    char buf_cmd[100];
    char buf_ret[100];
    int len, i;
    const char *pret;
    char dev_node[32];


	int flag=0;
    
    ui_init_itemview(&ate);
    init_text(&info, buf, COLOR_YELLOW);
    ate.set_text(&ate, &info);
    len = sprintf(buf, "%s", "ATE Signaling Test\nEmergency call is not started\n");
    //sprintf(buf+len, "%s", "Emergency call is not started\n");
    ate.redraw(&ate);


if(is_support_modem(1))
{
	if(-1 == COM_Init (&g_fd_atcmd, &g_fd_uart, &g_hUsbComPort))
	{
		LOGE(TAG "COM_Init init fail!\n");
		return;
	}
	g_fd_uart = g_hUsbComPort;
}
	
	
if(is_support_modem(2)){
	if(g_fd_uart != -1 && g_hUsbComPort != -1)
	{

        snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2));
        g_fd_atcmdmd2 = openDeviceWithDeviceName(dev_node);
        
	if(g_fd_atcmdmd2 == -1)
	{
		LOGE(TAG "Open md2 fail\r\n");
		return;
	}
	}
	else
	{
	    if(-1 == COM_Init (&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort))
	    {
	    	LOGE(TAG "COM_Init init fail!\n");
	    	return;
	    }
	g_fd_uart = g_hUsbComPort;

    }
}

	
#if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT)
		if(g_fd_uart != -1 && g_hUsbComPort != -1)
		{
			g_fd_atcmdmd_dt= openDeviceWithDeviceName("/dev/ttyMT0");
			if(g_fd_atcmdmd_dt== -1)
			{
				LOGE(TAG "Open md2 fail\r\n");
				return;
			}
		}
		else
		{
			if(-1 == COM_Init (&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort))
			{
				LOGE(TAG "COM_Init init fail!\n");
				return;
			}
			g_fd_uart = g_hUsbComPort;
		}
#endif

	
	for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup
	LOGD(TAG "fd_atcmd = %d,  fd_uart = %d, hUsbComPort = %d\r\n", g_fd_atcmd, g_fd_uart, g_hUsbComPort);

	if(is_support_modem(1)){
	ExitFlightMode (g_fd_atcmd, TRUE);
    }


	if(is_support_modem(2)){
	ExitFlightMode_DualTalk (g_fd_atcmdmd2, TRUE);
    }

	#if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT)
	ExitFlightMode_DualTalk(g_fd_atcmdmd_dt, TRUE);
	#endif
	New_Thread ();

    while(1) {

         usleep(HALT_INTERVAL*20);
    }
	
	Free_Thread ();

	if(is_support_modem(1)){
	COM_DeInit (&g_fd_atcmd, &g_fd_uart, &g_hUsbComPort);

	    if(is_support_modem(2)){
		    if(g_fd_atcmdmd2 != -1)
		    {
		        close(g_fd_atcmdmd2);
		    	g_fd_atcmdmd2 = -1;
		    }
       }


		#if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT)
			if(g_fd_atcmdmd_dt != -1)
			{
				close(g_fd_atcmdmd_dt);
				g_fd_atcmdmd_dt = -1;
			}
		#endif

     }else if(is_support_modem(2)){
		COM_DeInit(&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort);

     }
	return;

}
示例#4
0
int sigtest_entry(struct ftm_param *param, void *priv)
{
    char *ptr;
    int chosen, i;
    bool exit = false;
    struct sigtest *st = (struct sigtest *)priv;
    struct itemview *iv;
    int ret;
    const char *pret;
	int test_result_temp = FTM_TEST_PASS;
    char dev_node1[32];
    char dev_node2[32];
    char dev_node5[32];
    LOGD(TAG "%s\n", __FUNCTION__);

if(is_support_modem(1)){

    snprintf(dev_node1, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS1));
    st->fd_atmd = openDeviceWithDeviceName(dev_node1);
    
    if (-1 == st->fd_atmd) {
				LOGD(TAG "Fail to open CCCI interface\n");
				return 0;
    }
	for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup

}

if(is_support_modem(2)){

    snprintf(dev_node2, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2));
    st->fd_atmd2 = openDeviceWithDeviceName(dev_node2);
    
    if (-1 == st->fd_atmd2) {
				LOGD(TAG "Fail to open CCCI interface\n");
				return 0;
    }
	for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup

}

#if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT)
        #if defined(PURE_AP_USE_EXTERNAL_MODEM)
            st->fd_atmd_dt = openDeviceWithDeviceName("/dev/ttyUSB1");
        #else
	        st->fd_atmd_dt = openDeviceWithDeviceName("/dev/ttyMT0");
        #endif
		//st->fd_atmd_dt= openDeviceWithDeviceName(CCCI_MODEM_MT6252);
		if (-1 == st->fd_atmd_dt) {
					LOGD(TAG "Fail to open CCCI interface\n");
					return 0;
		}
	for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup
#endif

    if(is_support_modem(5)){

        snprintf(dev_node5, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS5));
        st->fd_atmd5 = openDeviceWithDeviceName(dev_node5);
        
        if (-1 == st->fd_atmd5) {
				LOGD(TAG "Fail to open /dev/eemcs_mux interface\n");
				return 0;
        }
	    for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup

    }

	for (i = 0; i<50; i++) usleep(50000); //sleep 1s wait for modem bootup

if(is_support_modem(1)){
	ExitFlightMode (st->fd_atmd, TRUE);
}


if(is_support_modem(2)){
	ExitFlightMode_DualTalk (st->fd_atmd2, TRUE);
}

#if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT)
	ExitFlightMode_DualTalk(st->fd_atmd_dt, TRUE);
#endif

    for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup

    if(is_support_modem(5)){
    	ExitFlightMode (st->fd_atmd5, TRUE);
    }

    init_text(&st->title, param->name, COLOR_YELLOW);
    init_text(&st->text, &st->info[0], COLOR_YELLOW);   

 
    memset(&st->info[0], 0, sizeof(st->info));
    sprintf(st->info, "%s\n", uistr_info_emergency_call_testing);
    st->exit_thd = false;

    if (!st->iv) {
        iv = ui_new_itemview();
        if (!iv) {
            LOGD(TAG "No memory");
            return -1;
        }
        st->iv = iv;
    }
    
    iv = st->iv;
    iv->set_title(iv, &st->title);
    iv->set_items(iv, sigtest_items, 0);
    iv->set_text(iv, &st->text); 
	iv->start_menu(iv,0);

	iv->redraw(iv);

#if 0
    do {
        chosen = iv->run(iv, &exit);
        switch (chosen) {
#ifdef MTK_DT_SUPPORT
			  case ITEM_CALL_FOR_MODEM_75:
					pret = dial112(st->fd_atmd);
					if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
					break;

			  case ITEM_CALL_FOR_MODEM_52:
					pret = dial112(st->fd_atmd2);
					if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
					break;
#else
            case ITEM_EMG_CALL:
               	   LOGD(TAG "Come to EMG Call...\n");

//mtk70828
				   sprintf(st->info, "%s\n", "Dial 112 on going ...!\n");
				   iv->redraw(iv);
//mtk70828
		           pret = dial112(st->fd_atmd);
		           if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
                             
                break;
#endif
            case ITEM_PASS:
            case ITEM_FAIL:
                if (chosen == ITEM_PASS) {
                    st->mod->test_result = FTM_TEST_PASS;
                } else if (chosen == ITEM_FAIL) {
                    st->mod->test_result = FTM_TEST_FAIL;
                }          
                exit = true;
                break;
        }
        
        if (exit) {
            st->exit_thd = true;
            // Need to add ATH command else the loop back test will have noise.
			ExitFlightMode (st->fd_atmd, FALSE);
				
#ifdef MTK_DT_SUPPORT
	ExitFlightMode_DualTalk (st->fd_atmd2, FALSE);
#endif
            break;
        }        
    } while (1);
#endif

if(is_support_modem(1)){
	LOGD(TAG "Come to EMG Call IN MTK_ENABLE_MD1\n");
	pret = dial112(st->fd_atmd);
	if(!strcmp(pret, "OK"))
	{
		LOGD(TAG "Dial 112 Success\n");
		sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem1);
		st->mod->test_result = FTM_TEST_PASS;
		test_result_temp = FTM_TEST_PASS;
	}
	else 
	{
		LOGD(TAG "Dial 112 Fail IN MTK_ENABLE_MD1\n");
		sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem1);
		st->mod->test_result = FTM_TEST_FAIL;
		test_result_temp = FTM_TEST_FAIL;
	}
	ExitFlightMode (st->fd_atmd, FALSE);
    closeDevice(st->fd_atmd);
    iv->redraw(iv);
}


if(is_support_modem(2)){
	LOGD(TAG "Come to EMG Call\n");
		pret = dial112(st->fd_atmd2);
		if(!strcmp(pret, "OK"))
		{
			LOGD(TAG "Dial 112 Success\n");
			sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem2);
			if(test_result_temp == FTM_TEST_PASS)
			{
				st->mod->test_result = FTM_TEST_PASS;
			}
			else
			{
				st->mod->test_result = FTM_TEST_FAIL;
			}
		}
		else 
		{
			LOGD(TAG "Dial 112 Fail in MTK_ENABLE_MD2\n");
			sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem2);
			st->mod->test_result = FTM_TEST_FAIL;
		}
		ExitFlightMode (st->fd_atmd2, FALSE);
		
	closeDevice (st->fd_atmd2);
    iv->redraw(iv);
}


#if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT)
		LOGD(TAG "Come to EMG Call\n");
			pret = dial112(st->fd_atmd_dt);
			if(!strcmp(pret, "OK"))
			{
				LOGD(TAG "Dial 112 Success\n");
				sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem2);
				if(test_result_temp == FTM_TEST_PASS)
			    {
	    			st->mod->test_result = FTM_TEST_PASS;
		    	}
		    	else
		    	{
				    st->mod->test_result = FTM_TEST_FAIL;
		    	}
			}
			else 
			{
				LOGD(TAG "Dial 112 Fail in MTK_ENABLE_MD2\n");
				sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem2);
				st->mod->test_result = FTM_TEST_FAIL;
			}
			ExitFlightMode (st->fd_atmd_dt, FALSE);
			
		closeDevice (st->fd_atmd_dt);
        iv->redraw(iv);
#endif

	

   if(is_support_modem(5)){
	 LOGD(TAG "Come to EMG Call IN MTK_ENABLE_MD5\n");
	 pret = dial112(st->fd_atmd5);
	 if(!strcmp(pret, "OK"))
	 {
		LOGD(TAG "Dial 112 Success\n");
		sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem5);
		st->mod->test_result = FTM_TEST_PASS;
		test_result_temp = FTM_TEST_PASS;
	 }
	 else 
	 {
		LOGD(TAG "Dial 112 Fail IN MTK_ENABLE_MD5\n");
		sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem5);
		st->mod->test_result = FTM_TEST_FAIL;
		test_result_temp = FTM_TEST_FAIL;
	 }
	 ExitFlightMode (st->fd_atmd5, FALSE);
     closeDevice(st->fd_atmd5);
     iv->redraw(iv);
   }	

    return 0;
}
示例#5
0
static void *rf_c2k_update_thread(void *priv)
{
    struct rf_c2k_factory *rf = (struct rf_c2k_factory*)priv;
    struct itemview *iv = rf->iv;
    const int THRESHOLD = -95;//-95dbm
    int sqm = -1;
    int rssi = 0;
    int fd3 = -1;
    int fd1 = -1;
    int i = 0;
    const int HALT_TIME = 200000;//0.2s (200000ms)
    char atDevPath1[32] = {0};

    LOGD(TAG "%s: Start\n", __FUNCTION__);

    if (is_support_modem(4)) {
#ifdef MTK_FTM_SVLTE_SUPPORT
        LOGD(TAG "Get CCCI path of modem1");
        if (get_ccci_path(0, atDevPath1) == 0) {
        	LOGD(TAG "Can't get CCCI path!");
        	goto err;
        }
        LOGD(TAG "Go to open modem1 fd1 atDevPath1 = %s", atDevPath1);
        fd1 = openDeviceWithDeviceName(atDevPath1);
        if (fd1 < 0)
         {
             LOGD(TAG "Fail to open fd1\n");
             goto err;
         }
         LOGD(TAG "OK to open fd1\n");

         for (i = 0; i < 30; i++) usleep(50000); //sleep 1.5s wait for modem bootup
#endif
         LOGD(TAG "Go to open C2K modem fd3!");
         fd3 = openDeviceWithDeviceName("/dev/ttySDIO4");
         if (fd3 < 0)
         {
             LOGD(TAG "Fail to open ttySDIO4\n");
             goto err;
         }
         LOGD(TAG "OK to open ttySDIO4\n");
         for (i = 0; i < 30; i++) usleep(50000); //sleep 1.5s wait for modem bootup
    } else {
        LOGD(TAG "Not support C2K modem\n");
        goto err;
    }

    int ret = 0;
    int retryCount = 0;
    memset(rf->info, 0, sizeof(rf->info) / sizeof(*(rf->info)));
    if (!rf->test_done) {
        bool ret = false;
        rf->test_done = true;

        const int BUF_SIZE = 256;
        char cmd_buf[BUF_SIZE];
        char rsp_buf[BUF_SIZE];
#ifdef MTK_FTM_SVLTE_SUPPORT
        LOGD(TAG "[MD1] AT polling first:\n");
        do
        {
            send_at (fd1, "AT\r\n");
        } while (wait4_ack (fd1, NULL, 300));
        LOGD(TAG "[MD1]Send AT+ESLP=0 to disable sleep mode:\n");
        if (send_at (fd1, "AT+ESLP=0\r\n")) goto err;
        if (wait4_ack (fd1, NULL, 5000)) goto err;

        LOGD(TAG "[MD1]Send AT+ESIMS=1 to reset SIM1:\n");
        if (send_at (fd1, "AT+ESIMS=1\r\n")) goto err;
        if (wait4_ack (fd1, NULL, 5000)) goto err;

        LOGD(TAG "[MD1]Send AT+EFUN=0\n");
        if (send_at (fd1, "AT+EFUN=0\r\n")) goto err;
        if (wait4_ack(fd1, NULL, 5000)) goto err;

        LOGD(TAG "[MD1]Send AT+EMDSTATUS=1,1\n");
        if (send_at(fd1, "AT+EMDSTATUS=1,1\r\n")) goto err;
        if (wait4_ack(fd1, NULL, 5000)) goto err;

        LOGD(TAG "[MD1]send AT+EFUN=1\n");
        if (send_at (fd1, "AT+EFUN=1\r\n")) goto err;
        if (wait4_ack (fd1, NULL, 3000)) goto err;

#endif
        LOGD(TAG "[MD2]AT polling first:\n");
        send_at(fd3, "ate0q0v1\r\n");
        do
        {
            send_at(fd3, "AT\r\n");
        } while (wait4_ack(fd3, NULL, 3000));

        LOGD(TAG "[MD2]Send AT+CPOF to reboot modem \n");
        if (send_at(fd3, "AT+CPOF\r\n")) goto err;
        wait4_ack(fd3, NULL, 5000);

        LOGD(TAG "Wait for +VPON:0, C2K modem turn off:\n");
        wait4_ack (fd3, "+VPON:0", 3000);
#ifdef MTK_FTM_SVLTE_SUPPORT
        LOGD(TAG "[MD2]Send AT+EMDSTATUS=1,1\n");
        if (send_at(fd3, "AT+EMDSTATUS=1,1\r\n")) goto err;
        wait4_ack(fd3, NULL, 5000);
#endif
        /* Reboot modem to make new band setting work */
        LOGD(TAG "[MD2]Send AT+CPON to reboot modem \n");
        if (send_at(fd3, "AT+CPON\r\n")) goto err;
        if (wait4_ack(fd3, NULL, 5000)) goto err;

        usleep(150 * HALT_TIME); // Wait for regist network

        /* Start RF test */
        retryCount = 0;

        while (retryCount < 100) {
            const char *tok = "+CSQ";
            char *p = NULL;
            char *value = NULL;
            sqm = -1;
            rssi = 0;

            /* Check RF SQM level. The verdict of RF test is the SQM level shall be greater than 18 */
            LOGD(TAG "\n");
            usleep(HALT_TIME);

            memset(cmd_buf, 0, sizeof(cmd_buf));
            strcpy(cmd_buf, "AT+CSQ\r\n");
            write(fd3, cmd_buf, strlen(cmd_buf));

            LOGD(TAG "Send AT+CSQ to check RF, retryCount=%d \n",retryCount);

            memset(rsp_buf, 0, sizeof(rsp_buf));
            read(fd3, rsp_buf, BUF_SIZE);
            LOGD(TAG "------AT+CSQ start------\n");
            LOGD(TAG "%s\n", rsp_buf);
            LOGD(TAG "------AT+CSQ end------\n");
            retryCount++;

            p = strstr(rsp_buf, tok);
            if (p != NULL)
            {
                LOGD(TAG "p=%s\n", p);
                p = strchr(p, ':');
                if (p == NULL)
                {
                    LOGE(TAG "Invalid CSQ response urc");
                    goto err;
                }
                p++;
                //skip whitespace if any
                while (*p != '\0' && isspace(*p)) {
                   p++;
                }

                value = strsep(&p, ":");
                sqm = atoi(value);
                LOGD(TAG "sqm=%d\n", sqm);

                if (sqm > 0 && sqm < 31) {
                    rssi = sqm * 2 - 114;
                } else if (sqm == 0) {
                    rssi = -113;
                } else if (sqm == 31) {
                    rssi = -51;
                } else {
                    printf("invalid sqm value.\n");
                }
                LOGD(TAG "rssi=%d\n", rssi);

            }

            /* AT+CSQ might got null immeidate response or modem did not have any measurement result yet. keep retry polling */
            if (rssi >= THRESHOLD && rssi != 0) {
                ret = 1;
                LOGD(TAG "rssi pass in RF test");
                break;
            } else if (rssi < THRESHOLD) {
                ret = 0;
                LOGD(TAG "rssi fail in RF test");
                break;
            }
        }

        if (ret) {
            LOGD(TAG "C2K RF Test result pass\n");
            
            sprintf(rf->info + strlen(rf->info),
                "%s: %s. RSSI value is %d dbm\n", uistr_rf_c2k_test, uistr_info_pass, rssi);
            close(fd3);
            fd3 = -1;
            close(fd1);
            fd1 = -1;

            iv->redraw(iv);
            usleep(25 * HALT_TIME); //Wait 5s to show test info
            LOGD(TAG "%s: Exit\n", __FUNCTION__);

            return NULL;
        } else {
            LOGD(TAG "C2K RF Test result fail\n");
            goto err;
        }

        LOGD(TAG "redraw\n");
        iv->redraw(iv);
    }

err:
    LOGD(TAG "%s: FAIL\n", __FUNCTION__);
    sprintf(rf->info + strlen(rf->info),
        "%s: %s. RSSI value is %d dbm\n", uistr_rf_c2k_test, uistr_info_fail, rssi);

    if (fd1 > 0)
    {
        close(fd1);
    }
    fd1 = -1;
    if (fd3 > 0)
    {
        close(fd3);
    }
    fd3 = -1;

    LOGD(TAG "redraw\n");
    iv->redraw(iv);
    usleep(25 * HALT_TIME); //Wait 5s to show test info
    LOGD(TAG "%s: Exit\n", __FUNCTION__);

    return NULL;
}
int sigtest_entry(struct ftm_param *param, void *priv)
{
    char *ptr;
    int chosen, i;
    bool exit = false;
    struct sigtest *st = (struct sigtest *)priv;
    struct itemview *iv;
    int ret;
    const char *pret;

    LOGD(TAG "%s\n", __FUNCTION__);
#ifdef MTK_DT_SUPPORT

	st->fd_atmd = openDeviceWithDeviceName(CCCI_MODEM_MT6575);
    if (-1 == st->fd_atmd) {
				LOGD(TAG "Fail to open CCCI interface\n");
				return 0;
    }

	st->fd_atmd2 = openDeviceWithDeviceName(CCCI_MODEM_MT6252);
    if (-1 == st->fd_atmd2) {
				LOGD(TAG "Fail to open CCCI interface\n");
				return 0;
    }
	initTermIO(st->fd_atmd2,5);

#else	
	st->fd_atmd = openDevice();
    if(-1 == st->fd_atmd) {
 		LOGD(TAG "Fail to open CCCI interface\n");
		return 0;
    }
#endif

	for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup
	
	ExitFlightMode (st->fd_atmd, TRUE);
	
#ifdef MTK_DT_SUPPORT
	ExitFlightMode_DualTalk (st->fd_atmd2, TRUE);
#endif

    init_text(&st->title, param->name, COLOR_YELLOW);
    init_text(&st->text, &st->info[0], COLOR_YELLOW);   

    //sigtest_update_info(st, st->info);
    sprintf(st->info, "%s", "Emergency call is not started!\n");
    st->exit_thd = false;

    if (!st->iv) {
        iv = ui_new_itemview();
        if (!iv) {
            LOGD(TAG "No memory");
            return -1;
        }
        st->iv = iv;
    }
    
    iv = st->iv;
    iv->set_title(iv, &st->title);
    iv->set_items(iv, sigtest_items, 0);
    iv->set_text(iv, &st->text); 

    do {
        chosen = iv->run(iv, &exit);
        switch (chosen) {
#ifdef MTK_DT_SUPPORT
			  case ITEM_CALL_FOR_MODEM_75:
					pret = dial112(st->fd_atmd);
					if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
					break;

			  case ITEM_CALL_FOR_MODEM_52:
					pret = dial112(st->fd_atmd2);
					if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
					break;
#else
            case ITEM_EMG_CALL:
               	   LOGD(TAG "Come to EMG Call...\n");

//mtk70828
				   sprintf(st->info, "%s\n", "Dial 112 on going ...!\n");
				   iv->redraw(iv);
//mtk70828
		           pret = dial112(st->fd_atmd);
		           if(!strcmp(pret, "OK")) {
		                 LOGD(TAG "Dial 112 Success\n");
		                 sprintf(st->info, "%s\n", "Dial 112 Success!\n");
		           }
					else {
						LOGD(TAG "Dial 112 Fail\n");
						sprintf(st->info, "%s\n", "Dial 112 Fail!\n");
					}
					iv->redraw(iv);
                             
                break;
#endif
            case ITEM_PASS:
            case ITEM_FAIL:
                if (chosen == ITEM_PASS) {
                    st->mod->test_result = FTM_TEST_PASS;
                } else if (chosen == ITEM_FAIL) {
                    st->mod->test_result = FTM_TEST_FAIL;
                }          
                exit = true;
                break;
        }
        
        if (exit) {
            st->exit_thd = true;
            // Need to add ATH command else the loop back test will have noise.
			ExitFlightMode (st->fd_atmd, FALSE);
				
#ifdef MTK_DT_SUPPORT
	ExitFlightMode_DualTalk (st->fd_atmd2, FALSE);
#endif
            break;
        }        
    } while (1);
    closeDevice(st->fd_atmd);
		
#ifdef MTK_DT_SUPPORT
	closeDevice (st->fd_atmd2);
#endif

    return 0;
}