1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 08:42:12 +02:00

video/console: Factor out actual character output

In preparation for doing character set translations, factor out the
actual glyph display functionality into a separate function.
This will be used in a subsequent patch.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Andre Przywara
2019-03-23 01:29:59 +00:00
committed by Anatolij Gustschin
parent 4422294cbe
commit 7035ec3cb3

View File

@@ -457,6 +457,32 @@ error:
priv->escape = 0; priv->escape = 0;
} }
/* Put that actual character on the screen (using the CP437 code page). */
static int vidconsole_output_glyph(struct udevice *dev, char ch)
{
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
int ret;
/*
* Failure of this function normally indicates an unsupported
* colour depth. Check this and return an error to help with
* diagnosis.
*/
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
if (ret == -EAGAIN) {
vidconsole_newline(dev);
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
}
if (ret < 0)
return ret;
priv->xcur_frac += ret;
priv->last_ch = ch;
if (priv->xcur_frac >= priv->xsize_frac)
vidconsole_newline(dev);
return 0;
}
int vidconsole_put_char(struct udevice *dev, char ch) int vidconsole_put_char(struct udevice *dev, char ch)
{ {
struct vidconsole_priv *priv = dev_get_uclass_priv(dev); struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
@@ -494,23 +520,9 @@ int vidconsole_put_char(struct udevice *dev, char ch)
priv->last_ch = 0; priv->last_ch = 0;
break; break;
default: default:
/* ret = vidconsole_output_glyph(dev, ch);
* Failure of this function normally indicates an unsupported
* colour depth. Check this and return an error to help with
* diagnosis.
*/
ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
if (ret == -EAGAIN) {
vidconsole_newline(dev);
ret = vidconsole_putc_xy(dev, priv->xcur_frac,
priv->ycur, ch);
}
if (ret < 0) if (ret < 0)
return ret; return ret;
priv->xcur_frac += ret;
priv->last_ch = ch;
if (priv->xcur_frac >= priv->xsize_frac)
vidconsole_newline(dev);
break; break;
} }