1========================
2 pySerial Release Notes
3========================
4
5Version 1.0     13 Feb 2002
6---------------------------
7- First public release.
8- Split from the pybsl application (see http://mspgcc.sourceforge.net)
9
10New Features:
11
12- Added Jython support
13
14
15Version 1.1     14 Feb 2002
16---------------------------
17Bugfixes:
18
19- Win32, when not specifying a timeout
20- Typos in the Docs
21
22New Features:
23
24- added ``serialutil`` which provides a base class for the ``Serial``
25  objects.
26
27- ``readline``, ``readlines``, ``writelines`` and ``flush`` are now supported
28  see README.txt for deatils.
29
30
31Version 1.11    14 Feb 2002
32---------------------------
33Same as 1.1 but added missing files.
34
35
36Version 1.12    18 Feb 2002
37---------------------------
38Removed unneded constants to fix RH7.x problems.
39
40
41Version 1.13    09 Apr 2002
42---------------------------
43Added alternate way for enabling rtscts (CNEW_RTSCTS is tried too)
44If port opening fails, a ``SerialException`` is raised on all platforms
45
46
47Version 1.14    29 May 2002
48---------------------------
49Added examples to archive
50Added non-blocking mode for ``timeout=0`` (tnx Mat Martineau)
51
52Bugfixes:
53
54- win32 does now return the remaining characters on timeout
55
56
57Version 1.15    04 Jun 2002
58---------------------------
59Bugfixes (win32):
60
61- removed debug messages
62- compatibility to win9x improved
63
64
65Version 1.16    02 Jul 2002
66---------------------------
67Added implementation of RI and corrected RTS/CTS on Win32
68
69
70Version 1.17    03 Jul 2002
71---------------------------
72Silly mix of two versions in win32 code corrected
73
74
75Version 1.18    06 Dec 2002
76---------------------------
77Bugfixes (general):
78
79- remove the mapping of flush to the destructive flushOutput as
80  this is not the expected behaviour.
81- readline: EOL character for lines can be chosen idea by
82  John Florian.
83
84Bugfixes (posix):
85
86- cygwin port numbering fixed
87- test each and every constant for it's existence in termios module,
88  use default if not existent (fix for Bug item #640214)
89- wrong exception on nonexistent ports with /dev file. bug report
90  by Louis Cordier
91
92Bugfixes (win32):
93
94- RTS/CTS handling as suggested in Bug #635072
95- bugfix of timeouts brought up by Markus Hoffrogge
96
97
98Version 1.19    19 Mar 2003
99---------------------------
100Bugfixes (posix):
101
102- removed ``dgux`` entry which actually had a wrong comment and is
103  probably not in use anywhere.
104
105Bugfixes (win32):
106
107- added ``int()`` conversion, [Bug 702120]
108- remove code to set control lines in close method of win32
109  version. [Bug 669625]
110
111
112Version 1.20    28 Aug 2003
113---------------------------
114- Added ``serial.device()`` for all platforms
115
116Bugfixes (win32):
117
118- don't recreate overlapped structures and events on each
119  read/write.
120- don't set unneeded event masks.
121- don't use DOS device names for ports > 9.
122- remove send timeout (it's not used in the linux impl. anyway).
123
124
125Version 1.21    30 Sep 2003
126---------------------------
127Bugfixes (win32):
128
129- name for COM10 was not built correctly, found by Norm Davis.
130
131Bugfixes (examples):
132
133- small change in ``miniterm.py`` that should mage it run on cygwin,
134  [Bug 809904] submitted by Rolf Campbell.
135
136
137Version 2.0b1    1 Oct 2003
138---------------------------
139Transition to the Python 2.0 series:
140
141- New implementation only supports Python 2.2+, backwards compatibility
142  should be maintained almost everywhere.
143  The OS handles (like the ``hComPort`` or ``fd`` attribute) were prefixed
144  with an underscore. The different names stay, as anyone that uses one of
145  these has to write platform specific code anyway.
146- Common base class ``serialutil.SerialBase`` for all implementations.
147- ``PARITY_NONE``, ``PARITY_EVEN``, ``PARITY_ODD`` constants changed and all
148  these constants moved to ``serialutil.py`` (still available as
149  ``serial.PARITY_NONE`` etc. and they should be used that way)
150- Added ``serial.PARITY_NAMES`` (implemented in ``serialutil.PARITY_NAMES``).
151  This dictionary can be used to convert parity constants to meaningful
152  strings.
153- Each Serial class and instance has a list of supported values:
154  ``BAUDRATES``, ``BYTESIZES``, ``PARITIES``, ``STOPBITS``Ggg
155  (i.e. ``serial.Serial.BAUDRATES or s = serial.Serial; s.BAUDRATES``)
156  these values can be used to fill in value sin GUI dialogs etc.
157- Creating a ``Serial()`` object without port spec returns an unconfigured,
158  closed port. Useful if a GUI dialog should take a port and configure
159  it.
160- New methods for ``serial.Serial`` instances: ``open()``, ``isOpen()``
161- A port can be opened and closed as many times as desired.
162- Instances of ``serial.Serial`` have ``baudrate``, ``bytesize``, ``timeout``
163  etc. attributes implemented as properties, all can be set while the port is
164  opened. It will then be reconfigured.
165- Improved ``__doc__``'s.
166- New ``test_advanced.py`` for the property setting/getting testing.
167- Small bugfix on posix with get* methods (return value should be true a
168  boolean).
169- added a ``__repr__`` that returns a meaningful string will all the serial
170  setting, easy for debugging.
171- The serialposix module does not throw an exception on unsupported
172  platforms, the message is still printed. The idea that it may still
173  work even if the platform itself s not known, it simply tries to do
174  the posix stuff anyway (It's likely that opening ports by number
175  fails, but by name it should work).
176
177
178Version 2.0b2    4 Oct 2003
179---------------------------
180- Added serial port configuration dialog for wxPython to the examples.
181- Added terminal application for wxPython with wxGlade design file
182  to the examples.
183- Jython support is currently broken as Jython does not have a Python 2.2
184  compatible release out yet
185
186
187Version 2.0      6 Nov 2003
188---------------------------
189- Fixes ``setup.py`` for older distutils
190
191
192Version 2.1     28 Jul 2004
193---------------------------
194Bugfixes:
195
196- Fix XON/XOFF values [Bug 975250]
197
198Bugfixes (posix):
199
200- ``fd == 0`` fix from Vsevolod Lobko
201- netbsd fixes from Erik Lindgren
202- Dynamically lookup baudrates and some cleanups
203
204Bugfixes (examples):
205
206- CRLF handling of ``miniterm.py`` should be more consistent on Win32
207  and others. Added LF only command line option
208- Multithreading fixes to ``wxTerminal.py`` (helps with wxGTK)
209- Small change for wxPython 2.5 in ``wxSerialConfigDialog.py`` [Bug 994856]
210
211New Features:
212
213- Implement write timeouts (``writeTimeout`` parameter)
214
215
216Version 2.2     31 Jul 2005
217---------------------------
218Bugfixes:
219
220- [Bug 1014227]: property <del> broken
221- [Bug 1105687]: ``serial_tcp_example.py``: ``--localport`` option
222- [Bug 1106313]: device (port) strings cannot be unicode
223
224Bugfixes (posix):
225
226- [Patch 1043436] Fix for [Bug 1043420] (OSError: EAGAIN)
227- [Patch 1102700] ``fileno()`` added
228- ensure disabled PARMRK
229
230Bugfixes (win32):
231
232- [Patch 983106]: keep RTS/CTS state on port setting changes
233
234New Features:
235
236- ``dsrdtr`` setting to enable/disable DSR/DTR flow control independently
237  from the ``rtscts`` setting. (Currently Win32 only, ignored on other
238  platforms)
239
240
241Version 2.3     19 Jun 2008
242---------------------------
243New Features:
244
245- iterator interface. ``for line in Serial(...): ...`` is now possible
246  Suggested by Bernhard Bender
247- ``sendBreak()`` accepts a ``duration`` argument. Default duration increased.
248- win32 handles \\.\COMx format automatically for com ports of higher number
249  (COM10 is internally translated to \\.\COM10 etc.)
250- miniterm.py has a new feature to send a file (upload) and configurable
251  special characters for exit and upload. Refactored internals to class based
252  structure (upload and class refactoring by Colin D Bennett)
253
254Bugfixes:
255
256- [Bug 1451535] TCP/serial redirect example "--help"
257- update VERSION variable
258- update wxSerialConfigDialog.py and wxTerminal.py compatibility with
259  wxPython 2.8 (Peleg)
260- Check for string in write function. Using unicode causes errors, this
261  helps catching errors early (Tom Lynn)
262
263Bugfixes (posix):
264
265- [Bug 1554183] setRTS/setDTR reference to non existing local "on"
266- [Bug 1513653] file descriptor not closed when exception is thrown
267- FreeBSD now uses cuadX instead of cuaaX (Patrick Phalen)
268
269Bugfixes (win32):
270
271- [Bug 1520357] Handle leak
272- [Bug 1679013] Ignore exception raised by SetCommTimeout() in close().
273- [Bug 1938118] process hang forever under XP
274
275
276Version 2.4      6 Jul 2008
277---------------------------
278New Features:
279
280- [Patch 1616790] pyserial: Add inter-character timeout feature
281- [Patch 1924805] add a setBreak function
282- Add mark/space parity
283- Add .NET/Mono backend (IronPython)
284
285Bugfixes (posix):
286
287- [Bug 1783159] Arbitrary baud rates (Linux/Posix)
288
289Bugfixes (win32):
290
291- [Patch 1561423] Add mark/space parity, Win32
292- [Bug 2000771] serial port CANNOT be specified by number on windows
293- examples/scanwin32.py does no longer return \\.\ names
294- fix \\.\ handling for some cases
295
296Bugfixes (jython):
297
298 - The Jython backend tries javax.comm and gnu.io (Seo Sanghyeon)
299
300
301Version 2.5-rc1  2009-07-30
302---------------------------
303New Features:
304
305- Python 3.x support (through 2to3)
306- compatible with Python io library (Python 2.6+)
307- Support for Win32 is now written on the top of ctypes (bundled with
308  Python 2.5+) instead of pywin32 (patch by Giovanni Bajo).
309- 1.5 stop bits (STOPBITS_ONE_POINT_FIVE, implemented on all platforms)
310- miniterm application extended (CTRL+T -> menu)
311- miniterm.py is now installed as "script"
312- add scanlinux.py example
313- add port_publisher example
314- experimental RFC-2217 server support (examples/rfc2217_server.py)
315- add ``getSettingsDict`` and ``applySettingsDict`` serial object methods
316- use a ``poll`` based implementation on Posix, instead of a ``select`` based,
317  provides better error handling [removed again in later releases].
318
319Bugfixes:
320
321- Improve and fix tcp_serial_redirector example.
322- [Bug 2603052] 5-bit mode (needs 1.5 stop bits in some cases)
323
324Bugfixes (posix):
325
326- [Bug 2810169] Propagate exceptions raised in serialposix _reconfigure
327- [Bug 2562610] setting non standard baud rates on Darwin (Emmanuel Blot)
328
329Bugfixes (win32):
330
331- [Bug 2469098] parity PARITY_MARK, PARITY_SPACE isn't supported on win32
332- [SF  2446218] outWaiting implemented
333- [Bug 2392892] scanwin32.py better exception handling
334- [Bug 2505422] scanwin32.py Vista 64bit compatibility
335
336
337Version 2.5-rc2  2010-01-02
338---------------------------
339New Features:
340
341- Documentation update, now written with Sphinx/ReST
342- Updated miniterm.py example
343- experimental RFC-2217 client support (serial.rfc2217.Serial, see docs)
344- add ``loop://`` device for testing.
345- add ``serial.serial_for_url`` factory function (support for native ports and
346  ``rfc2217``, ``socket`` and ``loop`` URLs)
347- add new example: ``rfc2217_server.py``
348- tests live in their own directory now (no longer in examples)
349
350Bugfixes:
351
352- [Bug 2915810] Fix for suboption parsing in rfc2217
353- Packaging bug (missed some files)
354
355Bugfixes (posix):
356
357- improve write timeout behavior
358- [Bug 2836297] move Linux specific constants to not break other platforms
359- ``poll`` based implementation for ``read`` is in a separate class
360  ``PosixPollSerial``, as it is not supported well on all platforms (the
361  default ``Serial`` class uses select).
362- changed error handling in ``read`` so that disconnected devices are
363  detected.
364
365
366Bugfixes (win32):
367
368- [Bug 2886763] hComPort doesn't get initialized for Serial(port=None)
369
370
371Version 2.5      2010-07-22
372---------------------------
373New Features:
374
375- [Bug 2976262] dsrdtr should default to False
376  ``dsrdtr`` parameter default value changed from ``None`` (follow ``rtscts``
377  setting) to ``False``. This means ``rtscts=True`` enables hardware flow
378  control on RTS/CTS but no longer also on DTR/DSR. This change mostly
379  affects Win32 as on other platforms, that setting was ignored anyway.
380- Improved xreadlines, it is now a generator function that yields lines as they
381  are received (previously it called readlines which would only return all
382  lines read after a read-timeout). However xreadlines is deprecated and not
383  available when the io module is used. Use ``for line in Serial(...):``
384  instead.
385
386Bugfixes:
387
388- [Bug 2925854] test.py produces exception with python 3.1
389- [Bug 3029812] 2.5rc2 readline(s) doesn't work
390
391Bugfixes (posix):
392
393- [BUG 3006606] Nonblocking error - Unix platform
394
395Bugfixes (win32):
396
397- [Bug 2998169] Memory corruption at faster transmission speeds.
398  (bug introduced in 2.5-rc1)
399
400
401Version 2.6      2011-11-02
402---------------------------
403New Features:
404
405- Moved some of the examples to serial.tools so that they can be used
406  with ``python -m``
407- serial port enumeration now included as ``serial.tools.list_ports``
408- URL handlers for ``serial_for_url`` are now imported dynamically. This allows
409  to add protocols w/o editing files. The list
410  ``serial.protocol_handler_packages`` can be used to add or remove user
411  packages with protocol handlers (see docs for details).
412- new URL type: hwgrep://<regexp> uses list_ports module to search for ports
413  by their description
414- several internal changes to improve Python 3.x compatibility (setup.py,
415  use of absolute imports and more)
416
417Bugfixes:
418
419- [Bug 3093882] calling open() on an already open port now raises an exception
420- [Bug 3245627] connection-lost let rfc2217 hangs in closed loop
421- [Patch 3147043] readlines() to support multi-character eol
422
423Bugfixes (posix):
424
425- [Patch 3316943] Avoid unneeded termios.tcsetattr calls in serialposix.py
426- [Patch 2912349] Serial Scan as a Module with Mac Support
427
428Bugfixes (win32):
429
430- [Bug 3057499] writeTimeoutError when write Timeout is 0
431- [Bug 3414327] Character out of range in list_ports_windows
432- [Patch 3036175] Windows 98 Support fix
433- [Patch 3054352] RTS automatic toggle, for RS485 functionality.
434- Fix type definitions for 64 bit Windows compatibility
435
436
437Version 2.7      2013-10-17
438---------------------------
439- Win32: setRTS and setDTR can be called before the port is opened and it will
440  set the initial state on port open.
441- Posix: add platform specific method: outWaiting (already present for Win32)
442- Posix: rename flowControl to setXON to match name on Win32, add
443  flowControlOut function
444- rfc2217: zero polls value (baudrate, data size, stop bits, parity) (Erik
445  Lundh)
446- Posix: [Patch pyserial:28] Accept any speed on Linux [update]
447- Posix: [Patch pyserial:29] PosixSerial.read() should "ignore" errno.EINTR
448- OSX: [Patch pyserial:27] Scan by VendorID/Product ID for USB Serial devices
449- Ensure working with bytes in write() calls
450
451Bugfixes:
452
453- [Bug 3540332] SerialException not returned
454- [Bug pyserial:145] Error in socket_connection.py
455- [Bug pyserial:135] reading from socket with timeout=None causes TypeError
456- [Bug pyserial:130] setup.py should not append py3k to package name
457- [Bug pyserial:117] no error on lost conn w/socket://
458
459Bugfixes (posix):
460
461- [Patch 3462364] Fix: NameError: global name 'base' is not defined
462- list_ports and device() for BSD updated (Anders Langworthy)
463- [Bug 3518380] python3.2 -m serial.tools.list_ports error
464- [Bug pyserial:137] Patch to add non-standard baudrates to Cygwin
465- [Bug pyserial:141] open: Pass errno from IOError to SerialException
466- [Bug pyserial:125] Undefined 'base' on list_ports_posix.py, function usb_lsusb
467- [Bug pyserial:151] Serial.write() without a timeout uses 100% CPU on POSIX
468- [Patch pyserial:30] [PATCH 1/1] serial.Serial() should not raise IOError.
469
470Bugfixes (win32):
471
472- [Bug 3444941] ctypes.WinError() unicode error
473- [Bug 3550043] on Windows in tools global name 'GetLastError' is not defined
474- [Bug pyserial:146] flush() does nothing in windows (despite docs)
475- [Bug pyserial:144] com0com ports ignored due to missing "friendly name"
476- [Bug pyserial:152] Cannot configure port, some setting was wrong. Can leave
477  port handle open but port not accessible
478
479
480Version 3.0a0   2015-09-22
481--------------------------
482- Starting from this release, only Python 2.7 and 3.2 (or newer) are supported.
483  The source code is compatible to the 2.x and 3.x series without any changes.
484  The support for earlier Python versions than 2.7 is removed, please refer to
485  the pyserial-legacy (V2.x) series if older Python versions are a
486  requirement).
487- Development moved to github, update links in docs.
488- API changes: properties for ``rts``, ``dtr``, ``cts``, ``dsr``, ``cd``, ``ri``,
489  ``in_waiting`` (instead of get/set functions)
490- remove file ``FileLike`` class, add ``read_until`` and ``iread_until`` to
491  ``SerialBase``
492- RS485 support changed (``rts_toggle`` removed, added ``serial.rs485`` module
493  and ``rs485_mode`` property)
494- ``socket://`` and ``rfc2217://`` handlers use the IPv6 compatible
495  ``socket.create_connection``
496- New URL handler: ``spy:://``.
497- URL handlers now require the proper format (``?`` and ``&``) for arguments
498  instead of ``/`` (e.g. ``rfc2217://localhost:7000?ign_set_control&timeout=5.5``)
499- Remove obsolete examples.
500- Finish update to BSD license.
501- Use setuptools if available, fall back to distutils if unavailable.
502- miniterm: changed command line options
503- miniterm: support encodings on serial port
504- miniterm: new transformations, by default escape/convert all control characters
505- list_ports: improved, added USB location (Linux, Win32)
506- refactored code
507- [FTR pyserial:37] Support fileno() function in the socket protocol
508- Posix: [Patch pyserial:31] Mark/space parity on Linux
509- Linux: [Patch pyserial:32] Module list_ports for linux should include the
510  product information as description.
511- Java: fix 2 bugs (stop bits if/else and non-integer timeouts) (Torsten
512  Roemer)
513- Update wxSerialConfigDialog.py to use serial.tools.list_ports.
514- [Patch pyserial:34] Improvements to port_publisher.py example
515- [Feature pyserial:39] Support BlueTooth serial port discovery on Linux
516
517Bugfixes:
518
519- [Bug pyserial:157] Implement inWaiting in protocol_socket
520- [Bug pyserial:166] RFC2217 connections always fail
521- [Bug pyserial:172] applySettingsDict() throws an error if the settings dictionary is not complete
522- [Bug pyserial:185] SocketSerial.read() never returns data when timeout==0
523
524Bugfixes (posix):
525
526- [Bug pyserial:156] PosixSerial.open raises OSError rather than
527  SerialException when port open fails
528- [Bug pyserial:163] serial.tools.list_ports.grep() fails if it encounters None type
529- fix setXON
530- [Patch pyserial:36 / 38] Make USB information work in python 3.4 and 2.7
531- clear OCRNL/ONLCR flags (CR/LF translation settings)
532- [Feature pyserial:38] RS485 Support
533- [Bug pyserial:170] list_ports_posix not working properly for Cygwin
534- [Bug pyserial:187] improve support for FreeBSD (list_ports_posix)
535
536Bugfixes (win32):
537
538- [Bug pyserial:169] missing "import time" in serialwin32.py
539
540Bugfixes (cli):
541
542- [Bug pyserial:159] write() in serialcli.py not working with IronPython 2.7.4
543
544
545Version 3.0b1   2015-10-19
546--------------------------
547- list_ports: add ``vid``, ``pid``, ``serial_number``, ``product``,
548  ``manufacturer`` and ``location`` attribute for USB devices.
549- list_ports: update OSX implementation.
550- list_ports: Raspberry Pi: internal port is found.
551- serial_for_url: fix import (multiple packages in list)
552- threaded: added new module implementing a reader thread
553- tweak examples/wx*
554- posix: add experimental implementation ``VTIMESerial``
555- new URL handler ``alt://`` to select alternative implementations
556
557
558Version 3.0   2015-12-28
559------------------------
560- minor fixes to setup.py (file list), inter_byte_timeout (not stored when
561  passed to __init__), rfc2217 (behavior of close when open failed),
562  list_ports (__str__), loop://, renamed ReaderThread
563- hwgrep:// added options to pick n'th port, skip busy ports
564- miniterm: --ask option added
565
566Bugfixes (posix):
567
568- [#26/#30] always call tcsettattr on open
569- [#42] fix disregard read timeout if there is more data
570- [#45] check for write timeout, even if EAGAIN was raised
571
572Bugfixes (win32):
573
574- [#27] fix race condition in ``read()``, fix minimal timeout issue
575- race condition in nonblocking case
576- [#49] change exception type in case SetCommState fails
577- [#50] fixed issue with 0 timeout on windows 10
578
579
580Version 3.0.1   2016-01-11
581--------------------------
582- special case for FDTIBUS in list_ports on win32 (#61)
583
584Bugfixes:
585
586- ``Serial`` keyword arguments, more on backward compatibility, fix #55
587- list_ports: return name if product is None, fix for #54
588- port_publisher: restore some sorting of ports
589
590
591Version 3.1.0   2016-05-27
592--------------------------
593Improvements:
594
595- improve error handling in ``alt://`` handler
596- ``socket://`` internally used select, improves timeout behavior
597- initial state of RTS/DTR: ignore error when setting on open posix
598  (support connecting to pty's)
599- code style updates
600- posix: remove "number_to_device" which is not called anymore
601- add cancel_read and cancel_write to win32 and posix implementations
602
603Bugfixes:
604
605- [#68] aio: catch errors and close connection
606- [#87] hexlify: update codec for Python 2
607- [#100] setPort not implemented
608- [#101] bug in serial.threaded.Packetizer with easy fix
609- [#104] rfc2217 and socket: set timeout in create_connection
610- [#107] miniterm.py fails to exit on failed serial port
611
612Bugfixes (posix):
613
614- [#59] fixes for RTS/DTR handling on open
615- [#77] list_ports_osx: add missing import
616- [#85] serialposix.py _set_rs485_mode() tries to read non-existing
617  rs485_settings.delay_rts_before_send
618- [#96] patch: native RS485 is never enabled
619
620Bugfixes (win32):
621
622- fix bad super call and duplicate old-style __init__ call
623- [#80] list_ports: Compatibility issue between Windows/Linux
624
625
626Version 3.1.1   2016-06-12
627--------------------------
628Improvements:
629
630- deprecate ``nonblocking()`` method on posix, the port is already in this
631  mode.
632- style: use .format() in various places instead of "%" formatting
633
634Bugfixes:
635
636- [#122] fix bug in FramedPacket
637- [#127] The Serial class in the .NET/Mono (IronPython) backend does not
638  implement the _reconfigure_port method
639- [#123, #128] Avoid Python 3 syntax in aio module
640
641Bugfixes (posix):
642
643- [#126] PATCH: Check delay_before_tx/rx for None in serialposix.py
644- posix: retry if interrupted in Serial.read
645
646Bugfixes (win32):
647
648- win32: handle errors of GetOverlappedResult in read(), fixes #121
649
650
651Version 3.2.0   2016-10-14
652--------------------------
653See 3.2.1, this one missed a merge request related to removing aio.
654
655
656Version 3.2.1   2016-10-14
657--------------------------
658Improvements:
659
660- remove ``serial.aio`` in favor of separate package, ``pyserial-asyncio``
661- add client mode to example ``tcp_serial_redirect.py``
662- use of monotonic clock for timeouts, when available (Python 3.3 and up)
663- [#169] arbitrary baud rate support for BSD family
664- improve tests, improve ``loop://``
665
666Bugfixes:
667
668- [#137] Exception while cancel in miniterm (python3)
669- [#143] Class Serial in protocol_loop.py references variable before assigning
670  to it
671- [#149] Python 3 fix for threaded.FramedPacket
672
673Bugfixes (posix):
674
675- [#133] _update_dtr_state throws Inappropriate ioctl for virtual serial
676  port created by socat on OS X
677- [#157] Broken handling of CMSPAR in serialposix.py
678
679Bugfixes (win32):
680
681- [#144] Use Unicode API for list_ports
682- [#145] list_ports_windows: support devices with only VID
683- [#162] Write in non-blocking mode returns incorrect value on windows
684
685
686Version 3.3   2017-03-08
687------------------------
688Improvements:
689
690- [#206] Exclusive access on POSIX. ``exclusive`` flag added.
691- [#172] list_ports_windows: list_ports with 'manufacturer' info property
692- [#174] miniterm: change cancel impl. for console
693- [#182] serialutil: add overall timeout for read_until
694- socket: use non-blocking socket and new Timeout class
695- socket: implement a functional a reset_input_buffer
696- rfc2217: improve read timeout implementation
697- win32: include error message from system in ClearCommError exception
698- and a few minor changes, docs
699
700Bugfixes:
701
702- [#183] rfc2217: Fix broken calls to to_bytes on Python3.
703- [#188] rfc2217: fix auto-open use case when port is given as parameter
704
705Bugfixes (posix):
706
707- [#178] in read, count length of converted data
708- [#189] fix return value of write
709
710Bugfixes (win32):
711
712- [#194] spurious write fails with ERROR_SUCCESS
713
714
715Version 3.4   2017-07-22
716------------------------
717Improvements:
718
719- miniterm: suspend function (temporarily release port, :kbd:`Ctrl-T s`)
720- [#240] context manager automatically opens port on ``__enter__``
721- [#141] list_ports: add interface number to location string
722- [#225] protocol_socket: Retry if ``BlockingIOError`` occurs in
723  ``reset_input_buffer``.
724
725Bugfixes:
726
727- [#153] list_ports: option to include symlinked devices
728- [#237] list_ports: workaround for special characters in port names
729
730Bugfixes (posix):
731
732- allow calling cancel functions w/o error if port is closed
733- [#220] protocol_socket: sync error handling with posix version
734- [#227] posix: ignore more blocking errors and EINTR, timeout only
735  applies to blocking I/O
736- [#228] fix: port_publisher typo
737
738
739Version 3.5b0 2020-09-21
740------------------------
741New Features:
742
743- [#411] Add a backend for Silicon Labs CP2110/4 HID-to-UART bridge.
744  (depends on `hid` module)
745
746Improvements:
747
748- [#315] Use absolute import everywhere
749- [#351] win32: miniterm Working CMD.exe terminal using Windows 10 ANSI support
750- [#354] Make ListPortInfo hashable
751- [#372] threaded: "write" returns byte count
752- [#400] Add bytesize and stopbits argument parser to tcp_serial_redirect
753- [#408] loop: add out_waiting
754- [#495] list_ports_linux: Correct "interface" property on Linux hosts
755- [#500] Remove Python 3.2 and 3.3 from test
756- [#261, #285, #296, #320, #333, #342, #356, #358, #389, #397, #510] doc updates
757- miniterm: add :kbd:`CTRL+T Q` as alternative to exit
758- miniterm: suspend function key changed to :kbd:`CTRL-T Z`
759- add command line tool entries ``pyserial-miniterm`` (replaces ``miniterm.py``)
760  and ``pyserial-ports`` (runs ``serial.tools.list_ports``).
761- ``python -m serial`` opens miniterm (use w/o args and it will print port
762  list too) [experimental]
763
764Bugfixes:
765
766- [#371] Don't open port if self.port is not set while entering context manager
767- [#437, #502] refactor: raise new instances for PortNotOpenError and SerialTimeoutException
768- [#261, #263] list_ports: set default `name` attribute
769- [#286] fix: compare only of the same type in list_ports_common.ListPortInfo
770- rfc2217/close(): fix race-condition
771- [#305] return b'' when connection closes on rfc2217 connection
772- [#386] rfc2217/close(): fix race condition
773- Fixed flush_input_buffer() for situations where the remote end has closed the socket.
774- [#441] reset_input_buffer() can hang on sockets
775- examples: port_publisher python 3 fixes
776- [#324] miniterm: Fix miniterm constructor exit_character and menu_character
777- [#326] miniterm: use exclusive access for native serial ports by default
778- [#497] miniterm: fix double use of CTRL-T + s use z for suspend instead
779- [#443, #444] examples: refactor wx example, use Bind to avoid deprecated
780  warnings, IsChecked, unichr
781
782Bugfixes (posix):
783
784- [#265] posix: fix PosixPollSerial with timeout=None and add cancel support
785- [#290] option for low latency mode on linux
786- [#335] Add support to xr-usb-serial ports
787- [#494] posix: Don't catch the SerialException we just raised
788- [#519] posix: Fix custom baud rate to not temporarily set 38400 baud rates on linux
789- [#509 #518] list_ports: use hardcoded path to library on osx
790
791Bugfixes (win32):
792
793- [#481] win32: extend RS485 error messages
794- [#303] win32: do not check for links in serial.tools.list_ports
795- [#430] Add WaitCommEvent function to win32
796- [#314, #433] tools/list_ports_windows: Scan both 'Ports' and 'Modem' device classes
797- [#414] Serial number support for composite USB devices
798- Added recursive search for device USB serial number to support composite devices
799
800Bugfixes (MacOS):
801
802- [#364] MacOS: rework list_ports to support unicode product descriptors.
803- [#367] Mac and bsd fix _update_break_state
804
805
806Version 3.5 2020-11-23
807----------------------
808See above (3.5b0) for what's all new in this release
809
810Bugfixes:
811
812- spy: ensure bytes in write()
813
814Bugfixes (posix):
815
816- [#540] serialposix: Fix inconsistent state after exception in open()
817
818Bugfixes (win32):
819
820- [#530] win32: Fix exception for composite serial number search on Windows
821
822Bugfixes (MacOS):
823
824- [#542] list_ports_osx: kIOMasterPortDefault no longer exported on Big Sur
825- [#545, #545] list_ports_osx: getting USB info on BigSur/AppleSilicon
826