[PATCH v3 07/12] video: Correct setting of cursor position

Simon Glass sjg at chromium.org
Sun Nov 12 21:01:11 CET 2023


Hi Anatolij,

On Sun, 1 Oct 2023 at 19:15, Simon Glass <sjg at chromium.org> wrote:
>
> The ANSI codes are not correctly handled at present, in that the
> requested X position is added to the current one.
>
> Correct this and also call vidconsole_entry_start() to start a new text
> line.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>  drivers/video/vidconsole-uclass.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
> index 22d55df71f63..a312a1985242 100644
> --- a/drivers/video/vidconsole-uclass.c
> +++ b/drivers/video/vidconsole-uclass.c
> @@ -125,6 +125,7 @@ void vidconsole_set_cursor_pos(struct udevice *dev, int x, int y)
>         priv->xcur_frac = VID_TO_POS(x);
>         priv->xstart_frac = priv->xcur_frac;
>         priv->ycur = y;
> +       vidconsole_entry_start(dev);
>  }
>
>  /**
> @@ -134,8 +135,10 @@ void vidconsole_set_cursor_pos(struct udevice *dev, int x, int y)
>   * @row:       new row
>   * @col:       new column
>   */
> -static void set_cursor_position(struct vidconsole_priv *priv, int row, int col)
> +static void set_cursor_position(struct udevice *dev, int row, int col)
>  {
> +       struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
> +
>         /*
>          * Ensure we stay in the bounds of the screen.
>          */
> @@ -144,9 +147,7 @@ static void set_cursor_position(struct vidconsole_priv *priv, int row, int col)
>         if (col >= priv->cols)
>                 col = priv->cols - 1;
>
> -       priv->ycur = row * priv->y_charsize;
> -       priv->xcur_frac = priv->xstart_frac +
> -                         VID_TO_POS(col * priv->x_charsize);
> +       vidconsole_position_cursor(dev, col, row);
>  }
>
>  /**
> @@ -193,7 +194,7 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
>                         int row = priv->row_saved;
>                         int col = priv->col_saved;
>
> -                       set_cursor_position(priv, row, col);
> +                       set_cursor_position(dev, row, col);
>                         priv->escape = 0;
>                         return;
>                 }
> @@ -255,7 +256,7 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
>                 if (row < 0)
>                         row = 0;
>                 /* Right and bottom overflows are handled in the callee. */
> -               set_cursor_position(priv, row, col);
> +               set_cursor_position(dev, row, col);
>                 break;
>         }
>         case 'H':
> @@ -279,7 +280,7 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
>                 if (col)
>                         --col;
>
> -               set_cursor_position(priv, row, col);
> +               set_cursor_position(dev, row, col);
>
>                 break;
>         }
> --
> 2.42.0.582.g8ccd20d70d-goog
>

Any thoughts on this patch, please?

Regards,
Simon


More information about the U-Boot mailing list