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.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c
new file mode 100644
index 00000000..5b235c24
--- /dev/null
+++ b/firmware/2lib/2ui_screens.c
@@ -0,0 +1,107 @@
+/* Copyright 2020 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Firmware screen definitions.
+ */
+
+#include "2common.h"
+#include "2ui.h"
+
+#define MENU_ITEMS(a) \
+ .num_items = ARRAY_SIZE(a), \
+ .items = a
+
+static const struct vb2_menu_item empty_menu[] = { };
+
+/******************************************************************************/
+/* VB2_SCREEN_BLANK */
+
+static const struct vb2_screen_info blank_screen = {
+ .id = VB2_SCREEN_BLANK,
+ .name = "Blank",
+ MENU_ITEMS(empty_menu),
+};
+
+/******************************************************************************/
+/* VB2_SCREEN_RECOVERY_BROKEN */
+
+static const struct vb2_screen_info recovery_broken_screen = {
+ .id = VB2_SCREEN_RECOVERY_BROKEN,
+ .name = "Recover broken device",
+ MENU_ITEMS(empty_menu),
+};
+
+/******************************************************************************/
+/* VB2_SCREEN_RECOVERY_SELECT */
+
+static const struct vb2_menu_item recovery_select_items[] = {
+ {
+ .text = "Recovery using phone",
+ .target = VB2_SCREEN_RECOVERY_PHONE_STEP1,
+ },
+ {
+ .text = "Recovery using external disk",
+ .target = VB2_SCREEN_RECOVERY_DISK_STEP1,
+ },
+};
+
+static const struct vb2_screen_info recovery_select_screen = {
+ .id = VB2_SCREEN_RECOVERY_SELECT,
+ .name = "Recovery method selection",
+ MENU_ITEMS(recovery_select_items),
+};
+
+/******************************************************************************/
+/* VB2_SCREEN_RECOVERY_INVALID */
+
+static const struct vb2_screen_info recovery_invalid_screen = {
+ .id = VB2_SCREEN_RECOVERY_INVALID,
+ .name = "Invalid recovery inserted",
+ MENU_ITEMS(empty_menu),
+};
+
+/******************************************************************************/
+/* VB2_SCREEN_RECOVERY_PHONE_STEP1 */
+
+static const struct vb2_screen_info recovery_phone_step1_screen = {
+ .id = VB2_SCREEN_RECOVERY_PHONE_STEP1,
+ .name = "Phone recovery step 1",
+ MENU_ITEMS(empty_menu),
+};
+
+/******************************************************************************/
+/* VB2_SCREEN_RECOVERY_DISK_STEP1 */
+
+static const struct vb2_screen_info recovery_disk_step1_screen = {
+ .id = VB2_SCREEN_RECOVERY_DISK_STEP1,
+ .name = "Disk recovery step 1",
+ MENU_ITEMS(empty_menu),
+};
+
+/******************************************************************************/
+/*
+ * TODO(chromium:1035800): Refactor UI code across vboot and depthcharge.
+ * Currently vboot and depthcharge maintain their own copies of menus/screens.
+ * vboot detects keyboard input and controls the navigation among different menu
+ * items and screens, while depthcharge performs the actual rendering of each
+ * screen, based on the menu information passed from vboot.
+ */
+static const struct vb2_screen_info *screens[] = {
+ &blank_screen,
+ &recovery_broken_screen,
+ &recovery_select_screen,
+ &recovery_invalid_screen,
+ &recovery_phone_step1_screen,
+ &recovery_disk_step1_screen,
+};
+
+const struct vb2_screen_info *vb2_get_screen_info(enum vb2_screen id)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(screens); i++) {
+ if (screens[i]->id == id)
+ return screens[i];
+ }
+ return NULL;
+}