mirror of
https://github.com/tio/tio.git
synced 2026-05-01 14:57:59 +02:00
Added support for non-standard baud rates
Only enabled when possible, that is, when the BOTHER definition is available. It is untested but it should work as described here: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683826 Some Cypress USB<->serial devices supposedly supports arbitrary speeds.
This commit is contained in:
parent
2c53bfde96
commit
deec83a4ee
2 changed files with 28 additions and 3 deletions
28
src/tty.c
28
src/tty.c
|
|
@ -45,8 +45,13 @@ static struct termios tio, new_stdout, old_stdout, old_tio;
|
|||
static unsigned long rx_total = 0, tx_total = 0;
|
||||
static bool connected = false;
|
||||
static bool tainted = false;
|
||||
static bool standard_baudrate = true;
|
||||
static int fd;
|
||||
|
||||
#ifndef BOTHER
|
||||
#define BOTHER 0010000
|
||||
#endif
|
||||
|
||||
#define tio_printf(format, args...) \
|
||||
{ \
|
||||
if (tainted) putchar('\n'); \
|
||||
|
|
@ -156,7 +161,7 @@ void stdout_restore(void)
|
|||
|
||||
void tty_configure(void)
|
||||
{
|
||||
speed_t baudrate;
|
||||
speed_t baudrate = 0;
|
||||
|
||||
memset(&tio, 0, sizeof(tio));
|
||||
|
||||
|
|
@ -177,12 +182,25 @@ void tty_configure(void)
|
|||
AUTOCONF_BAUDRATE_CASES
|
||||
|
||||
default:
|
||||
#if !HAVE_DECL_BOTHER
|
||||
error_printf("Invalid baud rate");
|
||||
exit(EXIT_FAILURE);
|
||||
#else
|
||||
standard_baudrate = false;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
cfsetispeed(&tio, baudrate);
|
||||
cfsetospeed(&tio, baudrate);
|
||||
if (standard_baudrate)
|
||||
{
|
||||
cfsetispeed(&tio, baudrate);
|
||||
cfsetospeed(&tio, baudrate);
|
||||
} else
|
||||
{
|
||||
tio.c_ispeed = tio.c_ospeed = baudrate;
|
||||
tio.c_cflag &= ~CBAUD;
|
||||
tio.c_cflag |= BOTHER;
|
||||
}
|
||||
|
||||
/* Set databits */
|
||||
tio.c_cflag &= ~CSIZE;
|
||||
|
|
@ -374,6 +392,10 @@ int tty_connect(void)
|
|||
/* Flush stale I/O data (if any) */
|
||||
tcflush(fd, TCIOFLUSH);
|
||||
|
||||
/* Warn if non standard baud rate is used */
|
||||
if (!standard_baudrate)
|
||||
tio_printf("Warning: Using a non standard baud rate");
|
||||
|
||||
/* Print connect status */
|
||||
tio_printf("Connected");
|
||||
connected = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue