/[H7]/branches/linux-serial/Serial.cpp
ViewVC logotype

Diff of /branches/linux-serial/Serial.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 53 by torben, Mon Feb 5 07:16:59 2007 UTC revision 54 by torben, Mon Feb 5 10:10:18 2007 UTC
# Line 50  CSerial::CSerial() Line 50  CSerial::CSerial()
50          mIsopen = false;          mIsopen = false;
51  }  }
52    
53  CSerial::CSerial(char* port, int bitrate)  
54    CSerial::CSerial(char* port, Baudrate bitrate)
55  {  {
56          mPortstr = port;          mPortstr = port;
57          mBitrate = bitrate;          mBitrate = bitrate;
# Line 68  CSerial::~CSerial(void) Line 69  CSerial::~CSerial(void)
69          close();          close();
70  }  }
71    
72  void CSerial::open(char* port, int bitrate)  void CSerial::open(char* port, Baudrate bitrate)
73  {  {
74          if (mIsopen)          if (mIsopen)
75                  throw std::runtime_error("Port already opened");                  throw std::runtime_error("Port already opened");
# Line 104  void CSerial::openWindows() Line 105  void CSerial::openWindows()
105                  throw std::exception(error.c_str());                  throw std::exception(error.c_str());
106          }          }
107    
108          dcb.BaudRate = mBitrate;          dcb.BaudRate = convertBaudrate(mBitrate);
109          dcb.ByteSize = 8;          dcb.ByteSize = 8;
110          dcb.Parity = NOPARITY;          dcb.Parity = NOPARITY;
111          dcb.StopBits = ONESTOPBIT;          dcb.StopBits = ONESTOPBIT;
# Line 139  void CSerial::openLinux() Line 140  void CSerial::openLinux()
140          bzero(&newtio, sizeof(newtio) );          bzero(&newtio, sizeof(newtio) );
141    
142          // use a std. 8N1 config          // use a std. 8N1 config
143          newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;          newtio.c_cflag = convertBaudrate(mBitrate) | CRTSCTS | CS8 | CLOCAL | CREAD;
144          newtio.c_iflag = IGNPAR;          newtio.c_iflag = IGNPAR;
145          newtio.c_oflag = 0;          newtio.c_oflag = 0;
146    
147          /* set input mode (non-canonical, no echo,...) */          // set input mode (non-canonical, no echo,...)
148          newtio.c_lflag = 0;          newtio.c_lflag = 0;
149                                                    
150          newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */          newtio.c_cc[VTIME]    = 0;   // inter-character timer unused
151          newtio.c_cc[VMIN]     = 0;   /* blocking read until 1 chars received */          newtio.c_cc[VMIN]     = 0;   // blocking read until 1 chars received
   
         cfmakeraw(&newtio);  
         cfsetospeed(&newtio, BAUDRATE);  
152                    
153    
154    /*      cfmakeraw(&newtio);
155            cfsetospeed(&newtio, B9600 );
156            cfsetispeed(&newtio, B9600 );
157    */      
158                                                                                    
159          tcflush(mFiledescriptor, TCIFLUSH);          tcflush(mFiledescriptor, TCIFLUSH);
160          tcsetattr(mFiledescriptor, TCSANOW, &newtio);          tcsetattr(mFiledescriptor, TCSANOW, &newtio);
# Line 199  int CSerial::readByte() Line 202  int CSerial::readByte()
202          size = read(mFiledescriptor, &out, 1);          size = read(mFiledescriptor, &out, 1);
203          if (size != 1)          if (size != 1)
204          {          {
205                  std::cout << writeLastError() << std::endl;                  //std::cout << writeLastError() << std::endl;
206                  return -1;                  return -1;
207          }          }
208  #endif  #endif
# Line 238  void CSerial::writeByte(unsigned char ou Line 241  void CSerial::writeByte(unsigned char ou
241  #endif  #endif
242  }  }
243    
244    int CSerial::convertBaudrate(Baudrate rate)
245    {
246            int retval=0;
247            std::cout << "Rate:" << rate << std::endl;
248    #ifdef _MSC_VER
249            switch( rate )
250            {
251                    case Baud300:
252                            retval = 300;
253                            break;
254                    case Baud600:
255                            retval = 600;
256                            break;
257                    case Baud1200:
258                            retval = 1200;
259                            break;
260                    case Baud2400:
261                            retval = 2400;
262                            break;
263                    case Baud4800:
264                            retval = 4800;
265                            break;
266                    case Baud9600:
267                            retval = 9600;
268                            break;
269                    case Baud19200:
270                            retval = 19200;
271                            break;
272                    case Baud38400:
273                            retval = 38400;
274                            break;
275                    case Baud57600:
276                            retval = 57600;
277                            break;
278                    case Baud11520:
279                            retval = 115200;
280                            break;                  
281            }
282    #else
283            switch (rate)
284            {
285                    case Baud300:
286                            retval = B300;
287                            break;
288                    case Baud600:
289                            retval = B600;
290                            break;
291                    case Baud1200:
292                            retval = B1200;
293                            break;
294                    case Baud2400:
295                            retval = B2400;
296                            break;
297                    case Baud4800:
298                            retval = B4800;
299                            break;
300                    case Baud9600:
301                            retval = B9600;
302                            break;
303                    case Baud19200:
304                            retval = B19200;
305                            break;
306                    case Baud38400:
307                            retval = B38400;
308                            break;
309                    case Baud57600:
310                            retval = B57600;
311                            break;
312                    case Baud115200:
313                            retval = B115200;
314                            break;
315            }
316    #endif
317    
318            std::cout << "Rate: " << retval << "/" << B9600 << std::endl;
319            return retval;
320    }
321    
322  #ifdef _MSC_VER  #ifdef _MSC_VER
323  COMSTAT CSerial::getComstat() const  COMSTAT CSerial::getComstat() const
324  {  {

Legend:
Removed from v.53  
changed lines
  Added in v.54

  ViewVC Help
Powered by ViewVC 1.1.20