mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
video/console: Implement reverse video ANSI sequence for DM_VIDEO
The video console for DM_VIDEO compliant drivers only understands a very small number of ANSI sequences. First and foremost it misses the "reverse video" command, which is used by our own bootmenu command to highlight the selected entry. To avoid forcing people to use their imagination when using the bootmenu, let's just implement the rather simple reverse effect. We need to store the background colour index for that, so that we can recalculate both the foreground and background colour pixel values. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org> [agust: merged BG color escape seq change to fix "ut dm video_ansi" test] Signed-off-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
96c9bf7e2a
commit
eabb0725d4
3 changed files with 14 additions and 2 deletions
|
@ -360,6 +360,13 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
|
||||||
vid_priv->colour_fg = vid_console_color(
|
vid_priv->colour_fg = vid_console_color(
|
||||||
vid_priv, vid_priv->fg_col_idx);
|
vid_priv, vid_priv->fg_col_idx);
|
||||||
break;
|
break;
|
||||||
|
case 7:
|
||||||
|
/* reverse video */
|
||||||
|
vid_priv->colour_fg = vid_console_color(
|
||||||
|
vid_priv, vid_priv->bg_col_idx);
|
||||||
|
vid_priv->colour_bg = vid_console_color(
|
||||||
|
vid_priv, vid_priv->fg_col_idx);
|
||||||
|
break;
|
||||||
case 30 ... 37:
|
case 30 ... 37:
|
||||||
/* foreground color */
|
/* foreground color */
|
||||||
vid_priv->fg_col_idx &= ~7;
|
vid_priv->fg_col_idx &= ~7;
|
||||||
|
@ -368,9 +375,11 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
|
||||||
vid_priv, vid_priv->fg_col_idx);
|
vid_priv, vid_priv->fg_col_idx);
|
||||||
break;
|
break;
|
||||||
case 40 ... 47:
|
case 40 ... 47:
|
||||||
/* background color */
|
/* background color, also mask the bold bit */
|
||||||
|
vid_priv->bg_col_idx &= ~0xf;
|
||||||
|
vid_priv->bg_col_idx |= val - 40;
|
||||||
vid_priv->colour_bg = vid_console_color(
|
vid_priv->colour_bg = vid_console_color(
|
||||||
vid_priv, val - 40);
|
vid_priv, vid_priv->bg_col_idx);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* ignore unsupported SGR parameter */
|
/* ignore unsupported SGR parameter */
|
||||||
|
|
|
@ -136,6 +136,7 @@ void video_set_default_colors(struct udevice *dev, bool invert)
|
||||||
back = temp;
|
back = temp;
|
||||||
}
|
}
|
||||||
priv->fg_col_idx = fore;
|
priv->fg_col_idx = fore;
|
||||||
|
priv->bg_col_idx = back;
|
||||||
priv->colour_fg = vid_console_color(priv, fore);
|
priv->colour_fg = vid_console_color(priv, fore);
|
||||||
priv->colour_bg = vid_console_color(priv, back);
|
priv->colour_bg = vid_console_color(priv, back);
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ enum video_log2_bpp {
|
||||||
* the LCD is updated
|
* the LCD is updated
|
||||||
* @cmap: Colour map for 8-bit-per-pixel displays
|
* @cmap: Colour map for 8-bit-per-pixel displays
|
||||||
* @fg_col_idx: Foreground color code (bit 3 = bold, bit 0-2 = color)
|
* @fg_col_idx: Foreground color code (bit 3 = bold, bit 0-2 = color)
|
||||||
|
* @bg_col_idx: Background color code (bit 3 = bold, bit 0-2 = color)
|
||||||
*/
|
*/
|
||||||
struct video_priv {
|
struct video_priv {
|
||||||
/* Things set up by the driver: */
|
/* Things set up by the driver: */
|
||||||
|
@ -92,6 +93,7 @@ struct video_priv {
|
||||||
bool flush_dcache;
|
bool flush_dcache;
|
||||||
ushort *cmap;
|
ushort *cmap;
|
||||||
u8 fg_col_idx;
|
u8 fg_col_idx;
|
||||||
|
u8 bg_col_idx;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Placeholder - there are no video operations at present */
|
/* Placeholder - there are no video operations at present */
|
||||||
|
|
Loading…
Reference in a new issue