]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: Add a function to clear the display
authorSimon Glass <sjg@chromium.org>
Mon, 2 Oct 2023 01:15:23 +0000 (19:15 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 13 Dec 2023 23:39:05 +0000 (18:39 -0500)
Move the code from the 'cls' command into the console file, so it can
be called from elsewhere.

Signed-off-by: Simon Glass <sjg@chromium.org>
cmd/cls.c
common/console.c
include/console.h

index 1125a3f81bbbab1959790bbe9ae45a8ec6d9ef4f..80d0558d46791008fc49ac351d09492bf459cc5a 100644 (file)
--- a/cmd/cls.c
+++ b/cmd/cls.c
@@ -7,33 +7,14 @@
  */
 #include <common.h>
 #include <command.h>
+#include <console.h>
 #include <dm.h>
-#include <video_console.h>
-
-#define CSI "\x1b["
 
 static int do_video_clear(struct cmd_tbl *cmdtp, int flag, int argc,
                          char *const argv[])
 {
-       __maybe_unused struct udevice *dev;
-
-       /*
-        * Send clear screen and home
-        *
-        * FIXME(Heinrich Schuchardt <xypron.glpk@gmx.de>): This should go
-        * through an API and only be written to serial terminals, not video
-        * displays
-        */
-       printf(CSI "2J" CSI "1;1H");
-       if (IS_ENABLED(CONFIG_VIDEO_ANSI))
-               return 0;
-
-       if (IS_ENABLED(CONFIG_VIDEO)) {
-               if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
-                       return CMD_RET_FAILURE;
-               if (vidconsole_clear_and_reset(dev))
-                       return CMD_RET_FAILURE;
-       }
+       if (console_clear())
+               return CMD_RET_FAILURE;
 
        return CMD_RET_SUCCESS;
 }
index 98c3ee6ca6b89296deb8d661c8dbe3c3a80cd6fc..1ffda49c87e058871cf920e6f7ae46e67f0f4806 100644 (file)
 #include <stdio_dev.h>
 #include <exports.h>
 #include <env_internal.h>
+#include <video_console.h>
 #include <watchdog.h>
 #include <asm/global_data.h>
 #include <linux/delay.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#define CSI "\x1b["
+
 static int on_console(const char *name, const char *value, enum env_op op,
        int flags)
 {
@@ -1010,6 +1013,34 @@ int console_init_f(void)
        return 0;
 }
 
+int console_clear(void)
+{
+       /*
+        * Send clear screen and home
+        *
+        * FIXME(Heinrich Schuchardt <xypron.glpk@gmx.de>): This should go
+        * through an API and only be written to serial terminals, not video
+        * displays
+        */
+       printf(CSI "2J" CSI "1;1H");
+       if (IS_ENABLED(CONFIG_VIDEO_ANSI))
+               return 0;
+
+       if (IS_ENABLED(CONFIG_VIDEO)) {
+               struct udevice *dev;
+               int ret;
+
+               ret = uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev);
+               if (ret)
+                       return ret;
+               ret = vidconsole_clear_and_reset(dev);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 static void stdio_print_current_devices(void)
 {
        char *stdinname, *stdoutname, *stderrname;
index ceb733b5cb697d2076b17c3dc4f45062d01608c7..e29817e57b003963d4beea2d5e7afff72372706b 100644 (file)
@@ -156,6 +156,16 @@ int console_announce_r(void);
  */
 void console_puts_select_stderr(bool serial_only, const char *s);
 
+/**
+ * console_clear() - Clear the console
+ *
+ * Uses an ANSI sequence to clear the display, failing back to clearing the
+ * video display directly if !CONFIG_VIDEO_ANSI
+ *
+ * Return: 0 if OK, -ve on error
+ */
+int console_clear(void);
+
 /*
  * CONSOLE multiplexing.
  */