--- /dev/null
+# Serial wrapper around pyserial that adds support for custom baudrates (250000)
+# on linux, when pyserial is < 2.7
+
+from serial import *
+import os
+if os.name == 'posix':
+ import serial.serialposix
+
+ if not hasattr(serial.serialposix, "TCGETS2") and \
+ hasattr(serial.serialposix, "set_special_baudrate"):
+ # Detected pyserial < 2.7 which doesn't support custom baudrates
+ # Replacing set_special_baudrate with updated function from pyserial 2.7
+
+ TCGETS2 = 0x802C542A
+ TCSETS2 = 0x402C542B
+ BOTHER = 0o010000
+
+ def set_special_baudrate(port, baudrate):
+ # right size is 44 on x86_64, allow for some growth
+ import array
+ buf = array.array('i', [0] * 64)
+
+ try:
+ # get serial_struct
+ FCNTL.ioctl(port.fd, TCGETS2, buf)
+ # set custom speed
+ buf[2] &= ~TERMIOS.CBAUD
+ buf[2] |= BOTHER
+ buf[9] = buf[10] = baudrate
+
+ # set serial_struct
+ res = FCNTL.ioctl(port.fd, TCSETS2, buf)
+ except IOError, e:
+ raise ValueError('Failed to set custom baud rate (%s): %s' % (baudrate, e))
+
+ # We need to change the function inside the serialposix module otherwise, it won't
+ # be called by the code within that module
+ serial.serialposix.set_special_baudrate = set_special_baudrate