[U-Boot] [PATCH v3 1/1] dm: video: correctly set the cursor position

The terminal escape sequence ESC [ <x> ; <y> H is used to set the cursor position. According to the ECMA 48 standard the upper left corner in the escape sequences is [1, 1]. The video uclass uses [0, 0] as upper left corner.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- v3: update unit test v2 remove trailing whitespace --- drivers/video/vidconsole-uclass.c | 8 ++++++++ test/dm/video.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c index 1874887f2f3..db40a1396b2 100644 --- a/drivers/video/vidconsole-uclass.c +++ b/drivers/video/vidconsole-uclass.c @@ -272,6 +272,14 @@ static void vidconsole_escape_char(struct udevice *dev, char ch) s++; /* ; */ s = parsenum(s, &col);
+ /* + * Video origin is [0, 0], terminal origin is [1, 1]. + */ + if (row) + --row; + if (col) + --col; + set_cursor_position(priv, row, col);
break; diff --git a/test/dm/video.c b/test/dm/video.c index 7def338058e..5d1faac19c9 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -178,12 +178,12 @@ static int dm_test_video_ansi(struct unit_test_state *uts)
/* test set-cursor: [%d;%df */ vidconsole_put_string(con, "abc"ANSI_ESC"[2;2fab"ANSI_ESC"[4;4fcd"); - ut_asserteq(142, compress_frame_buffer(dev)); + ut_asserteq(143, compress_frame_buffer(dev));
/* test colors (30-37 fg color, 40-47 bg color) */ vidconsole_put_string(con, ANSI_ESC"[30;41mfoo"); /* black on red */ vidconsole_put_string(con, ANSI_ESC"[33;44mbar"); /* yellow on blue */ - ut_asserteq(265, compress_frame_buffer(dev)); + ut_asserteq(272, compress_frame_buffer(dev));
return 0; }

On 10 November 2018 at 10:55, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
The terminal escape sequence ESC [ <x> ; <y> H is used to set the cursor position. According to the ECMA 48 standard the upper left corner in the escape sequences is [1, 1]. The video uclass uses [0, 0] as upper left corner.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v3: update unit test v2 remove trailing whitespace
drivers/video/vidconsole-uclass.c | 8 ++++++++ test/dm/video.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

On Sat, 10 Nov 2018 19:55:48 +0100 Heinrich Schuchardt xypron.glpk@gmx.de wrote:
The terminal escape sequence ESC [ <x> ; <y> H is used to set the cursor position. According to the ECMA 48 standard the upper left corner in the escape sequences is [1, 1]. The video uclass uses [0, 0] as upper left corner.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v3: update unit test v2 remove trailing whitespace
drivers/video/vidconsole-uclass.c | 8 ++++++++ test/dm/video.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-)
Applied to u-boot-video/master, thanks!
-- Anatolij
participants (3)
-
Anatolij Gustschin
-
Heinrich Schuchardt
-
Simon Glass