aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extendedcommands.c48
-rw-r--r--recovery.c13
-rw-r--r--recovery_ui.h4
3 files changed, 49 insertions, 16 deletions
diff --git a/extendedcommands.c b/extendedcommands.c
index 6759335..fb64e75 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -1318,6 +1318,8 @@ void show_advanced_menu()
};
static char* list[] = { "reboot recovery",
+ "reboot to bootloader",
+ "power off",
"wipe dalvik cache",
"report error",
"key test",
@@ -1328,14 +1330,20 @@ void show_advanced_menu()
NULL
};
+ char bootloader_mode[PROPERTY_VALUE_MAX];
+ property_get("ro.bootloader.mode", bootloader_mode, "");
+ if (!strcmp(bootloader_mode, "download")) {
+ list[1] = "reboot to download mode";
+ }
+
if (!can_partition("/sdcard")) {
- list[5] = NULL;
+ list[7] = NULL;
}
if (!can_partition("/external_sd")) {
- list[6] = NULL;
+ list[8] = NULL;
}
if (!can_partition("/emmc")) {
- list[7] = NULL;
+ list[9] = NULL;
}
for (;;)
@@ -1346,9 +1354,29 @@ void show_advanced_menu()
switch (chosen_item)
{
case 0:
- android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ {
+ ui_print("Rebooting recovery...\n");
+ reboot_main_system(ANDROID_RB_RESTART2, 0, "recovery");
break;
+ }
case 1:
+ {
+ if (!strcmp(bootloader_mode, "download")) {
+ ui_print("Rebooting to download mode...\n");
+ reboot_main_system(ANDROID_RB_RESTART2, 0, "download");
+ } else {
+ ui_print("Rebooting to bootloader...\n");
+ reboot_main_system(ANDROID_RB_RESTART2, 0, "bootloader");
+ }
+ break;
+ }
+ case 2:
+ {
+ ui_print("Shutting down...\n");
+ reboot_main_system(ANDROID_RB_POWEROFF, 0, 0);
+ break;
+ }
+ case 3:
if (0 != ensure_path_mounted("/data"))
break;
ensure_path_mounted("/sd-ext");
@@ -1361,10 +1389,10 @@ void show_advanced_menu()
}
ensure_path_unmounted("/data");
break;
- case 2:
+ case 4:
handle_failure(1);
break;
- case 3:
+ case 5:
{
ui_print("Outputting key codes.\n");
ui_print("Go back to end debugging.\n");
@@ -1379,16 +1407,16 @@ void show_advanced_menu()
while (action != GO_BACK);
break;
}
- case 4:
+ case 6:
ui_printlogtail(12);
break;
- case 5:
+ case 7:
partition_sdcard("/sdcard");
break;
- case 6:
+ case 8:
partition_sdcard("/external_sd");
break;
- case 7:
+ case 9:
partition_sdcard("/emmc");
break;
}
diff --git a/recovery.c b/recovery.c
index 6e8555e..9e54147 100644
--- a/recovery.c
+++ b/recovery.c
@@ -716,7 +716,7 @@ prompt_and_wait() {
int status;
switch (chosen_item) {
case ITEM_REBOOT:
- poweroff=0;
+ poweroff = 0;
return;
case ITEM_WIPE_DATA:
@@ -749,10 +749,6 @@ prompt_and_wait() {
case ITEM_ADVANCED:
show_advanced_menu();
break;
-
- case ITEM_POWEROFF:
- poweroff = 1;
- return;
}
}
}
@@ -795,6 +791,13 @@ setup_adbd() {
property_set("service.adb.root", "1");
}
+// call a clean reboot
+void reboot_main_system(int cmd, int flags, char *arg) {
+ verify_root_and_recovery();
+ finish_recovery(NULL); // sync() in here
+ android_reboot(cmd, flags, arg);
+}
+
int
main(int argc, char **argv) {
diff --git a/recovery_ui.h b/recovery_ui.h
index ec88d95..0555122 100644
--- a/recovery_ui.h
+++ b/recovery_ui.h
@@ -83,7 +83,6 @@ int device_wipe_data();
#define ITEM_NANDROID 4
#define ITEM_PARTITION 5
#define ITEM_ADVANCED 6
-#define ITEM_POWEROFF 7
// Header text to display above the main menu.
extern char* MENU_HEADERS[];
@@ -102,4 +101,7 @@ set_sdcard_update_bootloader_message();
extern int ui_handle_key(int key, int visible);
+// call a clean reboot
+void reboot_main_system(int cmd, int flags, char *arg);
+
#endif