1
1
/*
2
- * Copyright (c) 2009 Petr Stetiar <[email protected] >, Gaben Ltd.
2
+ * Copyright (c) 2011 Petr Stetiar <[email protected] >, Gaben Ltd.
3
3
*
4
4
* Permission is hereby granted, free of charge, to any person
5
5
* obtaining a copy of this software and associated documentation
@@ -54,6 +54,7 @@ rs232_init(void)
54
54
55
55
DBG ("p=%p p->pt=%p\n" , (void * )p , p -> pt );
56
56
57
+ memset (p -> pt , 0 , sizeof (struct rs232_linux_t ));
57
58
memset (p -> dev , 0 , RS232_STRLEN_DEVICE + 1 );
58
59
strncpy (p -> dev , RS232_PORT_LINUX , RS232_STRLEN_DEVICE );
59
60
@@ -76,8 +77,11 @@ rs232_end(struct rs232_port_t *p)
76
77
77
78
DBG ("p=%p p->pt=%p\n" , (void * )p , p -> pt );
78
79
79
- if (!rs232_port_open (p ))
80
+ if (!rs232_port_open (p )) {
81
+ free (p -> pt );
82
+ free (p );
80
83
return ;
84
+ }
81
85
82
86
rs232_flush (p );
83
87
@@ -488,7 +492,8 @@ rs232_set_baud(struct rs232_port_t *p, enum rs232_baud_e baud)
488
492
struct termios term ;
489
493
struct rs232_linux_t * ux = p -> pt ;
490
494
491
- DBG ("p=%p p->pt=%p baud=%d\n" , (void * )p , p -> pt , baud );
495
+ DBG ("p=%p p->pt=%p baud=%d (%s bauds)\n" ,
496
+ (void * )p , p -> pt , baud , rs232_strbaud (baud ));
492
497
493
498
GET_PORT_STATE (ux -> fd , & term )
494
499
@@ -525,6 +530,10 @@ rs232_set_baud(struct rs232_port_t *p, enum rs232_baud_e baud)
525
530
cfsetispeed (& term , B115200 );
526
531
cfsetospeed (& term , B115200 );
527
532
break ;
533
+ case RS232_BAUD_460800 :
534
+ cfsetispeed (& term , B460800 );
535
+ cfsetospeed (& term , B460800 );
536
+ break ;
528
537
default :
529
538
return RS232_ERR_UNKNOWN ;
530
539
}
@@ -617,7 +626,8 @@ rs232_set_parity(struct rs232_port_t *p, enum rs232_parity_e parity)
617
626
struct termios term ;
618
627
struct rs232_linux_t * ux = p -> pt ;
619
628
620
- DBG ("p=%p p->pt=%p parity=%d\n" , (void * )p , p -> pt , parity );
629
+ DBG ("p=%p p->pt=%p parity=%d (parity %s)\n" ,
630
+ (void * )p , p -> pt , parity , rs232_strparity (parity ));
621
631
622
632
GET_PORT_STATE (ux -> fd , & term )
623
633
@@ -648,7 +658,8 @@ rs232_set_stop(struct rs232_port_t *p, enum rs232_stop_e stop)
648
658
struct termios term ;
649
659
struct rs232_linux_t * ux = p -> pt ;
650
660
651
- DBG ("p=%p p->pt=%p stop=%d\n" , (void * )p , p -> pt , stop );
661
+ DBG ("p=%p p->pt=%p stop=%d (%s stop bits)\n" ,
662
+ (void * )p , p -> pt , stop , rs232_strstop (stop ));
652
663
653
664
GET_PORT_STATE (ux -> fd , & term )
654
665
term .c_cflag &= ~CSTOPB ;
@@ -675,7 +686,8 @@ rs232_set_data(struct rs232_port_t *p, enum rs232_data_e data)
675
686
struct termios term ;
676
687
struct rs232_linux_t * ux = p -> pt ;
677
688
678
- DBG ("p=%p p->pt=%p data=%d\n" , (void * )p , p -> pt , data );
689
+ DBG ("p=%p p->pt=%p data=%d (%s data bits)\n" ,
690
+ (void * )p , p -> pt , data , rs232_strdata (data ));
679
691
680
692
GET_PORT_STATE (ux -> fd , & term )
681
693
term .c_cflag &= ~CSIZE ;
@@ -709,7 +721,8 @@ rs232_set_flow(struct rs232_port_t *p, enum rs232_flow_e flow)
709
721
struct termios term ;
710
722
struct rs232_linux_t * ux = p -> pt ;
711
723
712
- DBG ("p=%p p->pt=%p flow=%d\n" , (void * )p , p -> pt , flow );
724
+ DBG ("p=%p p->pt=%p flow=%d (flow control %s)\n" ,
725
+ (void * )p , p -> pt , flow , rs232_strflow (flow ));
713
726
714
727
GET_PORT_STATE (ux -> fd , & term )
715
728
0 commit comments