int do_ini_parser(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int rcode = 0; const char* filePath = "dos_dc_burn.ini"; //mmc info to ensure sdcard inserted and inited, mmcinfo outer as there U-disk later rcode = run_command("mmcinfo", 0); if(rcode){ err("Fail in init mmc, Does sdcard not plugged in?\n"); return __LINE__; } if(2 <= argc){ filePath = argv[1]; } rcode = parse_ini_cfg_file(filePath); if(rcode){ err("error in parse ini file\n"); return __LINE__; } return 0; }
int optimus_burn_with_cfg_file(const char* cfgFile) { extern ConfigPara_t g_sdcBurnPara ; int ret = 0; HIMAGE hImg = NULL; ConfigPara_t* pSdcCfgPara = &g_sdcBurnPara; const char* pkgPath = pSdcCfgPara->burnEx.pkgPath; __hdle hUiProgress = NULL; ret = parse_ini_cfg_file(cfgFile); if (ret) { DWN_ERR("Fail to parse file %s\n", cfgFile); ret = __LINE__; goto _finish; } if (pSdcCfgPara->custom.eraseBootloader && strcmp("1", getenv("usb_update"))) { if (is_bootloader_old()) { DWN_MSG("To erase OLD bootloader !\n"); ret = optimus_erase_bootloader("sdc"); if (ret) { DWN_ERR("Fail to erase bootloader\n"); ret = __LINE__; goto _finish; } #if defined(CONFIG_VIDEO_AMLLCD) //axp to low power off LCD, no-charging DWN_MSG("To close LCD\n"); ret = run_command("video dev disable", 0); if (ret) { printf("Fail to close back light\n"); /*return __LINE__;*/ } #endif// #if defined(CONFIG_VIDEO_AMLLCD) DWN_MSG("Reset to load NEW uboot from ext-mmc!\n"); optimus_reset(OPTIMUS_BURN_COMPLETE__REBOOT_SDC_BURN); return __LINE__;//should never reach here!! } } if (OPTIMUS_WORK_MODE_SDC_PRODUCE == optimus_work_mode_get()) //led not depend on image res, can init early { if (optimus_led_open(LED_TYPE_PWM)) { DWN_ERR("Fail to open led for sdc_produce\n"); return __LINE__; } optimus_led_show_in_process_of_burning(); } hImg = image_open("mmc", "0", "1", pkgPath); if (!hImg) { DWN_ERR("Fail to open image %s\n", pkgPath); ret = __LINE__; goto _finish; } //update dtb for burning drivers ret = optimus_sdc_burn_dtb_load(hImg); if (ITEM_NOT_EXIST != ret && ret) { DWN_ERR("Fail in load dtb for sdc_burn\n"); ret = __LINE__; goto _finish; } if (video_res_prepare_for_upgrade(hImg)) { DWN_ERR("Fail when prepare bm res or init video for upgrade\n"); image_close(hImg); return __LINE__; } show_logo_to_report_burning(); hUiProgress = optimus_progress_ui_request_for_sdc_burn(); if (!hUiProgress) { DWN_ERR("request progress handle failed!\n"); ret = __LINE__; goto _finish; } optimus_progress_ui_direct_update_progress(hUiProgress, UPGRADE_STEPS_AFTER_IMAGE_OPEN_OK); int hasBootloader = 0; u64 datapartsSz = optimus_img_decoder_get_data_parts_size(hImg, &hasBootloader); int eraseFlag = pSdcCfgPara->custom.eraseFlash; if (!datapartsSz) { eraseFlag = 0; DWN_MSG("Disable erase as data parts size is 0\n"); } ret = optimus_storage_init(eraseFlag); if (ret) { DWN_ERR("Fail to init stoarge for sdc burn\n"); return __LINE__; } optimus_progress_ui_direct_update_progress(hUiProgress, UPGRADE_STEPS_AFTER_DISK_INIT_OK); if (datapartsSz) { ret = optimus_progress_ui_set_smart_mode(hUiProgress, datapartsSz, UPGRADE_STEPS_FOR_BURN_DATA_PARTS_IN_PKG(!pSdcCfgPara->burnEx.bitsMap.mediaPath)); if (ret) { DWN_ERR("Fail to set smart mode\n"); ret = __LINE__; goto _finish; } ret = optimus_sdc_burn_partitions(pSdcCfgPara, hImg, hUiProgress, 1); if (ret) { DWN_ERR("Fail when burn partitions\n"); ret = __LINE__; goto _finish; } } if (pSdcCfgPara->burnEx.bitsMap.mediaPath) //burn media image { const char* mediaPath = pSdcCfgPara->burnEx.mediaPath; ret = optimus_sdc_burn_media_partition(mediaPath, NULL);//no progress bar info if have partition image not in package if (ret) { DWN_ERR("Fail to burn media partition with image %s\n", mediaPath); optimus_storage_exit(); ret = __LINE__;goto _finish; } } optimus_progress_ui_direct_update_progress(hUiProgress, UPGRADE_STPES_AFTER_BURN_DATA_PARTS_OK); //TO burn nandkey/securekey/efusekey ret = sdc_burn_aml_keys(hImg, pSdcCfgPara->custom.keyOverwrite); if (ret) { DWN_ERR("Fail in sdc_burn_aml_keys\n"); ret = __LINE__;goto _finish; } #if 1 if (hasBootloader) {//burn bootloader ret = optimus_burn_bootlader(hImg); if (ret) { DWN_ERR("Fail in burn bootloader\n"); goto _finish; } else {//update bootloader ENV only when bootloader image is burned ret = optimus_set_burn_complete_flag(); if (ret) { DWN_ERR("Fail in set_burn_complete_flag\n"); ret = __LINE__; goto _finish; } } } #endif optimus_progress_ui_direct_update_progress(hUiProgress, UPGRADE_STEPS_AFTER_BURN_BOOTLOADER_OK); _finish: image_close(hImg); optimus_progress_ui_report_upgrade_stat(hUiProgress, !ret); optimus_report_burn_complete_sta(ret, pSdcCfgPara->custom.rebootAfterBurn); optimus_progress_ui_release(hUiProgress); //optimus_storage_exit();//temporary not exit storage driver when failed as may continue burning after burn return ret; }