Example #1
0
int clear_flash_entry(struct ftm_param *param, void *priv)
{
    char *ptr;
    int chosen;
    bool exit = false;
    struct nand_info *flash = (struct nand_info *)priv;
    struct textview *tv = &flash->tv;
    struct itemview *iv;
    struct timeval tv1, tv2;

    flash->erase_result = false;
    
    LOGD(TAG "%s\n", __FUNCTION__);

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

    clear_flash_update_info(flash, flash->info);

    flash->exit_clr_thd = false;  

#if 0
    if (!flash->iv) 
    {
        iv = ui_new_itemview();
        if (!iv) 
        {
            LOGD(TAG "No memory");
            return -1;
        }
        flash->iv = iv;
    }
#endif
    ui_init_textview(tv, flash_key_handler, (void*)flash);
#if 0    
    iv = flash->iv;
    iv->set_title(iv, &flash->title);
    iv->set_items(iv, clear_flash_items, 0);
    iv->set_text(iv, &flash->text);
#endif
    tv->set_title(tv, &flash->title);
    tv->set_text(tv, &flash->text);
    
    pthread_create(&flash->update_thd, NULL, clear_flash_update_thread, priv);
#if 0    
    do
    {
        chosen = iv->run(iv, &exit);
        switch (chosen)
        {
        case ITEM_PASS:
        case ITEM_FAIL:
              if (chosen == ITEM_PASS)
              {
                flash->mod->test_result = FTM_TEST_PASS;
              } else if (chosen == ITEM_FAIL)
              {
                flash->mod->test_result = FTM_TEST_FAIL;
            }           
            exit = true;
            break;
        }
        
        if (exit)
        {
            flash->exit_clr_thd = true;
            break;
        }        
    }
    while (1);
#endif
    LOGD(TAG "Start the NAND flash erase operations !\n");

    gettimeofday(&tv1, NULL);
    flash->teststart = tv1.tv_sec * 1000000 + tv1.tv_usec;
    
    flash->erase_result = format_root_device(DATA_PARTITION);
    
    gettimeofday(&tv2, NULL);
    flash->testend = tv2.tv_sec * 1000000 + tv2.tv_usec;
    
    LOGD(TAG "Finish the NAND flash erase operations !\n");
    
    flash->exit_clr_thd = true;
    
    pthread_join(flash->update_thd, NULL); 

    sync();
    reboot(RB_AUTOBOOT); 

    return 0;
}
Example #2
0
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;
}
Example #3
0
int battery_entry(struct ftm_param *param, void *priv)
{
    char *ptr;
    int chosen;
    bool exit = false;
    struct batteryFTM *batt = (struct batteryFTM *)priv;
    struct textview *tv;    
	struct itemview *iv;
	//auto test
	int temp=0;
	int temp_v_bat=0;
	int temp_chr_cuttent=0;
	int temp_v_chr=0;
	int temp_v_bat_temp=0;
	unsigned long i=0;
	unsigned long i_loop_time=100;

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

    init_text(&batt->title, param->name, COLOR_YELLOW);
    init_text(&batt->text, &batt->info[0], COLOR_YELLOW);
    init_text(&batt->left_btn, "Fail", COLOR_YELLOW);
    init_text(&batt->center_btn, "Pass", COLOR_YELLOW);
    init_text(&batt->right_btn, "Back", COLOR_YELLOW);

    battery_update_info(batt, batt->info);

    /* show text view */
    batt->exit_thd = false;     

#if 0
    pthread_create(&batt->batt_update_thd, NULL, battery_update_thread, priv);

    tv = &batt->tv;
    ui_init_textview(tv, battery_key_handler, (void*)batt);
    tv->set_title(tv, &batt->title);
    tv->set_text(tv, &batt->text);
    tv->set_btn(tv, &batt->left_btn, &batt->center_btn, &batt->right_btn);
    tv->run(tv);

    pthread_join(batt->batt_update_thd, NULL);
#else
	if (!batt->iv) {
        iv = ui_new_itemview();
        if (!iv) {
            LOGD(TAG "No memory");
            return -1;
        }
        batt->iv = iv;
    }
    
    iv = batt->iv;
    iv->set_title(iv, &batt->title);
    iv->set_items(iv, battery_items, 0);
    iv->set_text(iv, &batt->text);
	iv->start_menu(iv,0);

    #if 1
	iv->redraw(iv);


	return_data.battery.current = 0;
	return_data.battery.voltage = 0;

  //auto test - if no charger, return fail

   #ifdef FEATURE_FTM_VBAT_TEMP_CHECK
   //auto test - V bat temp	
   temp_v_bat_temp = get_v_bat_temp();
   if(temp_v_bat_temp < AUTO_TEST_VBAT_TEMP_MIN || temp_v_bat_temp > AUTO_TEST_VBAT_TEMP_MAX)
   {
     LOGD(TAG "[FTM_BAT 5] VBatTemp = %d , return fail\n", temp_v_chr);		
     batt->mod->test_result = FTM_TEST_FAIL;
     return 0;
   }
   #endif
  
  temp_v_chr = get_v_charger();  
  if(temp_v_chr < AUTO_TEST_VCHR_VALUE)
  {
    LOGD(TAG "[FTM_BAT 0] %d < %d => no charger, return fail\n", temp_v_chr, AUTO_TEST_VCHR_VALUE);		
    batt->mod->test_result = FTM_TEST_FAIL;
    return 0;
  }

	//auto test - V_bat
	temp_v_bat = get_v_bat_sen();
	return_data.battery.voltage = temp_v_bat;
	if(temp_v_bat < AUTO_TEST_VBAT_VALUE)
	{
		LOGD(TAG "[FTM_BAT 1] %d,%d,%d,%d,%d,%d,%d\n", 
			temp_v_bat, temp_chr_cuttent, i, i_loop_time, 
			AUTO_TEST_VBAT_VALUE, AUTO_TEST_THD_VALUE, AUTO_TEST_CHR_CURRENT_VALUE);
		
	    batt->mod->test_result = FTM_TEST_FAIL;
		return 0;
	}
	if(temp_v_bat > AUTO_TEST_THD_VALUE)
	{
		LOGD(TAG "[FTM_BAT 2] %d,%d,%d,%d,%d,%d,%d\n", 
			temp_v_bat, temp_chr_cuttent, i, i_loop_time, 
			AUTO_TEST_VBAT_VALUE, AUTO_TEST_THD_VALUE, AUTO_TEST_CHR_CURRENT_VALUE);
    
		//ignore I_charging test because the battery is full, no charging current
	    batt->mod->test_result = FTM_TEST_PASS;		
		return 0;
	}

	//auto test - I_charging
	for(i=0 ; i<i_loop_time ; i++)
	{
		temp_chr_cuttent = get_charging_current();
		return_data.battery.current = temp_chr_cuttent;
		
		if(temp_chr_cuttent > AUTO_TEST_CHR_CURRENT_VALUE)
			break;
	}	
	
	
	if(i >= i_loop_time)
	{
		LOGD(TAG "[FTM_BAT 3] %d,%d,%d,%d,%d,%d,%d\n", 
			temp_v_bat, temp_chr_cuttent, i, i_loop_time, 
			AUTO_TEST_VBAT_VALUE, AUTO_TEST_THD_VALUE, AUTO_TEST_CHR_CURRENT_VALUE);
		
	    batt->mod->test_result = FTM_TEST_FAIL;
		return 0;
	}
	else
	{
		LOGD(TAG "[FTM_BAT 4] %d,%d,%d,%d,%d,%d,%d\n", 
			temp_v_bat, temp_chr_cuttent, i, i_loop_time, 
			AUTO_TEST_VBAT_VALUE, AUTO_TEST_THD_VALUE, AUTO_TEST_CHR_CURRENT_VALUE);
		
		batt->mod->test_result = FTM_TEST_PASS;
		return 0;
	}	


	#else
    pthread_create(&batt->batt_update_thd, NULL, battery_update_iv_thread, priv);
    do {
        chosen = iv->run(iv, &exit);
        switch (chosen) {
		case ITEM_AC_CHARGER:
			set_Charger_Current(AC_CHARGER_CURRENT);
			break;
		case ITEM_USB_CHARGER:	
			set_Charger_Current(USB_CHARGER_CURRENT);
			break;
			
        case ITEM_PASS:
        case ITEM_FAIL:
            if (chosen == ITEM_PASS) {
                batt->mod->test_result = FTM_TEST_PASS;
            } else if (chosen == ITEM_FAIL) {
                batt->mod->test_result = FTM_TEST_FAIL;
            }           
            exit = true;
            break;
        }
        
        if (exit) {
            batt->exit_thd = true;
            break;
        }        
    } while (1);
    pthread_join(batt->batt_update_thd, NULL);
#endif	
	//do nothing
#endif	

    return 0;
}
int battery_entry(struct ftm_param *param, void *priv)
{
    char *ptr;
    int chosen;
    bool exit = false;
    struct batteryFTM *batt = (struct batteryFTM *)priv;
    struct textview *tv;    
	struct itemview *iv;

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

    init_text(&batt->title, param->name, COLOR_YELLOW);
    init_text(&batt->text, &batt->info[0], COLOR_YELLOW);
    init_text(&batt->left_btn, "Fail", COLOR_YELLOW);
    init_text(&batt->center_btn, "Pass", COLOR_YELLOW);
    init_text(&batt->right_btn, "Back", COLOR_YELLOW);

    battery_update_info(batt, batt->info);

    /* show text view */
    batt->exit_thd = false;     

#if 0
    pthread_create(&batt->batt_update_thd, NULL, battery_update_thread, priv);

    tv = &batt->tv;
    ui_init_textview(tv, battery_key_handler, (void*)batt);
    tv->set_title(tv, &batt->title);
    tv->set_text(tv, &batt->text);
    tv->set_btn(tv, &batt->left_btn, &batt->center_btn, &batt->right_btn);
    tv->run(tv);

    pthread_join(batt->batt_update_thd, NULL);
#else
	if (!batt->iv) {
        iv = ui_new_itemview();
        if (!iv) {
            LOGD(TAG "No memory");
            return -1;
        }
        batt->iv = iv;
    }
    
    iv = batt->iv;
    iv->set_title(iv, &batt->title);
    iv->set_items(iv, battery_items, 0);
    iv->set_text(iv, &batt->text);
    
    pthread_create(&batt->batt_update_thd, NULL, battery_update_iv_thread, priv);
    do {
        chosen = iv->run(iv, &exit);
        switch (chosen) {
#ifndef MTK_NCP1851_SUPPORT
		case ITEM_AC_CHARGER:
			set_Charger_Current(AC_CHARGER_CURRENT);
			break;
		case ITEM_USB_CHARGER:	
			set_Charger_Current(USB_CHARGER_CURRENT);
			break;
#endif
        case ITEM_PASS:
        case ITEM_FAIL:
            if (chosen == ITEM_PASS) {
                batt->mod->test_result = FTM_TEST_PASS;
            } else if (chosen == ITEM_FAIL) {
                batt->mod->test_result = FTM_TEST_FAIL;
            }           
            exit = true;
            break;
        }
        
        if (exit) {
            batt->exit_thd = true;
            break;
        }        
    } while (1);
    pthread_join(batt->batt_update_thd, NULL);
#endif	

    return 0;
}
Example #5
0
static int keys_entry(struct ftm_param *param, void *priv)
{
	int i, err, num = 0;
	int x = 0, y = CHAR_HEIGHT;
	bool exit;
	static char buf[128];
	struct keys *keys = (struct keys *)priv;
	struct textview *tv = &keys->tv;
	//struct itemview *iv = keys->iv;

	err = 0;
	err = kpd_open();
	if(err != 0){
		LOGD(TAG "Couldn't open kpd device!\n");
	}
	
	keys->pstart = 0;
	#if( !defined(FACTORY_TP_KEY_TEST))||defined(CKT_SUPPORT_AUTOTEST_MODE)
	keys->pnum = (KEYS_NUM_KEYS <= KEYS_KEY_PER_PAGE ? KEYS_NUM_KEYS
	                                                 : KEYS_KEY_PER_PAGE);
	#else
	keys->pnum = (KEYS_NUM_KEYS_ALL <= KEYS_KEY_PER_PAGE ? KEYS_NUM_KEYS_ALL
	                                                 : KEYS_KEY_PER_PAGE);
	#endif
	
	keys->ptested = 0;
	#if( !defined(FACTORY_TP_KEY_TEST))||defined(CKT_SUPPORT_AUTOTEST_MODE)
	keys->untested = KEYS_NUM_KEYS;
	#else
	keys->untested = KEYS_NUM_KEYS_ALL;
	#endif

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

  #if( !defined(FACTORY_TP_KEY_TEST))||defined(CKT_SUPPORT_AUTOTEST_MODE)
	for (i = 0; i < KEYS_NUM_KEYS; i++) {
		if (keys_keymap[i].code == CUST_KEY_CONFIRM || keys_keymap[i].code == get_confirm_key()) {
			keys->cfm_i = i;
			keys->cfm_cnt = 0;
		}

		init_ctext(&keys_ctext[i], keys_keymap[i].name,
		           COLOR_YELLOW, x, y);
		num++;

		x += KEYS_COL_WIDTH_NEW;
		if (!(num % KEYS_NUM_COLS_NEW)) {
			x = 0;
			y += CHAR_HEIGHT;
			if (num == KEYS_KEY_PER_PAGE) {
				/* next page */
				y = CHAR_HEIGHT;
				num = 0;
			}
		}
	}
	#else
 for (i = 0; i < KEYS_NUM_KEYS_ALL; i++) {
 	  if(i<KEYS_NUM_KEYS){
       if (keys_keymap[i].code == CUST_KEY_CONFIRM || keys_keymap[i].code == get_confirm_key()) {
			    keys->cfm_i = i;
			    keys->cfm_cnt = 0;
		    }

		    init_ctext(&keys_ctext[i], keys_keymap[i].name,
		           COLOR_YELLOW, x, y);
 	  }
 	  else{
      if (TPkeys_keymap[i-KEYS_NUM_KEYS].code == CUST_KEY_CONFIRM) {
			    keys->cfm_i = i;
			    keys->cfm_cnt = 0;
		    }

		    init_ctext(&keys_ctext[i], TPkeys_keymap[i-KEYS_NUM_KEYS].name,
		           COLOR_YELLOW, x, y);
 	  }

 	  
		
		num++;

		x += KEYS_COL_WIDTH_NEW;
		if (!(num % KEYS_NUM_COLS_NEW)) {
			x = 0;
			y += CHAR_HEIGHT;
			if (num == KEYS_KEY_PER_PAGE) {
				/* next page */
				y = CHAR_HEIGHT;
				num = 0;
			}
		}
	}
	#endif

	ui_init_textview(tv, keys_key_handler, (void*)keys);
	tv->set_title(tv, &keys->title);
	tv->set_ctext(tv, keys_ctext, keys->pnum);
#ifdef CKT_SUPPORT_AUTOTEST_MODE	
	
	/*******************auto test part***********************/
	if(get_is_ata())
	pthread_create(&keys->update_thd, NULL, kpd_update_iv_thread, priv);
	/*****************************************************/
#endif		
	tv->run(tv);

	
	/* finish testing */
	/*iv->set_title(iv, &keys->title);
	iv->set_items(iv, keys_item, ITEM_PASS);

	while (1) {
		num = iv->run(iv, &exit);
		if (num == ITEM_PASS) {
			keys->mod->test_result = FTM_TEST_PASS;
			exit = true;
		} else if (num == ITEM_FAIL) {
			keys->mod->test_result = FTM_TEST_FAIL;
			exit = true;
		}

		if (exit)
			break;
	}*/

	return 0;
}