summaryrefslogtreecommitdiffstats
path: root/recipes-extended/rxtx/files/usb_38400.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-extended/rxtx/files/usb_38400.patch')
-rw-r--r--recipes-extended/rxtx/files/usb_38400.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/recipes-extended/rxtx/files/usb_38400.patch b/recipes-extended/rxtx/files/usb_38400.patch
new file mode 100644
index 0000000..fffe4c5
--- /dev/null
+++ b/recipes-extended/rxtx/files/usb_38400.patch
@@ -0,0 +1,68 @@
1From: Jan Niehusmann <jan@gondor.com>
2Subject: Patch to fix setting USB-serial adapters to 38400 bps
3Bug-Debian: http://bugs.debian.org/740098
4Forwarded: no
5Description: The following patch should fix the reported issue.
6 .
7 On serial ports not supporting the TIOCGSERIAL/TIOCSSERIAL mechanism,
8 this still means that the custom baud rates do not work, but at least
9 38400 works, again.
10 .
11 Perhaps an even better fix would be switching to the newer termios2 API,
12 as described here:
13 https://mail.python.org/pipermail/python-list/2012-October/633871.html
14 .
15 That API allows setting custom baud rates on the USB serial adapters I
16 have tested, where TIOCGSERIAL/TIOCSSERIAL was not supported.
17 .
18 But unfortunately, termios2 is not available through glibc, so one would
19 need to call linux-specific ioctls directly, which wouldn't be portable
20 at all, and I don't know how it interacts with the BSD / Hurd ports.
21 .
22 Therefore this is the minimal fix, for now.
23Upstream-Status: Pending
24
25--- a/src/SerialImp.c
26+++ b/src/SerialImp.c
27@@ -872,10 +872,14 @@
28 out and select baud rates 38400 then 28800 then 38400, you will get
29 a final baud rate of 28800 because you did not update the divisor.
30
31+ However, if the serial port doesn't support TIOCGSERIAL or custom speeds,
32+ don't fail: In this case, just use B38400 and assume that there is no way
33+ to set a custom speed on this port.
34+
35 See the next ifdef below for the divisor.
36 */
37 #if defined(TIOCGSERIAL)
38- if ( cspeed == B38400 )
39+ if ( cspeed == B38400 && ioctl( fd, TIOCGSERIAL, &sstruct ) == 0 )
40 cspeed = 38400;
41 #endif /* TIOCGSERIAL */
42 if( cfsetispeed( &ttyset, cspeed ) < 0 ||
43@@ -905,10 +909,9 @@
44 return(1);
45 }
46 sstruct.custom_divisor = ( sstruct.baud_base/cspeed );
47- cspeed = B38400;
48 #endif /* TIOCGSERIAL */
49- if( cfsetispeed( &ttyset, cspeed ) < 0 ||
50- cfsetospeed( &ttyset, cspeed ) < 0 )
51+ if( cfsetispeed( &ttyset, B38400 ) < 0 ||
52+ cfsetospeed( &ttyset, B38400 ) < 0 )
53 {
54 /* OK, we tried everything */
55 report( "nativeSetSerialPortParams: Cannot Set Speed\n" );
56@@ -916,8 +919,11 @@
57 }
58 #if defined(TIOCSSERIAL)
59 /* It is assumed Win32 does this for us */
60+ /* Ignore errors if the target speed is 38400: In this case,
61+ * just assume TIOCSSERIAL is not supported and custom speeds are
62+ * not available. */
63 if ( sstruct.baud_base < 1 ||
64- ioctl( fd, TIOCSSERIAL, &sstruct ) < 0 )
65+ ioctl( fd, TIOCSSERIAL, &sstruct ) < 0 && cspeed != 38400 )
66 {
67 return( 1 );
68 }