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);
}
|