blob: 1125a3f81bbbab1959790bbe9ae45a8ec6d9ef4f [file] [log] [blame]
Anatolij Gustschin4e92e602018-12-01 10:47:20 +01001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * (C) Copyright 2018
4 * DENX Software Engineering, Anatolij Gustschin <agust@denx.de>
5 *
6 * cls - clear screen command
7 */
8#include <common.h>
9#include <command.h>
10#include <dm.h>
Simon Glassa76b60f2023-03-10 12:47:21 -080011#include <video_console.h>
Anatolij Gustschin4e92e602018-12-01 10:47:20 +010012
Heinrich Schuchardtbfaa51d2022-02-11 18:11:05 +010013#define CSI "\x1b["
14
Simon Glass09140112020-05-10 11:40:03 -060015static int do_video_clear(struct cmd_tbl *cmdtp, int flag, int argc,
Anatolij Gustschin4e92e602018-12-01 10:47:20 +010016 char *const argv[])
17{
Heinrich Schuchardtbfaa51d2022-02-11 18:11:05 +010018 __maybe_unused struct udevice *dev;
Anatolij Gustschin4e92e602018-12-01 10:47:20 +010019
Simon Glass61a62102023-03-10 12:47:23 -080020 /*
21 * Send clear screen and home
22 *
23 * FIXME(Heinrich Schuchardt <xypron.glpk@gmx.de>): This should go
24 * through an API and only be written to serial terminals, not video
25 * displays
26 */
Heinrich Schuchardtbfaa51d2022-02-11 18:11:05 +010027 printf(CSI "2J" CSI "1;1H");
Simon Glassa76b60f2023-03-10 12:47:21 -080028 if (IS_ENABLED(CONFIG_VIDEO_ANSI))
29 return 0;
30
31 if (IS_ENABLED(CONFIG_VIDEO)) {
32 if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
Heinrich Schuchardt63de2162022-07-14 08:53:46 +020033 return CMD_RET_FAILURE;
Simon Glassa76b60f2023-03-10 12:47:21 -080034 if (vidconsole_clear_and_reset(dev))
Heinrich Schuchardt63de2162022-07-14 08:53:46 +020035 return CMD_RET_FAILURE;
36 }
Simon Glassa76b60f2023-03-10 12:47:21 -080037
Anatolij Gustschin4e92e602018-12-01 10:47:20 +010038 return CMD_RET_SUCCESS;
39}
40
41U_BOOT_CMD(cls, 1, 1, do_video_clear, "clear screen", "");