int switch_boot_mode(void) { unsigned long hold_time = 50000, polling_time = 10000, tmp; printf("ENTER U-BOOT SWITCH MODE !!!!\n"); saradc_enable(); //added by pengtj for added fool idle get_key(); get_key(); #ifdef ADD_FOR_MBX_C03 set_power_pin(); #endif while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } logo_display(); if (reboot_mode == AMLOGIC_FACTORY_RESET_REBOOT ) { printf("Recovery Start from upgrade apk...\n"); #ifdef CONFIG_UPGRADE into_recovery(); #else run_command ("run recoveryboot", 0); #endif hang(); } else if(hold_time > 0) { printf("Normal Start...\n"); #ifdef POWER_KEY_LEAD_START_UP int temp=0; int bootdelay=0; printf("Please input power key ! \n "); gpio_direction_input(INPUT_KEY_VALUE); printf("\b\b\b\0"); while(1) { temp=gpio_get_value(INPUT_KEY_VALUE); if(temp<1) break; udelay(10000); }; #endif return 1; } else { printf("Recovery Start...\n"); //aml_autoscript(); #ifdef CONFIG_UPGRADE into_recovery(); #else run_command ("run recoveryboot", 0); #endif hang(); } }
/** * Display the source. * * A line in the source viewer looks like, * # │ marker text * where, * # is the line number to display or ~ if no line number * │ is the divider between the line number or it is a mark * marker is shortarrow, longarrow, highlight, block, etc * text is the source code to display * * The syntax highlighting works as follows, * * The # * - If breakpoint is set, use Breakpoint * - If breakpoint is disabled, use DisabledBreakpoint * - If selected line, use SelectedLineNr * - If executing line, use ExecutingLineNr * - Otherwise, no highlighting group * * The │ * - When source window is in focus, the character is bolded, otherwise normal * - If the user has a mark set, the mark will be displayed instead of any * other character. * - Edge case: When the marker is long or short arrow, CGDB prints ├ * instead of │ the ├ is colored based on highlighting group for * the selected or executing arrow. * * The marker * - The marker is the shortarrow, longarrow, highlight or block * - The color is based off the corresponding highlighting group * * The text * - The syntax highlighting source code to display * - Will be colored with SelectedLineHighlight or ExecutingLineHighlight * if the line is the selected or executing line and the display is set * to highlight. */ int source_display(struct sviewer *sview, int focus, enum win_refresh dorefresh) { int i; int lwidth; int line; int count; enum LineDisplayStyle exe_display_style, sel_display_style; int sellineno, exelineno; int enabled_bp, disabled_bp; int exe_line_display_is_arrow, sel_line_display_is_arrow; int exe_arrow_attr, sel_arrow_attr; int exe_block_attr, sel_block_attr; char fmt[16]; int width, height; int focus_attr = focus ? SWIN_A_BOLD : 0; int showmarks = cgdbrc_get_int(CGDBRC_SHOWMARKS); int hlsearch = cgdbrc_get_int(CGDBRC_HLSEARCH); int mark_attr; struct hl_line_attr *sel_highlight_attrs = 0; struct hl_line_attr *exe_highlight_attrs = 0; /* Check that a file is loaded */ if (!sview->cur || !sview->cur->file_buf.lines) { logo_display(sview->win); if (dorefresh == WIN_REFRESH) swin_wrefresh(sview->win); else swin_wnoutrefresh(sview->win); return 0; } sellineno = hl_groups_get_attr( hl_groups_instance, HLG_SELECTED_LINE_NUMBER); exelineno = hl_groups_get_attr( hl_groups_instance, HLG_EXECUTING_LINE_NUMBER); enabled_bp = hl_groups_get_attr( hl_groups_instance, HLG_ENABLED_BREAKPOINT); disabled_bp = hl_groups_get_attr( hl_groups_instance, HLG_DISABLED_BREAKPOINT); exe_display_style = cgdbrc_get_displaystyle(CGDBRC_EXECUTING_LINE_DISPLAY); exe_arrow_attr = hl_groups_get_attr( hl_groups_instance, HLG_EXECUTING_LINE_ARROW); exe_block_attr = hl_groups_get_attr( hl_groups_instance, HLG_EXECUTING_LINE_BLOCK); sel_display_style = cgdbrc_get_displaystyle(CGDBRC_SELECTED_LINE_DISPLAY); sel_arrow_attr = hl_groups_get_attr( hl_groups_instance, HLG_SELECTED_LINE_ARROW); sel_block_attr = hl_groups_get_attr( hl_groups_instance, HLG_SELECTED_LINE_BLOCK); exe_line_display_is_arrow = exe_display_style == LINE_DISPLAY_SHORT_ARROW || exe_display_style == LINE_DISPLAY_LONG_ARROW; sel_line_display_is_arrow = sel_display_style == LINE_DISPLAY_SHORT_ARROW || sel_display_style == LINE_DISPLAY_LONG_ARROW; mark_attr = hl_groups_get_attr(hl_groups_instance, HLG_MARK); sbpush(sel_highlight_attrs, hl_line_attr(0, HLG_SELECTED_LINE_HIGHLIGHT)); sbpush(exe_highlight_attrs, hl_line_attr(0, HLG_EXECUTING_LINE_HIGHLIGHT)); /* Make sure cursor is visible */ swin_curs_set(!!focus); /* Initialize variables */ height = swin_getmaxy(sview->win); width = swin_getmaxx(sview->win); /* Set starting line number (center source file if it's small enough) */ count = sbcount(sview->cur->file_buf.lines); if (count < height) { line = (count - height) / 2; } else { line = sview->cur->sel_line - height / 2; if (line > count - height) line = count - height; else if (line < 0) line = 0; } /* Print 'height' lines of the file, starting at 'line' */ lwidth = log10_uint(count) + 1; snprintf(fmt, sizeof(fmt), "%%%dd", lwidth); for (i = 0; i < height; i++, line++) { int column_offset = 0; /* Is this the current selected line? */ int is_sel_line = (line >= 0 && sview->cur->sel_line == line); /* Is this the current executing line */ int is_exe_line = (line >= 0 && sview->cur->exe_line == line); struct source_line *sline = (line < 0 || line >= count)? NULL:&sview->cur->file_buf.lines[line]; struct hl_line_attr *printline_attrs = (sline)?sline->attrs:0; swin_wmove(sview->win, i, 0); /* Print the line number */ if (line < 0 || line >= count) { for (int j = 1; j < lwidth; j++) swin_waddch(sview->win, ' '); swin_waddch(sview->win, '~'); } else { int line_attr = 0; int bp_val = sview->cur->lflags[line].breakpt; if (bp_val == 1) { line_attr = enabled_bp; } else if (bp_val == 2) { line_attr = disabled_bp; } else if (bp_val == 0 && is_exe_line) { line_attr = exelineno; } else if (bp_val == 0 && is_sel_line) { line_attr = sellineno; } swin_wattron(sview->win, line_attr); swin_wprintw(sview->win, fmt, line + 1); swin_wattroff(sview->win, line_attr); } if (!swin_has_colors()) { /* TODO: swin_wprintw(sview->win, "%.*s\n", sview->cur->file_buf.lines[line].line, sview->cur->file_buf.lines[line].len); */ continue; } /* Print the vertical bar or mark */ { SWIN_CHTYPE vert_bar_char; int vert_bar_attr; int mc; if (showmarks && ((mc = source_get_mark_char(sview, sview->cur, line)) > 0)) { vert_bar_char = mc; vert_bar_attr = mark_attr; } else if (is_exe_line && exe_line_display_is_arrow) { vert_bar_attr = exe_arrow_attr; vert_bar_char = SWIN_SYM_LTEE; } else if (is_sel_line && sel_line_display_is_arrow) { vert_bar_attr = sel_arrow_attr; vert_bar_char = SWIN_SYM_LTEE; } else { vert_bar_attr = focus_attr; vert_bar_char = SWIN_SYM_VLINE; } swin_wattron(sview->win, vert_bar_attr); swin_waddch(sview->win, vert_bar_char); swin_wattroff(sview->win, vert_bar_attr); } /* Print the marker */ if (is_exe_line || is_sel_line) { enum LineDisplayStyle display_style; int arrow_attr, block_attr; struct hl_line_attr *highlight_attr; if (is_exe_line) { display_style = exe_display_style; arrow_attr = exe_arrow_attr; block_attr = exe_block_attr; highlight_attr = exe_highlight_attrs; } else { display_style = sel_display_style; arrow_attr = sel_arrow_attr; block_attr = sel_block_attr; highlight_attr = sel_highlight_attrs; } switch (display_style) { case LINE_DISPLAY_SHORT_ARROW: swin_wattron(sview->win, arrow_attr); swin_waddch(sview->win, '>'); swin_wattroff(sview->win, arrow_attr); break; case LINE_DISPLAY_LONG_ARROW: swin_wattron(sview->win, arrow_attr); column_offset = get_line_leading_ws_count( sline->line, sline->len); column_offset -= (sview->cur->sel_col + 1); if (column_offset < 0) column_offset = 0; /* Now actually draw the arrow */ for (int j = 0; j < column_offset; j++) swin_waddch(sview->win, SWIN_SYM_HLINE); swin_waddch(sview->win, '>'); swin_wattroff(sview->win, arrow_attr); break; case LINE_DISPLAY_HIGHLIGHT: swin_waddch(sview->win, ' '); printline_attrs = highlight_attr; break; case LINE_DISPLAY_BLOCK: column_offset = get_line_leading_ws_count( sline->line, sline->len); column_offset -= (sview->cur->sel_col + 1); if (column_offset < 0) column_offset = 0; /* Now actually draw the space to the block */ for (int j = 0; j < column_offset; j++) swin_waddch(sview->win, ' '); /* Draw the block */ swin_wattron(sview->win, block_attr); swin_waddch(sview->win, ' '); swin_wattroff(sview->win, block_attr); break; } } else { swin_waddch(sview->win, ' '); } /* Print the text */ if (line < 0 || line >= count) { for (int j = 2 + lwidth; j < width; j++) swin_waddch(sview->win, ' '); } else { int x, y; y = swin_getcury(sview->win); x = swin_getcurx(sview->win); hl_printline(sview->win, sline->line, sline->len, printline_attrs, -1, -1, sview->cur->sel_col + column_offset, width - lwidth - 2); if (hlsearch && sview->last_hlregex) { struct hl_line_attr *attrs = hl_regex_highlight( &sview->last_hlregex, sline->line, HLG_SEARCH); if (sbcount(attrs)) { hl_printline_highlight(sview->win, sline->line, sline->len, attrs, x, y, sview->cur->sel_col + column_offset, width - lwidth - 2); sbfree(attrs); } } if (is_sel_line && sview->hlregex) { struct hl_line_attr *attrs = hl_regex_highlight( &sview->hlregex, sline->line, HLG_INCSEARCH); if (sbcount(attrs)) { hl_printline_highlight(sview->win, sline->line, sline->len, attrs, x, y, sview->cur->sel_col + column_offset, width - lwidth - 2); sbfree(attrs); } } } } switch(dorefresh) { case WIN_NO_REFRESH: swin_wnoutrefresh(sview->win); break; case WIN_REFRESH: swin_wrefresh(sview->win); break; } sbfree(sel_highlight_attrs); sbfree(exe_highlight_attrs); return 0; }
int switch_boot_mode(void) { // unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; int ret=0; act8942_init(&act8942_pdata); //act8942_dump(); upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d\n", upgrade_step); saradc_enable(); #ifdef ENABLE_FONT_RESOURCE RegisterFont(DEFAULT_FONT); #endif ret=isVolAKeyPress(); if(ret==1) aml_autoscript(); powerkey_hold(0); #ifdef CONFIG_AML_TINY_USBTOOL usb_boot(1); #endif if(upgrade_step == 2) { switch(reboot_mode) { case AMLOGIC_NORMAL_BOOT: { ret=keypress_to_upgrade(); if(ret==0) return 0; printf("AMLOGIC_NORMAL_BOOT...\n"); power_up(); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_up(); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_up(); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } default: { printf("AMLOGIC_CHARGING_REBOOT...\n"); if(is_ac_connected) { power_up(); #ifdef CONFIG_BATTERY_CHARGING //battery_charging(); #endif logo_display(); } else { powerkey_hold(0); #ifdef CONFIG_BATTERY_CHARGING if(get_powerkey_hold_count()) { logo_display(); if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_down(); printf("Low Power!!!\nPower Down!\n"); hang(); } #else if(powerkey_hold(1000)) { #endif logo_display(); power_up(); printf("Power Up!\n"); } else { power_down(); printf("Power Down!\n"); hang(); } } break; } } } else { power_up(); printf("Upgrade step %d...\n", upgrade_step); } if(upgrade_step == 0) { #ifdef CONFIG_AML_TINY_USBTOOL usb_boot(1); #endif display_messge("upgrade step 1! Don't Power Off!"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if(upgrade_step == 1) { display_messge("upgrade step 2! Don't Power Off!"); run_command ("defenv", 0); run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } //added by Elvis for added fool idle /*get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { printf("Normal Start...\n"); return 1; } else { display_messge("upgrading... please wait"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } */ ret=keypress_to_upgrade(); return ret; //return 0; }
int switch_boot_mode(void) { unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d !!!!!!!!!!!!!!!!!!\n", upgrade_step); saradc_enable(); #ifdef CONFIG_UBI_SUPPORT powerkey_hold(0); run_command ("ubi part system", 0); powerkey_hold(0); run_command ("ubifsmount system", 0); //run_command ("ubifsls", 0); #endif if(upgrade_step == 3) { switch(reboot_mode) { case AMLOGIC_NORMAL_BOOT: { printf("AMLOGIC_NORMAL_BOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } case AMLOGIC_CHARGING_REBOOT: { printf("AMLOGIC_POWERDOWN... \n"); if(is_ac_connected) { power_unhold(); hang(); } } default: { printf("Default.... \n"); if(is_ac_connected) { power_hold(); #ifdef CONFIG_BATTERY_CHARGING battery_charging(); #endif } else { powerkey_hold(0); if(get_powerkey_hold_count()) { #ifdef CONFIG_BATTERY_CHARGING if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_unhold(); printf("Low Power!!!\nPower Down!\n"); hang(); } #endif power_hold(); printf("Power Up!\n"); } else { power_unhold(); printf("Power Down!\n"); hang(); } } //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); break; } } } else { power_hold(); printf("Upgrade step %d...\n", upgrade_step); green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); } if(upgrade_step == 0) { if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if((upgrade_step >0) && (upgrade_step < 3)) { if(upgrade_step == 1) { if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { run_command ("defenv", 0); run_command ("save", 0); } } run_command ("set upgrade_step 3", 0); run_command ("save", 0); //upgrade_partition(); into_recovery(); } //added by Elvis for added fool idle get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { aml_autoscript(); printf("Normal Start...\n"); return 1; } else { if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 3", 0); run_command ("save", 0); #ifndef CONFIG_UBI_SUPPORT //upgrade_partition(); #endif into_recovery(); } }
int switch_boot_mode(void) { unsigned long hold_time = 3000, polling_time = 10000, tmp; unsigned long upgrade_step; upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d !!!!!!!!!!!!!!!!!!\n", upgrade_step); #ifdef CONFIG_SARADC saradc_enable(); #endif #ifdef ENABLE_FONT_RESOURCE RegisterFont(DEFAULT_FONT); #endif //aml_autoscript(); //logo_display(); //return 1; if(upgrade_step == 3) { switch(reboot_mode) { case AMLOGIC_NORMAL_BOOT: { printf("AMLOGIC_NORMAL_BOOT...\n"); printf("reboot_mode is %d...\n", reboot_mode); power_hold(); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_hold(); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0);; break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_hold(); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } default: { printf("Default.... \n"); power_hold(); logo_display(); break; } } } else { power_hold(); printf("Upgrade step %d...\n", upgrade_step); } if(upgrade_step == 0) { display_messge("upgrade step 1! Don't Power Off!"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); //return -1; } } else if((upgrade_step >0) && (upgrade_step < 3)) { if(upgrade_step == 1) { display_messge("upgrade step 2! Don't Power Off!"); if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { run_command ("defenv", 0); run_command ("save", 0); } } display_messge("upgrade step 3! Don't Power Off!"); run_command ("set upgrade_step 3", 0); run_command ("save", 0); //upgrade_partition(); into_recovery(); } powerkey_hold(0); if(!powerkey_hold(hold_time)) { //aml_autoscript(); if(upgrade_step == 0) { logo_display(); run_command ("set upgrade_step 3", 0); run_command ("save", 0); } printf("Normal Start...\n"); return 1; } else { display_messge("upgrading... please wait"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 3", 0); run_command ("save", 0); #ifndef CONFIG_UBI_SUPPORT //upgrade_partition(); #endif into_recovery(); } }
int switch_boot_mode(void) { unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; clrbits_le32(P_PREG_PAD_GPIO2_EN_N, (1<<25)); // VCC5V_EN GPIOD_9 setbits_le32(P_PREG_PAD_GPIO2_O, (1<<25)); get_osd_size(); #ifdef CONFIG_PMU_ACT8942 act8942_init(&act8942_pdata); //act8942_dump(); #endif upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d\n", upgrade_step); saradc_enable(); #ifdef ENABLE_FONT_RESOURCE RegisterFont(DEFAULT_FONT); #endif aml_autoscript(); powerkey_hold(0); u32 reboot_mode_current = reboot_mode;//cvt reboot_mode_clear();//cvt #ifdef CONFIG_AML_TINY_USBTOOL //cvt extern int usb_boot(int clk_cfg, int time_out); if((reboot_mode_current == MESON_USB_BURNER_REBOOT) || get_burner_key()) { usb_boot(1, 200000); } #endif if(upgrade_step == 2) { switch(reboot_mode_current) { case AMLOGIC_NORMAL_BOOT: { printf("AMLOGIC_NORMAL_BOOT...\n"); power_up(); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_up(); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_up(); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } default: { printf("AMLOGIC_CHARGING_REBOOT...\n"); if(is_ac_connected) { power_up(); #ifdef CONFIG_BATTERY_CHARGING battery_charging(); #endif logo_display(); } else { powerkey_hold(0); #ifdef CONFIG_BATTERY_CHARGING if(get_powerkey_hold_count()) { logo_display(); if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_down(); printf("Low Power!!!\nPower Down!\n"); hang(); } logo_display(); power_up(); printf("Power Up!\n"); } #else if(powerkey_hold(1000)) { logo_display(); power_up(); printf("Power Up!\n"); } #endif else { power_down(); printf("Power Down!\n"); hang(); } } break; } } } else { power_up(); printf("Upgrade step %d...\n", upgrade_step); } if(upgrade_step == 0) { display_messge("upgrade step 1! Don't Power Off!"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if(upgrade_step == 1) { display_messge("upgrade step 2! Don't Power Off!"); run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } //added by Elvis for added fool idle get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { printf("Normal Start...\n"); char *recovery_command; recovery_command = getenv("recovery_command"); if (strcmp(recovery_command, "--usb_burning") == 0){ run_command ("set recovery_command", 0); } run_command ("save", 0); return 1; } else { display_messge("upgrading... please wait"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } return 0; }