mirror of
https://github.com/tio/tio.git
synced 2026-05-01 14:57:59 +02:00
Merge pull request #71 from hzeller/local-echo
Provide local-echo option.
This commit is contained in:
commit
8e1e0c9b26
7 changed files with 43 additions and 3 deletions
|
|
@ -21,21 +21,24 @@ application to easily connect to various terminal TTY devices.
|
|||
The commandline interface is straightforward as reflected in the output from
|
||||
'tio --help':
|
||||
```
|
||||
Usage: tio [<options>] <tty device>
|
||||
Usage: tio [<options>] <tty-device>
|
||||
|
||||
Options:
|
||||
-b, --baudrate <bps> Baud rate (default: 115200)
|
||||
-d, --databits 5|6|7|8 Data bits (default: 8)
|
||||
-f, --flow hard|soft|none Flow control (default: none)
|
||||
-s, --stopbits 1|2 Stop bits (default: 1)
|
||||
-p, --parity even|odd|none Parity (default: none)
|
||||
-p, --parity odd|even|none Parity (default: none)
|
||||
-o, --output-delay <ms> Output delay (default: 0)
|
||||
-n, --no-autoconnect Disable automatic connect
|
||||
-e, --local-echo Do local echo
|
||||
-l, --log <filename> Log to file
|
||||
-m, --map <flags> Map special characters
|
||||
-v, --version Display version
|
||||
-h, --help Display help
|
||||
|
||||
See the man page for list of supported mapping flags.
|
||||
|
||||
In session, press ctrl-t q to quit.
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,11 @@ However, if the
|
|||
.B \-\-no\-autoconnect
|
||||
option is provided, tio will exit if the device is not present or an established connection is lost.
|
||||
|
||||
.TP
|
||||
.BR \-e ", " "\-\-local\-echo
|
||||
|
||||
Enable local echo.
|
||||
|
||||
.TP
|
||||
.BR \-l ", " "\-\-log " \fI<filename>
|
||||
|
||||
|
|
@ -100,6 +105,8 @@ List available key commands
|
|||
Send serial break (triggers SysRq on Linux, etc.)
|
||||
.IP "\fBctrl-t c"
|
||||
Show configuration (baudrate, databits, etc.)
|
||||
.IP "\fBctrl-t e"
|
||||
Toggle local echo mode
|
||||
.IP "\fBctrl-t h"
|
||||
Toggle hexadecimal mode
|
||||
.IP "\fBctrl-t l"
|
||||
|
|
|
|||
|
|
@ -33,6 +33,10 @@ _tio()
|
|||
COMPREPLY=( $(compgen -W "5 6 7 8" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
-h | --local-echo)
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
-f | --flow)
|
||||
COMPREPLY=( $(compgen -W "hard soft none" -- ${cur}) )
|
||||
return 0
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ struct option_t
|
|||
int output_delay;
|
||||
bool no_autoconnect;
|
||||
bool log;
|
||||
bool local_echo;
|
||||
const char *log_filename;
|
||||
const char *map;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#define KEY_QUESTION 0x3f
|
||||
#define KEY_B 0x62
|
||||
#define KEY_C 0x63
|
||||
#define KEY_E 0x65
|
||||
#define KEY_H 0x68
|
||||
#define KEY_L 0x6C
|
||||
#define KEY_Q 0x71
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ struct option_t option =
|
|||
0, // No output delay
|
||||
false, // No autoconnect
|
||||
false, // No log
|
||||
false, // No local echo
|
||||
"", // Log filename
|
||||
"" // Map string
|
||||
};
|
||||
|
|
@ -61,6 +62,7 @@ void print_help(char *argv[])
|
|||
printf(" -p, --parity odd|even|none Parity (default: none)\n");
|
||||
printf(" -o, --output-delay <ms> Output delay (default: 0)\n");
|
||||
printf(" -n, --no-autoconnect Disable automatic connect\n");
|
||||
printf(" -e, --local-echo Do local echo\n");
|
||||
printf(" -l, --log <filename> Log to file\n");
|
||||
printf(" -m, --map <flags> Map special characters\n");
|
||||
printf(" -v, --version Display version\n");
|
||||
|
|
@ -109,6 +111,7 @@ void parse_options(int argc, char *argv[])
|
|||
{"parity", required_argument, 0, 'p'},
|
||||
{"output-delay", required_argument, 0, 'o'},
|
||||
{"no-autoconnect", no_argument, 0, 'n'},
|
||||
{"local-echo", no_argument, 0, 'e'},
|
||||
{"log", required_argument, 0, 'l'},
|
||||
{"map", required_argument, 0, 'm'},
|
||||
{"version", no_argument, 0, 'v'},
|
||||
|
|
@ -120,7 +123,7 @@ void parse_options(int argc, char *argv[])
|
|||
int option_index = 0;
|
||||
|
||||
/* Parse argument using getopt_long */
|
||||
c = getopt_long(argc, argv, "b:d:f:s:p:o:nl:m:vh", long_options, &option_index);
|
||||
c = getopt_long(argc, argv, "b:d:f:s:p:o:nel:m:vh", long_options, &option_index);
|
||||
|
||||
/* Detect the end of the options */
|
||||
if (c == -1)
|
||||
|
|
@ -166,6 +169,10 @@ void parse_options(int argc, char *argv[])
|
|||
option.no_autoconnect = true;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
option.local_echo = true;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
option.log = true;
|
||||
option.log_filename = optarg;
|
||||
|
|
|
|||
17
src/tty.c
17
src/tty.c
|
|
@ -101,6 +101,7 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
|
|||
tio_printf(" ctrl-t ? List available key commands");
|
||||
tio_printf(" ctrl-t b Send break");
|
||||
tio_printf(" ctrl-t c Show configuration");
|
||||
tio_printf(" ctrl-t e Toggle local echo mode");
|
||||
tio_printf(" ctrl-t h Toggle hexadecimal mode");
|
||||
tio_printf(" ctrl-t l Clear screen");
|
||||
tio_printf(" ctrl-t q Quit");
|
||||
|
|
@ -120,6 +121,7 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
|
|||
tio_printf(" Flow: %s", option.flow);
|
||||
tio_printf(" Stopbits: %d", option.stopbits);
|
||||
tio_printf(" Parity: %s", option.parity);
|
||||
tio_printf(" Local Echo: %s", option.local_echo ? "yes":"no");
|
||||
tio_printf(" Output delay: %d", option.output_delay);
|
||||
if (option.map[0] != 0)
|
||||
tio_printf(" Map flags: %s", option.map);
|
||||
|
|
@ -127,6 +129,10 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
|
|||
tio_printf(" Log file: %s", option.log_filename);
|
||||
break;
|
||||
|
||||
case KEY_E:
|
||||
option.local_echo = !option.local_echo;
|
||||
break;
|
||||
|
||||
case KEY_H:
|
||||
/* Toggle hexadecimal printing mode */
|
||||
if (print_mode == NORMAL)
|
||||
|
|
@ -512,6 +518,15 @@ void tty_restore(void)
|
|||
tty_disconnect();
|
||||
}
|
||||
|
||||
static void optional_local_echo(char c)
|
||||
{
|
||||
if (!option.local_echo)
|
||||
return;
|
||||
print(c);
|
||||
if (option.log)
|
||||
log_write(c);
|
||||
}
|
||||
|
||||
int tty_connect(void)
|
||||
{
|
||||
fd_set rdfs; /* Read file descriptor set */
|
||||
|
|
@ -660,6 +675,7 @@ int tty_connect(void)
|
|||
if ((output_char == '\n') && (map_onlcrnl)) {
|
||||
char r = '\r';
|
||||
|
||||
optional_local_echo(r);
|
||||
status = write(fd, &r, 1);
|
||||
if (status < 0)
|
||||
warning_printf("Could not write to tty device");
|
||||
|
|
@ -669,6 +685,7 @@ int tty_connect(void)
|
|||
}
|
||||
|
||||
/* Send output to tty device */
|
||||
optional_local_echo(output_char);
|
||||
status = write(fd, &output_char, 1);
|
||||
if (status < 0)
|
||||
warning_printf("Could not write to tty device");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue