Version 3.3.4
====

Last call for Python2 support.

* #916 Vector: Skip channels without CAN support
* #846 Use inter-process mutex to prevent concurrent neoVI device open.
* #901 Fix iteration in Bus.stop_all_periodic_tasks
* #850 Fix socket.error is a deprecated alias of OSError used on Python versions lower than 3.3.
* #879 Updating incorrect api documentation.
* #885 Fix recursion message in Message.__getattr__
* #845 Fix socketcan issue


Version 3.3.3
====

Backported fixes from 4.x development branch which targets Python 3.

* #798 Backport caching msg.data value in neovi interface.
* #796 Fix Vector CANlib treatment of empty app name.
* #771 Handle empty CSV file.
* #741 ASCII reader can now handle FD frames.
* #740 Exclude test packages from distribution.
* #713 RTR crash fix in canutils log reader parsing RTR frames.
* #701 Skip J1939 messages in ASC Reader.
* #690 Exposes a configuration option to allow the CAN message player to send error frames
  (and sets the default to not send error frames).
* #638 Fixes the semantics provided by periodic tasks in SocketCAN interface.
* #628 Avoid padding CAN_FD_MESSAGE_64 objects to 4 bytes.
* #617 Fixes the broken CANalyst-II interface.
* #605 Socketcan BCM status fix.


Version 3.3.2
====

Minor bug fix release addressing issue in PCAN RTR.

Version 3.3.1
====

Minor fix to setup.py to only require pytest-runner when necessary.

Version 3.3.0
====

* Adding CAN FD 64 frame support to blf reader
* Updates to installation instructions
* Clean up bits generator in PCAN interface #588
* Minor fix to use latest tools when building wheels on travis.

Version 3.2.0
====

Major features
--------------

* FD support added for Pcan by @bmeisels with input from
  @markuspi, @christiansandberg & @felixdivo in PR #537
* This is the last version of python-can which will support Python 2.7
  and Python 3.5. Support has been removed for Python 3.4 in this
  release in PR #532

Other notable changes
---------------------

* #533 BusState is now an enum.
* #535 This release should automatically be published to PyPi by travis.
* #577 Travis-ci now uses stages.
* #548 A guide has been added for new io formats.
* #550 Finish moving from nose to pytest.
* #558 Fix installation on Windows.
* #561 Tests for MessageSync added.

General fixes, cleanup and docs changes can be found on the GitHub milestone
https://github.com/hardbyte/python-can/milestone/7?closed=1

Pulls: #522, #526, #527, #536, #540, #546, #547, #548, #533, #559, #569, #571, #572, #575

Backend Specific Changes
------------------------

pcan
~~~~

* FD

slcan
~~~~

* ability to set custom can speed instead of using predefined speed values. #553

socketcan
~~~~

* Bug fix to properly support 32bit systems. #573

usb2can
~~~~

* slightly better error handling
* multiple serial devices can be found
* support for the `_detect_available_configs()` API

Pulls #511, #535

vector
~~~~

* handle `app_name`. #525

Version 3.1.1
====

Major features
--------------

Two new interfaces this release:

- SYSTEC contributed by @idaniel86 in PR #466
- CANalyst-II contributed by @smeng9 in PR #476


Other notable changes
---------------------

* #477 The kvaser interface now supports bus statistics via a custom bus method.
* #434 neovi now supports receiving own messages
* #490 Adding option to override the neovi library name
* #488 Allow simultaneous access to IXXAT cards
* #447 Improvements to serial interface:
  * to allow receiving partial messages
  * to fix issue with  DLC of remote frames
  * addition of unit tests
* #497 Small API changes to `Message` and added unit tests
* #471 Fix CAN FD issue in kvaser interface
* #462 Fix `Notifier` issue with asyncio
* #481 Fix PCAN support on OSX
* #455 Fix to `Message` initializer
* Small bugfixes and improvements

Version 3.1.0
====

Version 3.1.0 was built with old wheel and/or setuptools
packages and was replaced with v3.1.1 after an installation
but was discovered.

Version 3.0.0
====

Major features
--------------

* Adds support for developing `asyncio` applications with `python-can` more easily. This can be useful
  when implementing protocols that handles simultaneous connections to many nodes since you can write
  synchronous looking code without handling multiple threads and locking mechanisms. #388
* New can viewer terminal application. (`python -m can.viewer`) #390
* More formally adds task management responsibility to the `Bus`. By default tasks created with
  `bus.send_periodic` will have a reference held by the bus - this means in many cases the user
  doesn't need to keep the task in scope for their periodic messages to continue being sent. If
  this behavior isn't desired pass `store_task=False` to the `send_periodic` method. Stop all tasks
  by calling the bus's new `stop_all_periodic_tasks` method. #412


Breaking changes
----------------

* Interfaces should no longer override `send_periodic` and instead implement
  `_send_periodic_internal` to allow the Bus base class to manage tasks. #426
* writing to closed writers is not supported any more (it was supported only for some)
* the file in the reader/writer is now always stored in the attribute uniformly called `file`, and not in
  something like `fp`, `log_file` or `output_file`. Changed the name of the first parameter of the
  read/writer constructors from `filename` to `file`.


Other notable changes
---------------------

* can.Message class updated #413
    - Addition of a `Message.equals` method.
    - Deprecate id_type in favor of is_extended_id
    - Initializer parameter extended_id deprecated in favor of is_extended_id
    - documentation, testing and example updates
    - Addition of support for various builtins: __repr__, __slots__, __copy__
* IO module updates to bring consistency to the different CAN message writers and readers. #348
    - context manager support for all readers and writers
    - they share a common super class called `BaseIOHandler`
    - all file handles can now be closed with the `stop()` method
    - the table name in `SqliteReader`/`SqliteWriter` can be adjusted
    - append mode added in `CSVWriter` and `CanutilsLogWriter`
    - [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) and
      [path-like](https://docs.python.org/3/glossary.html#term-path-like-object) objects can now be passed to
      the readers and writers (except to the Sqlite handlers)
    - add a `__ne__()` method to the `Message` class (this was required by the tests)
    - added a `stop()` method for `BufferedReader`
    - `SqliteWriter`: this now guarantees that all messages are being written, exposes some previously internal metrics
      and only buffers messages up to a certain limit before writing/committing to the database.
    - the unused `header_line` attribute from `CSVReader` has been removed
    - privatized some attributes that are only to be  used internally in the classes
    - the method `Listener.on_message_received()` is now abstract (using `@abc.abstractmethod`)
* Start testing against Python 3.7 #380
* All scripts have been moved into `can/scripts`. #370, #406
* Added support for additional sections to the config #338
* Code coverage reports added. #346, #374
* Bug fix to thread safe bus. #397

General fixes, cleanup and docs changes: (#347, #348, #367, #368, #370, #371, #373, #420, #417, #419, #432)

Backend Specific Changes
------------------------

3rd party interfaces
~~~~~~~~~~~~~~~~~~~~

* Deprecated `python_can.interface` entry point instead use `can.interface`. #389

neovi
~~~~~

* Added support for CAN-FD #408
* Fix issues checking if bus is open. #381
* Adding multiple channels support. #415

nican
~~~~~

* implements reset instead of custom `flush_tx_buffer`. #364

pcan
~~~~

* now supported on OSX. #365


serial
~~~~~~

* Removed TextIOWrapper from serial. #383
* switch to `serial_for_url` enabling using remote ports via `loop://`, ``socket://` and `rfc2217://` URLs. #393
* hardware handshake using `rtscts` kwarg #402

socketcan
~~~~~~~~~

* socketcan tasks now reuse a bcm socket #404, #425, #426,
* socketcan bugfix to receive error frames #384

vector
~~~~~~

* Vector interface now implements `_detect_available_configs`. #362
* Added support to select device by serial number. #387

Version 2.2.1 (2018-07-12)
=====

* Fix errors and warnings when importing library on Windows
* Fix Vector backend raising ValueError when hardware is not connected

Version 2.2.0 (2018-06-30)
=====

* Fallback message filtering implemented in Python for interfaces that don't offer better accelerated mechanism.
* SocketCAN interfaces have been merged (Now use `socketcan` instead of either `socketcan_native` and `socketcan_ctypes`),
  this is now completely transparent for the library user.
* automatic detection of available configs/channels in supported interfaces.
* Added synchronized (thread-safe) Bus variant.
* context manager support for the Bus class.
* Dropped support for Python 3.3 (officially reached end-of-life in Sept. 2017)
* Deprecated the old `CAN` module, please use the newer `can` entry point (will be removed in an upcoming major version)

Version 2.1.0 (2018-02-17)
=====

* Support for out of tree can interfaces with pluggy.
* Initial support for CAN-FD for socketcan_native and kvaser interfaces.
* Neovi interface now uses Intrepid Control Systems's own interface library.
* Improvements and new documentation for SQL reader/writer.
* Fix bug in neovi serial number decoding.
* Add testing on OSX to TravisCI
* Fix non english decoding error on pcan
* Other misc improvements and bug fixes


Version 2.0.0 (2018-01-05
=====

After an extended baking period we have finally tagged version 2.0.0!

Quite a few major changes from v1.x:

* New interfaces:
  * Vector
  * NI-CAN
  * isCAN
  * neoVI
* Simplified periodic send API with initial support for SocketCAN
* Protocols module including J1939 support removed
* Logger script moved to module `can.logger`
* New `can.player` script to replay log files
* BLF, ASC log file support added in new `can.io` module

You can install from [PyPi](https://pypi.python.org/pypi/python-can/2.0.0) with pip:

```
pip install python-can==2.0.0
```

The documentation for v2.0.0 is available at http://python-can.readthedocs.io/en/2.0.0/
