summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsuan Ting Chen <roccochen@chromium.org>2020-08-18 14:43:16 +0800
committerHsuan Ting Chen <roccochen@chromium.org>2020-09-09 06:17:10 +0000
commit8f43ad977003ac4ed502c285dc08feca5e4d9bdf (patch)
tree93b282f4cba1874f5f13e1d01ebe39a748f0afd1
parent94801a71980ddf3295a7849bbe575327d295595d (diff)
downloadvboot-8f43ad977003ac4ed502c285dc08feca5e4d9bdf.tar.gz
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 <TAB> Cq-Depend: chromium:2361582 Signed-off-by: Hsuan Ting Chen <roccochen@chromium.org> Change-Id: I29a567554f9283ea3fca0f58fb31c7056523c2a9 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2361823 Commit-Queue: Hung-Te Lin <hungte@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
-rw-r--r--firmware/2lib/2ui_screens.c91
-rw-r--r--tests/vb2_ui_tests.c17
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,