Blame view

cmd/terminal.c 1.38 KB
d16471ee0   Harald Welte   add 'terminal pro...
1
2
3
4
  /*
   * (C) Copyright 2007 OpenMoko, Inc.
   * Written by Harald Welte <laforge@openmoko.org>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
d16471ee0   Harald Welte   add 'terminal pro...
6
7
8
9
10
11
12
   */
  
  /*
   * Boot support
   */
  #include <common.h>
  #include <command.h>
52cb4d4fb   Jean-Christophe PLAGNIOL-VILLARD   stdio/device: rew...
13
  #include <stdio_dev.h>
c1de7a6da   Jean-Christophe PLAGNIOL-VILLARD   devices: merge to...
14
  #include <serial.h>
d16471ee0   Harald Welte   add 'terminal pro...
15

54841ab50   Wolfgang Denk   Make sure that ar...
16
  int do_terminal(cmd_tbl_t * cmd, int flag, int argc, char * const argv[])
d16471ee0   Harald Welte   add 'terminal pro...
17
  {
d16471ee0   Harald Welte   add 'terminal pro...
18
  	int last_tilde = 0;
52cb4d4fb   Jean-Christophe PLAGNIOL-VILLARD   stdio/device: rew...
19
  	struct stdio_dev *dev = NULL;
d16471ee0   Harald Welte   add 'terminal pro...
20
21
22
23
24
  
  	if (argc < 1)
  		return -1;
  
  	/* Scan for selected output/input device */
52cb4d4fb   Jean-Christophe PLAGNIOL-VILLARD   stdio/device: rew...
25
  	dev = stdio_get_by_name(argv[1]);
d16471ee0   Harald Welte   add 'terminal pro...
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  	if (!dev)
  		return -1;
  
  	serial_reinit_all();
  	printf("Entering terminal mode for port %s
  ", dev->name);
  	puts("Use '~.' to leave the terminal and get back to u-boot
  ");
  
  	while (1) {
  		int c;
  
  		/* read from console and display on serial port */
  		if (stdio_devices[0]->tstc()) {
  			c = stdio_devices[0]->getc();
  			if (last_tilde == 1) {
  				if (c == '.') {
  					putc(c);
  					putc('
  ');
  					break;
  				} else {
  					last_tilde = 0;
  					/* write the delayed tilde */
  					dev->putc('~');
  					/* fall-through to print current
  					 * character */
  				}
  			}
  			if (c == '~') {
  				last_tilde = 1;
  				puts("[u-boot]");
  				putc(c);
  			}
  			dev->putc(c);
  		}
  
  		/* read from serial port and display on console */
  		if (dev->tstc()) {
  			c = dev->getc();
  			putc(c);
  		}
  	}
  	return 0;
  }
  
  
  /***************************************************/
  
  U_BOOT_CMD(
  	terminal,	3,	1,	do_terminal,
2fb2604d5   Peter Tyser   Command usage cle...
77
  	"start terminal emulator",
d16471ee0   Harald Welte   add 'terminal pro...
78
79
  	""
  );