Skip to content

Latest commit

 

History

History
510 lines (425 loc) · 20.6 KB

CHANGELOG.md

File metadata and controls

510 lines (425 loc) · 20.6 KB

Change log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Added

Changed

Fixed

Removed

4.6.1 - 2024-12-01

Fixed

  • Pin subdependeny libc to maintain compatibility with MSRV 1.59.0. #229

4.6.0 - 2024-10-21

Added

  • Add recommendation on how to interpret UsbPortInfo::interface_number. #219
  • Add support for retrieving USB port info on Linux without libudev. #220

Changed

  • Switched from core-foundation-sys to core-foundation for more conveniently working with Core Foundation types for enumeration on macOS. #218
  • Refactored output from example list_ports (alignment and order) for easily comparing different runs. #220

Fixed

  • Fix enumeration USB reported as PCI devices which do not have a (short) serial number. #160
  • Fix ignoring the status of several function calls into Core Foundation on mac OS. #218

4.5.1 - 2024-09-20

Fixed

  • Fix ignoring errors from setting baud rate and ignoring unsupported baud rates. #213
  • Remove leftover debug output from posix::poll::wait_fd. #216

4.5.0 - 2024-08-05

Added

  • Add IntoRawHandle implementation for COMPort #199
  • Add MODALIAS as additional source of information for USB devices on Linux #170

Changed

  • Replace using regex crate for parsing device identification strings for available_ports on Windows. This is now done by some bespoke code to significantly reduce build times. #201
  • Switch from ANSI to Unicode/UTF-16 string API on Windows. #89

Fixed

  • Fix looking up UsbPortInfo::interface on macOS. #193
  • Fix issues with very long timeout values like Duration::MAX by clamping to maximum supported value for underlying platform. #207, #208

4.4.0 - 2024-06-26

Added

  • Add conversions between DataBits, StopBits types and their numeric representations.
  • Add FromStr implementation for FlowControl. #163

Changed

  • Several changes for CI hygiene.

Fixed

  • Fix a bug where available_ports() returned disabled devices on Windows. #144
  • Fix a bug on Windows where the WriteTotalTimeoutConstant field hasn't been configured properly when the set_timeout method is called. #124
  • Fix a longstanding bug on Windows where timeouts of length zero (Duration::ZERO) actually resulted in waiting indefinitely. #79
  • Fix missing modem ports from available_ports() on Windows. #81 #84
  • Fix MSRV incompatibility with sub-dependency of clap. #186

4.3.0 - 2023-12-11

Changed

  • Raise MSRV from 1.56.1 to 1.59.0 and Rust edition from 2018 to 2021. #137
  • Update bitflags dependency to 2.4.0. #127
  • Open serial devices with O_CLOEXEC (Posix). This will close the device handles when starting a child process. In particular this means that a serial device can be reopened after making SW update of a Tauri application. #130
  • Prefer USB device manufacturer and model information from the actual USB device over the information from udev's database. #137

Fixed

  • Fixes a bug on Windows where composite devices would show a incorrect serial number. #141
  • Fixes a bug on Linux without udev where available_ports() returned wrong device file paths. #122
  • Fixes a bug on Windows where some USB device serial numbers were truncated. #131
  • Switches to maintained sys crates for CoreFoundation and IOKit on macOS. #112, #136

4.2.2 - 2023-08-03

Fixed

  • Fixes a bug on the Raspberry Pi 4, which results in USB-devices being detected as PCI-devices. #113

4.2.1 - 2023-05-21

Added

  • Add support for reporting the USB device interface (feature-gated by usbserialinfo-interface). #47, #101
  • Add example for loopback testing with real hardware. #69
  • Implement fmt::Debug and fmt::Display for SerialPort and related enums. #91

Changed

  • Migrated from unmaintainted dependency mach to mach2.
  • Update dependency nix from 0.24.1 to 0.26.0 and raise MSRV to 1.56.1. #67, #75, #78

Fixed

  • Skip attempts to set baud rate 0 on macOS. #58
  • Fix getting actual result value from tiocmget. #61
  • Fix serial number retrieval procedure on macOS. #65
  • Fix port name retrieval procedure for Unicode names on Windows. #63
  • Fix compilation for OpenBSD due to missing use declaration. #68
  • A number of memory leaks have been addressed when using serialport-rs. #98

4.2.0 - 2022-06-02

Added

  • Add serde support behind a feature flag. #51

Changed

  • Request exclusive access when opening a POSIX serial port by default. #44
  • Updated nix dependency to 0.24.1 and limited features. #46
  • Derive the Clone trait for Error. #53
  • Enumerate callout devices in addition to dial-in devices on macOS. #54
  • Revert to edition 2018 to allow for use with older compiler versions.

Fixed

  • Set port timeout to a non-zero value before performing loopback test. #45

4.1.0 - 2022-04-04

Added

  • impl SerialPort for &mut T. This allows a &mut T (where T: SerialPort) to be used in a context where impl SerialPort is expected. !114

Changed

  • Updated nix dependency to 0.23.1.
  • Remove useless call to tcflush on open. #40

Fixed

  • Improved support for recent versions of macOS. !104
  • Fix filehandle leak in open() on Windows. #36
  • Make sure fd is properly closed if initialization fails. #39 #41

4.0.1 - 2021-04-17

Changed

  • Update maintenance status to looking for a new maintainer.

Fixed

  • Properly initialize DCB structure on Windows. This fixes some non-functional devices. !97

4.0.0 - 2020-12-17

Added

  • Added send_break() to TTYPort. !69
  • Enable available_ports() for Linux musl targets and those without the libudev feature enabled by scanning /sys/ for ports. !72
  • ENOENT and EACCES errors are now exposed as NotFound and PermissionDenied errors on Linux. !80
  • try_clone_native() was added to COMPort and TTYPort to complement SerialPort::try_clone() but returning the concrete type instead. !85
  • Added set_break() and clear_break() to SerialPort. !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
  • SerialPortss 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
  • POSIX ports are no longer opened in exclusive mode. After opening they can be made exclusive via TTYPort::set_exclusive(). !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

Removed

  • Removed the serialport::prelude module. Types should be explicitly imported or can be glob-imported from the root like use serialport::*. !82

3.3.0 - 2019-06-12

Added

  • Added support for arbitrary baud rates on macOS 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.

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

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 macOS. 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<u32> and Into<u32> 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.