From: Rob Clark <robdclark@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v1 11/12] dm: video: Add color ANSI escape sequence support
Date: Sun, 10 Sep 2017 09:22:32 -0400 [thread overview]
Message-ID: <20170910132236.14318-12-robdclark@gmail.com> (raw)
In-Reply-To: <20170910132236.14318-1-robdclark@gmail.com>
Note that this doesn't differentiate (due to lack of information in
video_priv) between different possible component orders for 32bpp.
But the main user at this point is efi_loader, and GOP expects xBGR
so any video drivers that this is incorrect for already have problems.
(Also, conveniently, this matches what simple-framebuffer bindings
expect for kernels that use the simple-framebuffer DT binding to
take over the bootloader display.)
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/video/vidconsole-uclass.c | 94 +++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index 7998b4cf5f..dae65a21ed 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -108,6 +108,41 @@ static void vidconsole_newline(struct udevice *dev)
video_sync(dev->parent);
}
+static const struct {
+ unsigned r;
+ unsigned g;
+ unsigned b;
+} colors[] = {
+ { 0x00, 0x00, 0x00 }, /* black */
+ { 0xff, 0x00, 0x00 }, /* red */
+ { 0x00, 0xff, 0x00 }, /* green */
+ { 0xff, 0xff, 0x00 }, /* yellow */
+ { 0x00, 0x00, 0xff }, /* blue */
+ { 0xff, 0x00, 0xff }, /* magenta */
+ { 0x00, 0xff, 0xff }, /* cyan */
+ { 0xff, 0xff, 0xff }, /* white */
+};
+
+static void set_color(struct video_priv *priv, unsigned idx, unsigned *c)
+{
+ switch (priv->bpix) {
+ case VIDEO_BPP16:
+ *c = ((colors[idx].r >> 3) << 0) |
+ ((colors[idx].g >> 2) << 5) |
+ ((colors[idx].b >> 3) << 11);
+ break;
+ case VIDEO_BPP32:
+ *c = 0xff000000 |
+ (colors[idx].r << 0) |
+ (colors[idx].g << 8) |
+ (colors[idx].b << 16);
+ break;
+ default:
+ /* unsupported, leave current color in place */
+ break;
+ }
+}
+
/*
* Parse a number from string that ends in a non-numeric character..
* sscanf() would be nice. This is just enough for parsing ANSI escape
@@ -197,6 +232,65 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
}
break;
}
+ case 'm': {
+ struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+ char *s = priv->escape_buf;
+ char *end = &priv->escape_buf[priv->escape_len];
+
+ /*
+ * Set graphics mode: [%d;...;%dm
+ *
+ * Currently only supports the color attributes:
+ *
+ * Foreground Colors:
+ *
+ * 30 Black
+ * 31 Red
+ * 32 Green
+ * 33 Yellow
+ * 34 Blue
+ * 35 Magenta
+ * 36 Cyan
+ * 37 White
+ *
+ * Background Colors:
+ *
+ * 40 Black
+ * 41 Red
+ * 42 Green
+ * 43 Yellow
+ * 44 Blue
+ * 45 Magenta
+ * 46 Cyan
+ * 47 White
+ */
+
+ s++; /* [ */
+ while (s < end) {
+ int val;
+
+ s = parsenum(s, &val);
+ s++;
+
+ switch (val) {
+ case 30 ... 37:
+ /* fg color */
+ set_color(vid_priv, val - 30,
+ (unsigned *)&vid_priv->colour_fg);
+ break;
+ case 40 ... 47:
+ /* bg color */
+ set_color(vid_priv, val - 40,
+ (unsigned *)&vid_priv->colour_bg);
+ break;
+ default:
+ /* unknown/unsupported */
+ break;
+ }
+ }
+
+ break;
+ }
default:
debug("unrecognized escape sequence: %*s\n",
priv->escape_len, priv->escape_buf);
--
2.13.5
next prev parent reply other threads:[~2017-09-10 13:22 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-10 13:22 [U-Boot] [PATCH v1 00/12] efi_loader+video: support for Shell.efi Rob Clark
2017-09-10 13:22 ` [U-Boot] [PATCH v1 01/12] efi_loader: add stub EFI_DEVICE_PATH_UTILITIES_PROTOCOL Rob Clark
2017-10-04 17:13 ` Heinrich Schuchardt
2017-10-04 17:29 ` Heinrich Schuchardt
2017-10-04 18:00 ` Heinrich Schuchardt
2017-09-10 13:22 ` [U-Boot] [PATCH v1 02/12] efi_loader: add stub HII protocols Rob Clark
2017-10-04 17:45 ` Heinrich Schuchardt
2017-10-04 17:59 ` Heinrich Schuchardt
2017-09-10 13:22 ` [U-Boot] [PATCH v1 03/12] efi_loader: add EFI_UNICODE_COLLATION_PROTOCOL stub Rob Clark
2017-10-04 17:57 ` Heinrich Schuchardt
2017-10-04 18:35 ` Rob Clark
2017-10-04 18:57 ` Heinrich Schuchardt
2017-10-04 19:02 ` Heinrich Schuchardt
2017-10-04 19:01 ` Peter Jones
2017-09-10 13:22 ` [U-Boot] [PATCH v1 04/12] efi_loader: start fleshing out HII Rob Clark
2017-09-10 13:22 ` [U-Boot] [PATCH v1 05/12] efi_loader: flesh out unicode protocol Rob Clark
2017-09-10 13:22 ` [U-Boot] [PATCH v1 06/12] efi_loader: start fleshing out efi_device_path_utilities Rob Clark
2017-09-10 13:22 ` [U-Boot] [PATCH v1 07/12] efi_loader: SIMPLE_TEXT_INPUT_EX plus wire up objects properly Rob Clark
2017-09-10 13:22 ` [U-Boot] [PATCH v1 08/12] efi_loader: console support for color attributes Rob Clark
2017-10-04 18:53 ` Heinrich Schuchardt
2017-10-04 20:54 ` Rob Clark
2017-10-04 22:01 ` Heinrich Schuchardt
2017-10-04 23:19 ` Rob Clark
2017-10-04 23:53 ` Heinrich Schuchardt
2017-10-05 0:00 ` Rob Clark
2017-10-05 0:12 ` Rob Clark
2017-10-05 0:33 ` Heinrich Schuchardt
2017-09-10 13:22 ` [U-Boot] [PATCH v1 09/12] dm: video: Fix cache flushes Rob Clark
2017-10-04 19:29 ` Heinrich Schuchardt
2017-09-10 13:22 ` [U-Boot] [PATCH v1 10/12] dm: video: Add basic ANSI escape sequence support Rob Clark
2017-09-12 12:30 ` Simon Glass
2017-09-12 13:06 ` Rob Clark
2017-09-10 13:22 ` Rob Clark [this message]
2017-09-10 13:22 ` [U-Boot] [PATCH v1 12/12] HACK: efi_loader: hacks for SCT Rob Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170910132236.14318-12-robdclark@gmail.com \
--to=robdclark@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox