--- branches/linux-serial/Serial.cpp 2007/02/05 07:23:12 53 +++ branches/linux-serial/Serial.cpp 2007/02/05 10:10:18 54 @@ -50,7 +50,8 @@ mIsopen = false; } -CSerial::CSerial(char* port, int bitrate) + +CSerial::CSerial(char* port, Baudrate bitrate) { mPortstr = port; mBitrate = bitrate; @@ -68,7 +69,7 @@ close(); } -void CSerial::open(char* port, int bitrate) +void CSerial::open(char* port, Baudrate bitrate) { if (mIsopen) throw std::runtime_error("Port already opened"); @@ -104,7 +105,7 @@ throw std::exception(error.c_str()); } - dcb.BaudRate = mBitrate; + dcb.BaudRate = convertBaudrate(mBitrate); dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; @@ -139,19 +140,21 @@ bzero(&newtio, sizeof(newtio) ); // use a std. 8N1 config - newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; + newtio.c_cflag = convertBaudrate(mBitrate) | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; - /* set input mode (non-canonical, no echo,...) */ + // set input mode (non-canonical, no echo,...) newtio.c_lflag = 0; - newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ - newtio.c_cc[VMIN] = 0; /* blocking read until 1 chars received */ - - cfmakeraw(&newtio); - cfsetospeed(&newtio, BAUDRATE); + newtio.c_cc[VTIME] = 0; // inter-character timer unused + newtio.c_cc[VMIN] = 0; // blocking read until 1 chars received + +/* cfmakeraw(&newtio); + cfsetospeed(&newtio, B9600 ); + cfsetispeed(&newtio, B9600 ); +*/ tcflush(mFiledescriptor, TCIFLUSH); tcsetattr(mFiledescriptor, TCSANOW, &newtio); @@ -199,7 +202,7 @@ size = read(mFiledescriptor, &out, 1); if (size != 1) { - std::cout << writeLastError() << std::endl; + //std::cout << writeLastError() << std::endl; return -1; } #endif @@ -238,6 +241,84 @@ #endif } +int CSerial::convertBaudrate(Baudrate rate) +{ + int retval=0; + std::cout << "Rate:" << rate << std::endl; +#ifdef _MSC_VER + switch( rate ) + { + case Baud300: + retval = 300; + break; + case Baud600: + retval = 600; + break; + case Baud1200: + retval = 1200; + break; + case Baud2400: + retval = 2400; + break; + case Baud4800: + retval = 4800; + break; + case Baud9600: + retval = 9600; + break; + case Baud19200: + retval = 19200; + break; + case Baud38400: + retval = 38400; + break; + case Baud57600: + retval = 57600; + break; + case Baud11520: + retval = 115200; + break; + } +#else + switch (rate) + { + case Baud300: + retval = B300; + break; + case Baud600: + retval = B600; + break; + case Baud1200: + retval = B1200; + break; + case Baud2400: + retval = B2400; + break; + case Baud4800: + retval = B4800; + break; + case Baud9600: + retval = B9600; + break; + case Baud19200: + retval = B19200; + break; + case Baud38400: + retval = B38400; + break; + case Baud57600: + retval = B57600; + break; + case Baud115200: + retval = B115200; + break; + } +#endif + + std::cout << "Rate: " << retval << "/" << B9600 << std::endl; + return retval; +} + #ifdef _MSC_VER COMSTAT CSerial::getComstat() const {