##// END OF EJS Templates
Added RTS and CTS signal handing, saffer read and write functions....
jeandet@pc-de-jeandet3.lab-lpp.local -
r26:c194258da26a alexis
parent child
Show More
@@ -1,7 +1,7
1 1 # -*- Autoconf -*-
2 2 # Process this file with autoconf to produce a configure script.
3 3 AC_PREREQ([2.67])
4 AC_INIT([librs232],[0.1.0],[alexis.jeandet@lpp.polytechnique.fr],[rs232],[http://www.lpp.fr])
4 AC_INIT([librs232],[2.0.0],[alexis.jeandet@lpp.polytechnique.fr],[rs232],[http://www.lpp.fr])
5 5 AM_INIT_AUTOMAKE([1.10 -Wall foreign])
6 6 AC_CONFIG_MACRO_DIR([m4])
7 7 # Checks for programs.
@@ -18,10 +18,10 AM_PROG_LIBTOOL
18 18 # Checks for libraries.
19 19
20 20 # Checks for header files.
21 AC_CHECK_HEADERS([stdio.h string.h fcntl.h errno.h unistd.h termios.h windows.h])
21 AC_CHECK_HEADERS([stdio.h string.h fcntl.h errno.h unistd.h termios.h termio.h windows.h])
22 22
23 AC_SUBST([RS232_SO_VERSION], [1:2:0])
24 AC_SUBST([RS232_API_VERSION], [1.0])
23 AC_SUBST([RS232_SO_VERSION], [2:0:0])
24 AC_SUBST([RS232_API_VERSION], [2.0])
25 25 # Checks for typedefs, structures, and compiler characteristics.
26 26
27 27 # Checks for library functions.
@@ -36,6 +36,12 rs232extern int rs232setparity(rs232port
36 36 rs232extern int rs232setnbstop(rs232port_t fd, rs232stop NbStop);
37 37 rs232extern int rs232setcsize(rs232port_t fd, int ChSize);
38 38 rs232extern int rs232setbaudrate(rs232port_t fd, int baudrate);
39 rs232extern int rs232setRTS(rs232port_t fd);
40 rs232extern int rs232clearRTS(rs232port_t fd);
41 rs232extern int rs232setDTR(rs232port_t fd);
42 rs232extern int rs232clearDTR(rs232port_t fd);
43 rs232extern int rs232saferead(rs232port_t fd,char* data,int count );
44 rs232extern int rs232safewrite(rs232port_t fd,char* data,int count);
39 45
40 46 #endif
41 47
@@ -7,6 +7,9
7 7 #ifdef HAVE_TERMIOS_H
8 8 #include <termios.h>
9 9 #endif
10 #ifdef HAVE_TERMIO_H
11 #include <termio.h>
12 #endif
10 13 #include "RS232.h"
11 14
12 15 #ifdef HAVE_WINDOWS_H
@@ -95,6 +98,8 int rs232setparity(rs232port_t fd, rs232
95 98 {
96 99 struct termios terminos;
97 100 tcgetattr(fd, &terminos);
101 terminos.c_cflag &= ~PARENB;
102 terminos.c_cflag &= ~PARODD;
98 103 switch(Parity)
99 104 {
100 105 case rs232parityNo:
@@ -152,6 +157,7 int rs232setcsize(rs232port_t fd, int Ch
152 157 {
153 158 struct termios terminos;
154 159 tcgetattr(fd, &terminos);
160 terminos.c_cflag &= ~CSIZE;
155 161 switch(ChSize)
156 162 {
157 163 case 5:
@@ -240,21 +246,25 int rs232cfparity(int fd, struct termios
240 246 }
241 247 else
242 248 {
249 terminos->c_cflag &= ~PARENB;
250 terminos->c_cflag &= ~PARODD;
243 251 switch(Parity)
244 252 {
245 253 case rs232parityNo:
246 terminos->c_cflag &= Parity;
254 terminos->c_cflag &= ~PARENB;
255 terminos->c_cflag &= ~PARODD;
247 256 break;
248 257 case rs232parityOdd:
249 terminos->c_cflag &= ~PARENB;
250 terminos->c_cflag |= Parity;
258 terminos->c_cflag |= PARENB;
259 terminos->c_cflag |= PARODD;
251 260 break;
252 261 case rs232parityEven:
253 terminos->c_cflag &= ~PARENB;
254 terminos->c_cflag |= Parity;
262 terminos->c_cflag |= PARENB;
263 terminos->c_cflag &= ~PARODD;
255 264 break;
256 265 default:
257 266 terminos->c_cflag &= ~PARENB;
267 terminos->c_cflag &= ~PARODD;
258 268 break;
259 269 }
260 270 return 0;
@@ -291,6 +301,7 int rs232cfcsize(int fd, struct termios
291 301 }
292 302 else
293 303 {
304 terminos->c_cflag &= ~CSIZE;
294 305 switch(ChSize)
295 306 {
296 307 case 5:
@@ -338,6 +349,90 int rs232read(rs232port_t fd,char *psRea
338 349
339 350 }
340 351
352
353 int rs232setRTS(rs232port_t fd)
354 {
355 int status;
356 ioctl(fd, TIOCMGET, &status);
357 status &= ~TIOCM_RTS;
358 if (ioctl(fd, TIOCMSET, &status))
359 {
360 return -1;
361 }
362 return 0;
363 }
364
365 int rs232clearRTS(rs232port_t fd)
366 {
367 int status;
368 ioctl(fd, TIOCMGET, &status);
369 status |= TIOCM_RTS;
370 if (ioctl(fd, TIOCMSET, &status))
371 {
372 return -1;
373 }
374 return 0;
375 }
376
377 int rs232setDTR(rs232port_t fd)
378 {
379 int status;
380 ioctl(fd, TIOCMGET, &status);
381 status &= ~TIOCM_DTR;
382 if (ioctl(fd, TIOCMSET, &status))
383 {
384 return -1;
385 }
386 return 0;
387 }
388
389
390 int rs232clearDTR(rs232port_t fd)
391 {
392 int status;
393 ioctl(fd, TIOCMGET, &status);
394 status |= TIOCM_DTR;
395 if (ioctl(fd, TIOCMSET, &status))
396 {
397 return -1;
398 }
399 return 0;
400 }
401
402
403
404 int rs232saferead(rs232port_t fd,char* data,int count )
405 {
406 int read=0;
407 int i=0;
408 for(i=0;i<100;i++)
409 {
410 read = rs232read(fd,data,count);
411 count -=read;
412 data+=read;
413 if(count==0)
414 return 0;
415 }
416 return -1;
417 }
418
419
420
421 int rs232safewrite(rs232port_t fd,char* data,int count)
422 {
423 int written=0;
424 int i=0;
425 for(i=0;i<1000;i++)
426 {
427 written = rs232write(fd,data+written,count);
428 count-=written;
429 data+=written;
430 if(count==0)
431 return 0;
432 }
433 return -1;
434 }
435
341 436 #endif
342 437 #endif //#ifdef HAVE_TERMIOS_H
343 438
@@ -220,4 +220,68 int rs232read(rs232port_t fd,char *psRea
220 220 }
221 221
222 222
223 int rs232saferead(rs232port_t fd,char* data,int count )
224 {
225 int read=0;
226 int i=0;
227 for(i=0;i<100;i++)
228 {
229 read = rs232read(fd,data,count);
230 count -=read;
231 data+=read;
232 if(count==0)
233 return 0;
234 }
235 return -1;
236 }
237
238
239
240 int rs232safewrite(rs232port_t fd,char* data,int count)
241 {
242 int written=0;
243 int i=0;
244 for(i=0;i<1000;i++)
245 {
246 written = rs232write(fd,data+written,count);
247 count-=written;
248 data+=written;
249 if(count==0)
250 return 0;
251 }
252 return -1;
253 }
254
255
256 int rs232setRTS(rs232port_t fd)
257 {
258 if(EscapeCommFunction(fd, SETRTS))
259 return 0;
260 return -1;
261 }
262
263 int rs232clearRTS(rs232port_t fd)
264 {
265 if(EscapeCommFunction(fd, CLRRTS))
266 return 0;
267 return -1;
268 }
269
270 int rs232setDTR(rs232port_t fd)
271 {
272 if(EscapeCommFunction(fd, SETDTR))
273 return 0;
274 return -1;
275 }
276
277
278 int rs232clearDTR(rs232port_t fd)
279 {
280 if(EscapeCommFunction(fd, CLRDTR))
281 return 0;
282 return -1;
283 }
284
285
286
223 287 #endif //#ifdef HAVE_WINDOWS_H
@@ -39,6 +39,9
39 39 /* Define to 1 if you have the <termios.h> header file. */
40 40 #undef HAVE_TERMIOS_H
41 41
42 /* Define to 1 if you have the <termio.h> header file. */
43 #undef HAVE_TERMIO_H
44
42 45 /* Define to 1 if you have the <unistd.h> header file. */
43 46 #undef HAVE_UNISTD_H
44 47
General Comments 0
You need to be logged in to leave comments. Login now