# Change log All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## UNRELEASED ### Added ### Changed ### Fixed ### Removed ## [4.0.1] - 2020-04-17 ### Added ### Changed * Update maintenance status to looking for a new maintainer. ### Fixed * Properly initialize DCB structure on Windows. This fixes some non-functional devices. [!97](https://gitlab.com/susurrus/serialport-rs/-/merge_requests/97) ### Removed ## [4.0.0] - 2020-12-17 ### Added * Added `send_break()` to `TTYPort` [!69](https://gitlab.com/susurrus/serialport-rs/merge_requests/69) * Enable `available_ports()` for Linux musl targets and those without the `libudev` feature enabled by scanning `/sys/` for ports. [!72](https://gitlab.com/susurrus/serialport-rs/merge_requests/72) * `ENOENT` and `EACCES` errors are now exposed as `NotFound` and `PermissionDenied` errors on Linux [!80](https://gitlab.com/susurrus/serialport-rs/merge_requests/80) * `try_clone_native()` was added to `COMPort` and `TTYPort` to complement `SerialPort::try_clone()` but returning the concrete type instead. [!85](https://gitlab.com/susurrus/serialport-rs/merge_requests/85) * Added `set_break()` and `clear_break()` to `SerialPort` [!70](https://gitlab.com/susurrus/serialport-rs/merge_requests/70) ### Changed * Minimum supported Rust version is now 1.36.0 to support the `mem::MaybeUninit` feature. * The platform-specific `TTYPort`/`BreakDuration` and `COMPort` are now at the root level rather than under the `posix` and `windows` submodules respectively. * Opening `SerialPort` s now uses the builder pattern through `serialport::new()`. See the README for concrete examples. [!73](https://gitlab.com/susurrus/serialport-rs/merge_requests/73) * `SerialPorts` s are no longer opened with a default timeout of 1ms * Under linux, the `manufacturer` and `product` fields of `UsbPortInfo` now take their values from the `ID_VENDOR_FROM_DATABASE` and `ID_MODEL_FROM_DATABASE` udev properties respectively, instead of the `ID_VENDOR` and `ID_MODEL` properties that were used before. When the `_FROM_DATABASE` values are not available, it falls back to the old behavior. [!86](https://gitlab.com/susurrus/serialport-rs/merge_requests/86) * POSIX ports are no longer opened in exclusive mode. After opening they can be made exclusive via `TTYPort::set_exclusive()`. [!98](https://gitlab.com/susurrus/serialport-rs/merge_requests/98) ### Fixed * Raised the version specification for `bitflags` to 1.0.4. Previously it was set to 1.0.0, but this version of `bitflags` is actually incompatible with Rust 2018 style macro imports that `serialport-rs` requires. [!83](https://gitlab.com/susurrus/serialport-rs/merge_requests/83) ### Removed * Removed the `serialport::prelude` module. Types should be explicitly imported or can be glob-imported from the root like `use serialport::*`. [!82](https://gitlab.com/susurrus/serialport-rs/merge_requests/82) ## [3.3.0] - 2019-06-12 ### Added * Added support for arbitrary baud rates on Mac OS X and iOS ### Changed * Minimum supported Rust version is now 1.31 to support using the 2018 edition of Rust. ### Fixed * Upgraded `sparc64-unknown-linux-gnu` to Tier 2 support ### Removed ## [3.2.0] - 2019-01-01 ### Added * Port enumeration is now supported on FreeBSD. ### Changed * Minimum supported Rust version changed to 1.24.1 * Made `aarch64-unknown-linux-musl` a Tier-2 supported target ### Fixed * Fixed software flow control for POSIX systems ([!54](https://gitlab.com/susurrus/serialport-rs/merge_requests/54)) ### Removed * Removed support for `x86_64-unknown-linux-gnux32`. ## [3.1.0] - 2018-11-02 ### Added * Added `bytes_to_read()`, `bytes_to_write()`, and `clear()` to `SerialPort`. Also added example scripts for using them. * Added Tier 2 support for: * `armv5te-unknown-linux-musleabi` * Added "libudev" feature to allow for disabling linking to `libudev` on Linux. ## [3.0.0] - 2018-07-14 ### Added * Arbitrary baud rates are now supported on BSDs, Linux, and Windows. * Added Tier 1 support for `{i586|i686|x86_64}-unknown-linux-musl` * Added Tier 2 support for: * `{arm|armv7}-linux-androideabi` * `i686-linux-android` * `{i686|x86_64}-unknown-freebsd` * `arm-unknown-linux-musleabi` * `armv7-unknown-linux-musleabihf` * `{mips64|mips64el}-unknown-linux-gnuabi64` * `armv5te-unknown-linux-gnueabi` * `{aarch64|mips|mipsel|powerpc64|powerpc64le|powerpc|s390x}-unknown-linux-gnu` * `{mips|mipsel}-unknown-linux-musl` * `x86_64-unknown-netbsd` * Added Tier 3 support for: * `{aarch64|x86_64}-linux-android` * `aarch64-unknown-linux-musl` * `sparc64-unknown-linux-gnu`, * `x86_64-unknown-linux-gnux32` ### Changed * Most port configuration methods now return a `Result<()>`. * Renamed `SerialPort::port_name()` to `name()`. ### Fixed * On Windows, the `port_name` field on `SerialPortInfo` included an extraneous trailing nul byte character. ### Removed * The `BaudRate` enum was removed in favor of a `u32`. ## [2.3.0] - 2018-03-13 ### Added * Added `examples/hardware_check.rs` for use in debugging library or driver issues when using physical serial ports. * Added `SerialPort::try_clone` which allows for cloning a port for full-duplex reading and writing. ### Changed * Removed configuration caching for serial ports. The underlying implementations for all platforms cached a configuration struct so that modifying the port settings involved a single switch into kernel space. This has been removed so now two system calls are needed for every configuration change. This is probably a slight performance regression, but should allow the new `SerialPort::try_clone` interface to work as people expect. ### Fixed * `TTYPort::into_raw_fd` will now work as expected. It previously closed the port so the returned file descriptor would be invalid. * 921600 baud is now supported on NetBSD and FreeBSD. ## 2.2.0 - 2018-03-13 Unreleased, happened due to a user error using `cargo-release` ## [2.1.0] - 2018-02-14 ### Added * `impl FromRawHandle` for `COMPort` ### Changed * Specific IO-related errors are now returned instead of mapping every IO error to Unknown. This makes it possible to catch things like time-out errors. * Changed all baud rates to be reported as the discrete `BaudRate::Baud*` types rather than as the `BaudRate::BaudOther(*)` type. ### Fixed * Modem-type USB serial devices are now enumerated on OS X. This now allows connected Arduinos to be detected. * Compilation on FreeBSD and NetBSD was fixed by removing the 921600 baud rates. These will be re-added in a future release. ## [2.0.0] - 2017-12-18 ### Added * USB device information is now returned in calls to `available_ports()` * Serial port enumeration is now supported on Mac * Serial port enumeration now attempts to return the interface used for the port (USB, PCI, Bluetooth, Unknown). * `BaudRate::standard_rates()` provides a vector of cross-platform baud rates. * `SerialPort` trait is now `Send` ### Changed * Software license has changed from LGPLv3+ to MPL-2.0. This makes it possible to use this library in any Rust project if it's unmodified. * Mac is now a Tier 2 supported platform * Removed `BaudRate::from_speed(usize)` and `BaudRate::speed -> usize` in favor of the `From` and `Into` traits. * Removed `available_baud_rates` in favor of `BaudRate::platform_rates()` as this has a more clear semantic meaning. The returned list of baud rates is now also correct for all supported platforms. * Removed `termios` dependency in favor of `nix`. This is a big step towards supporting additional platforms. ### Fixed * Stop bits are now specified properly (had been reversed). Thanks to @serviushack (MR#9) * `TTYPort::pair()` is now thread-safe. * `TTYPort::open()` no longer leaks file descriptors if it errors. Thanks to @daniel (MR#12) * Fixed compilation when targeting Android ## [1.0.1] - 2017-02-20 ### Fixed * `read()` now properly blocks for at least one character * Compilation now works on Mac ## [1.0.0] - 2017-02-13 ### Changed * Various documentation/README updates * Minor formatting fixes (from rustfmt) ### Fixed * Platform-specific examples are now only built on appropriate platforms ## [0.9.0] - 2017-02-09 ### Added * `impl Debug` for `COMPort` * `exclusive()` and `set_exclusive()` for `TTYPort` * `port_name()` for `SerialPort` * `impl FromRawFd` and `impl IntoRawFd` for `TTYPort` * `pair()` for `TTYPort` ## [0.3.0] - 2017-01-28 ### Added * `open_with_settings()` to support initializing the port with custom settings * `SerialPortSettings` is now publically usable being exported in the prelude, having all public and commented fields, and a `Default` impl. ### Changed * `TTYPort/COMPort::open()` now take a `SerialPortSettings` argument and return concrete types * `serialport::open()` now initializes the port to reasonable defaults * Removed all instances of `try!()` for `?` * `SerialPort::set_all()` now borrows `SerialPortSettings` ## [0.2.4] - 2017-01-26 ### Added * Report an Unimplemented error for unsupported unix targets ### Changed * Minor changes suggested by Clippy * Reworked Cargo.toml to more easily support additional targets ### Fixed * AppVeyor badge should now be properly displayed ## [0.2.3] - 2017-01-21 ### Added * Specify AppVeyor build status badge for crates.io ## [0.2.2] - 2017-01-21 * No changes, purely a version increment to push new crate metadata to crates.io ## [0.2.1] - 2017-01-21 ### Added * Specify category for crates.io ## [0.2.0] - 2017-01-07 ### Added * Added a changelog * Added a getter/setter pair for all settings at once * An error is thrown if settings weren't correctly applied on POSIX ## [0.1.1] - 2016-12-23 ### Changed * Fixed compilation on x86_64-pc-windows-gnu target * Added contributors to README * Clarified license terms in the README ## [0.1.0] - 2016-12-22 ### Added * Initial release. [Unreleased]: https://gitlab.com/susurrus/serialport-rs/-/compare/4.0.1...HEAD [4.0.1]: https://gitlab.com/susurrus/serialport-rs/-/compare/4.0.0...4.0.1 [4.0.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/3.3.0...4.0.0 [3.3.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/3.2.0...3.3.0 [3.2.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/3.1.0...3.2.0 [3.1.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/3.0.0...3.1.0 [3.0.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/2.3.0...3.0.0 [2.3.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/2.1.0...2.3.0 [2.1.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/2.0.0...2.1.0 [2.0.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/1.0.1...2.0.0 [1.0.1]: https://gitlab.com/susurrus/serialport-rs/-/compare/1.0.0...1.0.1 [1.0.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.9.0...1.0.0 [0.9.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.3.0...v0.9.0 [0.3.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.2.4...v0.3.0 [0.2.4]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.2.3...v0.2.4 [0.2.3]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.2.2...v0.2.3 [0.2.2]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.2.1...v0.2.2 [0.2.1]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.2.0...v0.2.1 [0.2.0]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.1.1...v0.2.0 [0.1.1]: https://gitlab.com/susurrus/serialport-rs/-/compare/v0.1.0...v0.1.1 [0.1.0]: https://gitlab.com/susurrus/serialport-rs/-/tags/v0.1.0