From 8f43ad977003ac4ed502c285dc08feca5e4d9bdf Mon Sep 17 00:00:00 2001 From: Hsuan Ting Chen Date: Tue, 18 Aug 2020 14:43:16 +0800 Subject: vboot/ui: Always show page up/down buttons in log screen Always show page up/down buttons in log screen. Beep if users select the page up button on the first page or the page down button on the last page. BRANCH=puff, zork BUG=b:146399181, b:163301076 TEST=emerge-puff depthcharge TEST=emerge-zork depthcharge TEST=navigate to the debug info screen by Cq-Depend: chromium:2361582 Signed-off-by: Hsuan Ting Chen Change-Id: I29a567554f9283ea3fca0f58fb31c7056523c2a9 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2361823 Commit-Queue: Hung-Te Lin Reviewed-by: Yu-Ping Wu --- firmware/2lib/2ui_screens.c | 91 +++++++++++---------------------------------- tests/vb2_ui_tests.c | 17 ++++++--- 2 files changed, 34 insertions(+), 74 deletions(-) diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c index b8ff3a5c..e0a6d599 100644 --- a/firmware/2lib/2ui_screens.c +++ b/firmware/2lib/2ui_screens.c @@ -53,60 +53,45 @@ static vb2_error_t power_off_action(struct vb2_ui_context *ui) /******************************************************************************/ /* Functions used for log screens */ +/* + * TODO(b/163301076): Reconsider the functionalities of page up/down buttons + * when reaching the start/end of the log. + */ static vb2_error_t log_page_init(struct vb2_ui_context *ui, - uint32_t page_up_item, uint32_t page_down_item, uint32_t alternate_item) { ui->state->current_page = 0; - if (ui->state->page_count == 1) { - ui->state->disabled_item_mask |= 1 << page_up_item; - ui->state->disabled_item_mask |= 1 << page_down_item; + if (ui->state->page_count == 1) ui->state->selected_item = alternate_item; - } else { - ui->state->disabled_item_mask |= 1 << page_up_item; + else ui->state->selected_item = page_down_item; - } return VB2_REQUEST_UI_CONTINUE; } -static vb2_error_t log_page_prev(struct vb2_ui_context *ui, - uint32_t page_up_item, - uint32_t page_down_item) +static vb2_error_t log_page_prev_action(struct vb2_ui_context *ui) { - if (ui->state->current_page == 0) - return VB2_REQUEST_UI_CONTINUE; - ui->state->current_page--; - - /* Clear bits of page down. */ - ui->state->disabled_item_mask &= ~(1 << page_down_item); - if (ui->state->current_page == 0) { - ui->state->disabled_item_mask |= 1 << page_up_item; - ui->state->selected_item = page_down_item; + VB2_DEBUG("WARNING: Ignore page up on the first page\n"); + ui->error_beep = 1; + return VB2_REQUEST_UI_CONTINUE; } + ui->state->current_page--; return VB2_REQUEST_UI_CONTINUE; } -static vb2_error_t log_page_next(struct vb2_ui_context *ui, - uint32_t page_up_item, - uint32_t page_down_item) +static vb2_error_t log_page_next_action(struct vb2_ui_context *ui) { - if (ui->state->current_page == ui->state->page_count - 1) - return VB2_REQUEST_UI_CONTINUE; - ui->state->current_page++; - - /* Clear bits of page up. */ - ui->state->disabled_item_mask &= ~(1 << page_up_item); - if (ui->state->current_page == ui->state->page_count - 1) { - ui->state->disabled_item_mask |= 1 << page_down_item; - ui->state->selected_item = page_up_item; + VB2_DEBUG("WARNING: Ignore page down on the last page\n"); + ui->error_beep = 1; + return VB2_REQUEST_UI_CONTINUE; } + ui->state->current_page++; return VB2_REQUEST_UI_CONTINUE; } @@ -258,7 +243,6 @@ static const struct vb2_screen_info advanced_options_screen = { /******************************************************************************/ /* VB2_SCREEN_DEBUG_INFO */ -#define DEBUG_INFO_ITEM_PAGE_UP 1 #define DEBUG_INFO_ITEM_PAGE_DOWN 2 #define DEBUG_INFO_ITEM_BACK 3 @@ -278,7 +262,6 @@ static vb2_error_t debug_info_init(struct vb2_ui_context *ui) } return log_page_init(ui, - DEBUG_INFO_ITEM_PAGE_UP, DEBUG_INFO_ITEM_PAGE_DOWN, DEBUG_INFO_ITEM_BACK); } @@ -301,29 +284,15 @@ static vb2_error_t debug_info_reinit(struct vb2_ui_context *ui) return VB2_REQUEST_UI_CONTINUE; } -static vb2_error_t debug_info_page_prev_action(struct vb2_ui_context *ui) -{ - return log_page_prev(ui, - DEBUG_INFO_ITEM_PAGE_UP, - DEBUG_INFO_ITEM_PAGE_DOWN); -} - -static vb2_error_t debug_info_page_next_action(struct vb2_ui_context *ui) -{ - return log_page_next(ui, - DEBUG_INFO_ITEM_PAGE_UP, - DEBUG_INFO_ITEM_PAGE_DOWN); -} - static const struct vb2_menu_item debug_info_items[] = { LANGUAGE_SELECT_ITEM, - [DEBUG_INFO_ITEM_PAGE_UP] = { + { .text = "Page up", - .action = debug_info_page_prev_action, + .action = log_page_prev_action, }, [DEBUG_INFO_ITEM_PAGE_DOWN] = { .text = "Page down", - .action = debug_info_page_next_action, + .action = log_page_next_action, }, [DEBUG_INFO_ITEM_BACK] = BACK_ITEM, POWER_OFF_ITEM, @@ -340,7 +309,6 @@ static const struct vb2_screen_info debug_info_screen = { /******************************************************************************/ /* VB2_SCREEN_FIRMWARE_LOG */ -#define FIRMWARE_LOG_ITEM_PAGE_UP 1 #define FIRMWARE_LOG_ITEM_PAGE_DOWN 2 #define FIRMWARE_LOG_ITEM_BACK 3 @@ -360,7 +328,6 @@ static vb2_error_t firmware_log_init(struct vb2_ui_context *ui) } return log_page_init(ui, - FIRMWARE_LOG_ITEM_PAGE_UP, FIRMWARE_LOG_ITEM_PAGE_DOWN, FIRMWARE_LOG_ITEM_BACK); } @@ -383,29 +350,15 @@ static vb2_error_t firmware_log_reinit(struct vb2_ui_context *ui) return VB2_REQUEST_UI_CONTINUE; } -static vb2_error_t firmware_log_page_prev_action(struct vb2_ui_context *ui) -{ - return log_page_prev(ui, - FIRMWARE_LOG_ITEM_PAGE_UP, - FIRMWARE_LOG_ITEM_PAGE_DOWN); -} - -static vb2_error_t firmware_log_page_next_action(struct vb2_ui_context *ui) -{ - return log_page_next(ui, - FIRMWARE_LOG_ITEM_PAGE_UP, - FIRMWARE_LOG_ITEM_PAGE_DOWN); -} - static const struct vb2_menu_item firmware_log_items[] = { LANGUAGE_SELECT_ITEM, - [FIRMWARE_LOG_ITEM_PAGE_UP] = { + { .text = "Page up", - .action = firmware_log_page_prev_action, + .action = log_page_prev_action, }, [FIRMWARE_LOG_ITEM_PAGE_DOWN] = { .text = "Page down", - .action = firmware_log_page_next_action, + .action = log_page_next_action, }, [FIRMWARE_LOG_ITEM_BACK] = BACK_ITEM, POWER_OFF_ITEM, diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index 00c6e935..d3b371c9 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -1095,7 +1095,7 @@ static void debug_info_tests(void) "get a one-page debug info"); DISPLAYED_PASS(); DISPLAYED_EQ("debug info", VB2_SCREEN_DEBUG_INFO, - MOCK_IGNORE, 3, 0x6, 0); + MOCK_IGNORE, 3, 0x0, 0); DISPLAYED_EQ("back to root screen", VB2_SCREEN_RECOVERY_SELECT, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); DISPLAYED_NO_EXTRA(); @@ -1106,24 +1106,31 @@ static void debug_info_tests(void) add_mock_keypress('\t'); add_mock_keypress(VB_KEY_ENTER); /* page 0, select on page down */ add_mock_keypress(VB_KEY_ENTER); /* page 1, select on page down */ + add_mock_keypress(VB_KEY_UP); /* page 2, select on page down */ add_mock_keypress(VB_KEY_ENTER); /* page 2, select on page up */ add_mock_keypress(VB_KEY_ENTER); /* page 1, select on page up */ + add_mock_keypress(VB_KEY_DOWN); /* page 0, select on page up */ add_mock_keypress(VB_KEY_ENTER); /* page 0, select on page down */ - add_mock_keypress(VB_KEY_DOWN); + add_mock_keypress(VB_KEY_DOWN); /* page 1, select on page down */ add_mock_keypress(VB_KEY_ENTER); /* page 1, select on back */ + extend_calls_until_shutdown(); TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, "get a three-page debug info and navigate"); DISPLAYED_PASS(); DISPLAYED_EQ("debug info page #0", VB2_SCREEN_DEBUG_INFO, - MOCK_IGNORE, 2, 0x2, 0); + MOCK_IGNORE, 2, 0x0, 0); DISPLAYED_EQ("debug info page #1", VB2_SCREEN_DEBUG_INFO, MOCK_IGNORE, 2, 0x0, 1); DISPLAYED_EQ("debug info page #2", VB2_SCREEN_DEBUG_INFO, - MOCK_IGNORE, 1, 0x4, 2); + MOCK_IGNORE, 2, 0x0, 2); + DISPLAYED_EQ("debug info page #2", VB2_SCREEN_DEBUG_INFO, + MOCK_IGNORE, 1, 0x0, 2); DISPLAYED_EQ("debug info page #1", VB2_SCREEN_DEBUG_INFO, MOCK_IGNORE, 1, 0x0, 1); DISPLAYED_EQ("debug info page #0", VB2_SCREEN_DEBUG_INFO, - MOCK_IGNORE, 2, 0x2, 0); + MOCK_IGNORE, 1, 0x0, 0); + DISPLAYED_EQ("debug info page #0", VB2_SCREEN_DEBUG_INFO, + MOCK_IGNORE, 2, 0x0, 0); DISPLAYED_EQ("debug info page #1", VB2_SCREEN_DEBUG_INFO, MOCK_IGNORE, 2, 0x0, 1); DISPLAYED_EQ("debug info page #1", VB2_SCREEN_DEBUG_INFO, -- cgit v1.2.1