83 lines
1.3 KiB
C++
83 lines
1.3 KiB
C++
#include <errno.h>
|
|
#include <sys/syscall.h>
|
|
#include <termios.h>
|
|
#include <unistd.h>
|
|
|
|
speed_t cfgetispeed(const struct termios* termios)
|
|
{
|
|
return termios->c_ispeed;
|
|
}
|
|
|
|
speed_t cfgetospeed(const struct termios* termios)
|
|
{
|
|
return termios->c_ospeed;
|
|
}
|
|
|
|
static bool is_valid_speed(speed_t speed)
|
|
{
|
|
switch (speed)
|
|
{
|
|
case B0:
|
|
case B50:
|
|
case B75:
|
|
case B110:
|
|
case B134:
|
|
case B150:
|
|
case B200:
|
|
case B300:
|
|
case B600:
|
|
case B1200:
|
|
case B1800:
|
|
case B2400:
|
|
case B4800:
|
|
case B9600:
|
|
case B19200:
|
|
case B38400:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
int cfsetispeed(struct termios* termios, speed_t speed)
|
|
{
|
|
if (!is_valid_speed(speed))
|
|
{
|
|
errno = EINVAL;
|
|
return -1;
|
|
}
|
|
termios->c_ispeed = speed;
|
|
return 0;
|
|
}
|
|
|
|
int cfsetospeed(struct termios* termios, speed_t speed)
|
|
{
|
|
if (!is_valid_speed(speed))
|
|
{
|
|
errno = EINVAL;
|
|
return -1;
|
|
}
|
|
termios->c_ospeed = speed;
|
|
return 0;
|
|
}
|
|
|
|
int tcdrain(int);
|
|
|
|
int tcflow(int, int);
|
|
|
|
int tcflush(int, int);
|
|
|
|
int tcgetattr(int fildes, struct termios* termios)
|
|
{
|
|
return syscall(SYS_TCGETATTR, fildes, termios);
|
|
}
|
|
|
|
pid_t tcgetsid(int);
|
|
|
|
int tcsendbreak(int, int);
|
|
|
|
int tcsetattr(int fildes, int optional_actions, const struct termios* termios)
|
|
{
|
|
return syscall(SYS_TCSETATTR, fildes, optional_actions, termios);
|
|
}
|