diff options
author | Mathew King <mathewk@chromium.org> | 2020-03-25 08:37:12 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-03-31 19:49:04 +0000 |
commit | d3f563761a90e63b12fecf8d338a09d657eb0e3e (patch) | |
tree | df17d103cab147abd5dc317971eb4e65bf2e329d /firmware | |
parent | 02f45f51a7e80bf7e62c3fa0926c3e30ccd7124d (diff) | |
download | vboot-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>
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/include/vboot_api.h | 10 | ||||
-rw-r--r-- | firmware/lib/include/vboot_ui_legacy_wilco.h | 2 | ||||
-rw-r--r-- | firmware/lib/vboot_ui_legacy_wilco.c | 25 |
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 { |