mirror of
https://github.com/tio/tio.git
synced 2026-05-01 14:57:59 +02:00
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
This commit is contained in:
parent
a58d406a3c
commit
ee46686fb6
13 changed files with 351 additions and 11 deletions
17
src/tty.c
17
src/tty.c
|
|
@ -50,6 +50,7 @@
|
|||
#include "error.h"
|
||||
#include "socket.h"
|
||||
#include "setspeed.h"
|
||||
#include "rs485.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define PATH_SERIAL_DEVICES "/dev/"
|
||||
|
|
@ -456,6 +457,10 @@ void handle_command_sequence(char input_char, char previous_char, char *output_c
|
|||
tio_printf("Configuration:");
|
||||
config_file_print();
|
||||
options_print();
|
||||
if (option.rs485)
|
||||
{
|
||||
rs485_print_config();
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY_E:
|
||||
|
|
@ -947,6 +952,12 @@ void tty_restore(void)
|
|||
{
|
||||
tcsetattr(fd, TCSANOW, &tio_old);
|
||||
|
||||
if (option.rs485)
|
||||
{
|
||||
/* Restore original RS-485 mode */
|
||||
rs485_mode_restore(fd);
|
||||
}
|
||||
|
||||
if (connected)
|
||||
{
|
||||
tty_disconnect();
|
||||
|
|
@ -1081,6 +1092,12 @@ int tty_connect(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Manage RS-485 mode */
|
||||
if (option.rs485)
|
||||
{
|
||||
rs485_mode_enable(fd);
|
||||
}
|
||||
|
||||
/* Make sure we restore tty settings on exit */
|
||||
if (first)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue