Commit graph

293 commits

Author SHA1 Message Date
Martin Lund
6618642acf Fix tty path on MSYS/CYGWIN platforms 2022-09-11 13:38:13 +02:00
Martin Lund
ba2d49d2f7 Consolidate timestamp implementation in one file 2022-09-10 23:29:23 +02:00
Martin Lund
dbc9a8e82d Add visual or audible alert support on connect/disconnect
The feature is detailed via the following option:

 --alert none|bell|blink

     Set alert action on connect/disconnect.

     It will sound the bell once or blink once on successful connect.
     Likewise it will sound the bell twice or blink twice on disconnect.

     Default value is "none" for no alert.
2022-09-10 22:33:42 +02:00
Martin Lund
68fc159654 Fix listing of serial devices in MSYS2/Cygwin
We generally try to list serial devices by ID but in the MSYS2/Cygwin
environment serial devices are not available by ID and so we simply list
the basic serial device paths instead.
2022-09-10 19:06:18 +02:00
Martin Lund
ee46686fb6 Add experimental RS-485 support
Many modern RS-485 serial devices such as the ones from FTDI already
operate in RS-485 mode by default and will work with tio out of the box.
However, there are some RS-232/485 devices which need to be switched
from e.g. RS-232 to RS-485 mode to operate accordingly on the physical
level.

This commit implements the switching mechanism and interface required to
enable RS-485 mode. It only works on Linux and with serial devices which
use device drivers that support the Linux RS-485 control interface.

The RS-485 feature is detailed via the following options:

 --rs-485                           Enable RS-485 mode
 --rs-485-config <config>           Set RS-485 configuration

Set the RS-485 configuration using the following key or key value pair
format in the configuration field:

 RTS_ON_SEND=value             Set logical level (0 or 1) for RTS pin when sending
 RTS_AFTER_SEND=value          Set logical level (0 or 1) for RTS pin after sending
 RTS_DELAY_BEFORE_SEND=value   Set RTS delay (ms) before sending
 RTS_DELAY_AFTER_SEND=value    Set RTS delay (ms) after sending
 RX_DURING_TX                  Receive data even while sending data

If defining more than one key or key value pair, they must be comma
separated.

Example use:

 $ tio /dev/ttyUSB0 --rs-485 --rs-r485-config=RTS_DELAY_AFTER_SEND=50,RX_DURING_TX
2022-09-10 17:52:54 +02:00
Martin Lund
e837fd0303 Add line response feature
Add a simple line response feature to make it possible to send e.g. a
command string to your serial device and easily receive and parse a line
response.

This is a convenience feature for simple request/response interaction
based on lines. For more advanced interaction the socket feature should
be used instead.

The line response feature is detailed via the following options:

 -r, --response-wait

Wait for line response then quit. A line is considered any string ending
with either CR or NL character. If no line is received tio will quit
after response timeout.

Any tio text is automatically muted when piping a string to tio while in
response mode to make it easy to parse the response.

 --response-timeout <ms>

Set timeout [ms] of line response (default: 100).

Example:

Sending a string (SCPI command) to a test instrument (Korad PSU) and
print line response:

 $ echo "*IDN?" | tio /dev/ttyACM0 --response-wait
 KORAD KD3305P V4.2 SN:32477045
2022-08-15 19:58:28 +02:00
Martin Lund
72eb682267 Cleanup hex mode code 2022-08-06 17:12:16 +02:00
Martin Lund
70f69899fc Cleanup 2022-07-25 12:48:20 +02:00
Martin Lund
d28007f0d3 Avoid invalid hex character messages when switching hex mode 2022-07-22 22:03:47 +02:00
Martin Lund
f454bdaa3a Cleanup 2022-07-22 16:40:15 +02:00
Martin Lund
b322ecbdcf Renamed tty_flush() to tty_sync() 2022-07-22 16:37:49 +02:00
Martin Lund
de606d51ba Fix sync output to serial port
Using fsync() on filedescriptors for serial ports can not be relied on.
Add use of tcdrain() to make sure data has been written by the serial
port before proceeding.

This fixes a problem with tio sometimes not writing piped input data to
the serial port before exiting which results in the pending writes being
cancelled / flushed.
2022-07-22 16:28:38 +02:00
Martin Lund
0cdd69940f Clean up tty_flush() 2022-07-22 00:45:30 +02:00
Martin Lund
dd8b137b15 Force frequent sync on tty_flush() 2022-07-22 00:16:54 +02:00
Martin Lund
6462aac792 Simplify tty_flush() 2022-07-20 20:46:01 +02:00
Martin Lund
5f46136b28 Quit from non-interactive mode using ctrl-c
When piping to tio it will automatically enter "non-interactive" mode
which means it will not react to any input key sequences but simple read
the input stream and write it to the tty device.

This also means that ctrl-t q can not be used to quit and so tio would
hang forever when used in non-interactive mode.

This change allows to send the standard termination signal by pressing
ctrl-c on tio in non-interactive mode to make it quit.
2022-07-20 18:18:16 +02:00
Martin Lund
eadcc7e384 Make sure we flush output buffer to tty when piping to tio 2022-07-20 17:56:43 +02:00
Martin Lund
a0a8dccd51 Do not return false read error when piping to tio 2022-07-20 13:11:11 +02:00
Martin Lund
40c8753151 Show error message when reading port settings fail 2022-07-20 12:25:51 +02:00
Martin Lund
3903880106 Rework toggle and pulse feature to support all lines
Replace existing toggle and pulse key commands with the following
generalized key commands which allows to toggle or pulse all serial port
lines:

 ctrl-t g   Toggle serial port line
 ctrl-t p   Pulse serial port line

When used, user will be asked which serial line to toggle or pulse.

Also introduce --line-pulse-duration option for setting specific pulse
duration in milliseconds for each serial line using a key value pair
format. Each key represents a serial line. The following keys are
available: DTR, RTS, CTS, DSR, DCD, RI.

Example:

 $ tio /dev/ttyUSB0 --line-pulse-duration DTR=200,RTS=300,RI=50

Likewise, the pulse duration can also be set via configuration file
using the line-pulse-duration variable:

 line-pulse-duration = DTR=200,RTS=300,RI=50
2022-07-19 12:54:40 +02:00
Martin Lund
d510c101b4 Change 'ctrl-t T' to 'ctrl-t t' for timestamp toggle 2022-07-15 12:26:36 +02:00
Martin Lund
02729c10b1 Add support for remapping prefix key
Make it possible to remap the prefix key (default: ctrl-t) by setting
the prefix-ctrl-key variable in the configuration file.

Allowed values are in the range a..z.

Example, to set the prefix key to ctrl-a simply do:

prefix-ctrl-key = a
2022-07-15 12:18:40 +02:00
Rui Chen
223f0c5d13
fix compilation error
Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-07-13 22:09:07 -04:00
Martin Lund
a23be7f2c2 Simplify arbitrary baudrate code 2022-07-12 12:09:09 +02:00
Martin Lund
ac859f41b9 Cleanup error printing routines
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.
2022-07-11 23:18:19 +02:00
Martin Lund
360deb3c72 Add support for space parity 2022-07-11 14:55:54 +02:00
Martin Lund
39af74f263 Rename EOL delay to Output line delay 2022-07-11 14:08:12 +02:00
Martin Lund
11762b2300 Replace -U,--upcase with mapping flag OLTU 2022-07-11 10:15:12 +02:00
Martin Lund
555e526ce7 Cleanup 2022-07-11 09:18:43 +02:00
Martin Lund
5b82c710f1 Simplify tty_write() 2022-07-11 09:12:56 +02:00
Robert Snell
f459a462c5 Fixed indentation in configfile.c, tty.c, options.c 2022-07-10 18:14:29 -04:00
Robert Snell
944ee9173b Additional commands: EOL delay, lower to upper translation, added mark parity
Added command line options:
-O, --eol-delay to have a separate delay for end of line
-U, --upper to enable translation of lower case alpha to upper case

Added ability to set mark parity.
Added ctrl-t U key sequence to allow enable/disable lower case alpha to
upper case during a session.
Updated Man page with command line options, ctrl-t sequences and
configuration file options.
Updated README.md, with above information.
2022-07-09 21:22:43 -04:00
George Joseph
f24cee61e7 Add Pulse DTR command
MCUs like the ESP32 can be reset if the serial port DTR line is
pulsed for a short time.  You could just type CTRL-t d CTRL-t d
but that's a little awkward since you have to lift your finger
off the CTRL key to type the Ds.  Now you can just type CTRL-T D.

* Added new command "D" to pulse the DTR line.  I.E.  Toggle its
  state twice with a configurable duration between toggles.

* Added new config/command line option "--dtr-pulse-duration"
  to set the duration between the DTR state toggles.  The default
  is 100ms.
2022-07-07 12:45:29 -06:00
Martin Lund
732c0c3f89 Add '24hour-delta' timestamp option
When enabled this option will timestamp new lines with the time elapsed
since the line before.

This is a very useful feature to identify which events takes the most
time.
2022-07-05 16:05:38 +02:00
Martin Lund
a3f5f6414b Cleanup 2022-07-04 12:00:24 +02:00
Martin Lund
98c96dba52 Enable buffered writing
Read block of bytes from input and process same block for output.  This
will speed things up by reducing I/O overhead.
2022-06-24 17:21:17 +02:00
Martin Lund
d522527c49 Enable buffered reading
Read block of bytes from input and process byte by byte for output. This
will speed things up by reducing I/O overhead.
2022-06-24 17:18:08 +02:00
Martin Lund
4e08c68533 Refactoring 2022-06-24 00:17:45 +02:00
Martin Lund
941e8d5b04 Cleanup 2022-06-23 20:47:07 +02:00
Martin Lund
a947985651 Optimization 2022-06-22 21:27:11 +02:00
Martin Lund
ac25e7434c Cleanup 2022-06-22 11:23:57 +02:00
Martin Lund
a0f3f9d9b7 Cleanup stdout flushing
Flushing is not needed since we disabled buffering of stdout.
2022-06-22 01:03:59 +02:00
Martin Lund
4c611e6767 Cleanup log code 2022-06-22 00:22:18 +02:00
Martin Lund
c82b7e2ecc Cleanup 2022-06-21 22:32:24 +02:00
Martin Lund
3d65e62e52 Simplify stdout_configure() code 2022-06-21 19:28:04 +02:00
Martin Lund
f62e2f972b Simplify stdin_configure() code 2022-06-21 19:19:05 +02:00
Martin Lund
dba77eb912 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
2022-06-16 21:03:53 +02:00
Martin Lund
1e8c950e9d Update text 2022-06-16 11:15:32 +02:00
Martin Lund
63d3232b32 Improve key command response for local echo and timestamp 2022-06-12 04:07:17 +02:00
Martin Lund
c66017f287 Fix invalid hex character error message 2022-06-12 02:31:48 +02:00