summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShelley Chen <shchen@chromium.org>2017-08-16 11:31:05 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-08-21 22:03:59 -0700
commit93f1142d7a7bbee5c1bb551d197ce1e4c2c2ef87 (patch)
tree4e0ac2c359adba2389259ae9f26f59e46a128913
parent5afa7faf7bfc4ec5efd22af5f2124a575bc64e52 (diff)
downloadvboot-93f1142d7a7bbee5c1bb551d197ce1e4c2c2ef87.tar.gz
detachables: Display recovery insert icon at recovery startup
When user first starts up recovery (3 finger salute), display usb insert instructions and original insert graphic until user starts pushing volume buttons. If the user pushes power button during while the icon is displayed (no menu items), device will shut down (this is to accomodate users that accidentally enter the recovery screen and want to exit quickly). Upon user pressing the volume buttons, the insert icon will disappear and user will see the menu items and be able to scroll up/down. BUG=b:64400325 BRANCH=None TEST=boot into recovery. Make sure graphic shown until start pushing volume buttons. Change-Id: I4a5001271a0b84d1237d4bbc6a098afa10cb9372 Signed-off-by: Shelley Chen <shchen@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/617600 Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r--firmware/lib/vboot_ui_menu.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index 4bc0cffc..3bda0c01 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -167,6 +167,7 @@ typedef enum _VB_MENU {
VB_MENU_RECOVERY,
VB_MENU_TO_DEV,
VB_MENU_LANGUAGES,
+ VB_MENU_RECOVERY_INSERT,
VB_MENU_COUNT,
} VB_MENU;
@@ -368,6 +369,7 @@ static const uint32_t VB_MENU_TO_SCREEN_MAP[] = {
VB_SCREEN_RECOVERY_MENU,
VB_SCREEN_RECOVERY_TO_DEV_MENU,
VB_SCREEN_LANGUAGES_MENU,
+ VB_SCREEN_RECOVERY_INSERT,
};
VbError_t vb2_draw_current_screen(struct vb2_context *ctx,
@@ -520,6 +522,10 @@ VbError_t vb2_update_menu(struct vb2_context *ctx)
break;
}
break;
+ case VB_MENU_RECOVERY_INSERT:
+ vb2_set_menu_items(VB_MENU_RECOVERY,
+ VB_RECOVERY_POWER_OFF);
+ break;
case VB_MENU_RECOVERY:
switch(current_menu_idx) {
case VB_RECOVERY_TO_DEV:
@@ -1058,9 +1064,9 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
VB2_DEBUG("waiting for a recovery image\n");
/* Initialize menu to recovery menu. */
- current_menu = VB_MENU_RECOVERY;
- prev_menu = VB_MENU_RECOVERY;
- current_menu_idx = VB_RECOVERY_POWER_OFF;
+ current_menu = VB_MENU_RECOVERY_INSERT;
+ prev_menu = VB_MENU_RECOVERY_INSERT;
+ current_menu_idx = 0;
while (1) {
VB2_DEBUG("attempting to load kernel2\n");
@@ -1101,13 +1107,15 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
/* nothing pressed */
break;
case VB_BUTTON_VOL_UP:
- case VB_KEY_UP:
- vb2_update_selection(cparams, key);
- vb2_draw_current_screen(ctx, cparams);
- break;
case VB_BUTTON_VOL_DOWN:
+ case VB_KEY_UP:
case VB_KEY_DOWN:
- vb2_update_selection(cparams, key);
+ if (current_menu == VB_MENU_RECOVERY_INSERT) {
+ ret = vb2_update_menu(ctx);
+ vb2_set_disabled_idx_mask(shared->flags);
+ } else {
+ vb2_update_selection(cparams, key);
+ }
vb2_draw_current_screen(ctx, cparams);
break;
case VB_BUTTON_POWER:
@@ -1124,6 +1132,18 @@ VbError_t vb2_recovery_menu(struct vb2_context *ctx, VbCommonParams *cparams)
vb2_set_disabled_idx_mask(shared->flags);
+ /*
+ * If user hits power button in
+ * initial recovery screen (ie:
+ * because didn't really want to go
+ * there), power button will turn off
+ * device.
+ */
+ if (current_menu == VB_MENU_RECOVERY_INSERT) {
+ ret = VBERROR_SHUTDOWN_REQUESTED;
+ }
+
+
if (current_menu != VB_MENU_RECOVERY ||
current_menu_idx != VB_RECOVERY_DBG_INFO) {
/*