summaryrefslogtreecommitdiff
path: root/firmware/2lib/2ui_screens.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/2lib/2ui_screens.c')
-rw-r--r--firmware/2lib/2ui_screens.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c
index ab15a2b3..741f4b91 100644
--- a/firmware/2lib/2ui_screens.c
+++ b/firmware/2lib/2ui_screens.c
@@ -52,6 +52,66 @@ static vb2_error_t power_off_action(struct vb2_ui_context *ui)
}
/******************************************************************************/
+/* Functions used for log screens */
+
+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;
+ ui->state->selected_item = alternate_item;
+ } else {
+ ui->state->disabled_item_mask |= 1 << page_up_item;
+ 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)
+{
+ 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;
+ }
+
+ 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)
+{
+ 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;
+ }
+
+ return VB2_REQUEST_UI_CONTINUE;
+}
+
+/******************************************************************************/
/* VB2_SCREEN_BLANK */
static const struct vb2_screen_info blank_screen = {
@@ -176,6 +236,7 @@ static const struct vb2_menu_item advanced_options_items[] = {
.text = "Enable developer mode",
.target = VB2_SCREEN_RECOVERY_TO_DEV,
},
+ /* TODO(b:144969088): Add debug info item */
[ADVANCED_OPTIONS_ITEM_BACK] = BACK_ITEM,
POWER_OFF_ITEM,
};
@@ -188,6 +249,62 @@ 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
+
+static vb2_error_t debug_info_init(struct vb2_ui_context *ui)
+{
+ const char *log_string = vb2ex_get_debug_info(ui->ctx);
+ ui->state->page_count = vb2ex_prepare_log_screen(log_string);
+ if (ui->state->page_count == 0) {
+ ui->error_code = VB2_UI_ERROR_DEBUG_LOG;
+ return vb2_ui_screen_back(ui);
+ }
+ return log_page_init(ui,
+ DEBUG_INFO_ITEM_PAGE_UP,
+ DEBUG_INFO_ITEM_PAGE_DOWN,
+ DEBUG_INFO_ITEM_BACK);
+}
+
+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,
+ },
+ [DEBUG_INFO_ITEM_PAGE_DOWN] = {
+ .text = "Page down",
+ .action = debug_info_page_next_action,
+ },
+ [DEBUG_INFO_ITEM_BACK] = BACK_ITEM,
+ POWER_OFF_ITEM,
+};
+
+static const struct vb2_screen_info debug_info_screen = {
+ .id = VB2_SCREEN_DEBUG_INFO,
+ .name = "Debug info",
+ .init = debug_info_init,
+ .menu = MENU_ITEMS(debug_info_items),
+};
+
+/******************************************************************************/
/* VB2_SCREEN_RECOVERY_SELECT */
#define RECOVERY_SELECT_ITEM_PHONE 1
@@ -662,6 +779,7 @@ static const struct vb2_screen_info *screens[] = {
&language_select_screen,
&recovery_broken_screen,
&advanced_options_screen,
+ &debug_info_screen,
&recovery_select_screen,
&recovery_invalid_screen,
&recovery_to_dev_screen,