summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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");