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; }
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; }
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; }
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; }