mirror of
https://github.com/tio/tio.git
synced 2026-05-01 14:57:59 +02:00
Enter non-interactive mode when piping to tio
Add support for a non interactive mode which allows other application to pipe data to tio which then forwards the data to the connected serial device. Non ineractive means that tio does not react to interactive key commands in the incoming stream. This allows users to pipe binary data directly to the connected serial device. Example use: $ cat commands.txt | tio /dev/ttyUSB0
This commit is contained in:
parent
a37ad26a88
commit
dba77eb912
3 changed files with 27 additions and 9 deletions
12
src/main.c
12
src/main.c
|
|
@ -59,6 +59,11 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
stdin_configure();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Enter non interactive mode
|
||||
interactive_mode = false;
|
||||
}
|
||||
|
||||
/* Configure output terminal */
|
||||
if (isatty(fileno(stdout)))
|
||||
|
|
@ -85,7 +90,10 @@ int main(int argc, char *argv[])
|
|||
|
||||
/* Print launch hints */
|
||||
tio_printf("tio v%s", VERSION);
|
||||
tio_printf("Press ctrl-t q to quit");
|
||||
if (interactive_mode)
|
||||
{
|
||||
tio_printf("Press ctrl-t q to quit");
|
||||
}
|
||||
|
||||
/* Open socket */
|
||||
if (option.socket)
|
||||
|
|
@ -94,7 +102,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
/* Connect to tty device */
|
||||
if (option.no_autoconnect)
|
||||
if ((option.no_autoconnect) || (!interactive_mode))
|
||||
{
|
||||
status = tty_connect();
|
||||
}
|
||||
|
|
|
|||
20
src/tty.c
20
src/tty.c
|
|
@ -63,6 +63,8 @@ extern int iossiospeed(int fd, int baudrate);
|
|||
#define PATH_SERIAL_DEVICES "/dev/serial/by-id/"
|
||||
#endif
|
||||
|
||||
bool interactive_mode = true;
|
||||
|
||||
static struct termios tio, tio_old, stdout_new, stdout_old, stdin_new, stdin_old;
|
||||
static unsigned long rx_total = 0, tx_total = 0;
|
||||
static bool connected = false;
|
||||
|
|
@ -855,17 +857,21 @@ int tty_connect(void)
|
|||
goto error_read;
|
||||
}
|
||||
|
||||
/* Forward input to output except ctrl-t key */
|
||||
/* Forward input to output */
|
||||
output_char = input_char;
|
||||
if (input_char == KEY_CTRL_T)
|
||||
forward = false;
|
||||
|
||||
/* Handle commands */
|
||||
handle_command_sequence(input_char, previous_char, &output_char, &forward);
|
||||
if (interactive_mode)
|
||||
{
|
||||
/* Do not forward ctrl-t key */
|
||||
if (input_char == KEY_CTRL_T)
|
||||
forward = false;
|
||||
|
||||
/* Save previous key */
|
||||
previous_char = input_char;
|
||||
/* Handle commands */
|
||||
handle_command_sequence(input_char, previous_char, &output_char, &forward);
|
||||
|
||||
/* Save previous key */
|
||||
previous_char = input_char;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define KEY_QUESTION 0x3f
|
||||
#define KEY_B 0x62
|
||||
#define KEY_C 0x63
|
||||
|
|
@ -48,3 +50,5 @@ void tty_configure(void);
|
|||
int tty_connect(void);
|
||||
void tty_wait_for_device(void);
|
||||
void list_serial_devices(void);
|
||||
|
||||
extern bool interactive_mode;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue