X-Git-Url: https://git.jankratochvil.net/?p=gnokii.git;a=blobdiff_plain;f=common%2Fdevices%2Funixserial.c;h=e9dcb17728cf3847429e45cae39d7a93ef0fdf0a;hp=51864655dd1aa0ee78f38aadcf04a28ee8dba4cc;hb=3ffd063073b4fe33d61c74b767c93833dc5bd8e5;hpb=7fe9e12e4451190f8ca2543a98de9abd4f9b8958 diff --git a/common/devices/unixserial.c b/common/devices/unixserial.c index 5186465..e9dcb17 100644 --- a/common/devices/unixserial.c +++ b/common/devices/unixserial.c @@ -11,8 +11,11 @@ Released under the terms of the GNU GPL, see file COPYING for more details. $Log$ - Revision 1.1.1.1 2001/11/25 21:59:09 short - :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + Revision 1.1.1.2 2001/11/27 22:01:15 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Tue Nov 27 22:58 CET 2001 + + Revision 1.11 2001/11/27 12:19:01 pkot + Cleanup, indentation, ANSI complaint preprocesor symbols (Jan Kratochvil, me) Revision 1.10 2001/11/14 10:46:12 pkot Small cleanup with __unices__ @@ -59,238 +62,233 @@ #include "devices/unixserial.h" #ifdef HAVE_SYS_IOCTL_COMPAT_H - #include +# include #endif #ifdef HAVE_SYS_SELECT_H -#include +# include #endif /* If the target operating system does not have cfsetspeed, we can emulate it. */ #ifndef HAVE_CFSETSPEED - #if defined(HAVE_CFSETISPEED) && defined(HAVE_CFSETOSPEED) - #define cfsetspeed(t, speed) \ - (cfsetispeed(t, speed) || cfsetospeed(t, speed)) - #else - static int cfsetspeed(struct termios *t, int speed) { - #ifdef HAVE_TERMIOS_CSPEED - t->c_ispeed = speed; - t->c_ospeed = speed; - #else - t->c_cflag |= speed; - #endif - return 0; - } - #endif -#endif +# if defined(HAVE_CFSETISPEED) && defined(HAVE_CFSETOSPEED) +# define cfsetspeed(t, speed) \ + (cfsetispeed(t, speed) || cfsetospeed(t, speed)) +# else +static int cfsetspeed(struct termios *t, int speed) +{ +# ifdef HAVE_TERMIOS_CSPEED + t->c_ispeed = speed; + t->c_ospeed = speed; +# else + t->c_cflag |= speed; +# endif /* HAVE_TERMIOS_CSPEED */ + return 0; +} +# endif /* HAVE_CFSETISPEED && HAVE_CFSETOSPEED */ +#endif /* HAVE_CFSETSPEED */ #ifndef O_NONBLOCK - #define O_NONBLOCK 0 +# define O_NONBLOCK 0 #endif /* Structure to backup the setting of the terminal. */ - struct termios serial_termios; /* Open the serial port and store the settings. */ - -int serial_open(__const char *__file, int __oflag) { - - int __fd; - int retcode; - - __fd = open(__file, __oflag); - if (__fd == -1) { - perror("Gnokii serial_open: open"); - return (-1); - } - - retcode=tcgetattr(__fd, &serial_termios); - if(retcode==-1) { - perror("Gnokii serial_open:tcgetattr"); - /* Don't call serial_close since serial_termios is not valid */ - close(__fd); - return(-1); - } - - return __fd; +int serial_open(__const char *__file, int __oflag) +{ + int __fd; + int retcode; + + __fd = open(__file, __oflag); + if (__fd == -1) { + perror("Gnokii serial_open: open"); + return (-1); + } + + retcode = tcgetattr(__fd, &serial_termios); + if (retcode == -1) { + perror("Gnokii serial_open:tcgetattr"); + /* Don't call serial_close since serial_termios is not valid */ + close(__fd); + return (-1); + } + + return __fd; } /* Close the serial port and restore old settings. */ +int serial_close(int __fd) +{ + if (__fd >= 0) + tcsetattr(__fd, TCSANOW, &serial_termios); -int serial_close(int __fd) { - - if (__fd >= 0) - tcsetattr(__fd, TCSANOW, &serial_termios); - - return (close(__fd)); + return (close(__fd)); } /* Open a device with standard options. */ +int serial_opendevice(__const char *__file, int __with_odd_parity, + int __with_async, int __with_hw_handshake) +{ + int fd; + int retcode; + struct termios tp; -int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake) { - - int fd; - int retcode; - struct termios tp; - - /* Open device */ - - fd = serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK); + /* Open device */ + fd = serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK); - if (fd < 0) - return fd; - - /* Allow process/thread to receive SIGIO */ + if (fd < 0) return fd; + /* Allow process/thread to receive SIGIO */ #if !(__unices__) - retcode = fcntl(fd, F_SETOWN, getpid()); - if (retcode == -1){ - perror("Gnokii serial_opendevice: fnctl(F_SETOWN)"); - serial_close(fd); - return(-1); - } + retcode = fcntl(fd, F_SETOWN, getpid()); + if (retcode == -1) { + perror("Gnokii serial_opendevice: fnctl(F_SETOWN)"); + serial_close(fd); + return (-1); + } #endif - /* Make filedescriptor asynchronous. */ - - if (__with_async) { - retcode=fcntl(fd, F_SETFL, FASYNC); - if (retcode == -1){ - perror("Gnokii serial_opendevice: fnctl(F_SETFL)"); - serial_close(fd); - return(-1); - } - } - - /* Initialise the port settings */ - - memcpy(&tp, &serial_termios, sizeof(struct termios)); - - /* Set port settings for canonical input processing */ - - tp.c_cflag = B0 | CS8 | CLOCAL | CREAD; - if (__with_odd_parity) { - tp.c_cflag |= (PARENB | PARODD); - tp.c_iflag = 0; - } - else - tp.c_iflag = IGNPAR; - if (__with_hw_handshake) - tp.c_cflag |= CRTSCTS; - else - tp.c_cflag &= ~CRTSCTS; - - tp.c_oflag = 0; - tp.c_lflag = 0; - tp.c_cc[VMIN] = 1; - tp.c_cc[VTIME] = 0; - - retcode=tcflush(fd, TCIFLUSH); - if (retcode == -1) { - perror("Gnokii serial_opendevice: tcflush"); - serial_close(fd); - return(-1); - } - - retcode=tcsetattr(fd, TCSANOW, &tp); - if (retcode == -1){ - perror("Gnokii serial_opendevice: tcsetattr"); - serial_close(fd); - return(-1); - } - - return fd; + /* Make filedescriptor asynchronous. */ + if (__with_async) { + retcode = fcntl(fd, F_SETFL, FASYNC); + if (retcode == -1) { + perror("Gnokii serial_opendevice: fnctl(F_SETFL)"); + serial_close(fd); + return (-1); + } + } + + /* Initialise the port settings */ + memcpy(&tp, &serial_termios, sizeof(struct termios)); + + /* Set port settings for canonical input processing */ + tp.c_cflag = B0 | CS8 | CLOCAL | CREAD; + if (__with_odd_parity) { + tp.c_cflag |= (PARENB | PARODD); + tp.c_iflag = 0; + } else + tp.c_iflag = IGNPAR; + if (__with_hw_handshake) + tp.c_cflag |= CRTSCTS; + else + tp.c_cflag &= ~CRTSCTS; + + tp.c_oflag = 0; + tp.c_lflag = 0; + tp.c_cc[VMIN] = 1; + tp.c_cc[VTIME] = 0; + + retcode = tcflush(fd, TCIFLUSH); + if (retcode == -1) { + perror("Gnokii serial_opendevice: tcflush"); + serial_close(fd); + return (-1); + } + + retcode = tcsetattr(fd, TCSANOW, &tp); + if (retcode == -1) { + perror("Gnokii serial_opendevice: tcsetattr"); + serial_close(fd); + return (-1); + } + + return fd; } /* Set the DTR and RTS bit of the serial device. */ +void serial_setdtrrts(int __fd, int __dtr, int __rts) +{ + unsigned int flags; -void serial_setdtrrts(int __fd, int __dtr, int __rts) { - - unsigned int flags; + flags = TIOCM_DTR; - flags = TIOCM_DTR; + if (__dtr) + ioctl(__fd, TIOCMBIS, &flags); + else + ioctl(__fd, TIOCMBIC, &flags); - if (__dtr) - ioctl(__fd, TIOCMBIS, &flags); - else - ioctl(__fd, TIOCMBIC, &flags); + flags = TIOCM_RTS; - flags = TIOCM_RTS; - - if (__rts) - ioctl(__fd, TIOCMBIS, &flags); - else - ioctl(__fd, TIOCMBIC, &flags); + if (__rts) + ioctl(__fd, TIOCMBIS, &flags); + else + ioctl(__fd, TIOCMBIC, &flags); } -int serial_select(int fd, struct timeval *timeout) { - - fd_set readfds; - - FD_ZERO(&readfds); - FD_SET(fd, &readfds); +int serial_select(int fd, struct timeval *timeout) +{ + fd_set readfds; - return (select(fd + 1, &readfds, NULL, NULL, timeout)); + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + return (select(fd + 1, &readfds, NULL, NULL, timeout)); } /* Change the speed of the serial device. */ - -void serial_changespeed(int __fd, int __speed) { - +void serial_changespeed(int __fd, int __speed) +{ #ifndef SGTTY - struct termios t; + struct termios t; #else - struct sgttyb t; + struct sgttyb t; #endif - - int speed=B9600; - - switch (__speed) { - case 9600: speed = B9600; break; - case 19200: speed = B19200; break; - case 38400: speed = B38400; break; - case 57600: speed = B57600; break; - case 115200: speed = B115200; break; - } + int speed = B9600; + + switch (__speed) { + case 9600: + speed = B9600; + break; + case 19200: + speed = B19200; + break; + case 38400: + speed = B38400; + break; + case 57600: + speed = B57600; + break; + case 115200: + speed = B115200; + break; + } #ifndef SGTTY - tcgetattr(__fd, &t); + tcgetattr(__fd, &t); - // This is not needed! We set up the speed via cfsetspeed - // t.c_cflag &= ~CBAUD; - // t.c_cflag |= speed; - if (cfsetspeed(&t, speed) == -1) - dprintf(_("Serial port speed setting failed\n")); + // This is not needed! We set up the speed via cfsetspeed + // t.c_cflag &= ~CBAUD; + // t.c_cflag |= speed; + if (cfsetspeed(&t, speed) == -1) + dprintf(_("Serial port speed setting failed\n")); - tcsetattr(__fd, TCSADRAIN, &t); + tcsetattr(__fd, TCSADRAIN, &t); #else - ioctl(__fd, TIOCGETP, &t); + ioctl(__fd, TIOCGETP, &t); - t.sg_ispeed = speed; - t.sg_ospeed = speed; + t.sg_ispeed = speed; + t.sg_ospeed = speed; - ioctl(__fd, TIOCSETN, &t); + ioctl(__fd, TIOCSETN, &t); #endif } /* Read from serial device. */ - -size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) { - - return (read(__fd, __buf, __nbytes)); +size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) +{ + return (read(__fd, __buf, __nbytes)); } /* Write to serial device. */ - -size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) { - +size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) +{ return (write(__fd, __buf, __n)); } -#endif /* WIN32 */ +#endif /* WIN32 */