From: Marc D. <ma...@us...> - 2005-02-14 20:58:25
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14845/src/System Modified Files: SerialDevice.linux.cpp Log Message: added set/get for CharSize Index: SerialDevice.linux.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/SerialDevice.linux.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- SerialDevice.linux.cpp 14 Feb 2005 20:26:10 -0000 1.1 +++ SerialDevice.linux.cpp 14 Feb 2005 20:58:06 -0000 1.2 @@ -133,6 +133,52 @@ return BaudRate0; } +void SerialDevice::setCharSize(SerialDevice::CharSize csize) throw(IO::IOError) { + int size; + switch(csize) { + case CharSize5 : size = CS5; + case CharSize6 : size = CS6; + case CharSize7 : size = CS7; + case CharSize8 : size = CS8; + default: DefaultCharSize : size = CS7; + } + + struct termios ios; + if( ::tcgetattr(this->nosHandle(), &ios) == -1 ) { + throw IO::IOError(errno, "Could not set char size", P_SOURCEINFO); + } + + if( size == SerialDevice::CharSize8 ) { + ios.c_iflag &= ~ISTRIP; + } else { + ios.c_iflag |= ISTRIP; + } + ios.c_cflag &= ~CSIZE; + ios.c_cflag |= size; + + if( ::tcsetattr(this->nosHandle(), TCSANOW, &ios) == -1) { + throw IO::IOError(errno, "Could not set char size", P_SOURCEINFO); + } +} + +SerialDevice::CharSize SerialDevice::charSize() throw(IO::IOError) { + struct termios ios; + if( ::tcgetattr(this->nosHandle(), &ios) == -1 ) { + throw IO::IOError(errno, "Could not get char size", P_SOURCEINFO); + } + + int size = (ios.c_cflag & CSIZE); + switch(size) { + case CS5 : return CharSize5; + case CS6 : return CharSize6; + case CS7 : return CharSize7; + case CS8 : return CharSize8; + default: return DefaultCharSize; + } + + return CharSize7; +} + void SerialDevice::put(const UInt8& byte) throw(IO::IOError) { this->write((const char*)(&byte), 1); } |