]> git.ipfire.org Git - thirdparty/u-boot.git/blame - cmd/terminal.c
configs: Disable now unbuildable SPI options for boards
[thirdparty/u-boot.git] / cmd / terminal.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
d16471ee
HW
2/*
3 * (C) Copyright 2007 OpenMoko, Inc.
4 * Written by Harald Welte <laforge@openmoko.org>
d16471ee
HW
5 */
6
7/*
8 * Boot support
9 */
10#include <common.h>
11#include <command.h>
52cb4d4f 12#include <stdio_dev.h>
c1de7a6d 13#include <serial.h>
d16471ee 14
54841ab5 15int do_terminal(cmd_tbl_t * cmd, int flag, int argc, char * const argv[])
d16471ee 16{
d16471ee 17 int last_tilde = 0;
52cb4d4f 18 struct stdio_dev *dev = NULL;
d16471ee
HW
19
20 if (argc < 1)
21 return -1;
22
23 /* Scan for selected output/input device */
52cb4d4f 24 dev = stdio_get_by_name(argv[1]);
d16471ee
HW
25 if (!dev)
26 return -1;
27
28 serial_reinit_all();
29 printf("Entering terminal mode for port %s\n", dev->name);
30 puts("Use '~.' to leave the terminal and get back to u-boot\n");
31
32 while (1) {
33 int c;
34
35 /* read from console and display on serial port */
36 if (stdio_devices[0]->tstc()) {
37 c = stdio_devices[0]->getc();
38 if (last_tilde == 1) {
39 if (c == '.') {
40 putc(c);
41 putc('\n');
42 break;
43 } else {
44 last_tilde = 0;
45 /* write the delayed tilde */
46 dev->putc('~');
47 /* fall-through to print current
48 * character */
49 }
50 }
51 if (c == '~') {
52 last_tilde = 1;
53 puts("[u-boot]");
54 putc(c);
55 }
56 dev->putc(c);
57 }
58
59 /* read from serial port and display on console */
60 if (dev->tstc()) {
61 c = dev->getc();
62 putc(c);
63 }
64 }
65 return 0;
66}
67
68
69/***************************************************/
70
71U_BOOT_CMD(
72 terminal, 3, 1, do_terminal,
2fb2604d 73 "start terminal emulator",
d16471ee
HW
74 ""
75);