X-Git-Url: https://sigrok.org/gitweb/?p=libserialport.git;a=blobdiff_plain;f=linux_termios.c;h=3630e5758ae355ff823237a5ca39acda2cee8257;hp=743af6000503fe7c9754c61eb860aa5867728186;hb=HEAD;hpb=da21834e42bc58065de0871f49fffefa605d4c5b diff --git a/linux_termios.c b/linux_termios.c index 743af60..3630e57 100644 --- a/linux_termios.c +++ b/linux_termios.c @@ -33,41 +33,42 @@ * TCSETX/TCGETX ioctls used with struct termiox, others do not. */ -#ifdef __linux__ - +#include +#include #include #include "linux_termios.h" -int get_termios_get_ioctl(void) +SP_PRIV unsigned long get_termios_get_ioctl(void) { -#ifdef HAVE_TERMIOS2 +#ifdef HAVE_STRUCT_TERMIOS2 return TCGETS2; #else return TCGETS; #endif } -int get_termios_set_ioctl(void) +SP_PRIV unsigned long get_termios_set_ioctl(void) { -#ifdef HAVE_TERMIOS2 +#ifdef HAVE_STRUCT_TERMIOS2 return TCSETS2; #else return TCSETS; #endif } -int get_termios_size(void) +SP_PRIV size_t get_termios_size(void) { -#ifdef HAVE_TERMIOS2 +#ifdef HAVE_STRUCT_TERMIOS2 return sizeof(struct termios2); #else return sizeof(struct termios); #endif } -int get_termios_speed(void *data) +#if (defined(HAVE_TERMIOS_SPEED) || defined(HAVE_TERMIOS2_SPEED)) && HAVE_DECL_BOTHER +SP_PRIV int get_termios_speed(void *data) { -#ifdef HAVE_TERMIOS2 +#ifdef HAVE_STRUCT_TERMIOS2 struct termios2 *term = (struct termios2 *) data; #else struct termios *term = (struct termios *) data; @@ -78,9 +79,9 @@ int get_termios_speed(void *data) return term->c_ispeed; } -void set_termios_speed(void *data, int speed) +SP_PRIV void set_termios_speed(void *data, int speed) { -#ifdef HAVE_TERMIOS2 +#ifdef HAVE_STRUCT_TERMIOS2 struct termios2 *term = (struct termios2 *) data; #else struct termios *term = (struct termios *) data; @@ -89,46 +90,40 @@ void set_termios_speed(void *data, int speed) term->c_cflag |= BOTHER; term->c_ispeed = term->c_ospeed = speed; } +#endif -#ifdef HAVE_TERMIOX -int get_termiox_size(void) +#ifdef HAVE_STRUCT_TERMIOX +SP_PRIV size_t get_termiox_size(void) { return sizeof(struct termiox); } -int get_termiox_flow(void *data) +SP_PRIV int get_termiox_flow(void *data, int *rts, int *cts, int *dtr, int *dsr) { struct termiox *termx = (struct termiox *) data; - int flags = 0; - if (termx->x_cflag & RTSXOFF) - flags |= RTS_FLOW; - if (termx->x_cflag & CTSXON) - flags |= CTS_FLOW; - if (termx->x_cflag & DTRXOFF) - flags |= DTR_FLOW; - if (termx->x_cflag & DSRXON) - flags |= DSR_FLOW; + + *rts = (termx->x_cflag & RTSXOFF); + *cts = (termx->x_cflag & CTSXON); + *dtr = (termx->x_cflag & DTRXOFF); + *dsr = (termx->x_cflag & DSRXON); return flags; } -void set_termiox_flow(void *data, int flags) +SP_PRIV void set_termiox_flow(void *data, int rts, int cts, int dtr, int dsr) { struct termiox *termx = (struct termiox *) data; termx->x_cflag &= ~(RTSXOFF | CTSXON | DTRXOFF | DSRXON); - if (flags & RTS_FLOW) + if (rts) termx->x_cflag |= RTSXOFF; - if (flags & CTS_FLOW) + if (cts) termx->x_cflag |= CTSXON; - if (flags & DTR_FLOW) + if (dtr) termx->x_cflag |= DTRXOFF; - if (flags & DSR_FLOW) + if (dsr) termx->x_cflag |= DSRXON; } #endif - -#endif -