- Version 3.0.4 (libnserial 1.1.4) - 26/Sep/2025
- Version 3.0.3 (libnserial 1.1.4) - 3/May/2025
- Version 3.0.2 (libnserial 1.1.4) - 20/Apr/2025
- Version 3.0.1 (libnserial 1.1.4) - 29/Feb/2024
- Version 3.0.0 (libnserial 1.1.4) - 25/Oct/2021
- Version 2.4.2 (libnserial 1.1.4) - 29/Feb/2024
- Version 2.4.1 (libnserial 1.1.4) - 01/Jan/2023
- Version 2.4.0 (libnserial 1.1.4) - 03/Nov/2021
- Version 2.3.1 (libnserial 1.1.4) - 19/Apr/2021
- Version 2.3.0 (libnserial 1.1.4) - Do not use - 13/Apr/2021
- Version 2.2.2 (libnserial 1.1.4) - 5/Jul/2020
- Version 2.2.1 (libnserial 1.1.4) - 8/May/2020
- Version 2.2.0 (libnserial 1.1.4) - 14/Nov/2018
- Version 2.1.4 (libnserial 1.1.3) - 1/Jun/2018
- Version 2.1.3 (libnserial 1.1.2) - 26/Apr/2018
- Version 2.1.2 (libnserial 1.1.2) - 26/May/2017
- Version 2.1.1 (libnserial 1.1.1) - 8/Apr/2017
- Version 2.1.0 (libnserial 1.1.0) - 25/Mar/2017
- Version 2.0.3 (libnserial 1.0.1) - 22/Jan/2017
- Version 2.0.2 (libnserial 1.0.0) - 13/Oct/2016
- Version 2.0.1.1 (libnserial 1.0.0) - 7/Sep/2016
- Version 2.0.1 (libnserial 1.0.0) - 7/Sep/2016
- Version 2.0.0 - 25/May/2016
Bugfix:
- DOTNET-1074: Allow asynchronous windows port settings
Bugfix:
- Issue #154, DOTNET-1030: Set default write constant to zero on Windows so that PL2303 chipsets properly flush.
Quality:
- DOTNET-1012: Use
ConfigureAwait(false)in internal methods.
Bugfix:
- Issue #116, DOTNET-975: Don't close the port on ERROR_HANDLE_EOF
Quality:
- DOTNET-823: SerialPortStream: Remove the interface
- DOTNET-820: Reference README.md in NuGet Package
- DOTNET-827: SerialPortStream: Upgrade from .NET 4.5 to .NET 4.6.2
- DOTNET-936: Upgrade to .NET Core 6.0 (DOTNET-937, DOTNET-938, DOTNET-942, DOTNET-943, DOTNET-945, DOTNET-947, DOTNET-951, DOTNET-959, DOTNET-961)
- DOTNET-956: Clean up code and remove license information in each file. Use LICENSE.md instead.
Features:
- DOTNET-328: Add logging/debugging support for .NET Core
- DOTNET-404, DOTNET-405: Expose the
INativeSerialto user code for simulating serial ports. add a newSerialPortStream.Virtuallibrary to show how this works, that can be used in user code testing. - DOTNET-410: Expose CommTimeout properties on Windows in the
WinSerialPortStreamclass. Provide a factorySerialPortStreamFactorythat automatically instantiates the correct stream object depending on the OS. If you don't need this, you can still instantiate theSerialPortStreamas before. - DOTNET-407: Provide Authenticode signing and GIT information in the build with
RJCP.MSBuildTasks. - DOTNET-426: Properly implement
ReadAsyncandWriteAsyncwithCancellationToken, based on RJCP.IO.Buffer. - DOTNET-341: Implement
Read(Span<byte>),Write(ReadOnlySpan<byte>)and related asynchronous methods. - DOTNET-449: Put back
BeginRead,EndRead,BeginWriteandEndWritefor .NET Standard 2.1 code (.NET Core).
Fixes:
- DOTNET-333: The
ISerialPortStreaminterface for NETSTANDARD as well as .NET 4.5 - DOTNET-423: Fix potential data corruption on Linux as buffers aren't locked.
- DOTNET-422:
DiscardOutBuffershould clear memory buffers in addition to the driver buffers. - DOTNET-425: BytesToWrite shouldn't return more bytes than what was requested to write.
- DOTNET-428: Name of properties are used when raising exceptions, instead of "value".
- DOTNET-433: Don't request unneeded events on Windows.
- DOTNET-443: Minor exceptions fixes, raise Argument exceptions on
PortNames,HandShake,ReadTo(). - DOTNET-444: Write for characters and strings raise now IOException when the
native driver is dead (was formerly
InvalidOperationException).
Refactoring:
- DOTNET-329: Migrate to .NET SDK Project
- DOTNET-330: with .NET 4.0, 4.5
- DOTNET-331: with .NET Core (API .NET Standard 1.5)
- DOTNET-334: Unit Test cases for .NET Core 3.1 (tests .NET Standard)
- DOTNET-401: Upgrade from .NET Standard 1.5 to 2.1 and remove compatibility code
- DOTNET-420: Ensure Mono assets are not deployed / referenced.
- DOTNET-185: Port test cases to NUnit 3.x
- Remove unneeded references for .NET Standard
- DOTNET-398: Clean up and remove code analysis suppressions and rework
- Clean up exception usage (parameter names, variable names, etc.)
- DOTNET-408: Refactor P/Invokes into individual classes
- DOTNET-399: Use the NuGet package RJCP.IO.BufferIO. Removes
InternalsVisibleTo.- DOTNET-399: CircularBuffer
- DOTNET-409: TimerExpiry
- DOTNET-400: AsyncResult
- DOTNET-416: MemoryReadBuffer, MemoryWriteBuffer.
- DOTNET-402: Use RJCP.Trace for
LogSourceclasses (tracing for .NET 4.0 and .NET Core). - DOTNET-418: Use Timeout.Infinite (-1) from framework, instead of our own constant.
- Remove internal
SerialBuffer.IsPinnedBufferas it's not used. - Remove unneeded implementation of
SerialData.Reset(bool). - Test cases should use
TaskFactory().StartNew()to not crash test cases in .NET Core. - DOTNET-404: Remove
INativeSerialDllinternal implementation. - DOTNET-435: LibNSerial for Unix is now static. Original intent was to handle multiple "bitness", but this appears to be handled properly already on Linux, and 64-bit seems to be the standard now.
- DOTNET-403: Better testing with
SerialPortStream.Virtualto abstract hardware. Separate unit tests and integration tests. - DOTNET-429: Simplify logging for test cases slightly.
Source:
- Add editor support for VSCode
Bugfixes:
- Issue #116, DOTNET-975: Don't close the port on ERROR_HANDLE_EOF
- DOTNET-953: Add serialisation to .NET Framework
InternalApplicationException - DOTNET-954: Add Constrained Execution Regions only for .NET Framework
Feature:
- Issue #136, DOTNET-698: Get devices directly from Windows Device Manager
Bugfixes:
- DOTNET-328: Enable logging for .NET Standard 1.5 and later
- DOTNET-423: Race condition on Unix that may lead to data corruption
- DOTNET-422: Ensure DiscardOutBuffer clears internal buffers not just the driver (Linux)
- DOTNET-425: BytesToWrite returns maximum of driver or internal buffers, not the sum (Windows)
- DOTNET-441: BeginRead didn't check the device state
- DOTNET-442: Fix failing ReadToOverflow
- DOTNET-463: Capture exceptions when handling events (.NET Core would exit)
Quality:
- DOTNET-329: Upgrade to .NET Core Project Style for .NET 4.0 and 4.5
- DOTNET-331: Merge .NET Standard with .csproj (DOTNET-420)
- DOTNET-334: Enable testing .NET Standard library with .NET Core App 3.1(DOTNET-419)
- DOTNET-333: Clean up ISerialPortStream interface
Bugfixes:
- Issue #116: Fix
ReadAsync()andWriteAsync()on .NET Standard 1.5 (.NET Core and .NET 5.0 and later).
Features:
- Issue #114: Provide
ReadAsync()andWriteAsync()implementation- Note, the
ReadAsyncCancellationTokenis ignored - This implementation is broken on .NET Core (.NET Standard 1.5). Works on .NET 4.5
- Note, the
Bugfixes:
- Issue #110: Fix ReadFile P/Invoke
Bugfixes:
- DOTNET-194: Prevent exceptions when converting bytes to chars when using ISO-8859-15.
Bugfixes:
- DOTNET-180: Allow compilation of libnserial on Ubuntu 16.04.5.
- Issue #104: Fix buffer
handling.
Write()would sometimes corrupt data. - Issue #90:
IsOpen()might returnNullReferenceExceptionas it's not thread safe withClose().
Features:
- DOTNET-184: Update to NUnit 2.7.1.
- DOTNET-186: Update codebase to use new features introduced with C# 7.0 (VS2019).
- Issue #82: Provide release note documentation
Bugfixes:
- Issue #62: Allow RTS/DTR to be set before serial port is open on UNIX.
- Issue #64: Windows - Check registry if port is not CHAR/UNKNOWN.
- DOTNET-171: libnserial: Fix port detection on Linux.
- DOTNET-172: libnserial: Show the handle value when logging on Linux.
- Issue #69:
IsOpenshould return false when the serial port device is removed. - DOTNET-175: Windows usage of
ClearCommErrorwas incorrect. - DOTNET-176: Don't lose data on a
Write().
Features:
- Pull #77: Add interface
for the
SerialPortStream.
Bugfixes:
- DOTNET-162: Reduce number of objects created when writing, reading, flushing.
- DOTNET-163: Reduce CPU and Memory if tracing is disabled.
- DOTNET-164: Reduce number of
WaitHandles created in an I/O loop. - DOTNET-165: Don't use
Enum.HasFlagas it's slow, boxes and uses the GC.
Features:
- Issue #55: Sign the .NET Standard 1.5 library.
Bugfixes:
- Pull #40: Correct paths
for CMake in
README.md. - DOTNET-154: The
IsDisposableflag should not be publicly settable. - Issue #50: Avoid deadlock in event handling.
Features:
- Issue #20: Upgrade project to work with .NET Core 1.0.4.
Bugfixes:
- Issue #22: Abort pin monitoring on Linux for devices that don't support it.
- DOTNET-89: Properly clean up pin monitoring thread on Linux.
- DOTNET-86, 87: Fix race condition when checking/aborting modem events.
- DOTNET-93: Make usage of
pthread_setcancel{state|type}portable. - DOTNET-94: Properly handle errors from pthreads.
- DOTNET-95: Correct race condition when aborting a modem event.
- DOTNET-91: Treat
EINTRas a non-fatal interrupt. - Issue #24: Thread names on Linux too long.
- DOTNET-100: Use a
SafeHandleforlibnserial. - Issue #25: Support devices that don't work with overlapped WaitCommEvent.
- DOTNET-106: Allow building for OSes that don't support TIOCNXCL and TIOCEXCL.
Features:
- Issue #26: Provide an implementation for DiscardInBuffer and DiscardOutBuffer.
Bugfixes:
- DOTNET-82: Close a serial port properly on Linux with Native Lib.
Bugfixes:
- DOTNET-34: Use a smarter algorithm to get the available ports on Linux.
Features:
- Issue #10: Support .NET Standard 1.5 (.NET Core 1.0 and .NET FX 4.6.x).
- DOTNET-75: Add proper exception support for Linux.
- DOTNET-74: Refactor projects to separate .NET 4.0 and .NET 4.5 for multitargetting.
Bugfixes:
- DOTNET-30: Don't call
SetCommBreakorClearCommBreakon opening theSerialPortStream(or when changing any other property either). - DOTNET-45: Dispose
ManualResetEvent(Linux). - DOTNET-41: Remove double initialisation of property
m_TxContinueOnXOffinGetPortSettings(). - DOTNET-41: Make
IsDisposedinternally a volatile. - DOTNET-41: Properly implement singleton method for tracing.
Features:
- DOTNET-33: Support CMake
find-packageby providingnserialConfig.cmake. - DOTNET-58: Force exclusive access of the serial port for non-root processes (Linux).
- DOTNET-62: Enable possibility to log open/close issues.
Bugfixes:
ToString()shouldn't raise an exception in case the device causes problems.
Bugfixes:
- Reenable tracing in the final Nuget package.
Bugfixes:
OverlappedResultshould wait when completing.
This is a rewrite from v1.x
Bugfixes:
- Don't raise an exception in
GetPortDescriptions()if no COM ports are registered. - Fix race condition in events, make events protected virtual for overrides.
- Fix exception on Windows for serial drivers that don't support breaks.
- Fix reading characters for
System.Text.Decoderbug found on Windows also. - Fix
Write()when closed to raise the correct exception, which isInvalidOperationException. - When closing/disposing during an active write, we now raise an exception.
- Use a more explicit solution for aborting a
Write()by aborting it explicitly onClose(). - Fix RTS and DTR control on opening the port.
- Flush now properly aborts when closed/disposed while blocked.
- Change
InvalidOperationExceptionduring a blocking write toIOException. Read()now returns whenClose()d orDispose()d.- Raise
IOExceptionwhen the device is removed immediately onWrite. - Stop the Win32
SerialPortStreamin case of an error.
Features:
- Major refactoring for
WinNativeagainst a more formal architecture. - Provide DLL used for running under Unix operating systems.