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.
4.6.1 - 2024-12-01
- Pin subdependeny
libc
to maintain compatibility with MSRV 1.59.0. #229
4.6.0 - 2024-10-21
- Add recommendation on how to interpret
UsbPortInfo::interface_number
. #219 - Add support for retrieving USB port info on Linux without libudev. #220
- 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
- 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
- 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
- Add
IntoRawHandle
implementation forCOMPort
#199 - Add MODALIAS as additional source of information for USB devices on Linux #170
- 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
- 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
- Add conversions between
DataBits
,StopBits
types and their numeric representations. - Add
FromStr
implementation forFlowControl
. #163
- Several changes for CI hygiene.
- 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 theset_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
- 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
- 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
- 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
- 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
andfmt::Display
forSerialPort
and related enums. #91
- Migrated from unmaintainted dependency
mach
tomach2
. - Update dependency
nix
from 0.24.1 to 0.26.0 and raise MSRV to 1.56.1. #67, #75, #78
- 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
- Add
serde
support behind a feature flag. #51
- 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 forError
. #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.
- Set port timeout to a non-zero value before performing loopback test. #45
4.1.0 - 2022-04-04
- impl
SerialPort
for&mut T
. This allows a&mut T (where T: SerialPort)
to be used in a context whereimpl SerialPort
is expected. !114
- Updated
nix
dependency to 0.23.1. - Remove useless call to tcflush on open. #40
- 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
- Update maintenance status to looking for a new maintainer.
- Properly initialize DCB structure on Windows. This fixes some non-functional devices. !97
4.0.0 - 2020-12-17
- Added
send_break()
toTTYPort
. !69 - Enable
available_ports()
for Linux musl targets and those without thelibudev
feature enabled by scanning/sys/
for ports. !72 ENOENT
andEACCES
errors are now exposed asNotFound
andPermissionDenied
errors on Linux. !80try_clone_native()
was added toCOMPort
andTTYPort
to complementSerialPort::try_clone()
but returning the concrete type instead. !85- Added
set_break()
andclear_break()
toSerialPort
. !70
- Minimum supported Rust version is now 1.36.0 to support the
mem::MaybeUninit
feature. - The platform-specific
TTYPort
/BreakDuration
andCOMPort
are now at the root level rather than under theposix
andwindows
submodules respectively. - Opening
SerialPort
s now uses the builder pattern throughserialport::new()
. See the README for concrete examples. !73 SerialPorts
s are no longer opened with a default timeout of 1ms.- Under linux, the
manufacturer
andproduct
fields ofUsbPortInfo
now take their values from theID_VENDOR_FROM_DATABASE
andID_MODEL_FROM_DATABASE
udev properties respectively, instead of theID_VENDOR
andID_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
- Raised the version specification for
bitflags
to 1.0.4. Previously it was set to 1.0.0, but this version ofbitflags
is actually incompatible with Rust 2018 style macro imports thatserialport-rs
requires. !83
- Removed the
serialport::prelude
module. Types should be explicitly imported or can be glob-imported from the root likeuse serialport::*
. !82
3.3.0 - 2019-06-12
- Added support for arbitrary baud rates on macOS and iOS.
- Minimum supported Rust version is now 1.31 to support using the 2018 edition of Rust.
- Upgraded
sparc64-unknown-linux-gnu
to Tier 2 support.
3.2.0 - 2019-01-01
- Port enumeration is now supported on FreeBSD.
- Minimum supported Rust version changed to 1.24.1.
- Made
aarch64-unknown-linux-musl
a Tier-2 supported target.
- Fixed software flow control for POSIX systems. !54
- Removed support for
x86_64-unknown-linux-gnux32
.
3.1.0 - 2018-11-02
- Added
bytes_to_read()
,bytes_to_write()
, andclear()
toSerialPort
. 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
- 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
- Most port configuration methods now return a
Result<()>
. - Renamed
SerialPort::port_name()
toname()
.
- On Windows, the
port_name
field onSerialPortInfo
included an extraneous trailing nul byte character.
- The
BaudRate
enum was removed in favor of au32
.
2.3.0 - 2018-03-13
- 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.
- 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.
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.
Unreleased, happened due to a user error using cargo-release
.
2.1.0 - 2018-02-14
impl FromRawHandle
forCOMPort
.
- 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 theBaudRate::BaudOther(*)
type.
- 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
- 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 nowSend
.
- 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)
andBaudRate::speed -> usize
in favor of theFrom<u32>
andInto<u32>
traits. - Removed
available_baud_rates
in favor ofBaudRate::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 ofnix
. This is a big step towards supporting additional platforms.
- 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
read()
now properly blocks for at least one character.- Compilation now works on Mac.
1.0.0 - 2017-02-13
- Various documentation/README updates.
- Minor formatting fixes (from rustfmt).
- Platform-specific examples are now only built on appropriate platforms.
0.9.0 - 2017-02-09
impl Debug
forCOMPort
.exclusive()
andset_exclusive()
forTTYPort
.port_name()
forSerialPort
.impl FromRawFd
andimpl IntoRawFd
forTTYPort
.pair()
forTTYPort
.
0.3.0 - 2017-01-28
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 aDefault
impl.
TTYPort/COMPort::open()
now take aSerialPortSettings
argument and return concrete types.serialport::open()
now initializes the port to reasonable defaults.- Removed all instances of
try!()
for?
. SerialPort::set_all()
now borrowsSerialPortSettings
.
0.2.4 - 2017-01-26
- Report an Unimplemented error for unsupported unix targets.
- Minor changes suggested by Clippy.
- Reworked Cargo.toml to more easily support additional targets.
- AppVeyor badge should now be properly displayed.
0.2.3 - 2017-01-21
- 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
- Specify category for crates.io.
0.2.0 - 2017-01-07
- 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
- 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
- Initial release.