Clean up so that only the following error related printing functions are
used: tio_error_printf(), tio_error_printf_silent(),
tio_warning_printf().
A session mode switch is introduced for error printing so that it will
print error messages with better formatting depending on in or out of
session.
Add support for IPv4 and IPv6 network sockets via socket syntax
"inet:<port>" and "inet6:<port>" respectively.
For example, to listen and redirect serial device I/O to a host bound
IPv4 socket simply do:
$ tio /dev/ttyUSB0 --socket inet:4444
To connect do e.g.:
$ nc 127.0.0.1 4444
Likewise, for IPv6 do:
$ tio /dev/ttyUSB0 --socket inet6:4444
To connect do e.g.:
$ nc ::1 4444
If port is 0 or no port is provided default port 3333 is used.
If tio has a unix file socket open, a second tio instance of tio may
delete the socket file. This change fixes so that it will not be deleted
and tio will instead error and complain about conflicting socket file.
This feature allows an external program to inject output into and
listen to input from a serial port via a Unix domain socket (path
specified via the -S/--socket command line flag, or the socket
config file option) while tio is running. This is useful for ad-hoc
scripting of serial port interactions while still permitting manual
control. Since many serial devices (at least on Linux) get confused
when opened by multiple processes, and most commands do not know
how to correctly open a serial device, this allows a more convenient
usage model than directly writing to the device node from an external
program.
Any input from clients connected to the socket is sent on the serial
port as if entered at the terminal where tio is running (except that
ctrl-t sequences are not recognized), and any input from the serial
port is multiplexed to the terminal and all connected clients.
Sockets remain open while the serial port is disconnected, and writes
will block.
Example usage 1 (issue a command):
echo command | nc -UN /path/to/socket > /dev/null
Example usage 2 (use the expect command to script an interaction):
#!/usr/bin/expect -f
set timeout -1
log_user 0
spawn nc -UN /path/to/socket
set uart $spawn_id
send -i $uart "command1\n"
expect -i $uart "prompt> "
send -i $uart "command2\n"
expect -i $uart "prompt> "