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.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c
index 4af80950..2510392f 100644
--- a/firmware/2lib/2ui_screens.c
+++ b/firmware/2lib/2ui_screens.c
@@ -312,6 +312,15 @@ static const struct vb2_screen_info debug_info_screen = {
#define RECOVERY_SELECT_ITEM_PHONE 1
#define RECOVERY_SELECT_ITEM_EXTERNAL_DISK 2
+#define RECOVERY_SELECT_ITEM_DIAGNOSTICS 3
+
+/* Set VB2_NV_DIAG_REQUEST and reboot. */
+static vb2_error_t launch_diagnostics_action(struct vb2_ui_context *ui)
+{
+ vb2_nv_set(ui->ctx, VB2_NV_DIAG_REQUEST, 1);
+ VB2_DEBUG("Diagnostics requested, rebooting\n");
+ return VB2_REQUEST_REBOOT;
+}
vb2_error_t recovery_select_init(struct vb2_ui_context *ui)
{
@@ -322,6 +331,11 @@ vb2_error_t recovery_select_init(struct vb2_ui_context *ui)
1 << RECOVERY_SELECT_ITEM_PHONE;
ui->state->selected_item = RECOVERY_SELECT_ITEM_EXTERNAL_DISK;
}
+
+ if (!DIAGNOSTIC_UI || !vb2api_diagnostic_ui_enabled(ui->ctx))
+ ui->state->disabled_item_mask |=
+ 1 << RECOVERY_SELECT_ITEM_DIAGNOSTICS;
+
return VB2_REQUEST_UI_CONTINUE;
}
@@ -335,6 +349,10 @@ static const struct vb2_menu_item recovery_select_items[] = {
.text = "Recovery using external disk",
.target = VB2_SCREEN_RECOVERY_DISK_STEP1,
},
+ [RECOVERY_SELECT_ITEM_DIAGNOSTICS] = {
+ .text = "Launch diagnostics",
+ .action = launch_diagnostics_action,
+ },
ADVANCED_OPTIONS_ITEM,
POWER_OFF_ITEM,
};