# NordicID.NurApi.SerialTransport

> Generated: 2026-05-06 07:29 UTC  
> Package version: `4.0.5`

## Guide

## Overview

`NordicID.NurApi.SerialTransport` is a support library that extends
`NordicID.NurApi.Net` with serial port transport capabilities. It discovers
Nordic ID RFID readers connected via serial ports and produces connection URIs
for use with `NurApi.Connect(Uri)`.

Install it from NuGet:

```
dotnet add package NordicID.NurApi.SerialTransport
```

### Supported platforms

- Windows
- Linux

### How it works

The library enumerates all available serial ports and generates connection URIs
in the format `ser://COM3` (Windows) or `ser:///dev/ttyS0` (Linux).

The default baud rate is 115200. A custom baud rate can be specified as a query
parameter: `ser://COM3?baudrate=1000000`.

This library is also used internally by `NordicID.NurApi.USBTransport` to handle
the actual serial communication layer.

### Sample projects

- [`nur_sample_csharp`](https://github.com/NordicID/nur_sample_csharp) — C# NurApi samples
- [`nur_sample_windows`](https://github.com/NordicID/nur_sample_windows) — Windows samples

### Prerequisites

- `NordicID.NurApi.Net` must be installed.
- On .NET Core / .NET 5+, the `System.IO.Ports` NuGet package must be installed
  (it is not included by default).

## Initialization

Before using serial transport, initialize it once during application startup.

```csharp
NurApiDotNet.SerialTransport.Support.Init();
```

This registers the `ser://` transport scheme and the serial device discovery
provider. It also validates that `System.IO.Ports.SerialPort` is available on
the current platform.

## Device Discovery

After initialization, use `NurDeviceDiscovery` to find serial devices.

### 1. Create a discovery callback

The callback receives connection URIs for each discovered device.

```csharp
var callback = new NurDeviceDiscoveryCallback((sender, args) =>
{
    Console.WriteLine($"Found device: {args.Uri}");
});
```

### 2. Start discovery

```csharp
NurDeviceDiscovery.Start(callback);
```

To discover only serial devices, pass a scheme filter:

```csharp
NurDeviceDiscovery.Start(callback, new string[] { "ser" });
```

### 3. Connect using the discovered URI

```csharp
var api = new NurApi();

var callback = new NurDeviceDiscoveryCallback((sender, args) =>
{
    // args.Uri contains the connection URI
    api.Connect(args.Uri);
});

NurDeviceDiscovery.Start(callback);
```

### Monitoring connection status

Subscribe to `ConnectionStatusEvent` to react to connection changes:

```csharp
api.ConnectionStatusEvent += (sender, status) =>
{
    Console.WriteLine($"Connection status: {status}");
};
```
