summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPranay Shoroff <pshoroff@google.com>2019-12-12 13:38:04 -0700
committerPranay Shoroff <pshoroff@google.com>2020-02-10 23:07:52 +0000
commitd4a006922bf468be9f9f4446f3fefb2c8a3b7266 (patch)
tree95cda78fdc83528ebc0910674da7e380caab9e1b
parent87c7b1b55155a91cd22a1e93343064d65d6aad97 (diff)
downloadvboot-d4a006922bf468be9f9f4446f3fefb2c8a3b7266.tar.gz
vboot: modify control flow for vendor data config
Modify logic for new vendor data configuration workflow. Current workflow contains little to no instruction for navigating vendor data workflow. UI is generally very scarce. New workflow aims to provide more instruction on how to proceed to next steps, escape from the workflow and boot normally, and a new YES/NO selection screen during the final confirmation phase of the workflow. BUG=b:138812835 BRANCH=none TEST=emerge-sarien depthcharge, chromeos-bootimage, flash firmware image on Sarien and test workflow Cq-Depend: chromium:1925665, chrome-internal:2180149 Change-Id: I3d7081f348a7dd68d10d1eba4879a359ccbdd6e5 Signed-off-by: Pranay Shoroff <pshoroff@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1926508 Commit-Queue: Mathew King <mathewk@chromium.org> Tested-by: Mathew King <mathewk@chromium.org> Reviewed-by: Mathew King <mathewk@chromium.org>
-rw-r--r--firmware/include/vboot_api.h17
-rw-r--r--firmware/lib/vboot_ui.c42
-rw-r--r--firmware/lib/vboot_ui_wilco.c170
-rw-r--r--tests/vboot_api_kernel2_tests.c135
4 files changed, 238 insertions, 126 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index d7c2eee2..7fc79396 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -402,12 +402,6 @@ enum VbScreenType_t {
VB_SCREEN_ALT_FW_PICK = 0x212,
/* Alt firmware menu screen (for detachable UI ) */
VB_SCREEN_ALT_FW_MENU = 0x213,
- /* Set vendor data menu screen */
- VB_SCREEN_SET_VENDOR_DATA = 0x214,
- /* Confirm vendor data menu screen */
- VB_SCREEN_CONFIRM_VENDOR_DATA = 0x215,
- /* Confirm reboot for running diagnostics rom */
- VB_SCREEN_CONFIRM_DIAG = 0x216,
/* Confirm after VB_SCREEN_RECOVERY_TO_DEV_MENU */
VB_SCREEN_TO_DEV_CONFIRMED = 0x217,
/* Hardware failure */
@@ -430,6 +424,15 @@ enum VbScreenType_t {
VB_SCREEN_DEBUG_INFO = 0x252,
/* BIOS log screen */
VB_SCREEN_BIOS_LOG = 0x253,
+ /* 0x300-0x350 reserved for device-specific screens */
+ /* Vendor data not set warning screen */
+ VB_COMPLETE_VENDOR_DATA = 0x300,
+ /* Set vendor data menu screen */
+ VB_SCREEN_SET_VENDOR_DATA = 0x301,
+ /* Confirm vendor data menu screen */
+ VB_SCREEN_CONFIRM_VENDOR_DATA = 0x302,
+ /* Confirm reboot for running diagnostics rom */
+ VB_SCREEN_CONFIRM_DIAG = 0x303,
};
/**
@@ -439,6 +442,8 @@ typedef struct VbVendorData
{
/* Current state of the the vendor data input */
const char *input_text;
+ /* Current confirmation selection for new vendor data */
+ uint32_t selected_index;
} VbVendorData;
/**
diff --git a/firmware/lib/vboot_ui.c b/firmware/lib/vboot_ui.c
index b46e59b4..1d8e5e5d 100644
--- a/firmware/lib/vboot_ui.c
+++ b/firmware/lib/vboot_ui.c
@@ -251,8 +251,17 @@ static vb2_error_t vb2_developer_ui(struct vb2_context *ctx)
}
}
- /* Show the dev mode warning screen */
- VbDisplayScreen(ctx, VB_SCREEN_DEVELOPER_WARNING, 0, NULL);
+ if ((ctx->flags & VB2_CONTEXT_VENDOR_DATA_SETTABLE) &&
+ VENDOR_DATA_LENGTH > 0) {
+ vb2_error_t ret;
+ VB2_DEBUG("VbBootDeveloper() - Vendor data not set\n");
+ ret = vb2_vendor_data_ui(ctx);
+ if (ret)
+ return ret;
+ }
+
+ /* Show the dev mode warning screen */
+ VbDisplayScreen(ctx, VB_SCREEN_DEVELOPER_WARNING, 0, NULL);
/* Initialize audio/delay context */
vb2_audio_start(ctx);
@@ -335,35 +344,6 @@ static vb2_error_t vb2_developer_ui(struct vb2_context *ctx)
vb2_error_no_altfw();
}
break;
- case VB_KEY_CTRL('S'):
- if (VENDOR_DATA_LENGTH == 0)
- break;
- /*
- * Only show the vendor data ui if it is tag is settable
- */
- if (ctx->flags & VB2_CONTEXT_VENDOR_DATA_SETTABLE) {
- vb2_error_t ret;
-
- VB2_DEBUG("VbBootDeveloper() - user pressed "
- "Ctrl+S; Try set vendor data\n");
-
- ret = vb2_vendor_data_ui(ctx);
- if (ret) {
- return ret;
- } else {
- /* Show dev mode warning screen again */
- VbDisplayScreen(ctx,
- VB_SCREEN_DEVELOPER_WARNING,
- 0, NULL);
- }
- } else {
- vb2_error_notify(
- "WARNING: Vendor data cannot be "
- "changed because it is already set.\n",
- NULL,
- VB_BEEP_NOT_ALLOWED);
- }
- break;
case VB_KEY_CTRL_ENTER:
/*
* The Ctrl-Enter is special for Lumpy test purpose;
diff --git a/firmware/lib/vboot_ui_wilco.c b/firmware/lib/vboot_ui_wilco.c
index b8457def..ff4e229e 100644
--- a/firmware/lib/vboot_ui_wilco.c
+++ b/firmware/lib/vboot_ui_wilco.c
@@ -20,18 +20,25 @@ static inline int is_vowel(uint32_t key)
key == 'O' || key == 'U';
}
+static int vendor_data_length(char *data_value)
+{
+ for (int len = 0; len <= VENDOR_DATA_LENGTH; len++) {
+ if (data_value[len] == '\0')
+ return len;
+ }
+
+ return VENDOR_DATA_LENGTH;
+}
+
/*
- * Prompt the user to enter the vendor data
+ * Prompt the user to enter the serial number
*/
static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx,
char *data_value)
{
- int len = 0;
- VbScreenData data = {
- .vendor_data = { data_value }
- };
+ int len = vendor_data_length(data_value);
+ VbScreenData data = {.vendor_data = {data_value, 1}};
- data_value[0] = '\0';
VbDisplayScreen(ctx, VB_SCREEN_SET_VENDOR_DATA, 1, &data);
/* We'll loop until the user decides what to do */
@@ -101,70 +108,143 @@ static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx,
return VB2_SUCCESS;
}
-vb2_error_t vb2_vendor_data_ui(struct vb2_context *ctx)
+/*
+ * Prompt the user to confirm the serial number and write to memory
+ */
+static vb2_error_t vb2_confirm_vendor_data_ui(struct vb2_context *ctx,
+ char* data_value, VbScreenData *data)
{
- char data_value[VENDOR_DATA_LENGTH + 1];
- VbScreenData data = {
- .vendor_data = { data_value }
- };
-
- vb2_error_t ret = vb2_enter_vendor_data_ui(ctx, data_value);
-
- if (ret)
- return ret;
-
- /* Vendor data was not entered just return */
- if (data_value[0] == '\0')
- return VB2_SUCCESS;
-
- VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA, 1, &data);
+ VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA, 1, data);
/* We'll loop until the user decides what to do */
do {
- uint32_t key = VbExKeyboardRead();
+ uint32_t key_confirm = VbExKeyboardRead();
- if (vb2_want_shutdown(ctx, key)) {
- VB2_DEBUG("Vendor Data UI - shutdown requested!\n");
+ if (vb2_want_shutdown(ctx, key_confirm)) {
+ VB2_DEBUG("Confirm Vendor Data UI "
+ "- shutdown requested!\n");
return VBERROR_SHUTDOWN_REQUESTED;
}
- switch (key) {
+ switch (key_confirm) {
case 0:
/* Nothing pressed */
break;
case VB_KEY_ESC:
/* Escape pressed - return to developer screen */
- VB2_DEBUG("Vendor Data UI - user pressed Esc: "
- "exit to Developer screen\n");
+ VB2_DEBUG("Confirm Vendor Data UI - user "
+ "pressed Esc: exit to Developer screen\n");
return VB2_SUCCESS;
+ case VB_KEY_RIGHT:
+ case VB_KEY_LEFT:
+ data->vendor_data.selected_index =
+ data->vendor_data.selected_index ^ 1;
+ VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA,
+ 1, data);
+ VB2_DEBUG("selected_index:%d\n",
+ data->vendor_data.selected_index);
+ break;
case VB_KEY_ENTER:
/* Enter pressed - write vendor data */
- VB2_DEBUG("Vendor Data UI - user pressed Enter: "
- "write vendor data (%s) to VPD\n",
- data_value);
- ret = VbExSetVendorData(data_value);
+ if (data->vendor_data.selected_index == 0) {
+ VB2_DEBUG("Confirm Vendor Data UI - user "
+ "selected YES: "
+ "write vendor data (%s) to VPD\n",
+ data_value);
+ vb2_error_t ret = VbExSetVendorData(data_value);
- if (ret == VB2_SUCCESS) {
- vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1);
- return VBERROR_REBOOT_REQUIRED;
+ if (ret == VB2_SUCCESS) {
+ vb2_nv_set(ctx,
+ VB2_NV_DISABLE_DEV_REQUEST,
+ 1);
+ return VBERROR_REBOOT_REQUIRED;
+ } else {
+ vb2_error_notify(
+ "ERROR: Vendor data was not "
+ "set.\n"
+ "System will now shutdown\n",
+ NULL, VB_BEEP_FAILED);
+ VbExSleepMs(5000);
+ return VBERROR_SHUTDOWN_REQUESTED;
+ }
} else {
- vb2_error_notify(
- "ERROR: Vendor data was not set.\n"
- "System will now shutdown\n",
- NULL,
- VB_BEEP_FAILED);
- VbExSleepMs(5000);
- return VBERROR_SHUTDOWN_REQUESTED;
+ VB2_DEBUG("Confirm Vendor Data UI - user "
+ "selected NO: "
+ "Returning to set screen\n");
+ return VB2_SUCCESS;
}
default:
- VB2_DEBUG("Vendor Data UI - pressed key %#x\n", key);
- VbCheckDisplayKey(ctx, key, &data);
+ VB2_DEBUG("Confirm Vendor Data UI - pressed "
+ "key %#x\n", key_confirm);
+ VbCheckDisplayKey(ctx, key_confirm, data);
break;
}
VbExSleepMs(KEY_DELAY_MS);
} while (1);
-
return VB2_SUCCESS;
}
+vb2_error_t vb2_vendor_data_ui(struct vb2_context *ctx)
+{
+ char data_value[VENDOR_DATA_LENGTH + 1];
+
+ VbScreenData data = {.vendor_data = {data_value, 0}};
+ VbDisplayScreen(ctx, VB_COMPLETE_VENDOR_DATA, 0, NULL);
+
+ do {
+ uint32_t key_set = VbExKeyboardRead();
+
+ if (vb2_want_shutdown(ctx, key_set)) {
+ VB2_DEBUG("Vendor Data UI - shutdown requested!\n");
+ return VBERROR_SHUTDOWN_REQUESTED;
+ }
+
+ switch (key_set) {
+ case 0:
+ /* Nothing pressed - do nothing. */
+ break;
+ case VB_KEY_ESC:
+ /* ESC pressed - boot normally */
+ VB2_DEBUG("Vendor Data UI - boot normally\n");
+ return VB2_SUCCESS;
+ break;
+ case VB_KEY_ENTER:
+ data_value[0] = '\0';
+ do {
+ /* ENTER pressed -
+ enter vendor data set screen */
+ VB2_DEBUG("Vendor Data UI - Enter VD set "
+ "screen\n");
+ vb2_error_t ret = vb2_enter_vendor_data_ui(
+ ctx, data_value);
+
+ if (ret)
+ return ret;
+
+ /* Vendor data was not entered just return */
+ if (vendor_data_length(data_value) == 0) {
+ return VB2_SUCCESS;
+ }
+
+ /* Reset confirmation answer to YES */
+ data.vendor_data.selected_index = 0;
+
+ ret = vb2_confirm_vendor_data_ui(
+ ctx, data_value, &data);
+
+ if (ret)
+ return ret;
+
+ /* Break if vendor data confirmed */
+ if (data.vendor_data.selected_index == 0)
+ return VB2_SUCCESS;
+ } while (1);
+ break;
+ default:
+ break;
+ }
+ } while (1);
+ return VB2_SUCCESS;
+}
+
vb2_error_t vb2_check_diagnostic_key(struct vb2_context *ctx,
uint32_t key) {
if (DIAGNOSTIC_UI && (key == VB_KEY_CTRL('C') || key == VB_KEY_F(12))) {
diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c
index c0d621d2..d9cbea58 100644
--- a/tests/vboot_api_kernel2_tests.c
+++ b/tests/vboot_api_kernel2_tests.c
@@ -891,56 +891,93 @@ static void VbBootDevTest(void)
static void VbBootDevVendorDataTest(void)
{
- /* Ctrl+S set vendor data and reboot */
+ /* Enter set vendor data and reboot */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '3';
mock_keypress[3] = '2';
mock_keypress[4] = '1';
mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S set vendor data and reboot");
+ "Enter set vendor data, don't confirm, esc");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct");
- /* Ctrl+S extra keys ignored */
+ /* Enter set vendor data; don't confirm and esc */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
+ mock_keypress[1] = '4';
+ mock_keypress[2] = '3';
+ mock_keypress[3] = '2';
+ mock_keypress[4] = '1';
+ mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */
+ mock_keypress[6] = VB_KEY_RIGHT; /* Select NO */
+ mock_keypress[7] = VB_KEY_ENTER; /* Do not confirm vendor data */
+ mock_keypress[8] = VB_KEY_ESC; /* Escape to boot */
+ vbtlk_expect_fixed = 1;
+ TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
+ "Enter set vendor data, don't confirm, esc");
+ TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
+
+ /* Enter set vendor data; esc, don't confirm, and change last character */
+ ResetMocks();
+ ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
+ mock_keypress[1] = '4';
+ mock_keypress[2] = '3';
+ mock_keypress[3] = '2';
+ mock_keypress[4] = '1';
+ mock_keypress[5] = VB_KEY_ENTER;
+ mock_keypress[6] = VB_KEY_RIGHT; /* Select NO */
+ mock_keypress[7] = VB_KEY_ENTER; /* Do not confirm vendor data */
+ mock_keypress[8] = VB_KEY_BACKSPACE; /* Remove last character */
+ mock_keypress[9] = 'B';
+ mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */
+ mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */
+ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
+ "Enter set vendor data esc, don't confirm, change last character");
+ TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
+ TEST_STR_EQ(set_vendor_data, "432B", " Vendor data correct");
+
+ /* Enter set vendor data; extra keys ignored */
+ ResetMocks();
+ ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '3';
mock_keypress[3] = '2';
mock_keypress[4] = '1';
mock_keypress[5] = '5';
mock_keypress[6] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[7] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[7] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S extra keys ignored");
+ "Enter set vendor data extra keys ignored");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct");
- /* Ctrl+S converts case */
+ /* Enter set vendor data; converts case */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = 'a';
mock_keypress[2] = 'B';
mock_keypress[3] = 'Y';
mock_keypress[4] = 'z';
mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S converts case");
+ "Enter set vendor data converts case");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "ABYZ", " Vendor data correct");
- /* Ctrl+S backspace works */
+ /* Enter set vendor data; backspace works */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = 'A';
mock_keypress[2] = 'B';
mock_keypress[3] = 'C';
@@ -950,16 +987,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[7] = '2';
mock_keypress[8] = '1';
mock_keypress[9] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[10] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[10] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S backspace works");
+ "Enter set vendor data backspace works");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "A321", " Vendor data correct");
- /* Ctrl+S invalid chars don't print */
+ /* Enter set vendor data; invalid chars don't print */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '-';
mock_keypress[3] = '^';
@@ -970,16 +1007,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[8] = '2';
mock_keypress[9] = '1';
mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S invalid chars don't print");
+ "Enter set vendor data invalid chars don't print");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct");
- /* Ctrl+S invalid chars don't print with backspace */
+ /* Enter set vendor data; invalid chars don't print with backspace */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '-';
mock_keypress[3] = VB_KEY_BACKSPACE; /* Should delete 4 */
@@ -988,16 +1025,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[6] = '1';
mock_keypress[7] = '0';
mock_keypress[8] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S invalid chars don't print with backspace");
+ "Enter set vendor data invalid chars don't print with backspace");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "3210", " Vendor data correct");
- /* Ctrl+S backspace only doesn't underrun */
+ /* Enter set vendor data; backspace only doesn't underrun */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = 'A';
mock_keypress[2] = VB_KEY_BACKSPACE;
mock_keypress[3] = VB_KEY_BACKSPACE;
@@ -1006,16 +1043,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[6] = '2';
mock_keypress[7] = '1';
mock_keypress[8] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S backspace only doesn't underrun");
+ "Enter set vendor data backspace only doesn't underrun");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct");
- /* Ctrl+S vowels not allowed after first char */
+ /* Enter set vendor data; vowels not allowed after first char */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = 'A';
mock_keypress[2] = 'A';
mock_keypress[3] = 'B';
@@ -1026,16 +1063,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[8] = 'u';
mock_keypress[9] = 'D';
mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */
- mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */
+ mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */
TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED,
- "Ctrl+S vowels not allowed after first char");
+ "Enter set vendor data vowels not allowed after first char");
TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called");
TEST_STR_EQ(set_vendor_data, "ABCD", " Vendor data correct");
- /* Ctrl+S too short */
+ /* Enter set vendor data; too short */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '1';
mock_keypress[2] = '2';
mock_keypress[3] = '3';
@@ -1045,23 +1082,24 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[5] = VB_KEY_ENTER;
mock_keypress[6] = VB_KEY_ESC;
vbtlk_expect_fixed = 1;
- TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, "Ctrl+S too short");
+ TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
+ "Enter set vendor data too short");
TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
- /* Ctrl+S esc from set screen */
+ /* Enter set vendor data; esc from set screen */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = VB_KEY_ESC;
vbtlk_expect_fixed = 1;
TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
- "Ctrl+S esc from set screen");
+ "Enter set vendor data esc from set screen");
TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
- /* Ctrl+S esc from set screen with tag */
+ /* Enter set vendor data; esc from set screen with tag */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '3';
mock_keypress[3] = '2';
@@ -1069,13 +1107,13 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[5] = VB_KEY_ESC;
vbtlk_expect_fixed = 1;
TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
- "Ctrl+S esc from set screen with tag");
+ "Enter set vendor data esc from set screen with tag");
TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
- /* Ctrl+S esc from confirm screen */
+ /* Enter set vendor data; esc from confirm screen */
ResetMocks();
ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
- mock_keypress[0] = VB_KEY_CTRL('S');
+ mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */
mock_keypress[1] = '4';
mock_keypress[2] = '3';
mock_keypress[3] = '2';
@@ -1084,7 +1122,16 @@ static void VbBootDevVendorDataTest(void)
mock_keypress[6] = VB_KEY_ESC;
vbtlk_expect_fixed = 1;
TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
- "Ctrl+S esc from set screen");
+ "Enter set vendor data esc from set screen");
+ TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
+
+ /* Escape from vendor data warning screen */
+ ResetMocks();
+ ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE;
+ mock_keypress[0] = VB_KEY_ESC; /* Enter vendor data setting */
+ vbtlk_expect_fixed = 1;
+ TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK,
+ "Enter set vendor data esc, don't confirm, change last character");
TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called");
VB2_DEBUG("...done.\n");