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