# NordicID.NurApi.USBTransport

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

## Guide

## Overview

`NordicID.NurApi.USBTransport` is a support library that extends `NordicID.NurApi.Net`
with USB transport capabilities. It generates USB-based connection URIs, simplifying
device discovery and connection for Nordic ID RFID readers connected over USB.

Install it from NuGet:

```
dotnet add package NordicID.NurApi.USBTransport
```

### Supported platforms

- Windows
- Linux

### How it works

The library discovers Nordic ID USB devices and produces connection URIs that
can be passed directly to `NurApi.Connect(Uri)`. Under the hood it relies on
the Serial Transport library to manage the actual transport layer.

Example URIs:

| Platform | URI example |
|---|---|
| Windows | `usb://COM3?productName=Nordic%20ID%20Reader` |
| Linux | `usb:///dev/ttyUSB0?sid=100001011011` |

FTDI-based devices (e.g. FR22) append `&baudrate=1000000` to the Windows URI.

Only the port part of the URI is required for connecting (e.g. `usb://COM3` or
`usb:///dev/ttyUSB0`). The query parameters (`productName`, `sid`, `baudrate`)
are added by device discovery to identify the device and are not required when
constructing a URI manually.

### 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 (WinForms, WPF, UWP)
- [`fr22_samples`](https://github.com/NordicID/fr22_samples) — FR22 reader samples

### Prerequisites

- `NordicID.NurApi.Net` must be installed.
- `NordicID.NurApi.SerialTransport` is required (USB transport builds on top of serial transport).

## Initialization

Before using USB transport, you must initialize it once during application startup.

```csharp
NordicID.NurApi.USBTransport.Support.Init();
```

> **Note:** Enable FTDI device discovery to discover FR22 readers (or any other
> FTDI-based device whose USB product name doesn't contain "FR22"):
>
> ```csharp
> NordicID.NurApi.USBTransport.Support.Init();
> NordicID.NurApi.USBTransport.Support.EnableFTIDDeviceDiscovery = true;
> ```

## Device Discovery

After initialization, use `NurDeviceDiscovery` to find connected USB 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 USB devices (excluding TCP, mDNS, etc.), pass a scheme filter:

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

### 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}");
};
```

## USB Auto-Connect

The USB auto-connect feature handles device discovery and connection automatically.
It continuously searches for USB devices, connects to the first one found, and
reconnects if the connection is lost.

```csharp
var api = new NurApi();
api.Connect("usb://autoconnect");
```

### Disabling automatic reconnection

By default, if the connection drops, auto-connect will keep trying to reconnect.
Set `AutoReconnect` to `false` to disable this:

```csharp
api.AutoReconnect = false;
```
