diff options
-rw-r--r-- | firmware/2lib/2ui_screens.c | 19 | ||||
-rw-r--r-- | firmware/2lib/include/2ui_private.h | 1 | ||||
-rw-r--r-- | tests/vb2_ui_tests.c | 2 |
3 files changed, 20 insertions, 2 deletions
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c index 356b3bfb..c4465a4a 100644 --- a/firmware/2lib/2ui_screens.c +++ b/firmware/2lib/2ui_screens.c @@ -81,12 +81,26 @@ static const struct vb2_screen_info advanced_options_screen = { /******************************************************************************/ /* VB2_SCREEN_RECOVERY_SELECT */ +#define RECOVERY_SELECT_ITEM_PHONE 0 +#define RECOVERY_SELECT_ITEM_EXTERNAL_DISK 1 + +vb2_error_t recovery_select_init(struct vb2_ui_context *ui) +{ + if (!vb2api_phone_recovery_enabled(ui->ctx)) { + VB2_DEBUG("WARNING: Phone recovery not available\n"); + ui->state.disabled_item_mask |= + 1 << RECOVERY_SELECT_ITEM_PHONE; + ui->state.selected_item = RECOVERY_SELECT_ITEM_EXTERNAL_DISK; + } + return VB2_REQUEST_UI_CONTINUE; +} + static const struct vb2_menu_item recovery_select_items[] = { - { + [RECOVERY_SELECT_ITEM_PHONE] = { .text = "Recovery using phone", .target = VB2_SCREEN_RECOVERY_PHONE_STEP1, }, - { + [RECOVERY_SELECT_ITEM_EXTERNAL_DISK] = { .text = "Recovery using external disk", .target = VB2_SCREEN_RECOVERY_DISK_STEP1, }, @@ -96,6 +110,7 @@ static const struct vb2_menu_item recovery_select_items[] = { static const struct vb2_screen_info recovery_select_screen = { .id = VB2_SCREEN_RECOVERY_SELECT, .name = "Recovery method selection", + .init = recovery_select_init, MENU_ITEMS(recovery_select_items), }; diff --git a/firmware/2lib/include/2ui_private.h b/firmware/2lib/include/2ui_private.h index bfc0dd0b..2496555b 100644 --- a/firmware/2lib/include/2ui_private.h +++ b/firmware/2lib/include/2ui_private.h @@ -38,6 +38,7 @@ vb2_error_t try_recovery_action(struct vb2_ui_context *ui); /* From 2ui_screens.c */ vb2_error_t advanced_options_init(struct vb2_ui_context *ui); +vb2_error_t recovery_select_init(struct vb2_ui_context *ui); vb2_error_t recovery_to_dev_init(struct vb2_ui_context *ui); vb2_error_t developer_mode_init(struct vb2_ui_context *ui); vb2_error_t developer_mode_action(struct vb2_ui_context *ui); diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index 1bd9e8b9..a45fba85 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -9,6 +9,7 @@ #include "2common.h" #include "2misc.h" #include "2nvstorage.h" +#include "2struct.h" #include "2ui.h" #include "2ui_private.h" #include "test_common.h" @@ -161,6 +162,7 @@ static void reset_common_data(enum reset_type t) ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; sd = vb2_get_sd(ctx); + sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT; /* For try_recovery_action */ invalid_disk_last = -1; |