summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathew King <mathewk@chromium.org>2020-03-25 08:37:12 -0600
committerCommit Bot <commit-bot@chromium.org>2020-03-31 19:49:04 +0000
commitd3f563761a90e63b12fecf8d338a09d657eb0e3e (patch)
treedf17d103cab147abd5dc317971eb4e65bf2e329d
parent02f45f51a7e80bf7e62c3fa0926c3e30ccd7124d (diff)
downloadvboot-d3f563761a90e63b12fecf8d338a09d657eb0e3e.tar.gz
vboot: Add a blinking cursor to the vendor prompt
Add support to show a blinking cursor after the vendor data entry so that users can tell that an entry is required. BUG=b:138812835 TEST=Test on a Drallion device with an updated Depthcharge BRANCH=drallion Cq-Depend: chromium:2120311 Change-Id: I02073d92d02a4171f337f86f880d660eb5d8b6f1 Signed-off-by: Mathew King <mathewk@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2120310 Reviewed-by: Pranay Shoroff <pshoroff@google.com>
-rw-r--r--firmware/include/vboot_api.h10
-rw-r--r--firmware/lib/include/vboot_ui_legacy_wilco.h2
-rw-r--r--firmware/lib/vboot_ui_legacy_wilco.c25
3 files changed, 35 insertions, 2 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index d3e05817..a8da9390 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -399,6 +399,14 @@ enum VbScreenType_t {
VB_SCREEN_CONFIRM_DIAG = 0x303,
};
+/* Flags to control behavior of device-specific screens. */
+enum VbVendorDataFlags_t {
+ /* When set display a cursor after the prompt */
+ VB_VENDOR_DATA_SHOW_CURSOR = 1 << 0,
+ /* When set only redraw the cursor */
+ VB_VENDOR_DATA_ONLY_DRAW_CURSOR = 1 << 1,
+};
+
/**
* Extra data needed when displaying vendor data screens
*/
@@ -406,6 +414,8 @@ typedef struct VbVendorData
{
/* Current state of the the vendor data input */
const char *input_text;
+ /* Flags (See VbVendorDataFlags_t) */
+ uint32_t flags;
/* Current confirmation selection for new vendor data */
uint32_t selected_index;
} VbVendorData;
diff --git a/firmware/lib/include/vboot_ui_legacy_wilco.h b/firmware/lib/include/vboot_ui_legacy_wilco.h
index d6b77965..397777e3 100644
--- a/firmware/lib/include/vboot_ui_legacy_wilco.h
+++ b/firmware/lib/include/vboot_ui_legacy_wilco.h
@@ -8,6 +8,8 @@
#ifndef VBOOT_REFERENCE_VBOOT_UI_WILCO_H_
#define VBOOT_REFERENCE_VBOOT_UI_WILCO_H_
+#define CURSOR_BLINK_MS 400 /* Speed that the vendor data cursor blinks */
+
/*
* User interface for setting the vendor data in VPD
*/
diff --git a/firmware/lib/vboot_ui_legacy_wilco.c b/firmware/lib/vboot_ui_legacy_wilco.c
index 30a77865..d995b4c3 100644
--- a/firmware/lib/vboot_ui_legacy_wilco.c
+++ b/firmware/lib/vboot_ui_legacy_wilco.c
@@ -37,7 +37,15 @@ static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx,
char *data_value)
{
int len = vendor_data_length(data_value);
- VbScreenData data = {.vendor_data = {data_value, 1}};
+ int blinks = CURSOR_BLINK_MS / KEY_DELAY_MS;
+ int blink_count = 0;
+ VbScreenData data = {
+ .vendor_data = {
+ .input_text = data_value,
+ .flags = VB_VENDOR_DATA_SHOW_CURSOR,
+ .selected_index = 1,
+ }
+ };
VbDisplayScreen(ctx, VB_SCREEN_SET_VENDOR_DATA, 1, &data);
@@ -103,6 +111,19 @@ static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx,
break;
}
VbExSleepMs(KEY_DELAY_MS);
+
+ if (++blink_count == blinks) {
+ blink_count = 0;
+ data.vendor_data.flags ^= VB_VENDOR_DATA_SHOW_CURSOR;
+ data.vendor_data.flags |=
+ VB_VENDOR_DATA_ONLY_DRAW_CURSOR;
+
+ VbDisplayScreen(ctx, VB_SCREEN_SET_VENDOR_DATA,
+ 1, &data);
+
+ data.vendor_data.flags &=
+ ~(VB_VENDOR_DATA_ONLY_DRAW_CURSOR);
+ }
} while (1);
return VB2_SUCCESS;
@@ -186,7 +207,7 @@ 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}};
+ VbScreenData data = {.vendor_data = {data_value, 0, 0}};
VbDisplayScreen(ctx, VB_COMPLETE_VENDOR_DATA, 0, NULL);
do {