summaryrefslogtreecommitdiff
path: root/common/cmd_vbexport_test.c
diff options
context:
space:
mode:
authorTom Wai-Hong Tam <waihong@chromium.org>2011-06-29 11:10:17 +0800
committerSimon Glass <sjg@chromium.org>2011-08-29 10:39:40 -0700
commit44d0efbe49f694560a25a6a008190a880507b21a (patch)
tree4499b0e807102d56ce140943de92209049d8b068 /common/cmd_vbexport_test.c
parentfd2bb1babd1938f4713bc5dd5a9f2ea72de08832 (diff)
CHROMIUM: Implement VbExDisplayImage function to show an image on LCD.
An unit test is implemented to show all the screens on GBB. BUG=chromium-os:16543 TEST=Build chromeos_seaboard_vboot and put it on seaboard and run: Tegra2 # vbexport_test display The screen dimensions is 1366x768. Showing screens... ... SF: Detected W25Q16 with page size 256, total 2 MiB firmware_storage: read Showing images... /* Several screens show on LCD */ Change-Id: Ica05ed58a536b376359eef7e63757c1431d04061 Reviewed-on: http://gerrit.chromium.org/gerrit/3363 Reviewed-by: Tom Wai-Hong Tam <waihong@chromium.org> Tested-by: Tom Wai-Hong Tam <waihong@chromium.org>
Diffstat (limited to 'common/cmd_vbexport_test.c')
-rw-r--r--common/cmd_vbexport_test.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/common/cmd_vbexport_test.c b/common/cmd_vbexport_test.c
index e2a170c8d2..449871a7db 100644
--- a/common/cmd_vbexport_test.c
+++ b/common/cmd_vbexport_test.c
@@ -16,6 +16,8 @@
#include <common.h>
#include <command.h>
+#include <gbb_header.h>
+#include <vboot/firmware_storage.h>
#include <vboot_api.h>
#define TEST_LBA_START 0
@@ -330,15 +332,68 @@ static int show_screen_and_delay(uint32_t screen_type)
VbExDebug("Failed to show a screen.\n");
return 1;
}
+
VbExSleepMs(500);
return 0;
}
+static uint8_t *read_gbb_from_firmware(void)
+{
+ firmware_storage_t file;
+ uint8_t *gbb_buf;
+
+ /* Open firmware storage device. */
+ if (firmware_storage_open_spi(&file)) {
+ VbExDebug("Failed to open firmware device!\n");
+ return NULL;
+ }
+
+ gbb_buf = VbExMalloc(CONFIG_LENGTH_GBB);
+ if (firmware_storage_read(&file, CONFIG_OFFSET_GBB, CONFIG_LENGTH_GBB,
+ gbb_buf)) {
+ VbExDebug("Failed to read firmware!\n");
+ VbExFree(gbb_buf);
+ gbb_buf = NULL;
+ }
+
+ return gbb_buf;
+}
+
+static int show_images_and_delay(BmpBlockHeader *bmph, int index)
+{
+ int i;
+ ScreenLayout *screen;
+ ImageInfo *info;
+
+ screen = (ScreenLayout *)(bmph + 1);
+ screen += index;
+
+ for (i = 0;
+ i < MAX_IMAGE_IN_LAYOUT && screen->images[i].image_info_offset;
+ i++) {
+ info = (ImageInfo *)((uint8_t *)bmph +
+ screen->images[i].image_info_offset);
+ if (VbExDisplayImage(screen->images[i].x,
+ screen->images[i].y,
+ info,
+ info + 1)) {
+ VbExDebug("Failed to display image, screen=%lu, "
+ "image=%d!\n", index, i);
+ return 1;
+ }
+ }
+
+ VbExSleepMs(1000);
+ return 0;
+}
+
static int do_vbexport_test_display(
cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int ret = 0;
uint32_t width, height;
+ GoogleBinaryBlockHeader *gbbh;
+ BmpBlockHeader *bmph;
if (VbExDisplayInit(&width, &height)) {
VbExDebug("Failed to init display.\n");
@@ -355,6 +410,20 @@ static int do_vbexport_test_display(
ret |= show_screen_and_delay(VB_SCREEN_RECOVERY_INSERT);
ret |= show_screen_and_delay(VB_SCREEN_RECOVERY_NO_GOOD);
+ gbbh = (GoogleBinaryBlockHeader *)read_gbb_from_firmware();
+ if (gbbh) {
+ bmph = (BmpBlockHeader *)((uint8_t *)gbbh + gbbh->bmpfv_offset);
+
+ VbExDebug("Showing images...\n");
+ ret |= show_images_and_delay(bmph, SCREEN_DEVELOPER_MODE);
+ ret |= show_images_and_delay(bmph, SCREEN_RECOVERY_MODE);
+ ret |= show_images_and_delay(bmph, SCREEN_RECOVERY_NO_OS);
+ ret |= show_images_and_delay(bmph, SCREEN_RECOVERY_MISSING_OS);
+ } else {
+ ret = 1;
+ }
+
+ VbExFree(gbbh);
return ret;
}