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; |
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"); |
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; |
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); |
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 |
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 |
{ |
{ |