#include "serial_sgi.h" #include #include #include #include #include #include /*************************************************************************** S E R I A L _ O P E N P O R T ***************************************************************************/ SerialID Serial_OpenPort(long baud, long parity, long char_bits, long stop_bits) { int serial_id; struct termio io_settings; /* Open the device */ serial_id = open(DEFAULT_SERIAL_PORT, O_RDWR); if (serial_id < 0) return serial_id; /* Get the current settings */ ioctl(serial_id, TCGETA, &io_settings); /* Fix the settings */ io_settings.c_cflag = baud | char_bits | parity | stop_bits; io_settings.c_cflag |= CREAD | CLOCAL; io_settings.c_lflag = 0; io_settings.c_iflag = 0; io_settings.c_oflag = 0; /* Put the setting back */ ioctl(serial_id, TCSETA, io_settings); /* Return the file_descriptor */ return serial_id; } /*************************************************************************** S E R I A L _ R E A D ***************************************************************************/ int Serial_Read(SerialID port, char* buf, int length) { int len=0; while (Serial_BytesAvailable(port)) { len += read(port,buf+len,length-len); } return len; } /*************************************************************************** S E R I A L _ R E A D B L O C K I N G ***************************************************************************/ int Serial_ReadBlocking(SerialID port, char* buf, int length) { int len=0; do { len += read(port,buf+len,length-len); } while (Serial_BytesAvailable(port)); return len; } /*************************************************************************** S E R I A L _ W R I T E ***************************************************************************/ int Serial_Write(SerialID port, char* buf, int length) { return write (port, buf, length); } /*************************************************************************** S E R I A L _ C L O S E P O R T ***************************************************************************/ int Serial_ClosePort(SerialID port) { return close (port); } /*************************************************************************** S E R I A L _ B Y T E S A V A I L A B L E ***************************************************************************/ int Serial_BytesAvailable(SerialID port) { int bytes; ioctl(port,FIONREAD,&bytes); return bytes; } /*************************************************************************** S E R I A L _ F L U S H I N P U T ***************************************************************************/ int Serial_FlushInput(SerialID port) { int len; len = Serial_BytesAvailable(port); tcflush(port,TCIFLUSH); return len; }