# NordicID.NurApi.Net — API Reference

> Generated: 2026-05-06 07:29 UTC  
> Package version: `6.0.5-staging-ID8`  
> Source XML: `NordicID.NurApi.Net.xml`

Single-file reference for the `NordicID.NurApi.Net` library. The API Reference section enumerates every public type and member documented in the XML doc file. Headings are predictable and greppable — search for `Type \`X\``, `Method: \`Y\``, etc.

## Guide

## Overview

NurApi is Nordic ID's .NET library for working with NUR-based UHF RFID readers.
The core package, `NordicID.NurApi.Net`, targets `netstandard2.0` and provides
the API used to discover devices, connect to a reader, configure it, run
inventories, and read or write tag memory.

Install it from NuGet:

```
dotnet add package NordicID.NurApi.Net
```

This document is the generic, platform-agnostic reference. Where a feature
requires extra packages (USB, Bluetooth LE, serial, mDNS), those packages are
mentioned by name only — refer to their individual READMEs for setup details.

### Capabilities at a glance

- Device discovery (TCP / mDNS out of the box; USB and BLE via add-on packages)
- Connecting / disconnecting / auto-reconnect
- Reader configuration (`ModuleSetup`, RF profile, TX power, antennas, sessions)
- Single-shot and continuous (streaming) inventories
- Tag read / write across all Gen2 memory banks
- Inventory + read combined (read tag memory during inventory)
- Multi-criteria tag filtering via `InventoryExFilter`
- Events for tag streams, GPIO, accessory devices, connection status, etc.

### Supported runtimes

Anything that consumes a `netstandard2.0` library: .NET Framework, .NET Core,
.NET 5+, Mono, Unity, etc. Transport-specific add-on packages target their
respective platforms (Windows/Linux/Android/iOS/UWP).

### Add-on transport packages

The core package only ships TCP and mDNS. Install the relevant add-on for any
other transport you need; each one registers a new URI scheme and (where
applicable) device-discovery support when initialized.

| Package | NuGet | Provides |
|---|---|---|
| `NordicID.NurApi.USBTransport` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.USBTransport) | USB transport on Windows / Linux desktop. |
| `NordicID.NurApi.SerialTransport` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.SerialTransport) | Serial port transport on Windows / Linux. |
| `NordicID.NurApi.SerialTransport.UWP` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.SerialTransport.UWP) | Serial transport for UWP apps. |
| `NordicID.NurApi.Android` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.Android) | BLE + USB transport for Xamarin / .NET MAUI on Android. |
| `NordicID.NurApi.iOS` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.iOS) | BLE transport for Xamarin / .NET MAUI on iOS and Mac Catalyst. |
| `NordicID.NurApi.Utils` | [nuget.org](https://www.nuget.org/packages/NordicID.NurApi.Utils) | TID parsing, locate-tag and other helpers. Cross-platform. |

The core library itself is published as
[`NordicID.NurApi.Net`](https://www.nuget.org/packages/NordicID.NurApi.Net).

### Sample projects

- [`nur_sample_csharp`](https://github.com/NordicID/nur_sample_csharp) — C# NurApi samples and docs
- [`nur_sample_windows`](https://github.com/NordicID/nur_sample_windows) — WinForms / WPF / UWP samples
- [`maui_nur_app_template`](https://github.com/NordicID/maui_nur_app_template) — .NET MAUI multiplatform sample (Android + iOS)
- [`rfiddemo_xamarin`](https://github.com/NordicID/rfiddemo_xamarin) — Xamarin RFID demo (Android, iOS, UWP)
- [`fr22_samples`](https://github.com/NordicID/fr22_samples) — FR22 reader samples
- [`nur_sample_accsensor`](https://github.com/NordicID/nur_sample_accsensor) — Accessory sensors API sample

More repositories at [github.com/NordicID](https://github.com/NordicID).

### Typical workflow

1. Create a `NurApi` instance.
2. Discover devices (or build a connection URI directly).
3. Connect.
4. Configure the module (`ModuleSetup`).
5. Run inventories (single-shot or stream) and/or read/write tag memory.
6. Disconnect.

Each step is covered in the following articles.

## Discovering Devices

Use `NurDeviceDiscovery` to enumerate available readers and obtain a
connection `Uri` you can pass to `NurApi.Connect`.

```csharp
using NurApiDotNet;

var api = new NurApi();
var callback = new NurDeviceDiscoveryCallback((sender, e) =>
{
    if (e.Visible)
        Console.WriteLine($"Found: {e.Uri}");
    else
        Console.WriteLine($"Lost:  {e.Uri}");
});

NurDeviceDiscovery.Start(callback);
// ...
NurDeviceDiscovery.Stop(callback);
```

### Filtering by transport scheme

By default discovery uses every transport registered in the process. To limit
to specific schemes, pass an array of scheme names:

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

Built-in schemes: `tcp`, `mdns`. Add-on transport packages register additional
schemes (typically `usb`, `ble`, `serial`) when their `Support.Init()` is
called at startup. See the
[Add-on transport packages](01-overview.md#add-on-transport-packages) table
in the Overview for the corresponding NuGet packages.

### Direct URIs (no discovery)

Discovery is optional. If you already know the device address, build the URI
directly and skip straight to `Connect`:

| Scheme  | Example URI                         | Notes                         |
|---------|-------------------------------------|-------------------------------|
| `tcp`   | `tcp://192.168.1.100:4333`          | Default port 4333             |
| `usb`   | `usb://autoconnect`                 | Requires USB transport add-on |
| `usb`   | `usb://com6/?deviceid=...`          | Windows, explicit device      |
| `usb`   | `usb:///dev/ttyACM1?sid=...`        | Linux, explicit device        |
| `serial`| `serial://COM3?baudrate=115200`     | Requires serial add-on        |

> Some Nordic ID Android-based readers listen on TCP port `6734` rather than
> the standard `4333`.

## Connecting to a Reader

```csharp
using NurApiDotNet;

var api = new NurApi();

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

api.Connect(new Uri("tcp://192.168.1.100:4333"));
// ... use the reader ...
api.Disconnect();
```

`Connect` accepts any `Uri` whose scheme is registered with the transport
registry. The TCP and mDNS schemes are built in; USB, BLE, and serial are
provided by separate add-on packages.

### Transport registry

Schemes are managed by the static class `NurTransportRegistry` (in
`NurApiDotNet`). Add-on transport packages call `NurTransportRegistry.Add` from
their `Support.Init()` to register a new scheme; you normally never call it
yourself, but it is the right hook for plugging in a custom transport:

```csharp
NurTransportRegistry.Add("myscheme", typeof(MyTransport));
// then:  api.Connect(new Uri("myscheme://..."));
```

`Contains(scheme)` and `Remove(scheme)` are also available.

### Auto-reconnect

`AutoReconnect` is **enabled by default**. When the connection is lost, NurApi
periodically retries until the reader is reachable again, raising
`ConnectionStatusEvent` for every state change.

```csharp
api.AutoReconnect = false; // disable if you want manual control
```

### Connection status states

`ConnectionStatusEvent` receives a `NurTransportStatus` value. Common values
include `Connected`, `Disconnected`, and intermediate states reported during
re-connection. Always treat reconnection as transparent — pending operations
are not automatically replayed, so re-issue commands after `Connected` if
necessary.

### Identifying the connected reader

Once connected, `GetReaderInfo()` returns serial number, firmware versions,
antenna count, region, etc.:

```csharp
var info = api.GetReaderInfo();
Console.WriteLine($"Serial: {info.serial}");
Console.WriteLine($"FW:     {info.GetVersionString()}");
Console.WriteLine($"Antennas: {info.numAntennas}/{info.maxAntennas}");
```

## Configuring the Reader

Reader configuration goes through the `ModuleSetup` struct. The pattern is:

1. Read the current setup.
2. Mutate the fields you care about.
3. Apply the change with `SetModuleSetup`, passing a flag mask that tells the
   reader which fields are valid in the struct.

```csharp
var setup = api.GetModuleSetup();

setup.inventoryQ        = 4;
setup.inventorySession  = NurApi.SESSION_S0;
setup.inventoryRounds   = 1;
setup.antennaMaskEx     = 0x3;                // antennas 1 and 2
setup.selectedAntenna   = NurApi.ANTENNAID_AUTOSELECT;
setup.txLevel           = 0;                  // 0 = max power
setup.rfProfile         = NurApi.RFPROFILE_NOMINAL;

var flags = SetupFlags.InventoryQ
          | SetupFlags.InventorySession
          | SetupFlags.InventoryRounds
          | SetupFlags.AntennaMaskEx
          | SetupFlags.SelectedAntenna
          | SetupFlags.TxLevel
          | SetupFlags.RfProfile;

api.SetModuleSetup((int)flags, ref setup);
```

To apply everything in one go, use `NurApi.SETUP_ALL`.

#### Property shorthands

For changing a single setting, you can skip the `ModuleSetup` / flag-mask
ceremony and use the direct properties on the `NurApi` instance:

```csharp
api.TxLevel          = 0;
api.RfProfile        = NurApi.RFPROFILE_NOMINAL;
api.InventoryQ       = 4;
api.InventorySession = NurApi.SESSION_S0;
api.InventoryRounds  = 1;
api.AntennaMaskEx    = 0x3;
api.SelectedAntenna  = NurApi.ANTENNAID_AUTOSELECT;
```

Each property setter calls `SetModuleSetup` internally with only the
relevant flag, so it is a convenient one-liner when you only need to tweak
one or two settings. For bulk changes, the explicit struct approach above is
more efficient — it sends a single command to the reader.

### RF profiles

The RF profile trades read range / robustness against speed:

| Constant                  | Meaning                                       |
|---------------------------|-----------------------------------------------|
| `RFPROFILE_ROBUST`        | Slower, best for noisy RF environments        |
| `RFPROFILE_NOMINAL`       | Balanced default — recommended starting point |
| `RFPROFILE_HIGHSPEED`     | Best throughput, but prone to RF interference |
| `RFPROFILE_HIGHSPEED_2`   | Optimizes speed by reducing Tari value for PIE data |
| `RFPROFILE_FAST`          | Compromise between speed and sensitivity      |
| `RFPROFILE_AUTOSET`       | Switches across different RF modes during each inventory |

Not all modules support every profile. Check `api.Capabilites.rfProfile`
before setting `SetupFlags.RfProfile`.

### TX power

`txLevel` is **attenuation** in 1 dB steps subtracted from the module's
maximum output. `0` is full power; higher values reduce power. The exact
range and dBm/mW table depends on the device — query `DeviceCapabilities`:

```csharp
var caps  = api.GetDeviceCaps();
int dBm   = caps.maxTxdBm - api.TxLevel * caps.txAttnStep;
int mW    = (int)Math.Round(Math.Pow(10, dBm / 10.0));
```

Higher TX power increases range but also power consumption and the reflected
power seen with poorly-matched antennas. Always respect regional regulations.

### Antennas

- `antennaMaskEx` selects which antennas participate (bitmask, bit `n` =
  antenna `n+1`).
- `selectedAntenna` picks a specific antenna ID, or `ANTENNAID_AUTOSELECT`
  to round-robin through enabled antennas.

### Sessions and Q

Brief, practical defaults:

- **Q** — `0` lets the reader auto-tune. Otherwise pick a Q whose `2^Q` is
  close to the expected number of tags in field.
- **Session** — `S0` is the most responsive (tags reappear immediately).
  `S1`/`S2`/`S3` give tags a "persistent" inventoried-flag, which is useful
  for dense populations and to avoid re-reading the same tags.
- **Rounds** — number of full Q cycles per `Inventory()` call. `0` = auto.

See [Inventory Parameters](#inventory-parameters-inventoryex) for details.

### Persisting configuration

`StoreCurrentSetup()` writes the active settings to the module's non-volatile
memory so they survive a power cycle.

## Simple Inventory

`Inventory()` runs one inventory pass and returns. It is synchronous and
ideal for one-off scans, button-press reads, or low-rate polling.

```csharp
api.ClearTagsEx();              // discard anything left from previous reads
api.Inventory();                // perform the inventory

var tags = api.FetchTags();     // pull tags from the module's storage

foreach (var tag in tags)
    Console.WriteLine($"{tag.GetEpcString()}  rssi={tag.rssi} ant={tag.antennaId}");
```

The settings used (Q, session, rounds, antennas, TX power, ...) are whatever
is currently configured via `ModuleSetup`. See
[Configuring the Reader](#configuring-the-reader).

### When to use simple vs. streaming inventory

| Use simple `Inventory()` when…                          | Use `InventoryStream` when…                   |
|---------------------------------------------------------|-----------------------------------------------|
| You want a single snapshot                              | You need continuous monitoring                |
| Reads are user-triggered                                | The application reacts to tag arrivals/exits  |
| You can tolerate a short blocking call                  | Latency matters                               |

### Error handling

All NurApi calls throw `NurApiException` (or a more specific subclass) on
failure. Wrap inventory calls accordingly:

```csharp
try
{
    api.Inventory();
}
catch (NurApiException ex)
{
    Console.WriteLine($"Inventory failed ({ex.error}): {ex.Message}");
}
```

## Inventory Stream

`StartInventoryStream()` runs the reader in continuous-inventory mode and
delivers results asynchronously through `InventoryStreamEvent`. It is the
right choice whenever you want low-latency, high-throughput tag visibility.

```csharp
api.InventoryStreamEvent += OnInventoryStream;

Task.Run(() => api.StartInventoryStream());

void OnInventoryStream(object sender, NurApi.InventoryStreamEventArgs e)
{
    var storage = api.GetTagStorage();
    lock (storage)
    {
        foreach (var pair in storage.GetAddedTags())
        {
            var tag = pair.Value;
            Console.WriteLine($"+ {tag.GetEpcString()}  rssi={tag.rssi}");
        }
        storage.GetAddedTags().Clear();

        foreach (var pair in storage.GetUpdatedTags())
        {
            var tag = pair.Value;
            Console.WriteLine($"~ {tag.GetEpcString()}  rssi={tag.rssi}  seen={tag.UpdateCount}");
        }
        storage.GetUpdatedTags().Clear();
    }

    if (e.data.stopped)
    {
        // Regulatory limits force the stream to pause periodically.
        // Restart it if you want truly continuous operation.
        Task.Run(() => api.StartInventoryStream());
    }
}
```

To stop the stream:

```csharp
api.StopInventoryStream();
```

### Things to know

- **Automatic stops** — RF regulations force a stop after a short period
  (typically ~20 s). The `stopped` flag in the event tells you when this
  happens; restart the stream if you need uninterrupted operation.
- **Keep the handler fast** — avoid calling NUR reader functions (e.g.
  read/write operations) inside the handler. The reader cannot run multiple
  RF operations at the same time, so any reader command issued from the
  handler will delay the next streaming inventory round. If you need
  extensive tag access (e.g. reading memory banks for every tag), use
  synchronous `Inventory()` calls in a loop instead of the stream.
- **Thread safety** — events are raised on a background thread. Lock the
  shared `TagStorage` (or copy data out) before iterating.
- **Tag storage** — newly seen tags appear in `GetAddedTags()`. Tags that
  were already in storage but seen again appear in `GetUpdatedTags()` with an
  incremented `UpdateCount`. Clear both dictionaries after processing or they
  will grow unbounded.
- **Configuration** — the stream uses the current `ModuleSetup`. Configure
  the reader before starting the stream.

### Filtered streaming

Use `StartInventorySelectStream` together with `InventoryExFilter` instances
to limit the stream to tags matching specific criteria. See
[Inventory Filters](#inventory-filters).

## Inventory Parameters (`InventoryEx`)

`InventoryEx` is the advanced variant of `Inventory`. It accepts an
`InventoryExParams` struct and an array of `InventoryExFilter`s, giving you
per-call control without mutating the global `ModuleSetup`.

```csharp
var p = new NurApi.InventoryExParams
{
    Q                 = 0,                        // auto
    rounds            = 0,                        // auto
    session           = NurApi.SESSION_S0,
    inventoryTarget   = NurApi.INVTARGET_A,
    inventorySelState = NurApi.SELSTATE_SL,
    transitTime       = 0                         // no time cap
};

var response = api.InventoryEx(ref p, filters: null);
Console.WriteLine($"Tags: {response.numTagsFound}");
```

### Field reference

| Field               | Purpose                                                             |
|---------------------|---------------------------------------------------------------------|
| `Q`                 | Slot-count exponent (`2^Q`). `0` = auto.                            |
| `session`           | Gen2 session: `SESSION_S0`..`SESSION_S3`.                           |
| `rounds`            | Number of complete Q rounds. `0` = auto. Overridden by `transitTime`. |
| `transitTime`       | Hard time limit in ms (subject to regional channel-time rules). `0` = no cap. |
| `inventoryTarget`   | Read tags with inventoried flag `A`, `B`, or both.                  |
| `inventorySelState` | SL flag filter: `SELSTATE_ALL`, `SELSTATE_SL`, `SELSTATE_NOTSL`.    |

### Choosing values

- **Q = 0 (auto)** is almost always the right starting point.
- **Sessions S2 / S3** keep tags "silent" between reads — useful in dense
  populations and around metal where re-reads waste airtime.
- **`transitTime`** is your friend in time-bounded scenarios (e.g. user
  pulling the trigger for ≤500 ms); it overrides `rounds`.

### Combining with filters

Pass an array of `InventoryExFilter` to restrict the inventory to specific
tags (by EPC, TID, USER, or password bank prefix). See
[Inventory Filters](#inventory-filters).

## Inventory Filters

`InventoryExFilter` lets you restrict an `InventoryEx` (or filtered stream)
to a subset of tags by matching a bit-pattern in any memory bank. Multiple
filters are evaluated together, allowing complex AND/OR criteria.

```csharp
var filters = new[]
{
    new NurApi.InventoryExFilter
    {
        // Assert SL flag for tags whose EPC starts with AA:BB:CC:DD;
        // deassert SL for all others.
        target        = NurApi.SESSION_SL,       // operate on the SL flag
        action        = NurApi.FACTION_0,        // match → assert SL, no match → deassert SL
        bank          = NurApi.BANK_EPC,
        address       = 32,                      // bit offset — first 32 bits are CRC + PC
        maskBitLength = 32,                      // compare 4 bytes (32 bits)
        maskData      = new byte[] { 0xAA, 0xBB, 0xCC, 0xDD },
        truncate      = false
    },
    new NurApi.InventoryExFilter
    {
        // Additionally require 11:22:33 at the start of user memory.
        // Matching tags keep SL asserted; non-matching are left unchanged.
        target        = NurApi.SESSION_SL,       // operate on the SL flag
        action        = NurApi.FACTION_1,        // match → assert SL, no match → unchanged
        bank          = NurApi.BANK_USER,
        address       = 0,                       // bit offset — start of user memory
        maskBitLength = 24,                      // compare 3 bytes (24 bits)
        maskData      = new byte[] { 0x11, 0x22, 0x33 },
        truncate      = false
    },
};

var p = new NurApi.InventoryExParams
{
    Q = 0,                                       // 0 = auto Q
    rounds = 0,                                  // 0 = auto rounds
    session           = NurApi.SESSION_S0,       // use session S0
    inventoryTarget   = NurApi.INVTARGET_A,      // query tags with flag A
    inventorySelState = NurApi.SELSTATE_SL        // only tags with SL asserted respond
};

var response = api.InventoryEx(ref p, filters);
```

### Field reference

| Field           | Purpose                                                       |
|-----------------|---------------------------------------------------------------|
| `target`        | Flag the action affects: SL flag (0) or session A/B flag.     |
| `action`        | Gen2 select action (`FACTION_0` … `FACTION_7`) — see below.   |
| `bank`          | Memory bank: `BANK_EPC`, `BANK_TID`, `BANK_USER`, `BANK_PASSWD`. |
| `address`       | Start bit address in the bank.                                |
| `maskBitLength` | Number of bits to compare.                                    |
| `maskData`      | Mask bytes (left-aligned to `maskBitLength`).                 |
| `truncate`      | Reserved — leave `false`.                                     |

#### `FACTION_*` quick reference

`FACTION_n` follows the Gen2 standard. The most useful ones:

- `FACTION_0` — matching tags asserted, others deasserted (default "include").
- `FACTION_1` — matching tags asserted, others untouched.
- `FACTION_4` — matching tags deasserted, others asserted ("exclude").

### Tips

- Address is in **bits**, not bytes. The first 32 bits of `BANK_EPC` are PC +
  CRC; real EPC content begins at bit 32.
- A filter that matches no tag does not raise an error — the call simply
  returns zero tags.
- Combine filters cumulatively: subsequent filters operate on the population
  left by previous ones.

## Tag Access (Read / Write / Lock / Kill)

Every Gen2 tag exposes four memory banks:

| Constant       | Bank     | Notes                                                |
|----------------|----------|------------------------------------------------------|
| `BANK_PASSWD`  | Reserved | Kill password (words 0–1), access password (words 2–3). |
| `BANK_EPC`     | EPC      | PC + CRC + EPC. Use the dedicated EPC helpers below. |
| `BANK_TID`     | TID      | Manufacturer / chip ID. Usually read-only.           |
| `BANK_USER`    | User     | Optional, vendor-defined. Size varies by chip.       |

`ReadTag` / `WriteTag` and their `*ByEPC` overloads work in **bytes** (and
the byte count must be even — Gen2 transfers whole words). Address values
are in **words** (one word = 2 bytes). `InventoryRead` also uses word
addresses and its length is specified in **words**.

Maximum transfer sizes per call:

| Operation        | Max bytes | Max words |
|------------------|-----------|-----------|
| `ReadTag`        | 510       | 255       |
| `WriteTag`       | 244       | 122       |
| `InventoryRead`  | 64        | 32        |

### Reading

```csharp
// Read 8 bytes (4 words) from TID, starting at address 0:
byte[] tid = api.ReadTag(passwd: 0, secured: false,
                         bank: NurApi.BANK_TID,
                         address: 0,
                         byteCount: 8);

Console.WriteLine(NurApi.BinToHexString(tid));
```

On NUR3-based readers, you can pass `byteCount: 0` to read the entire
content of a memory bank in one call:

```csharp
// Read whole TID bank (NUR3 readers only):
byte[] fullTid = api.ReadTag(passwd: 0, secured: false,
                             bank: NurApi.BANK_TID,
                             address: 0,
                             byteCount: 0);
```

To target one specific tag, use the EPC-singulating overload:

```csharp
// 8 bytes from USER bank of the tag whose EPC matches `epcBytes`:
byte[] user = api.ReadTagByEPC(0, false, epcBytes,
                               NurApi.BANK_USER, 0, 8);
```

### Writing

```csharp
// Write to user bank of a specific tag (singulated by EPC):
api.WriteTagByEPC(passwd: 0, secured: false,
                  epc: epcBytes,
                  wrBank: NurApi.BANK_USER,
                  wrAddress: 0,
                  wrBuffer: NurApi.HexStringToBin("DEADBEEF"));
```

> Without singulation, a plain `WriteTag` writes to **whatever tag responds
> first**. Always prefer the `*ByEPC` variants when more than one tag may be
> in field.

### Changing the EPC

Use the dedicated helpers — they update both the EPC and the PC word that
encodes its length. **Do not** use `WriteTag` to modify the EPC; the PC word
will be left out of sync and the tag will misbehave.

```csharp
// Identify by current EPC, write the new one:
api.WriteEPCByEPC(passwd: 0, secured: false,
                  currentEpcBuffer: oldEpc,
                  newEpcBuffer:     newEpc);
```

| Method                | When to use                                                |
|-----------------------|------------------------------------------------------------|
| `WriteEPC`            | Replacing the EPC of a tag singulated by an arbitrary mask.|
| `WriteEPCByEPC`       | Replacing the EPC of a tag identified by its current EPC.  |

### Inventory Read (read during inventory)

You can configure the reader to pull a slice of memory from every tag during
inventory, avoiding a separate round-trip per tag.

```csharp
// During inventory, read 4 words (8 bytes) from USER bank starting at
// word 0, and append the data to the EPC buffer in each tag result:
api.InventoryRead(on:    true,
                  type:  NurApi.NUR_IR_EPCDATA,
                  bank:  NurApi.BANK_USER,
                  addr:  0,
                  nWords: 4);  // max 32 words; use 0 to read whole bank (NUR3 only)

api.ClearTagsEx();
api.Inventory();

foreach (var tag in api.FetchTags())
    Console.WriteLine($"{tag.GetEpcString()}  user={BitConverter.ToString(tag.irData)}");
```

`NUR_IR_*` constants control how the extra data is delivered (alongside the
EPC, or in place of it — `NUR_IR_EPCDATA`, `NUR_IR_DATAONLY`, etc.).
Inventory Read slows the inventory down — use it only when the per-tag data
is genuinely needed in the same pass. To turn it off again call
`InventoryRead(false, ...)` (the remaining arguments are ignored).

### Passwords

Tags have two 32-bit passwords stored in the reserved memory bank
(`BANK_PASSWD`): the **access password** (words 2–3) and the **kill
password** (words 0–1). Both default to `0x00000000` (no password).

Use the dedicated helpers instead of raw `WriteTag` calls — they handle the
word layout for you:

```csharp
// Set access password (requires current password if already non-zero):
api.SetAccessPasswordByEPC(passwd: 0, secured: false,
                           epc: epcBytes,
                           newPasswd: 0xAABBCCDD);

// Read back the access password:
uint pwd = api.GetAccessPasswordByEPC(passwd: 0xAABBCCDD, secured: true,
                                      epc: epcBytes);

// Set kill password:
api.SetKillPasswordByEPC(passwd: 0xAABBCCDD, secured: true,
                         epc: epcBytes,
                         newPasswd: 0x11223344);
```

### Locking

`SetLock` / `SetLockByEPC` change the access permissions of memory banks
and passwords. A `memoryMask` selects which banks are affected, and `action`
determines the new permission level.

#### Memory masks (combinable with `|`)

| Constant         | Target                        |
|------------------|-------------------------------|
| `LOCK_USERMEM`   | User memory bank              |
| `LOCK_TIDMEM`    | TID memory bank               |
| `LOCK_EPCMEM`    | EPC memory bank               |
| `LOCK_ACCESSPWD` | Access password               |
| `LOCK_KILLPWD`   | Kill password                 |

#### Lock actions

| Constant          | Effect                                                         |
|-------------------|----------------------------------------------------------------|
| `LOCK_OPEN`       | Readable/writable from open or secured state                   |
| `LOCK_PERMAWRITE` | Permanently writable, can never be locked                      |
| `LOCK_SECURED`    | Writable only from secured state (requires access password)    |
| `LOCK_PERMALOCK`  | Not writable from any state — **irreversible**                 |

```csharp
// Lock EPC and user memory — require password for writes:
api.SetLockByEPC(passwd: 0xAABBCCDD,
                 epc: epcBytes,
                 memoryMask: (uint)(NurApi.LOCK_EPCMEM | NurApi.LOCK_USERMEM),
                 action: NurApi.LOCK_SECURED);
```

> **Warning**: `LOCK_PERMALOCK` is irreversible. Once applied, the bank
> cannot be written to ever again.

### Killing a tag

Killing a tag permanently disables it. The tag must have a **non-zero kill
password** set before it can be killed. This operation is **irreversible**.

```csharp
// 1. Set the kill password first (if not already set):
api.SetKillPasswordByEPC(passwd: 0xAABBCCDD, secured: true,
                         epc: epcBytes,
                         newPasswd: 0xDEAD0001);

// 2. Kill the tag:
api.KillTagByEPC(passwd: 0xDEAD0001, epc: epcBytes);
```

> **Warning**: a killed tag is permanently silenced and cannot be recovered.
> Test on disposable tags first.

### Block write

`BlockWriteByEPC` uses the Gen2 BlockWrite command, which writes multiple
words in a single RF transaction. This can be faster than word-by-word
writes and is required by some tag chips.

```csharp
api.BlockWriteByEPC(passwd: 0, secured: false,
                    epcBuffer: epcBytes,
                    wrBank: NurApi.BANK_USER,
                    wrAddress: 0,
                    wrBuffer: NurApi.HexStringToBin("AABBCCDD11223344"),
                    blSize: 2); // words per block (0 = single block)
```

You can also make all standard write methods use BlockWrite internally:

```csharp
api.SetUseBlockWrite(true);
// Now WriteTag / WriteTagByEPC etc. use BlockWrite under the hood.
```

### Block erase

`EraseTagByEPC` erases a range of words in a memory bank:

```csharp
api.EraseTagByEPC(passwd: 0, secured: false,
                  epc: epcBytes,
                  erBank: NurApi.BANK_USER,
                  erAddress: 0,       // word address
                  erWordCount: 4);    // number of words to erase
```

### Block permalock

Block permalock lets you permanently lock individual 16-word blocks within
a memory bank. You can first read the current lock state, then apply locks.

```csharp
// Read permalock status: 1 chunk = 16 words, starting at chunk 0
ushort[] status = api.ReadPermalockByEPC(password: 0xAABBCCDD,
                                         secured: true,
                                         epc: epcBytes,
                                         bank: NurApi.BANK_USER,
                                         addr: 0,
                                         range: 1);

// Apply permalock: each bit in the mask locks a single block
api.BlockPermalockByEPC(password: 0xAABBCCDD,
                        secured: true,
                        epc: epcBytes,
                        bank: NurApi.BANK_USER,
                        addr: 0,
                        range: 1,
                        lockMask: new ushort[] { 0x0001 }); // lock first block
```

> **Warning**: block permalock is **irreversible**.

### Tag tracing

`TraceTag` / `TraceTagByEPC` asks the reader to continuously report a tag's
RSSI — useful for locating a specific tag physically.

```csharp
var trace = api.TraceTagByEPC(epc: epcBytes, flags: 0);
Console.WriteLine($"RSSI: {trace.rssi}  scaledRssi: {trace.scaledRssi}");
```

## Errors and Events

### Exceptions

NurApi calls throw `NurApiException` (in `NurApiDotNet.Exceptions`) on
failure. The base type carries a numeric `error` code; subclasses identify
common failure modes you may want to catch separately:

| Exception                                | Typical cause                                  |
|------------------------------------------|------------------------------------------------|
| `NurApiConnectionException`              | Transport not connected / lost mid-operation.  |
| `NurApiTimeoutException`                 | Reader did not reply in time.                  |
| `NurApiInvalidParameterException`        | Out-of-range argument.                         |
| `NurApiInvalidPacketException`           | Corrupted reply from the reader.               |
| `NurApiNotSupportedException`            | Feature not available on this module/firmware. |
| `NurApiCancelledException`               | Operation cancelled by the caller.             |
| `NurApiBluetoothNotEnabledException`     | BLE transport requested without BLE on.        |
| `NurApiPermissionException`              | OS-level permission missing.                   |

```csharp
try
{
    api.Inventory();
}
catch (NurApiTimeoutException)         { /* retry */ }
catch (NurApiConnectionException)      { /* reconnect / wait for AutoReconnect */ }
catch (NurApiException ex)             { /* log ex.error and ex.Message */ }
```

### Events

Subscribe to events on the `NurApi` instance. Common ones:

| Event                        | Fires when…                                          |
|------------------------------|------------------------------------------------------|
| `ConnectionStatusEvent`      | Transport state changes. Arg: `NurTransportStatus`.  |
| `ConnectedEvent`             | Connection established.                              |
| `DisconnectedEvent`          | Connection lost.                                     |
| `InventoryStreamEvent`       | Streaming inventory delivers a batch (or stops).     |
| `InventoryExEvent`           | Filtered (`InventoryEx`) stream delivers a batch.    |
| `IOChangeEvent`              | A configured GPIO input changes state.               |
| `TriggerReadEvent`           | A GPIO-triggered single tag read completes.          |
| `TraceTagEvent`              | A traced tag is seen.                                |
| `LogEvent`                   | The library emits a log line (see `SetLogLevel`).    |
| `BootEvent`                  | The reader reboots.                                  |
| `HopEvent`                   | Frequency hop (when `OPFLAGS_EN_HOPEVENTS` set).     |
| `TuneEvent`                  | Run-time auto-tune progress.                         |
| `OnAccBarcodeResult`         | Accessory barcode scan result.                       |
| `AccessorySensorChangedEvent`| Accessory sensor state change.                       |
| `AccessoryRangeDataEvent`    | Accessory range/sensor stream data.                  |

> All events are raised on background threads. Marshal back to your UI
> thread before touching UI state, and lock shared collections.

### Logging

```csharp
api.SetLogLevel(NurApi.LOG_VERBOSE);
api.LogEvent += (s, e) => Console.WriteLine($"[{e.timestamp}] {e.message}");
```

Log levels: `LOG_ERROR`, `LOG_USER`, `LOG_DATA`, `LOG_VERBOSE`, `LOG_ALL`.

## Gen2X Features

Gen2X extends the standard Gen2 protocol with Impinj-specific features such
as **FastID**, **TagFocus**, and **ScanID**. These features require Impinj
Monza or M700-series tags and a reader that supports Gen2X.

Check `DeviceCapabilities` before enabling Gen2X — not all readers support it.

### Reading and writing the Gen2X configuration

```csharp
// Read current Gen2X config
var cfg = api.GetGen2XConfig();

// Modify and apply
cfg.flags = NurApi.GEN2X_ENABLE_FASTID | NurApi.GEN2X_ENABLE_TAGFOCUS;
cfg.inventoryMode = 1; // 0=Gen2, 1=Gen2X, 2=Hybrid
api.SetGen2XConfig(cfg);
```

You can also use the property shorthand:

```csharp
var cfg = api.Gen2XConfigCtl;
cfg.flags = NurApi.GEN2X_ENABLE_FASTID;
cfg.inventoryMode = 1;
api.Gen2XConfigCtl = cfg;
```

### Feature flags

Set the `flags` field using these constants (combinable with `|`):

| Constant                       | Description                                              |
|--------------------------------|----------------------------------------------------------|
| `GEN2X_ENABLE_SCANID`          | Enable ScanID feature                                    |
| `GEN2X_ENABLE_TAGFOCUS`        | Enable TagFocus — only un-inventoried tags respond       |
| `GEN2X_ENABLE_FASTID`          | Enable FastID — tag reports TID alongside EPC            |
| `GEN2X_ACCEPT_CRC5_CRC5PLUS`  | Accept both CRC5 and CRC5Plus for collision resolution   |
| `GEN2X_POWER_BOOST`            | Enable power boost feature                               |
| `GEN2X_ENABLE_PROTECTED_MODE`  | Enable protected mode (requires `protectedModePin`)      |
| `GEN2X_ALL_FLAGS`              | All supported flags combined                             |

### Inventory mode

The `inventoryMode` field controls how the reader communicates with tags:

| Value | Mode   | Description                                              |
|-------|--------|----------------------------------------------------------|
| `0`   | Gen2   | Standard Gen2 only — Gen2X features are not used         |
| `1`   | Gen2X  | Gen2X protocol — only Gen2X-capable tags will respond    |
| `2`   | Hybrid | Reader alternates between Gen2 and Gen2X rounds          |

### FastID

FastID makes the tag include its TID memory in every inventory response,
eliminating the need for a separate read command per tag.

```csharp
var cfg = api.GetGen2XConfig();
cfg.flags = NurApi.GEN2X_ENABLE_FASTID;
cfg.inventoryMode = 1;
api.SetGen2XConfig(cfg);

api.ClearTagsEx();
api.Inventory();
foreach (var tag in api.FetchTags())
{
    // With FastID enabled, TID data is appended to the EPC
    Console.WriteLine(tag.GetEpcString());
}
```

### TagFocus

TagFocus causes only tags that have not yet been inventoried to respond. This
is useful in dense populations where you want to find new tags quickly without
re-reading known ones.

```csharp
var cfg = api.GetGen2XConfig();
cfg.flags = NurApi.GEN2X_ENABLE_TAGFOCUS;
cfg.inventoryMode = 1;
api.SetGen2XConfig(cfg);
```

### ScanID

ScanID is an optimized inventory mode for reading large tag populations. It
uses shorter collision-resolution identifiers and configurable encoding.

```csharp
var cfg = api.GetGen2XConfig();
cfg.flags = NurApi.GEN2X_ENABLE_SCANID;
cfg.inventoryMode = 1;

// ScanID parameters
cfg.scanCodeType       = 1; // 0=Rfu, 1=Antipodal, 2=CCOneHalf, 3=CCThreeQuarters
cfg.scanCRType         = 0; // 0=ID32, 1=ID16, 2=StoredCRC, 3=RN16
cfg.scanProtectionType = 2; // 0=None, 1=Parity, 2=CRC5, 3=CRC5Plus
cfg.scanIdType         = 3; // 0=NoAckResponse, 1=TMNPlusTSN, 2=Part, 3=Full
cfg.scanCrypto         = 0; // 0=All tags, 1=S=1 tags only
cfg.scanIdAppSize      = 1; // 0=Rfu, 1=24 bits, 2=16 bits, 3=8 bits
cfg.scanIdAppId        = 0;

api.SetGen2XConfig(cfg);
```

### Protected mode

Protected mode hides tag data from unauthorized readers. Tags in protected
mode only respond after receiving the correct PIN.

```csharp
var cfg = api.GetGen2XConfig();
cfg.flags = NurApi.GEN2X_ENABLE_PROTECTED_MODE;
cfg.inventoryMode = 1;
cfg.protectedModePin = 0x12345678;
api.SetGen2XConfig(cfg);
```

### Disabling Gen2X

To return to standard Gen2 operation:

```csharp
var cfg = api.GetGen2XConfig();
cfg.flags = 0;
cfg.inventoryMode = 0;
api.SetGen2XConfig(cfg);
```

## Gen2v2 Features

Gen2v2 (ISO 18000-63 amendment) extends the Gen2 protocol with security and
privacy features: **Authenticate**, **Untraceable**, and **ReadBuffer**.
These require tags that support the Gen2v2 standard (e.g. NXP UCODE DNA,
Impinj M7xx with crypto).

The API also provides higher-level **ISO 29167-10 TAM** helpers (TAM1 /
TAM2) that build on top of Authenticate; see the
[TAM section](#tam-iso-29167-10) below.

### Authenticate

The Authenticate command performs a cryptographic challenge-response
exchange with a tag. The exact protocol depends on the Cryptographic Suite
Indicator (CSI) supported by the tag chip.

#### Using AllocAuthParam (recommended)

`AllocAuthParam` creates an `AuthenticateParam` with sensible defaults
(timeout = 25 ms, preTxWait = 2000 µs, rxAttn = false):

```csharp
// Allocate with CSI = 0, expected response = 128 bits, message = 96 bits
var authParam = NurApi.AllocAuthParam(csi: 0, rxLength: 128, msgBitLength: 96);

// Set the CSI-specific challenge / message bytes
byte[] challenge = new byte[12]; // 96 bits
authParam.SetMessage(96, challenge);

// Authenticate by EPC (open state — recommended)
var resp = api.Gen2v2AuthenticateByEPC(epcBytes, authParam);

if (resp.status == NurApi.AuthenticateResp.RESPONSE_RECEIVED)
{
    Console.WriteLine($"Auth OK, {resp.bitLength} bits received");
    Console.WriteLine(NurApi.BinToHexString(resp.reply));
}
else if (resp.status == NurApi.AuthenticateResp.TAG_ERROR)
{
    Console.WriteLine($"Tag error code: {resp.tagError}");
}
```

#### Manual construction

If you need full control over every field:

```csharp
var authParam = new NurApi.AuthenticateParam
{
    csi        = 1,           // CSI value per tag chip documentation
    rxLength   = 128,         // expected response length in bits (0 = unknown)
    rxAttn     = false,       // true reduces range (write-like operation)
    reSelect   = false,       // re-select tag between internal operations
    timeout    = 25,          // response timeout in ms (20–50)
    preTxWait  = 2000         // carrier-on time before TX in µs (0–50000, 2000 recommended)
};

byte[] challenge = new byte[] { 0x01, 0x02, 0x03, 0x04 };
authParam.SetMessage(challenge.Length * 8, challenge);
```

> **preTxWait** gives the tag time to power up its crypto engine before the
> command is sent. A value of 2000 µs is recommended; setting it to 0 may
> cause authentication failures with some tag chips.

For secured-state authentication (not recommended — exposes the password
over the air):

```csharp
var resp = api.Gen2v2AuthenticateByEPC(accessPwd: 0xAABBCCDD,
                                       epc: epcBytes,
                                       authParam: authParam);
```

#### Singulation variants

| Method                              | Selection                         |
|-------------------------------------|-----------------------------------|
| `Gen2v2Authenticate`                | No singulation (single tag in field) |
| `Gen2v2AuthenticateByEPC`           | Singulated by EPC                 |
| `Gen2v2AuthenticateSingulated`      | Custom bank / mask singulation    |

Each has an overload with an `accessPwd` parameter for secured-state access.

### Untraceable

Untraceable hides parts of a tag's identity to protect privacy. It can
shorten the visible EPC, hide user memory, and control TID visibility. The
tag's access password is always required.

```csharp
var utr = new UntraceableParam
{
    setU        = false,
    rxAttn      = false,
    hideEPC     = true,                        // hide the EPC
    epcWordLen  = 2,                           // show only 2 words (4 bytes) of EPC
    hideUser    = true,                        // hide user memory
    tidPolicy   = NurApi.TID_HIDE_SOME,        // partially hide TID
    rangePolicy = NurApi.UTRACE_RANGE_NORMAL   // no range reduction
};

api.Gen2v2UntraceableByEPC(accessPwd: 0xAABBCCDD,
                           epc: epcBytes,
                           utrParam: utr);
```

#### Resetting Untraceable

To undo all hiding and restore the tag to its default state:

```csharp
var reset = new UntraceableParam
{
    setU        = false,
    rxAttn      = false,
    hideEPC     = false,
    epcWordLen  = 6,                           // 6 words = 96 bits (standard EPC)
    hideUser    = false,
    tidPolicy   = NurApi.TID_HIDE_NONE,
    rangePolicy = NurApi.UTRACE_RANGE_NORMAL
};

api.Gen2v2UntraceableByEPC(accessPwd: 0xAABBCCDD,
                           epc: epcBytes,
                           utrParam: reset);
```

#### TID hide policies

| Constant         | Effect                                      |
|------------------|---------------------------------------------|
| `TID_HIDE_NONE`  | TID fully visible                           |
| `TID_HIDE_SOME`  | Partial TID — chip-dependent which fields   |
| `TID_HIDE_ALL`   | TID completely hidden                       |

#### Range reduction policies

| Constant               | Effect                                         |
|------------------------|-------------------------------------------------|
| `UTRACE_RANGE_NORMAL`  | Normal range                                    |
| `UTRACE_RANGE_REDUCE`  | Reduced range — tag only responds at close proximity |

#### Singulation variants

| Method                              | Selection                         |
|-------------------------------------|-----------------------------------|
| `Gen2v2Untraceable`                 | No singulation                    |
| `Gen2v2UntraceableByEPC`            | Singulated by EPC                 |
| `Gen2v2UntraceableSingulated`       | Custom bank / mask singulation    |

### ReadBuffer

ReadBuffer reads data from a Gen2v2 tag's internal buffer (e.g. the result
of a previous Authenticate command). Addresses and lengths are in **bits**.

```csharp
var result = api.Gen2v2ReadBufferByEPC(secured: false,
                                       passwd: 0,
                                       epc: epcBytes,
                                       bitAddress: 0,
                                       bitCount: 128);

Console.WriteLine($"Read {result.bitLength} bits");
Console.WriteLine(NurApi.BinToHexString(result.buffer));
```

> The returned data is left-aligned in the byte array. If the bit count is
> not a multiple of 8, the application must handle the partial last byte.

#### Singulation variants

| Method                              | Selection                         |
|-------------------------------------|-----------------------------------|
| `Gen2v2ReadBuffer`                  | No singulation                    |
| `Gen2v2ReadBufferByEPC`             | Singulated by EPC                 |
| `Gen2v2ReadBufferSingulated`        | Custom bank / mask singulation    |

### TAM (ISO 29167-10)

For tags that implement the ISO 29167-10 cryptographic suite (e.g. NXP
UCODE DNA), the API provides high-level TAM helpers that internally use
`Gen2v2Authenticate` with the correct message format and handle AES
decryption of the response.

#### TAM1 — simple authentication

TAM1 verifies the tag's identity using a shared AES-128 key. The API
generates a random challenge, sends it, decrypts the response, and checks
the C_TAM constant and challenge echo.

```csharp
// 16-byte AES key matching the tag's key 0
byte[] key = NurApi.HexStringToBin("00112233445566778899AABBCCDDEEFF");

// Returns true if the tag's response decrypts correctly
bool ok = api.ISO29167_10_TAM1ByEPC(epcBytes, keyNum: 0, key: key);

if (ok)
    Console.WriteLine("Tag authenticated successfully");
```

#### TAM2 — authentication with data

TAM2 extends TAM1 by also returning encrypted data from a tag memory bank.
Use `AllocTAM2Param` to build the parameter structure:

```csharp
byte[] key = NurApi.HexStringToBin("00112233445566778899AABBCCDDEEFF");

// Read 1 block (8 bytes) from TID memory (mpi=1) at offset 0
var tamParam = NurApi.AllocTAM2Param(
    keyNum: 1,
    keyData: key,
    blockCount: 1,      // 1–4 blocks (8 bytes each)
    mpi: 1,             // 0 = EPC, 1 = TID, 2 = user memory
    offset: 0,
    protMode: 1);

NurApi.TAM_RESP resp = api.ISO29167_10_TAM2ByEPC(epcBytes, tamParam);

if (resp.ok)
{
    Console.WriteLine($"C_TAM = 0x{resp.C_TAM:X4}");
    Console.WriteLine($"Block data ({resp.szBlocks} blocks):");
    Console.WriteLine(NurApi.BinToHexString(resp.blockData));
}
```

#### TAM singulation variants

| Method                              | Selection           |
|-------------------------------------|---------------------|
| `ISO29167_10_TAM1`                  | No singulation      |
| `ISO29167_10_TAM1ByEPC`            | Singulated by EPC   |
| `ISO29167_10_TAM1Singulated`       | Custom singulation  |
| `ISO29167_10_TAM2`                  | No singulation      |
| `ISO29167_10_TAM2ByEPC`            | Singulated by EPC   |
| `ISO29167_10_TAM2Singulated`       | Custom singulation  |

#### AES utilities

The API exposes AES-128 methods for custom response processing:

| Method                | Description                        |
|-----------------------|------------------------------------|
| `AES128_ECBEncrypt`   | Single-block ECB encryption        |
| `AES128_ECBDecrypt`   | Single-block ECB decryption        |
| `AES128_CBCEncrypt`   | CBC encryption with IV             |
| `AES128_CBCDecrypt`   | CBC decryption with IV             |

## Accessory Extensions

Nordic ID handheld readers (EXA21, EXA31, EXA51, EXA81) have accessory
features beyond RFID: battery monitoring, barcode scanning, LED / beep /
vibration feedback, BLE pairing, sensors, and wireless charging. All
accessory methods live on `NurApi` (prefixed with `Acc`).

### Device information

```csharp
// Accessory firmware version
var fw = api.AccGetFwInfo();
Console.WriteLine($"App: {fw.ApplicationVersion}, BL: {fw.BootloaderVersion}");

// Model and connection details
Console.WriteLine(api.AccGetModelInfo());
Console.WriteLine(api.AccGetConnectionInfo());
```

### Configuration

`AccessoryConfig` holds the device's persistent settings. Always read
the current configuration before modifying it:

```csharp
var cfg = api.AccGetConfig();
Console.WriteLine($"Device: {cfg.getDeviceType()}, Name: {cfg.name}");
Console.WriteLine($"Has imager: {cfg.hasImagerScanner()}");
Console.WriteLine($"Has wireless charging: {cfg.hasWirelessCharging()}");
Console.WriteLine($"Has vibrator: {cfg.hasVibrator()}");

// Change a setting and write back
cfg.name = "My Reader";
api.AccSetConfig(cfg);
```

#### HID mode

HID mode makes the device act as a keyboard, typing scanned barcodes or
tag EPCs directly into the focused application.

```csharp
// Shorthand
api.AccSetHIDMode(NurApi.HIDMode.BarcodeRFID);
var mode = api.AccGetHIDMode();

// Or via the config struct for fine-grained control
var cfg = api.AccGetConfig();
cfg.SetHidMode(NurApi.HIDMode.Barcode);
cfg.hid_barcode_timeout = 3000;   // ms
cfg.hid_rfid_timeout    = 3000;   // ms
cfg.hid_rfid_maxtags    = 10;
api.AccSetConfig(cfg);
```

| `HIDMode`      | Behaviour                                |
|----------------|------------------------------------------|
| `Disabled`     | No HID output                            |
| `Barcode`      | Barcode scans sent as keystrokes         |
| `RFID`         | Tag EPCs sent as keystrokes              |
| `BarcodeRFID`  | Both barcode and RFID sent as keystrokes |

### Battery

```csharp
var bat = api.AccGetBatteryInfo();
Console.WriteLine($"Charging: {bat.Charging}");
Console.WriteLine($"Level: {bat.Percentage}%");    // 0–100, -1 = unknown
Console.WriteLine($"Voltage: {bat.Voltage} mV");
Console.WriteLine($"Current: {bat.Current} mA");
Console.WriteLine($"Capacity: {bat.Capacity} mAh");
```

### User feedback (beep, LED, vibrate)

```csharp
api.AccBeep(200);            // beep for 200 ms (1–5000)
api.AccSetLedOp(2);          // 0 = off, 1 = on, 2 = blink
api.AccVibrate(100, 3);      // 100 ms on/off, repeat 3× (total ≤ 2000 ms)
```

### Barcode scanning

Barcode scanning is **asynchronous**: start a scan, then handle the result
in an event.

```csharp
// Subscribe to the barcode result event
api.OnAccBarcodeResult += (sender, result) =>
{
    if (result.status == NurApi.BarcodeReadStatus.Success)
        Console.WriteLine($"Barcode: {result.Barcode}");
    else
        Console.WriteLine($"Scan status: {result.status}");
};

// Start scanning with a 5-second timeout
api.AccBarcodeStart(5000);

// Cancel before timeout if needed
api.AccBarcodeCancel();
```

The default barcode encoding is UTF-8. Change it if the barcodes use a
different encoding:

```csharp
api.AccBarcodeEncoding = System.Text.Encoding.ASCII;
```

#### Imager configuration

The built-in imager (Opticon) can be configured with raw commands:

```csharp
// Turn the aimer laser on
api.AccImagerAim(true);

// Send a raw configuration command
byte[] ack = api.AccImagerCmd(NurApi.ImagerType.Opticon, "MENUCOMMAND");

// Persist the configuration across power cycles
api.AccImagerSaveConfig(NurApi.ImagerType.Opticon);
```

### BLE pairing

```csharp
// Enable pairing mode (requires restart to take effect)
api.AccSetPairingMode(NurApi.PairingMode.Enabled);
var mode = api.AccGetPairingMode();

// Remove all paired devices (reboots the device if pairings exist)
api.AccClearPairingData();
```

### Wireless charging

Only available on devices that report `cfg.hasWirelessCharging() == true`.

```csharp
var status = api.AccGetWirelessChargeStatus();

if (status != NurApi.AccWirelessChargeStatus.NOT_SUPPORTED)
{
    api.AccSetWirelessCharge(true);
}
```

| `AccWirelessChargeStatus` | Meaning                     |
|---------------------------|-----------------------------|
| `OFF`                     | Charging disabled           |
| `ON`                      | Charging enabled            |
| `REFUSED`                 | Device refused the request  |
| `FAIL`                    | Command failed              |
| `NOT_SUPPORTED`           | Hardware not available       |

### Sensors

Some devices have external or built-in sensors (ultrasonic range finders,
ToF sensors, GPIO pins, tap detection). Sensors are discovered at runtime.

#### Enumerating sensors

```csharp
var sensors = api.AccSensorEnumerate();

foreach (var s in sensors)
{
    Console.WriteLine($"Source: {s.source}, Type: {s.type}");
    Console.WriteLine($"  Features: {s.feature}, Mode: {s.mode}");
}
```

#### Sensor modes

| `AccessorySensorMode` | Behaviour                                              |
|-----------------------|--------------------------------------------------------|
| `Gpio`                | Report changes as `IOChangeEvent` (sensor flag set)    |
| `Stream`              | Stream raw values via `OnAccRangeDataEvent` or `AccessorySensorToFFrBfaRawDataEvent` |

#### Configuring and reading a sensor

```csharp
// Get current config for a specific sensor
var cfg = api.AccSensorGetConfig(NurApi.AccessorySensorSource.USB1Sensor);

// Enable streaming mode
cfg.mode = NurApi.AccessorySensorMode.Stream;
api.AccSensorSetConfig(cfg);

// Read a single value
var value = api.AccSensorGetValue(NurApi.AccessorySensorSource.USB1Sensor);
if (value is NurApi.AccSensorRangeData rangeData)
    Console.WriteLine($"Range: {rangeData.range} mm");
```

#### Sensor filters

Filters control when sensor events fire — by range threshold, time
threshold, or both:

```csharp
var filter = new NurApi.AccessorySensorFilter
{
    flags = NurApi.AccessorySensorFilterFlag.Range,
    rangeThreshold = new NurApi.AccessorySensorFilterThrehold
    {
        lo = 100,   // minimum range in mm
        hi = 2000   // maximum range in mm
    }
};

api.AccSensorSetFilter(NurApi.AccessorySensorSource.USB1Sensor, filter);
```

#### Streaming sensor data

```csharp
// Range sensors (ultrasonic, ToF)
api.OnAccRangeDataEvent += (sender, data) =>
{
    Console.WriteLine($"[{data.source}] Range: {data.range} mm");
};

// FR BFA ToF sensor (16-zone raw data)
api.AccessorySensorToFFrBfaRawDataEvent += (sender, args) =>
{
    foreach (var item in args.RawData.items)
        Console.Write($"{item.distCm}cm ");
    Console.WriteLine();
};

// Sensor added / removed
api.OnAccSensorChangedEvent += (sender, data) =>
{
    Console.WriteLine(data.removed == 0
        ? $"Sensor connected: {data.source}"
        : $"Sensor removed: {data.source}");
};
```

### Power management

```csharp
api.AccRestart();    // restart the accessory (disconnects)
api.AccPowerOff();   // power off the accessory (disconnects)
```

### Hardware health

```csharp
string[][] health = api.AccGetHwHealth();
foreach (var pair in health)
    Console.WriteLine($"{pair[0]} = {pair[1]}");
```

## API Reference

### Namespace `NurApiDotNet`

NurApi library (.NET Standard 2.0) for controlling NUR protocol based RFID devices.  

Recommended module types (or newer) NUR05WL2/NUR1W0 (v5.0-A), All NUR2 (v.7.5-A), All NUR3.  

This library is mostly source compatible with previous versions of NurApiDotNet (.NETFramework) library.  

Discovering and connecting to reader has changed significantly; See `NurApi.Connect`, `NurDeviceDiscovery`

Samples available on NordicID github: https://github.com/NordicID/nur_sample_csharp

**See `NurApi` class for more.**

#### Type `NurApi`

Full name: `NurApiDotNet.NurApi`

NurApi class is used to manage connection and communicate with RFID device.  

Discover devices: `NurDeviceDiscovery`  

Connect device: `NurApi.Connect`

##### Constructors

###### Constructor: `NurApi()`

Nurapi contructor. Single NurApi handle for single RFID Device at the time.

##### Methods

###### Method: `AccBarcodeCancel()`

Cancel barcode scan immediately.

###### Method: `AccBarcodeRead(byte[])`

Read barcode scan result from Accessory Event data

**Parameters**

| Name | Description |
|---|---|
| `reply` | Scan result reply from accessory |

**Returns:** Result of scan or empty string if cancelled or no result during timeout. Barcode data is translated to string using ASCII encoding.

###### Method: `AccBarcodeRead(byte[], Text.Encoding)`

Read barcode scan result from Accessory Event data

**Parameters**

| Name | Description |
|---|---|
| `reply` | Scan result reply from accessory |
| `encoding` | Encoding to use to translate barcode data to string |

**Returns:** Result of scan or empty string if cancelled or no result during timeout

**Exceptions**

- `Exception`: Thrown if cannot encode string

###### Method: `AccBarcodeStart(ushort)`

Start scan for barcode reader engine  

This function only start barcode reading. Use  for receiving scan results.

**Parameters**

| Name | Description |
|---|---|
| `timeout` | Timeout in milliseconds |

###### Method: `AccBeep(int)`

Generate simple beep sound for accessory device

**Parameters**

| Name | Description |
|---|---|
| `beeptime` | beep time (1-5000ms) |

###### Method: `AccClearPairingData()`

Clear pairing information from accessory device   

Note: if pairings exist then accessory device will be rebooted.

###### Method: `AccGetBatteryInfo()`

Get battery info of accessory

**Returns:** `AccessoryBatteryInfo` object holding battery information

###### Method: `AccGetConfig()`

Get configuration from accessory.

**Returns:** Returns AccessoryConfig object holding diagnostics report.

**See also:** `AccessoryConfig`

###### Method: `AccGetConnectionInfo()`

Get information about the connection

**Returns:** MTU and DLE values as string

###### Method: `AccGetFwInfo()`

Get information about the accessory device

**Returns:** string format: Applicationversion space details;bootloaderversion

###### Method: `AccGetHIDMode()`

Get current HID mode

**Returns:** `HIDMode`

###### Method: `AccGetHwHealth()`

Get information about HW health

###### Method: `AccGetModelInfo()`

detailed info about model

**Returns:** detail model info

###### Method: `AccGetPairingMode()`

Get current Pairing mode

**Returns:** `PairingMode`

###### Method: `AccGetWirelessChargeStatus()`

Get wireless charge status.

**Returns:** Status of wireless charge `AccWirelessChargeStatus`

###### Method: `AccImagerAim(bool)`

Set Imager aimer on/off

**Parameters**

| Name | Description |
|---|---|
| `aim` | true aiming on |

###### Method: `AccImagerCmd(NurApi.ImagerType, string)`

Send configuring command to Imager

**Parameters**

| Name | Description |
|---|---|
| `imager` | Type of imager `ImagerType` |
| `cmd` | Configuration string |

**Returns:** byte array of response depending on command code(s) sent to imager. null if command string not valid. First byte of array contains ACK (0x6 success) or NAK (0x15 fail)

###### Method: `AccImagerSaveConfig(NurApi.ImagerType)`

After sending configuration to imager using `NurApi.AccImagerCmd`, settings are ready to use but next power down causes settings to lost.  

Therefore, it’s important to save settings to volatile memory of imager.

**Parameters**

| Name | Description |
|---|---|
| `imager` | Type of imager `ImagerType` |

###### Method: `AccPowerOff()`

Power off accessory.  

Note: Accessory will be disconnect.

###### Method: `AccRestart()`

Restart accessory.  

Note: Accessory will be disconnect.

###### Method: `AccSensorEnumerate()`

Get all connected sensors.

**Remarks**

Each entry's `AccessorySensorConfig.type` determines which streaming
event the sensor will raise when configured with `AccessorySensorMode.Stream`:
range sensors raise `NurApi.AccessoryRangeDataEvent`, while the FR BFA
(ToF) sensor raises `NurApi.AccessorySensorToFFrBfaRawDataEvent`.

A sensor whose `AccessorySensorConfig.feature` bitmask does not include
`AccessorySensorFeature.StreamValue` will not raise a stream event even
when `AccessorySensorMode.Stream` is set.

###### Method: `AccSensorGetConfig(NurApi.AccessorySensorSource)`

Get current sensor configuration.

**Remarks**

When `AccessorySensorConfig.mode` is `AccessorySensorMode.Stream`,
the dispatch event depends on `AccessorySensorConfig.type`: range sensors
raise `NurApi.AccessoryRangeDataEvent`, while the FR BFA (ToF) sensor
raises `NurApi.AccessorySensorToFFrBfaRawDataEvent`.

###### Method: `AccSensorGetFilter(NurApi.AccessorySensorSource)`

Get filter settings of sensor

**Parameters**

| Name | Description |
|---|---|
| `source` | Source of sensor |

**Returns:** filter of sensor

###### Method: `AccSensorGetSettings(NurApi.AccessorySensorSource, NurApi.AccessorySensorType)`

Get sensor settings

###### Method: `AccSensorGetValue(NurApi.AccessorySensorSource)`

Get sensor value

**Parameters**

| Name | Description |
|---|---|
| `source` | source of sensor |

**Returns:** AccSensorData

###### Method: `AccSensorSetConfig(NurApi.AccessorySensorConfig)`

Change sensor configuration (currently only the mode can be changed).  

cfg.source is used to identify the sensor.

**Remarks**

When setting `AccessorySensorConfig.mode` to `AccessorySensorMode.Stream`,
the dispatch event depends on `AccessorySensorConfig.type`: range sensors raise
`NurApi.AccessoryRangeDataEvent`, while the FR BFA (ToF) sensor raises
`NurApi.AccessorySensorToFFrBfaRawDataEvent`. The sensor must also expose
`AccessorySensorFeature.StreamValue` in `AccessorySensorConfig.feature`.

###### Method: `AccSensorSetFilter(NurApi.AccessorySensorSource, NurApi.AccessorySensorFilter)`

Change filter of sensor.

**Parameters**

| Name | Description |
|---|---|
| `source` | source id of sensor |
| `filter` | filter to set |

###### Method: `AccSensorSetSettings(NurApi.AccessorySensorSource, NurApi.AccessorySensorType, NurApi.AccessorySensorSettings)`

Set sensor settings

###### Method: `AccSetConfig(AccessoryConfig)`

Set accessory configuration.

**Parameters**

| Name | Description |
|---|---|
| `cfg` | A valid accessory configuration |

###### Method: `AccSetHIDMode(NurApi.HIDMode)`

Set `HIDMode`  

Note: Accessory restart required after set HID mode.

**Parameters**

| Name | Description |
|---|---|
| `mode` |  |

###### Method: `AccSetLedOp(int)`

Sets the LED operation mode.

**Parameters**

| Name | Description |
|---|---|
| `mode` | Mode to set. 0=off, 1=on, 2=blink |

###### Method: `AccSetPairingMode(NurApi.PairingMode)`

Set `PairingMode`  

Note: Accessory restart required after set PairingMode mode.

**Parameters**

| Name | Description |
|---|---|
| `mode` |  |

###### Method: `AccSetWirelessCharge(bool)`

Set wireless charge on/off

**Parameters**

| Name | Description |
|---|---|
| `isOn` | >true to activate wireless charging |

**Returns:** Status of wireless charge `AccWirelessChargeStatus`

###### Method: `AccVibrate(int, int)`

Use vibra of accessory device  

Parameter exception thrown if vibratingTime * count exceeds 2000ms

**Parameters**

| Name | Description |
|---|---|
| `vibratingTime` | vibration ontime and offtime in milliseconds |
| `count` | Number of times to repeat |

###### Method: `AES128_CBCDecrypt(byte[], byte[], byte[])`

Perform an AES128 CBC decryption.

**Parameters**

| Name | Description |
|---|---|
| `input` | Input buffer. |
| `key` | 16-byte key to use. |
| `iv` | 16-byte Initialization Vector to use. |

**Returns:** If successful, returns the decrypted buffer.

###### Method: `AES128_CBCEncrypt(byte[], byte[], byte[])`

Perform an AES128 CBC encryption.

**Parameters**

| Name | Description |
|---|---|
| `input` | Input buffer. |
| `key` | 16-byte key to use. |
| `iv` | 16-byte Initialization Vector to use. |

**Returns:** If successful, returns the encrypted buffer.

###### Method: `AES128_ECBDecrypt(byte[], byte[])`

Do a single block AES128 ECB decryption.

**Parameters**

| Name | Description |
|---|---|
| `input` | 16-byte long input buffer. |
| `key` | 16-byte key to use. |

**Returns:** If successful, returns the decrypted buffer.

###### Method: `AES128_ECBEncrypt(byte[], byte[])`

Do a single block AES128 ECB encryption.

**Parameters**

| Name | Description |
|---|---|
| `input` | 16-byte long input buffer. |
| `key` | 16-byte key to use. |

**Returns:** If successful, returns the encrypted buffer.

###### Method: `AllocAuthParam(byte, ushort, ushort)`

Basic allocation of authentication parameters.

**Parameters**

| Name | Description |
|---|---|
| `csi` | Cryptographic Suite Indicator. |
| `rxLength` | Bit length of the reception (0 if not know, NOTE: not recommended). |
| `msgBitLength` | Message's bit length. |

**Returns:** Returns the authentication parameter structure with basic setup.

**Remarks**

The `AuthenticateParam.timeout` is set to 25 milliseconds.

The `AuthenticateParam.rxAttn` is set to false.

The `AuthenticateParam.preTxWait` is set to 2000 microseconds.

The `AuthenticateParam.GetMessage` is allocated to `NurApi.GEN2V2_MAX_AUTHBYTES` length.

###### Method: `AllocTAM2Param(byte, byte[], uint, byte, ushort, byte)`

ISO 29167-10 TAM 2 parameter allocation helper.

**Parameters**

| Name | Description |
|---|---|
| `keyNum` | Key number to use. |
| `keyData` | AES key data. If null, the key is initialized to all zeros. |
| `blockCount` | Custom data's block count. The range is 1...`NurApi.TAM_MAXBLOCKS`. Support depends on tag. |
| `mpi` | Memory Profile Indicator. The basic profiles are: 0 = EPC memory, 1 = TID memory and 2 = user memory, other values are manufacturer defined (range: 0...0x0F). |
| `offset` | The offset parameter in the authentication command as specified by the ISO 29167-10 (range: 0...0x0FFF). |
| `protMode` | The mode parameter as defined by the ISO 29167-10. |

**Returns:** Returns the TAM response structure.

**Remarks**

The `keyData` can be null. In such a case the key is not initialized.

**See also:** `TAM_PARAM`

###### Method: `AllocTAMParam(byte, byte[])`

Simple ISO 29167-10 TAM parameter allocation using only the key number and ket data.

**Parameters**

| Name | Description |
|---|---|
| `keyNum` | Key number to use. |
| `keyData` | AES key data. If null, the key is initialized to all zeros. |

**Returns:** Returns the TAM response structure.

**Remarks**

The `keyData` can be null. In such a case the key is not initialized.

**See also:** `TAM_PARAM`

###### Method: `ArrayToStruct``1(byte[])`

Array to data struture conversion.

**Parameters**

| Name | Description |
|---|---|
| `ptr` | Byte data to convert. |

**Returns:** Return the byte data converted to the given structure.

###### Method: `ArrayToStruct``1(byte[], int)`

Array to data struture conversion.

**Parameters**

| Name | Description |
|---|---|
| `ptr` | Byte data to convert. |
| `index` | Index from where to start in ptr. |

**Returns:** Return the byte data converted to the given structure.

###### Method: `Beep()`

Generate beep sound if beeper device available

###### Method: `Beep(int, int, int)`

Generate beep sound if beeper device available

**Parameters**

| Name | Description |
|---|---|
| `frequency` | Frqeguency of sound |
| `time` | Duration |
| `duty` | Duty |

###### Method: `BinToHexString(byte[], string)`

Converts byte array to Hex strings and appends delimiter string to end

**Parameters**

| Name | Description |
|---|---|
| `buf` | Buffer of binary data |
| `delim` | Delimiter string |

**Returns:** Hex string

###### Method: `BitBufferAddEBV32(byte[], uint, int)`

Bit buffer: add EBV (Extensible Bit Vector) to the buffer.

**Parameters**

| Name | Description |
|---|---|
| `buf` | Destination bit buffer. |
| `ebv` | 32-bit EBV value to add. |
| `curPt` | Current number of bits in the buffer. |

**Returns:** New bit address when successful.

**Exceptions**

- `NurApiException`: Thrown when the native API reports a parameter error (returns false).

###### Method: `BitBufferAddValue(byte[], uint, int, int)`

Bit buffer: add 32-bit value's bits to bit buffer.

**Parameters**

| Name | Description |
|---|---|
| `buf` | Destination bit buffer. |
| `Value32` | 32-bit value to add. |
| `numBits` | Number of bits to use from the value (1...32). |
| `curPt` | Current number of bits in the buffer. |

**Returns:** New bit address when successful.

**Exceptions**

- `NurApiException`: Thrown when the native API reports a parameter error (returns false).

###### Method: `BitLenToByteLen(int)`

Get required byte length for given number of bits.

**Parameters**

| Name | Description |
|---|---|
| `nrBits` | Number of bit in a buffer. |

**Returns:** Number of bytes required for the bit buffer

###### Method: `BlockPermalock(uint, bool, uint, uint, uint, ushort[])`

Do BlockPermalock without selecting any tag.
Assume one tag in field.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to apply the mask to (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to apply the mask to. |
| `lockMask` | Each word represents on 16-block chunks lock mask as specified by Gen2 specification 1.2.0. |

###### Method: `BlockPermalockByEPC(uint, bool, byte[], uint, uint, uint, ushort[])`

Do BlockPermalock by selecting the tag by its EPC.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `epc` | EPC of the tag. |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to apply the mask to (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to apply the mask to. |
| `lockMask` | Each word represents on 16-block chunks lock mask as specified by Gen2 specification 1.2.0. |

###### Method: `BlockPermalockSingulated(uint, bool, byte, uint, int, byte[], uint, uint, uint, ushort[])`

do BlockPermalock by selecting the tag with specific singulation data.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to apply the mask to (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to apply the mask to. |
| `lockMask` | Each word represents on 16-block chunks lock mask as specified by Gen2 specification 1.2.0. |

###### Method: `BlockWriteByEPC(uint, bool, byte[], byte, uint, byte[], byte)`

Write data to tag by EPC singulation using specific block write.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epcBuffer` | EPC used in sungulation. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `blSize` | Size of single block in words, not bytes. If 0 the whole data is considred to be a 'single block'. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `BlockWriteSingulatedTag(uint, bool, byte, uint, byte[], byte, uint, byte[], byte)`

Write data to tag with specific singulation using specific block write.
The Selection mask is assumed to be in byte length i.e. divisible by 8.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `blSize` | Size of single block in words, not bytes. If 0 the whole data is considred to be a 'single block'. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `BlockWriteSingulatedTag(uint, bool, byte, uint, int, byte[], byte, uint, byte[], int, byte)`

Write data to tag with specific singulation using specific block write.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. If **blSize** is not zero then also must be divisible by **blSize**. |
| `blSize` | Size of single block in words, not bytes. If 0 the whole data is considred to be a 'single block'. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `BlockWriteTag(uint, bool, byte, uint, byte[], byte)`

Write data to tag with no singulation using specific block write.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `blSize` | Size of single block in words, not bytes. If 0 the whole data is considred to be a 'single block'. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `BuildCustomHoptable(uint, uint, uint, uint, uint, uint, uint, bool)`

Build custom frequency hoptable

**Parameters**

| Name | Description |
|---|---|
| `baseFreq` | 1st channel's center frequency in kHz |
| `nChan` | Channel count (1...100) |
| `chSpace` | channel spacing in kHz |
| `chTime` | Channel time in ms (>=100) |
| `pauseTime` | Wait time between channel frequency change in ms (max=1000) |
| `lf` | Maximum link frequency (160/256/320k) |
| `Tari` | Tari setting 1 = 12.5, 2 = 25 |
| `shuffle` | API shuffles the frequencies if set to true |

###### Method: `CancelOperation()`

Cancel all pending/queued NurApi operations.

**Remarks**

NOTE: This does not cancel operations on RFID reader.

###### Method: `ClearIdBuffer()`

Clear the module's internal ID buffer.

**Remarks**

NOTE: This does not clear NurApi internal tag storage. Use ClearTagsEx() instead

###### Method: `ClearTags()`

Clear NurApi's internal tag storage memory from tags

**Remarks**

NOTE: This does not clear RFID reader tag memory. Use `NurApi.ClearTagsEx` instead.

###### Method: `ClearTagsEx()`

Clear NurApi's internal tag storage and RFID reader memory from tags.

###### Method: `ConfigureXTIDInventory(bool, bool)`

Setup TID content based inventory + read.
Configures inventory + read so that the data part is read based on the TID (XTID) contents.

**Parameters**

| Name | Description |
|---|---|
| `dataOnly` | Set to true to have the TID contents only; otherwise the TID contents is appended to the EPC field. |
| `includeAll` | If set to true then the reader shall add all of the TID contents into the replies. |

###### Method: `Connect()`

(Re)Connect to last connected device.

###### Method: `Connect(Uri)`

Connect to specified reader.  

NurApi supportes 'tcp://' and 'mdns://' types by default.  

- 'tcp' connect to reader by ip address; tcp://address[:port]  

- 'mdns' connect to reader by mdns name; mdns://device_name

Serial port and BLE transports are platform specific and require additional 
assemblies, such as NordicID.NurApi.Android, NordicID.NurApi.SerialTransport, NordicID.NurApi.SerialTransport.UWP

**Parameters**

| Name | Description |
|---|---|
| `uri` | Uri of reader. e.g. "tcp://1.2.3.4" |

###### Method: `Connect(string)`

Connect to specific reader.

**Parameters**

| Name | Description |
|---|---|
| `uriStr` | Uri string of the reader. e.g. "tcp://1.2.3.4" |

###### Method: `ConnectSerialPort(int)`

Connects to COM port using default baudrate (115200 bps)

**Parameters**

| Name | Description |
|---|---|
| `comNumber` | Com port number |

**Remarks**

ConnectSerialPort() is obsolete, use Connect(Uri) instead. Using this will disable automatic reconnect!

###### Method: `ConnectSerialPort(int, int)`

Connect reader to COM port

**Parameters**

| Name | Description |
|---|---|
| `comNumber` | Com port number |
| `baudrate` | Connection port baud rate |

**Remarks**

ConnectSerialPort() is obsolete, use Connect(Uri) instead. Using this will disable automatic reconnect!

###### Method: `ConnectSerialPort(string, int)`

Connect reader to serial port

**Parameters**

| Name | Description |
|---|---|
| `portName` | Serial port name i.e. "/dev/ttyACM0", "COM2" etc |
| `baudrate` | Connection port baud rate |

**Remarks**

ConnectSerialPort() is obsolete, use Connect(Uri) instead. Using this will disable automatic reconnect!

###### Method: `ConnectSocket(string, int)`

Connects to reader TCP/IP socket.

**Parameters**

| Name | Description |
|---|---|
| `host` | Address |
| `port` | TCP/IP port number. Default NUR port is 4333 |

**Remarks**

ConnectSocket() is obsolete, use Connect(Uri) instead. Using this will disable automatic reconnect!

###### Method: `ContCarrier(byte[], uint)`

Continuous carrier test setup.

**Parameters**

| Name | Description |
|---|---|
| `data` | Data to send- |
| `dataLen` | Length of the data to transmit. |

**Remarks**

For testing purposes only: Do not use.

###### Method: `CustomCmd(int, byte[])`

Executes NUR API protocol formatted command exchange with the connected reader.

**Parameters**

| Name | Description |
|---|---|
| `cmd` | Command that the module's comman handler processes. |
| `inbuffer` | Parameters for this command. |

**Returns:** Returns data "as is" from the reader.

**Remarks**

Contact Nordic ID support for the NUR API protocol documentation if needed.

###### Method: `CustomCmd(int, byte[], uint, ref Byte[], ref uint)`

Executes NUR API protocol formatted command exchange with the connected reader.

**Parameters**

| Name | Description |
|---|---|
| `cmd` | Command that the module's comman handler processes. |
| `inbuffer` | Parameters for this command. |
| `inbufferLen` | Length, in bytes, of the parameters. |
| `outbuffer` | Pointer to the response buffer. |
| `bytesRet` | Maximum output buffer length. |

**Returns:** Return the native API error code.

**Remarks**

Contact Nordic ID support for the NUR API protocol documentation if needed.

###### Method: `CustomExchange(uint, bool, NurApi.CustomExchangeParams)`

Exchange a custom bit stream without any singulation using the custom bit stream control structure.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `cxcParams` | Custom bit stream control structure.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomExchange(uint, bool, ushort, ushort, uint, bool, bool, bool, bool, bool, bool, bool, bool, bool, byte[])`

Exchange a custom bit stream without any singulation specifying all the parameters.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `txLen` | TX length in bits.`CustomExchangeParams` |
| `rxLen` | Expected number of bit in reception.`CustomExchangeParams` |
| `rxTimeout` | Receive timeout in ms (20...100).`CustomExchangeParams` |
| `asWrite` | Act as a write operation (receiver instruction).`CustomExchangeParams` |
| `appendHandle` | Append singulated tag's handle.`CustomExchangeParams` |
| `xorRN16` | XOR bit data with sungulated tag's RN16; TX length needs to be 16.`CustomExchangeParams` |
| `txOnly` | Transmit only.`CustomExchangeParams` |
| `noTxCRC` | No CRC in transmission.`CustomExchangeParams` |
| `noRxCRC` | No CRC inresponse; receive 'as is'.`CustomExchangeParams` |
| `txCRC5` | Transmission CRC is CRC-5.`CustomExchangeParams` |
| `rxLenUnk` | RX length is unknown; rxLen parameter will be ignored.`CustomExchangeParams` |
| `rxStripHandle` | Strip the appended handle from the reponse.`CustomExchangeParams` |
| `bitBuffer` | Bit buffer to send.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomExchangeByEPC(uint, bool, byte[], NurApi.CustomExchangeParams)`

Exchange a custom bit stream with an EPC singulated tag using the custom bit stream control structure.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC data for sungulation. |
| `cxcParams` | Custom bit stream control structure.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomExchangeByEPC(uint, bool, byte[], ushort, ushort, uint, bool, bool, bool, bool, bool, bool, bool, bool, bool, byte[])`

Exchange a custom bit stream with an EPC singulated tag specifying all the parameters.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC data for sungulation. |
| `txLen` | TX length in bits.`CustomExchangeParams` |
| `rxLen` | Expected number of bit in reception.`CustomExchangeParams` |
| `rxTimeout` | Receive timeout in ms (20...100).`CustomExchangeParams` |
| `asWrite` | Act as a write operation (receiver instruction).`CustomExchangeParams` |
| `appendHandle` | Append singulated tag's handle.`CustomExchangeParams` |
| `xorRN16` | XOR bit data with sungulated tag's RN16; TX length needs to be 16.`CustomExchangeParams` |
| `txOnly` | Transmit only.`CustomExchangeParams` |
| `noTxCRC` | No CRC in transmission.`CustomExchangeParams` |
| `noRxCRC` | No CRC inresponse; receive 'as is'.`CustomExchangeParams` |
| `txCRC5` | Transmission CRC is CRC-5.`CustomExchangeParams` |
| `rxLenUnk` | RX length is unknown; rxLen parameter will be ignored.`CustomExchangeParams` |
| `rxStripHandle` | Strip the appended handle from the reponse.`CustomExchangeParams` |
| `bitBuffer` | Bit buffer to send.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomExchangeSingulated(uint, bool, byte, uint, int, byte[], NurApi.CustomExchangeParams)`

Exchange a custom bit stream with a singulated tag using the custom bit stream control structure.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `cxcParams` | Custom bit stream control structure.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomExchangeSingulated(uint, bool, byte, uint, int, byte[], ushort, ushort, uint, bool, bool, bool, bool, bool, bool, bool, bool, bool, byte[])`

Exchange a custom bit stream with a singulated tag specifying all the parameters.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `txLen` | TX length in bits.`CustomExchangeParams` |
| `rxLen` | Expected number of bit in reception.`CustomExchangeParams` |
| `rxTimeout` | Receive timeout in ms (20...100).`CustomExchangeParams` |
| `asWrite` | Act as a write operation (receiver instruction).`CustomExchangeParams` |
| `appendHandle` | Append singulated tag's handle.`CustomExchangeParams` |
| `xorRN16` | XOR bit data with sungulated tag's RN16; TX length needs to be 16.`CustomExchangeParams` |
| `txOnly` | Transmit only.`CustomExchangeParams` |
| `noTxCRC` | No CRC in transmission.`CustomExchangeParams` |
| `noRxCRC` | No CRC inresponse; receive 'as is'.`CustomExchangeParams` |
| `txCRC5` | Transmission CRC is CRC-5.`CustomExchangeParams` |
| `rxLenUnk` | RX length is unknown; rxLen parameter will be ignored.`CustomExchangeParams` |
| `rxStripHandle` | Strip the appended handle from the reponse.`CustomExchangeParams` |
| `bitBuffer` | Bit buffer to send.`CustomExchangeParams` |

**Returns:** Custom exchange reponse structure along with error and tag response.`CustomExchangeResponse`

###### Method: `CustomReadSingulatedTag(uint, byte, uint, byte, uint, bool, byte, uint, byte[], uint, byte)`

Read data from tag with specific singulation, customized read command and bank parameter. 
Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `rdCmd` | Custom read command. |
| `cmdBits` | Number of bits in the custom read command (1...32). |
| `rdBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank parameter. Can be 0. |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.CustomReadTag`, `NurApi.CustomReadTagByEPC`

###### Method: `CustomReadSingulatedTag(uint, byte, uint, byte, uint, bool, byte, uint, int, byte[], uint, int)`

Read data from tag with specific singulation. Tag can be singluted against desired memory bank and mask.
This command uses custom read command and bank parameters.

**Parameters**

| Name | Description |
|---|---|
| `rdCmd` | Custom read command. |
| `cmdBits` | Number of bits in the custom read command (1...32). |
| `rdBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank parameter. Can be 0. |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.CustomReadTag`, `NurApi.CustomReadTagByEPC`

###### Method: `CustomReadTag(uint, byte, uint, byte, uint, bool, uint, int)`

Read data from tag without any singulation data using customized read command and bank parameters.
This function can be used for tags that do not have an EPC.

**Parameters**

| Name | Description |
|---|---|
| `rdCmd` | Custom read command. |
| `cmdBits` | Number of bits in the custom read command (1...32). |
| `rdBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank parameter. Can be 0. |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `address` | Word address for read operation. |
| `byteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** buffer for receiving data

**See also:** `NurApi.CustomReadSingulatedTag`, `NurApi.CustomReadTagByEPC`

###### Method: `CustomReadTagByEPC(uint, byte, uint, byte, uint, bool, byte[], uint, int)`

Read data from tag singulated by tag's EPC memory using custom read command and custom bank parameter.

**Parameters**

| Name | Description |
|---|---|
| `rdCmd` | Custom read command. |
| `cmdBits` | Number of bits in the custom read command (1...32). |
| `rdBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank parameter. Can be 0. |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.CustomReadTag`, `NurApi.CustomReadSingulatedTag`

###### Method: `CustomWriteSingulatedTag(uint, byte, uint, byte, uint, bool, byte, uint, byte[], uint, byte[])`

Write data to tag with specific singulation using customizable write command and bank parameter.
Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |

**See also:** `NurApi.CustomWriteTag`, `NurApi.CustomWriteTagByEPC`

###### Method: `CustomWriteSingulatedTag(uint, byte, uint, byte, uint, bool, byte, uint, int, byte[], uint, byte[])`

Write data to tag with specific singulation using customizable write command and bank parameter.
Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |

**See also:** `NurApi.CustomWriteTag`, `NurApi.CustomWriteTagByEPC`

###### Method: `CustomWriteSingulatedTag(uint, byte, uint, byte, uint, bool, byte, uint, int, byte[], uint, byte[], int, int)`

Write data to tag with specific singulation using customizable write command and bank parameter.
Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.CustomWriteTag`, `NurApi.CustomWriteTagByEPC`

###### Method: `CustomWriteTag(uint, byte, uint, byte, uint, bool, uint, byte[])`

Write data to tag without any singulation data using customizable write command and bank parameter.
This function can be used for tags that do not have an EPC.

Note:If there's more than one tag in range, this function will most likely fail due to the RF collision.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |

**See also:** `NurApi.WriteSingulatedTag`, `NurApi.WriteTagByEPC`

###### Method: `CustomWriteTag(uint, byte, uint, byte, uint, bool, uint, byte[], int, int)`

Write data to tag without any singulation data using customizable write command and bank parameter.
This function can be used for tags that do not have an EPC.

Note:If there's more than one tag in range, this function will most likely fail due to the RF collision.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.CustomWriteSingulatedTag`, `NurApi.CustomWriteTagByEPC`

###### Method: `CustomWriteTagByEPC(uint, byte, uint, byte, uint, bool, byte[], uint, byte[])`

Write data to tag singulated by tag's EPC memory using customizable write command and bank parameter.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |

**See also:** `NurApi.CustomWriteSingulatedTag`, `NurApi.CustomWriteTag`

###### Method: `CustomWriteTagByEPC(uint, byte, uint, byte, uint, bool, byte[], uint, byte[], int, int)`

Write data to tag singulated by tag's EPC memory using customizable write command and bank parameter.

**Parameters**

| Name | Description |
|---|---|
| `wrCmd` | Custom write command. |
| `cmdBits` | Number of bits in the custom write command (1..32). |
| `wrBank` | Custom bank parameter. |
| `bankBits` | Number of bits in the custom bank value (0..32). |
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.CustomWriteSingulatedTag`, `NurApi.CustomWriteTag`

###### Method: `DiagGetConfig(ref uint, ref uint)`

Get current diagnostics configuration.

**Parameters**

| Name | Description |
|---|---|
| `flags` | Current bit flags. One or more of DIAG_CFG flags. |
| `interval` | Current report interval in seconds. |

**Returns:** None

**See also:** `NurApi.DIAG_CFG_NOTIFY_NONE`, `NurApi.DIAG_CFG_NOTIFY_PERIODIC`, `NurApi.DIAG_CFG_NOTIFY_WARN`, `NurApi.DIAG_CFG_FW_ERROR_LOG`, `NurApi.DIAG_CFG_FW_DEBUG_LOG`

###### Method: `DiagGetReport(uint)`

Get diagnostics report from module.

**Parameters**

| Name | Description |
|---|---|
| `flags` | Bit flags to send with request. e.g. DIAG_GETREPORT_RESET_STATS |

**Returns:** Returns DiagReport object holding diagnostics report.

**See also:** `NurApi.DIAG_GETREPORT_RESET_STATS`

###### Method: `DiagSetConfig(uint, uint)`

Set new diagnostics configuration.

**Parameters**

| Name | Description |
|---|---|
| `flags` | Bit flags to send with request. One or more of DIAG_CFG flags. |
| `interval` | Report interval in seconds. Only valid if DIAG_CFG_NOTIFY_PERIODIC is set in flags. Set to 0 if DIAG_CFG_NOTIFY_PERIODIC is not set. |

**Returns:** None

**See also:** `NurApi.DIAG_CFG_NOTIFY_NONE`, `NurApi.DIAG_CFG_NOTIFY_PERIODIC`, `NurApi.DIAG_CFG_NOTIFY_WARN`, `NurApi.DIAG_CFG_FW_ERROR_LOG`, `NurApi.DIAG_CFG_FW_DEBUG_LOG`

###### Method: `DisablePhysicalAntenna(string)`

This function disables the physical antennas that are specified as comma separated string parameter.

**Parameters**

| Name | Description |
|---|---|
| `commaSeparated` | Comma separatede list of physical antenna names to disable. If antenna is specified without polarity, all polarities will be set. To disable all antennas, use parameter "ALL" |

**Value:** The value is list of comma separated strings such as "Beam1.X, Beam2, Beam3.Y".

**Example**

Example usage.

```csharp
// Disable Beam1 both polarities and Beam 5 polarity X
hApi.DisablePhysicalAntenna("Beam1,Beam5.X");
```

**See also:** `NurApi.SelectedAntenna`, `NurApi.EnabledPhysicalAntennas`, `NurApi.AvailablePhysicalAntennas`

###### Method: `Disconnect()`

Disconnect current transport from device

###### Method: `DisconnectAsync()`

Disconnect device async

###### Method: `Dispose()`

Dispose and free all allocated resources.

###### Method: `DLog(string)`

Writes to data log.

**Parameters**

| Name | Description |
|---|---|
| `txt` | A specific text to put in data log. |

**Remarks**

Use `NurApi.DLog` instead

###### Method: `DLog(Func{System.String})`

Writes to data log.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Func delegate that returns text line to log. Delegate is only called if log level is enabled |

###### Method: `ELog(string)`

Writes text to log using LOG_ERROR level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Text line to log |

**Remarks**

Use `NurApi.ELog` instead

###### Method: `ELog(Func{System.String})`

Writes text to log using LOG_ERROR level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Func delegate that returns text line to log. Delegate is only called if log level is enabled |

###### Method: `EnablePhysicalAntenna(string, bool)`

This function enables the physical antennas that are specified as comma separated string parameter.

To enable all antennas, use parameter "ALL".

**Parameters**

| Name | Description |
|---|---|
| `commaSeparated` | Comma separated list of physical antenna names to enable. If antenna is specified without polarity, all polarities will be set. To enable all antennas, use parameter "ALL" |
| `disableOthers` | If set to true, antennas that are not specified in comma separated string will be disabled. If set to false, antennas that are already enabled will remain enabled. |

**Example**

Example usage.

```csharp
// Enable only Beam1 both polarities and Beam 5 polarity X
hApi.EnablePhysicalAntenna("Beam1,Beam5.X", true);
```

**See also:** `NurApi.SelectedAntenna`, `NurApi.EnabledPhysicalAntennas`, `NurApi.AvailablePhysicalAntennas`

###### Method: `EnterBoot()`

Starts bootloader or Application

###### Method: `EraseSingulatedTag(uint, bool, byte, uint, int, byte[], byte, uint, byte)`

Erase block in a tag specifically singulated.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | true if operation is secured, otherwise false. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `erBank` | Bank where the erAddress is located in. 0=`NurApi.BANK_PASSWD` 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `erAddress` | Word address of the first word to be erased. |
| `erWordCount` | Number of word to erase starting from erAddress. |

###### Method: `EraseTagByEPC(uint, bool, byte[], byte, uint, byte)`

Erase block in a tag singulated by EPC.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | true if operation is secured, otherwise false. |
| `epc` | EPC memory to singulate against. |
| `erBank` | Bank where the erAddress is located in. 0=`NurApi.BANK_PASSWD` 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `erAddress` | Word address of the first word to be erased. |
| `erWordCount` | Number of word to erase starting from erAddress. |

###### Method: `ExecuteCommand(Commands.NurCmd, Threading.CancellationTokenSource)`

Excute NUR command

**Parameters**

| Name | Description |
|---|---|
| `cmd` | NurCmd |
| `ct` | cancellation token source |

**Returns:** result of execution as NurCmd

###### Method: `ExecuteCommandAsync(Commands.NurCmd, Threading.CancellationTokenSource)`

Excute NUR command asyncronously

**Parameters**

| Name | Description |
|---|---|
| `cmd` | NurCmd |
| `ct` | cancellation token source |

**Returns:** result of execution as NurCmd

###### Method: `FactoryReset(uint)`

Force RFID module to factory reset

**Parameters**

| Name | Description |
|---|---|
| `resetcode` | Code used by the module to perform the factory reset. |

**Remarks**

The factory reset code is 0x994F6B32.

NOTE: consider carefully whether this operation really is necessary or not.

###### Method: `FetchTagAt(bool, int)`

Fetch a single tag based on "index" in reader tag memory.

**Parameters**

| Name | Description |
|---|---|
| `includeMeta` | Set to true if the metadata should be included. |
| `tagNum` | Index of the tag |

**Returns:** New tag object.

###### Method: `FetchTags()`

Fetch tags from reader memory. Meta data of tag is included.

**Returns:** Tag storage as `TagStorage`

**Remarks**

If any stream is active, accesing tag storage, it must locked with lock()

###### Method: `FetchTags(bool)`

Fetch tags from reader memory

**Parameters**

| Name | Description |
|---|---|
| `includeMeta` | if true, meta data of tag included |

**Returns:** Tag storage as `TagStorage`

**Remarks**

If any stream is active, accesing tag storage, it must locked with lock()

###### Method: `FetchTags(bool, ref int)`

Fetch tags from reader memory

**Parameters**

| Name | Description |
|---|---|
| `includeMeta` | if true, meta data of tag included |
| `tagsAdded` | Number of tags added in NurApi's internal tag storage |

**Returns:** Tag storage as `TagStorage`

**Remarks**

If any stream is active, accesing tag storage, it must locked with lock()

###### Method: `Finalize()`

Destructor

###### Method: `Gen2v2Authenticate(NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with no tag singulation in open state.

**Parameters**

| Name | Description |
|---|---|
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the open state; this is the recommended way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2Authenticate(uint, NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with no tag singulation in secured state.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | The access password to use. |
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the secured state; it is not recommended to do it this way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2AuthenticateByEPC(byte[], NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with EPC singulation singulation in open state.

**Parameters**

| Name | Description |
|---|---|
| `epc` | The EPC contents to singulate against. |
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the open state; this is the recommended way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2AuthenticateByEPC(uint, byte[], NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with EPC singulation singulation in secured state.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | The access password to use. |
| `epc` | The EPC contents to singulate against. |
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the secured state; it is not recommended to do it this way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2AuthenticateSingulated(byte, uint, int, byte[], NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with specific singulation parameters in open state.

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the open state; this is the recommended way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2AuthenticateSingulated(uint, byte, uint, int, byte[], NurApi.AuthenticateParam)`

Gen2 version 2 Authenticate command with specific singulation parameters in secured state.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | The access password to use. |
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `authParam` | The authentication parameters, `AuthenticateParam`. |

**Returns:** Returns the authentication response structure if the was no native API error.

**Remarks**

This method does the authentication in the secured state; it is not recommended to do it this way.

**See also:** `AuthenticateParam`, `AuthenticateResp`

###### Method: `Gen2v2ReadBuffer(bool, uint, ushort, ushort)`

Gen2 version 2 ReadBuffer command without tag selection.

This is similar to the regular read command but the read data source is the version 2 tag's internal buffer.

**Parameters**

| Name | Description |
|---|---|
| `secured` | Set to true if the tag is accessed with password prior to the read command. |
| `passwd` | Password to use in case the tag's access is secured. |
| `bitAddress` | The bit  address to start the reading from. |
| `bitCount` | Number of bits to read from the buffer. |

**Returns:** Returns the structure containing the data and the actual bit length of the data.

**Remarks**

This method does not use tag singulation i.e. it is expected that only one tag is in the field.

Also note that the application is responsible for the bit data handling.

The bit level understanding is especially required in case where the returned data is not exactly byte (8-bit) aligned.

**See also:** `V2ReadBufferResp`

###### Method: `Gen2v2ReadBufferByEPC(bool, uint, byte[], ushort, ushort)`

Gen2 version 2 ReadBuffer command with the tag being selected by its EPC contents.

This is similar to the regular read command but the read data source is the version 2 tag's internal buffer.

**Parameters**

| Name | Description |
|---|---|
| `secured` | Set to true if the tag is accessed with password prior to the read command. |
| `passwd` | Password to use in case the tag's access is secured. |
| `epc` | The tag's EPC contents. |
| `bitAddress` | The bit  address to start the reading from. |
| `bitCount` | Number of bits to read from the buffer. |

**Returns:** Returns the structure containing the data and the actual bit length of the data.

**Remarks**

This method uses tag singulation based on the addressed tag's EPC contents i.e. the EPC contents is expected to be unique among the tags in field.

Also note that the application is responsible for the bit data handling.

The bit level understanding is especially required in case where the returned data is not exactly byte (8-bit) aligned.

**See also:** `V2ReadBufferResp`

###### Method: `Gen2v2ReadBufferSingulated(bool, uint, byte, uint, uint, byte[], ushort, ushort)`

Gen2 version 2 ReadBuffer command with specific tag selection.

This is similar to the regular read command but the read data source is the version 2 tag's internal buffer.

**Parameters**

| Name | Description |
|---|---|
| `secured` | Set to true if the tag is accessed with password prior to the read command. |
| `passwd` | Password to use in case the tag's access is secured. |
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `bitAddress` | The bit  address to start the reading from. |
| `bitCount` | Number of bits to read from the buffer. |

**Returns:** Returns the structure containing the data and the actual bit length of the data.

**Remarks**

This method uses specific tag singulation so that the addressed tag is expected to be uniquely identified by the given selection data.

Also note that the application is responsible for the bit data handling.

The bit level understanding is especially required in case where the returned data is not exactly byte (8-bit) aligned.

**See also:** `V2ReadBufferResp`

###### Method: `Gen2v2Untraceable(uint, UntraceableParam)`

Gen2 version 2 "Untraceable" command with no tag singulation.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | Access password must always be valid for Untraceable command. |
| `utrParam` | The Untracable command's parameters. |

**See also:** `UntraceableParam`

###### Method: `Gen2v2UntraceableByEPC(uint, byte[], UntraceableParam)`

Gen2 version 2 "Untraceable" command with EPC selection.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | Access password must always be valid for Untraceable command. |
| `epc` | The EPC contents to singulate against. |
| `utrParam` | The Untracable command's parameters. |

**See also:** `UntraceableParam`

###### Method: `Gen2v2UntraceableSingulated(uint, byte, uint, int, byte[], UntraceableParam)`

Gen2 version 2 "Untraceable" command with specific singulation parameters.

**Parameters**

| Name | Description |
|---|---|
| `accessPwd` | Access password must always be valid for Untraceable command. |
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `utrParam` | The Untracable command's parameters. |

**See also:** `UntraceableParam`

###### Method: `GetAccessPassword(uint, bool, byte, uint, int, byte[])`

Read access password from tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**Returns:** Access password

**See also:** `NurApi.GetKillPassword`, `NurApi.GetKillPasswordByEPC`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPasswordByEPC`, `NurApi.SetKillPassword`

###### Method: `GetAccessPasswordByEPC(uint, bool, byte[])`

Read access password from specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |

**Returns:** Access password

**See also:** `NurApi.GetKillPassword`, `NurApi.GetKillPasswordByEPC`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPassword`, `NurApi.SetKillPassword`

###### Method: `GetAntennaIdTranslation()`

Returns the module's internal translation between physical antenna and logical antenna ID.

**Returns:** Each byte in the returned array is a translation value that the module uses.

###### Method: `GetAntennaList()`

List of available antennas

**Returns:** List of antennas available

###### Method: `GetBitCount(uint)`

Get count of bits set

**Parameters**

| Name | Description |
|---|---|
| `n` | target value |

**Returns:** count of bits set

###### Method: `GetCacheStats()`

Internal cache stats.

###### Method: `GetCustomHoptable()`

Get custom hoptable

**Returns:** Custom hoptable as `CustomHoptable`

###### Method: `GetCustomHoptableEx()`

Get extended custom hoptable

**Returns:** Extended custom hoptable as `CustomHoptableEx`

###### Method: `GetDeviceCaps()`

Retrieves the device capabilities from the connected module.

**Returns:** Returns the `DeviceCapabilites`

###### Method: `GetEpcXpcSpec(int, byte[])`

Get the modified EPC based on the given PC contents.

**Parameters**

| Name | Description |
|---|---|
| `pc` | PC bits received from the tag. |
| `epc` | The tag's EPC. |

**Returns:** Return null, if there no modification needed. Otherwise a valid XPCSpec class is returned.

###### Method: `GetErrorMessage(int)`

Get Nur error code as string

**Parameters**

| Name | Description |
|---|---|
| `error` | error code |

**Returns:** Error as a string interpreted from the `error` code.

###### Method: `GetEthConfig()`

Get Ethernet configuration settings from conneted device.

**Returns:** Ethernet Sampo Configuration information `EthConfig`

###### Method: `GetFileVersion()`

The NurApi assembly version. Provided for compatibility, use NurApi.FileVersion instead

**Returns:** Returns the NurApi assembly version string.

###### Method: `GetFWINFO()`

Get FW building information string.

**Returns:** Returns the FW information as a string.

###### Method: `GetGen2XConfig()`

Get Gen2XConfig

**Returns:** Gen2XConfig if successful.

**See also:** `Gen2XConfig`

###### Method: `GetGPIOConfig()`

Get NUR module GPIO configuration.

**Returns:** An array containing the GPIO configuration `GpioEntry`.

###### Method: `GetGPIOStatus(int)`

Get single GPIO pin state.

**Parameters**

| Name | Description |
|---|---|
| `gpio` | Zero based GPIO number. |

**Returns:** Returns the GPIO status as seen in `GpioStatus`.

###### Method: `GetInventoryRead()`

Get Inventory read information.

**Returns:** IrInformation if successful.

**See also:** `IrInformation`

###### Method: `GetKillPassword(uint, bool, byte, uint, int, byte[])`

Read kill password from tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**Returns:** Kill password

**See also:** `NurApi.GetKillPasswordByEPC`, `NurApi.SetKillPassword`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPassword`, `NurApi.GetAccessPasswordByEPC`, `NurApi.SetAccessPassword`, `NurApi.SetAccessPasswordByEPC`

###### Method: `GetKillPasswordByEPC(uint, bool, byte[])`

Read kill password from specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |

**Returns:** Kill password

**See also:** `NurApi.GetKillPassword`, `NurApi.SetKillPassword`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPassword`, `NurApi.GetAccessPasswordByEPC`, `NurApi.SetAccessPassword`, `NurApi.SetAccessPasswordByEPC`

###### Method: `GetLogFilePath()`

Get current log file path

**Returns:** Current log file path as a string

###### Method: `GetLogLevel()`

Get Logging level

**Returns:** Mask bits of logging level: 1=NurApi.LOG_VERBOSE 2=NurApi.LOG_ERROR 4=NurApi.LOG_USER 8=NurApi.LOG_DATA

###### Method: `GetLogToFile()`

Get log to file enabled state.

**Returns:** True if enabled

###### Method: `GetMode()`

Get running mode

**Returns:** Running mode: "A"=Application "B"=Bootloader

###### Method: `GetModuleSetup()`

Get current module setup

**Returns:** current module setup

###### Method: `GetModuleSetup(int)`

Get current module setup

**Returns:** current module setup

###### Method: `GetPhysicalAntennaMask(string)`

This function generates an antennaMask value from the passed physical antenna names. If parameter is invalid, an exception will be thrown

**Parameters**

| Name | Description |
|---|---|
| `commaSeparated` | Comma separated list of physical antenna names to use for creating the mask. If antenna is specified without polarity, all polarities will be added to the mask. To create a mask for all antenna, use parameter "ALL" |

**Returns:** The generated antenna mask

###### Method: `GetReaderInfo()`

Get reader info

###### Method: `GetReflectedPower()`

Get antenna reflected power info

**Returns:** information about reflected power as `ReflectedPowerInfo`

###### Method: `GetReflectedPower(uint)`

Get antenna reflected power info for specific frequency

**Parameters**

| Name | Description |
|---|---|
| `freq` | Frequency in kHz |

**Returns:** information about reflected power as `ReflectedPowerInfo`

###### Method: `GetReflectedPowerValue()`

Get the reflected power as a floating point value from current region middle channel's frequency.

**Returns:** reflected power directly as a floating point value

###### Method: `GetReflectedPowerValue(uint)`

Returns the reflected power value for given frequency.
A return value of -100 indicates that no reflected power was detected. This may indicate broken or bad antenna connection.

**Parameters**

| Name | Description |
|---|---|
| `freq` | Frequency to use for the measurement in kHz. Use 0 to measure current region middle frequency. |

**Returns:** Reflected power in dBm.

###### Method: `GetRegionInfo(int)`

Get region info

**Parameters**

| Name | Description |
|---|---|
| `regionId` | The region identifier. -1 return current region |

**Returns:** Region information as `RegionInfo`

**Remarks**

See region identifiers:

`NurApi.REGIONID_EU`

`NurApi.REGIONID_FCC`

`NurApi.REGIONID_PRC`

`NurApi.REGIONID_MALAYSIA`

`NurApi.REGIONID_BRAZIL`

`NurApi.REGIONID_AUSTRALIA`

`NurApi.REGIONID_NEWZEALAND`

`NurApi.REGIONID_JA250MW`

`NurApi.REGIONID_JA500MW`

`NurApi.REGIONID_KOREA`

`NurApi.REGIONID_KOREA_LBT`

`NurApi.REGIONID_INDIA`

`NurApi.REGIONID_RUSSIA`

`NurApi.REGIONID_VIETNAM`

`NurApi.REGIONID_SINGAPORE`

`NurApi.REGIONID_THAILAND`

`NurApi.REGIONID_PHILIPPINES`

`NurApi.REGIONID_MOROCCO`

`NurApi.REGIONID_PERU`

###### Method: `GetSecChipFWINFO()`

Get secondary chip FW building information string.

**Returns:** Returns the sec chip FW information as a string.

###### Method: `GetSensorConfig()`

Get sensor configuration

**Returns:** Configuration data as `SensorConfig`

###### Method: `GetSystemInfo()`

Get system information.

**Returns:** Return system information as specified in `SystemInfo`

###### Method: `GetTagStorage()`

Get NurApi's internal tag storage.

**Returns:** Tag storage as `TagStorage`

**Remarks**

If any stream is active, accesing tag storage, it must locked with lock()

###### Method: `GetTimeStamp()`

Get milliseconds after NurApi initialized

**Returns:** milliseconds after NurApi initialized

###### Method: `GetTransportStats()`

Internal transport stats.

###### Method: `GetUseBlockWrite()`

Get current block write usage flag.

**Returns:** true: all NurApi tag write functions will G2 BlockWrite method to write data. false: Single word writes are used

###### Method: `GetVersions()`

Returns the current mode, primary and secondary version information.

**Returns:** Return the application and bootloader version as specified in `ModuleVersions`.

**Remarks**

If the module is currently running application then the primary version is the application's one and secondary bootloader's.
If the module is currently running bootloader then the primary version is the bootloader's one and secondary application's.

###### Method: `HexStringToBin(string)`

Converts hex string to byte array.

**Parameters**

| Name | Description |
|---|---|
| `value` | String to be converted |

**Returns:** array of binary values

###### Method: `HexStringToBin(string, string)`

Converts hex string to byte array

**Parameters**

| Name | Description |
|---|---|
| `value` | String to be converted |
| `delim` | Hex string byte delimeter, can be empty |

**Returns:** array of binary values

###### Method: `Inventory()`

Perform single tag inventory.  

This function uses rounds, Q and session values from current module settings.

How it works:

The inventory operation returns information about the last inventory; it does not return tags.
The inventory response `InventoryResponse` contains namely the number of tags that were found during last inventory and the number of tags that are stored into the module's memory.
After exeuting an inventory the tags need to be first retrieved from the module by calling `NurApi.FetchTags` or `NurApi.FetchTags` and after that 
the tags are available in the NurApi's tag storage, `TagStorage` that can be retrieved by the get tags storage command, see `NurApi.GetTagStorage`.
If the inventory needs to be "clean" the method for clearing the module's is `NurApi.ClearTagsEx`. Calling this method also clears the NurApi's tag storage and module tag storage.

**Returns:** Inventory result data as `InventoryResponse`

**See also:** `NurApi.InventorySelect`, `NurApi.InventorySelectByEPC`, `NurApi.FetchTags`, `NurApi.FetchTags`, `NurApi.GetTagStorage`, `TagStorage`, `Tag`

###### Method: `Inventory(int, int, int)`

Perform single inventory using specified rounds, Q  and session.

What inventory actually returns, see `NurApi.Inventory`'s summary.

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |

**Returns:** Inventory result data as `InventoryResponse`

**See also:** `NurApi.Inventory`, `NurApi.InventorySelect`, `NurApi.InventorySelectByEPC`, `InventoryResponse`, `NurApi.FetchTags`, `NurApi.FetchTags`, `NurApi.GetTagStorage`, `TagStorage`, `Tag`

###### Method: `InventoryEx()`

Re-run the extended inventory assuming that the module has stored the parameters earlier.

**Returns:** Inventory result data as `InventoryResponse`

**Remarks**

The call will fail, if a prior call to extended inventory stream or single extended inventory has not been successful.
This means that the extended inventory can be re-run after the InventoryEx has been called once so that the extended parameters have been correct.
Effectively this results in less traffic between the host and the reader.

###### Method: `InventoryEx(NurApi.InventoryExParams, NurApi.InventoryExFilter[])`

Extended inventory command with multiple select filters.

**Parameters**

| Name | Description |
|---|---|
| `param` | Reference to inventory parameters. |
| `filters` | Array of select filters or null. |

**Returns:** Inventory result data as `InventoryResponse`

###### Method: `InventoryEx(ref NurApi.InventoryExParams, NurApi.InventoryExFilter[])`

Extended inventory command with multiple select filters.

**Parameters**

| Name | Description |
|---|---|
| `param` | Reference to inventory parameters. |
| `filters` | Array of select filters or null. |

**Returns:** Inventory result data as `InventoryResponse`

###### Method: `InventoryRead(bool, uint, uint, uint, uint)`

Setup inventory + read data.
Call to this method only configures the inventory + read; it does not start it itself.
This means that the inventory + read is done use during the next call to e.g. `NurApi.Inventory` or `NurApi.Inventory`.

**Parameters**

| Name | Description |
|---|---|
| `on` | true if the inventory + read configuration is taken into use.             The configuration takes place immediately (if inventory running) or next time an inventory is started. |
| `type` | Either `NurApi.NUR_IR_EPCDATA` (EPC + data) or `NurApi.NUR_IR_DATAONLY` (data is returned instead of EPC). |
| `bank` | Bank to read from. |
| `addr` | First word to read. |
| `nWords` | Number of words to read. Range is 1...31 (2...64 bytes). |

###### Method: `InventorySelect(int, int, int, bool, byte, uint, int, byte[])`

Perform single inventory command with specific tag singulation. 

Tags can be singluted against desired memory bank and data mask.

What inventory actually returns, see `NurApi.Inventory`'s summary.

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |
| `invertSelect` | Invert select. Select tags that do not match the selection criteria. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**Returns:** Inventory result data as `InventoryResponse`

**See also:** `NurApi.Inventory`, `NurApi.Inventory`, `NurApi.InventorySelectByEPC`

###### Method: `InventorySelectByEPC(int, int, int, bool, byte[])`

Perform single inventory command with tag singulated against EPC. 

What inventory actually returns, see `NurApi.Inventory`'s summary.

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |
| `invertSelect` | Invert select. Select tags that do not match the selection criteria. |
| `epcBuffer` | EPC memory to singulate against. |

**Returns:** Inventory data as `InventoryResponse`

**See also:** `NurApi.Inventory`, `NurApi.Inventory`, `NurApi.InventorySelect`

###### Method: `IsConnected()`

This function will return only connection state of the transport layer.
In order to know that module is responding, you'll need to communicate with module by calling e.g. `NurApi.Ping`.

**Returns:** true if connected, otherwise false.

###### Method: `IsInventoryExRunning()`

Return true if streaming extended inventory routine is running.

**Returns:** true if streaming extended inventory routine is running. false otherwise.

###### Method: `IsInventoryStreamRunning()`

Check if inventory stream routine is running.

**Returns:** true if inventory stream routine is running.

###### Method: `IsNXPAlarmStreamRunning()`

Return true if EAS Alarm stream routine is running on module.

**Returns:** `true` if EAS Alarm stream routine is running on module; otherwise, `false`.

**See also:** `NurApi.NXPStartAlarmStream`, `NurApi.NXPStopAlarmStream`

###### Method: `ISO29167_10_TAM1(byte, byte[])`

The ISO 29167-10 TAM 1 with no tag singulation.

**Parameters**

| Name | Description |
|---|---|
| `keyNum` | Key number to use. |
| `key` | Key data for response decryption. Must be 16 bytes long. |

**Returns:** Returns true if there was a response that was correctly parsed and decrypted.

**Remarks**

The authentication is checked by the C_TAM1 value and internally comparing the decryption result against the internally generated challenge.

###### Method: `ISO29167_10_TAM1ByEPC(byte[], byte, byte[])`

The ISO 29167-10 TAM 1 using tag's EPC for singulation.

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC contents. |
| `keyNum` | Key number to use. |
| `key` | Key data for response decryption. Must be 16 bytes long. |

**Returns:** Returns true if there was a response that was correctly parsed and decrypted.

**Remarks**

The authentication is checked by the C_TAM1 value and internally comparing the decryption result against the internally generated challenge.

###### Method: `ISO29167_10_TAM1Singulated(byte, uint, int, byte[], byte, byte[])`

The ISO 29167-10 TAM 1 using specific tag singulation.

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `keyNum` | Key number to use. |
| `key` | Key data for response decryption. Must be 16 bytes long. |

**Returns:** Returns true if there was a response that was correctly parsed and decrypted.

**Remarks**

The authentication is checked by the C_TAM1 value and internally comparing the decryption result against the internally generated challenge.

###### Method: `ISO29167_10_TAM2(NurApi.TAM_PARAM)`

The ISO 29167-10 TAM 2 with no tag singulation.

**Parameters**

| Name | Description |
|---|---|
| `tamParam` | The TAM 2 parameter structure. |

**Returns:** Returns the TAM 2 response structure if there was no API error when executing.

**See also:** `TAM_PARAM`, `TAM_RESP`

###### Method: `ISO29167_10_TAM2ByEPC(byte[], NurApi.TAM_PARAM)`

The ISO 29167-10 TAM 2 using tag's EPC for singulation.

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC contents. |
| `tamParam` | The TAM 2 parameter structure. |

**Returns:** Returns the TAM 2 response structure if there was no API error when executing.

**See also:** `TAM_PARAM`, `TAM_RESP`

###### Method: `ISO29167_10_TAM2Singulated(byte, uint, int, byte[], NurApi.TAM_PARAM)`

The ISO 29167-10 TAM 2 using specific tag singulation.

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Bank where the selection mask is applied to. |
| `sAddress` | Selection mask's bit address. |
| `sMaskBitLength` | Selection mask's length in bits. |
| `sMask` | Selection mask data. |
| `tamParam` | The TAM 2 parameter structure. |

**Returns:** Returns the TAM 2 response structure if there was no API error when executing.

**See also:** `TAM_PARAM`, `TAM_RESP`

###### Method: `IsPhysicalAntennaEnabled(string)`

This function returns true if all physical antennas specified in comma separated string are enabled, otherwise false is returned.

**Parameters**

| Name | Description |
|---|---|
| `commaSeparated` | Comma separatede list of physical antenna names to test. If antenna is specified without polarity, all polarities will be tested. To test all antennas, use parameter "ALL" |

**Returns:** Returns true if all specified physical antenna(s) are enabled.  Throws InvalidParameter exception if reader does not contain supplied physical antenna.  Throws NotSupported exception if reader does not support logical to physical antenna mappings.

**Example**

Example usage.

```csharp
// Test if Beam1 both polarities and Beam 5 polarity X are enabled.
bool enabled = hApi.IsPhysicalAntennaEnabled("Beam1,Beam5.X");
```

**See also:** `NurApi.SelectedAntenna`, `NurApi.EnabledPhysicalAntennas`, `NurApi.AvailablePhysicalAntennas`

###### Method: `IsTagError(int)`

Returns whether the given error is a tag backscattered error or not.

**Parameters**

| Name | Description |
|---|---|
| `error` | Error from the tag / NurApi. |

**Returns:** TRUE if tag error.

###### Method: `IsTraceRunning()`

Return TRUE if tag trace routine is running on module.

**Returns:** true if tag trace routine is running on module

###### Method: `KillTag(uint, byte, uint, int, byte[])`

Kill tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**See also:** `NurApi.KillTagByEPC`

###### Method: `KillTagByEPC(uint, byte[])`

Kill specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `epc` | EPC memory to singulate against. |

**See also:** `NurApi.KillTag`

###### Method: `Log(int, string)`

Writes text to log for specified level.

**Parameters**

| Name | Description |
|---|---|
| `level` | Set logging level mask: `NurApi.LOG_VERBOSE`,`NurApi.LOG_ERROR`,`NurApi.LOG_USER`,`NurApi.LOG_DATA`,`NurApi.LOG_ALL` |
| `txt` | Text line to log |

**Remarks**

Use `NurApi.Log` instead

###### Method: `Log(int, Func{System.String})`

Writes text to log for specified level.

**Parameters**

| Name | Description |
|---|---|
| `level` | Set logging level mask: `NurApi.LOG_VERBOSE`,`NurApi.LOG_ERROR`,`NurApi.LOG_USER`,`NurApi.LOG_DATA`,`NurApi.LOG_ALL` |
| `txt` | Func delegate that returns text line to log. Delegate is only called if log level is enabled |

**Example**

```csharp
hNur.Log(NurApi.LOG_ERROR, () => "Error: {something}");
```

###### Method: `MemCompare(byte[], byte[])`

Comparing memory

**Parameters**

| Name | Description |
|---|---|
| `b1` | memory array1 |
| `b2` | memory array2 |

**Returns:** true if equal

###### Method: `ModuleRestart()`

Force RFID module restart

###### Method: `Monza4QTRead(uint, ref bool, ref bool, byte, uint, int, byte[])`

Monza4 QT command. Reads the QT_SR bit to `reduce` and QT_MEM bit to `pubmem`  .

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `reduce` | The QT_SR bit (0/1) (range reduction). |
| `pubmem` | The QT_MEM bit (0/1) (public private memory selection). |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**See also:** `NurApi.Monza4QTWrite`

###### Method: `Monza4QTWrite(uint, bool, bool, byte, uint, int, byte[])`

Monza4 QT command. Writes the QT_SR and QT_MEM bits.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `reduce` | The QT_SR bit (0/1) (range reduction). |
| `pubmem` | The QT_MEM bit (0/1) (public private memory selection). |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

**See also:** `NurApi.Monza4QTRead`

###### Method: `NurAntennaIdToPhysicalAntenna(int)`

This function maps given logical antenna identifier to a physical name of an antenna.

**Parameters**

| Name | Description |
|---|---|
| `nurAntennaId` | NurApi logical antenna Id. |

**Returns:** Physical antenna name

###### Method: `NurPhysicalAntennaToAntennaId(string)`

This function maps given physical antenna name to an logical antenna identifier.

**Parameters**

| Name | Description |
|---|---|
| `name` | Name of the physical antenna to look up. |

**Returns:** Return the antenna identifier number when successful.

###### Method: `NXPAlarm()`

Send NXP EAS Alarm command. Return true when there's armed EAS tags in range of reader.

**Returns:** Returns true when there's armed EAS tags in range of reader, false when no armed tags in range.

**See also:** `NurApi.NXPStartAlarmStream`

###### Method: `NXPResetEAS(uint, byte, uint, int, byte[])`

Reset specific tag's EAS alarm bit to 0 with given singulation data. 
When tag's EAS alarm bit is set to 1, tag will reply to EAS Alarm command.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

###### Method: `NXPResetReadProtect(uint, byte, uint, int, byte[])`

Reset specific tag's read protect with given singulation data.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

###### Method: `NXPSetEAS(uint, byte, uint, int, byte[])`

Set specific tag's EAS alarm bit to 1 with given singulation data. 
When tag's EAS alarm bit is set to 1, tag will reply to EAS Alarm command.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

###### Method: `NXPSetReadProtect(uint, byte, uint, int, byte[])`

Set specific tag's read protect with given singulation data.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

###### Method: `NXPStartAlarmStream()`

Start NXP EAS Alarm streaming on module.
Module will start continuos EAS Alarm stream and sends notification to host when there's armed tags in range.

**See also:** `NurApi.NXPAlarm`, `NurApi.NXPStopAlarmStream`, `NurApi.IsNXPAlarmStreamRunning`

###### Method: `NXPStopAlarmStream()`

Stop EAS Alarm streaming on module.

**See also:** `NurApi.NXPStartAlarmStream`, `NurApi.IsNXPAlarmStreamRunning`

###### Method: `OpenStateLock(byte, uint, byte[], int, uint, uint)`

Set tag lock using specified singulation parameters.
Lock is done in open state i.e. without using password access.

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `lockMask` | Which memories to lock. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |
| `lockAction` | Action to perform for memories. See flags: `NurApi.LOCK_USERMEM`  `NurApi.LOCK_TIDMEM`  `NurApi.LOCK_EPCMEM`  `NurApi.LOCK_ACCESSPWD`  `NurApi.LOCK_KILLPWD` |

**See also:** `NurApi.OpenStateLockByEPC`, `NurApi.OpenStateLockRaw`

###### Method: `OpenStateLockByEPC(byte[], uint, uint)`

Set tag lock singulating it by the EPC contents.
Lock is done in open state i.e. without using password access.

**Parameters**

| Name | Description |
|---|---|
| `epc` | EPC memory to singulate against. |
| `lockMask` | Which memories to lock. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |
| `lockAction` | Action to perform for memories. See flags: `NurApi.LOCK_USERMEM`  `NurApi.LOCK_TIDMEM`  `NurApi.LOCK_EPCMEM`  `NurApi.LOCK_ACCESSPWD`  `NurApi.LOCK_KILLPWD` |

**See also:** `NurApi.OpenStateLock`, `NurApi.OpenStateLockRaw`

###### Method: `OpenStateLockRaw(byte, uint, byte[], int, uint, uint)`

Set memory lock for tag with specific singulation in open state i.e. without password access.

Tag can be singluted against desired memory bank and mask.

Lock mask and action parameter are in raw format defined in UHF C1G2 standard section "6.3.2.11.3.5 Lock (mandatory).

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `lockMask` | Standard defined lock payload bits 19-10, starting from bit 0. |
| `lockAction` | Standard defined lock payload bits 9-0, starting from bit 0. |

**See also:** `NurApi.OpenStateLock`, `NurApi.OpenStateLockByEPC`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `Ping()`

Performs ping to connected RFID module

**Returns:** "OK"

###### Method: `ReadPermalock(uint, bool, uint, uint, uint)`

Read block permalock statuses without selecting a tag.
Assume one tag in field.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to read (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to read. |

**Returns:** A word array where each word represent a 16-block chunk's lock states (1=locked).

**See also:** `NurApi.ReadPermalockByEPC`, `NurApi.ReadPermalockSingulated`

###### Method: `ReadPermalockByEPC(uint, bool, byte[], uint, uint, uint)`

Read block permalock statuses by selecting the tag by its EPC.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `epc` | EPC of the tag. |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to read (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to read. |

**Returns:** A word array where each word represent a 16-block chunk's lock states (1=locked).

**See also:** `NurApi.ReadPermalock`, `NurApi.ReadPermalockSingulated`

###### Method: `ReadPermalockSingulated(uint, bool, byte, uint, int, byte[], uint, uint, uint)`

Read block permalock statuses by selecting the tag with specific singulation data.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to read (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to read. |

**Returns:** A word array where each word represent a 16-block chunk's lock states (1=locked).

**See also:** `NurApi.ReadPermalockByEPC`, `NurApi.ReadPermalock`

###### Method: `ReadSingulatedTag(uint, bool, byte, uint, byte[], byte, uint, byte)`

Read data from tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `rdBank` | Memory bank for read operation. 0=`NurApi.BANK_PASSWD` 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.ReadTag`, `NurApi.ReadTagByEPC`

###### Method: `ReadSingulatedTag(uint, bool, byte, uint, int, byte[], byte, uint, int)`

Read data from tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `rdBank` | Memory bank for read operation. 0=`NurApi.BANK_PASSWD` 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.ReadTag`, `NurApi.ReadTagByEPC`

###### Method: `ReadTag(uint, bool, byte, uint, int)`

Read data from tag without any singulation data. This function can be used for tags that do not have an EPC.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `bank` | Memory bank for read operation. |
| `address` | Word address for read operation. |
| `byteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** buffer for receiving data

**See also:** `NurApi.ReadSingulatedTag`, `NurApi.ReadTagByEPC`

###### Method: `ReadTagByEPC(uint, bool, byte[], byte, uint, int)`

Read data from tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `rdBank` | Memory bank for read operation. 0=`NurApi.BANK_PASSWD` 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `rdAddress` | Word address for read operation. |
| `rdByteCount` | Number of bytes to read. This must divisible by two. |

**Returns:** Pointer to a buffer that received read data. Must be atleast rdByteCount bytes long

**See also:** `NurApi.ReadTag`, `NurApi.ReadSingulatedTag`

###### Method: `ResetToTarget(int, bool)`

Reset tag inventoried flag to specific target in selected session.
All tags in reader range will be reset.

**Parameters**

| Name | Description |
|---|---|
| `session` | Session to reset, 0 - 3 |
| `targetIsA` | True to set inventoried flag to A, false to set inventoried flag to B |

###### Method: `RestartBLEModuleToDFU()`

Restart the BLE module to DFU (Device Firmware Upgrade) mode.  

After the call, another application or built-in updater can upgrade the BLE module's FW.

###### Method: `RestoreTuning(bool)`

Restores the factory tuning to the module.
Applies only to the NUR05WL2 and NUR10W modules.

**Parameters**

| Name | Description |
|---|---|
| `factoryReset` | When set to true, the factory defaults are stored into the user area and also taken into use.                 When false then the last saved user tuning is taken into use. |

**Remarks**

Use with care. If not sure that you need for this, do not use!

###### Method: `ScanChannels()`

Scan region channels RSSI

**Returns:** information about channels as `ScanChannelInfo`

###### Method: `ScanChannels(int)`

Scan region channels RSSI

**Parameters**

| Name | Description |
|---|---|
| `maxChannels` | parameter is ignored |

**Returns:** information about channel as `ScanChannelInfo`

###### Method: `ScanSingle(int)`

The single scan is used to read a single tag's EPC contents using a timeout defined in milliseconds.

**Parameters**

| Name | Description |
|---|---|
| `timeout` | Timeout in milliseconds. Range 50 - 2000. |

**Returns:** read tag information as `TriggerReadData`.

**Remarks**

If there's more than one tag in the reader range, this function will most likely fail.

###### Method: `SetAccessPassword(uint, bool, byte, uint, byte[], uint)`

Write new access password to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `newPasswd` | New access password to write. |

**See also:** `NurApi.SetAccessPasswordByEPC`

###### Method: `SetAccessPassword(uint, bool, byte, uint, int, byte[], uint)`

Write new access password to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `newPasswd` | New access password to write. |

**See also:** `NurApi.SetAccessPasswordByEPC`

###### Method: `SetAccessPasswordByEPC(uint, bool, byte[], uint)`

Write new access password to specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `newPasswd` | New access password to write. |

**See also:** `NurApi.SetAccessPassword`

###### Method: `SetAntennaIdTranslation(byte[])`

A method to change the module's internal mapping between the physsical and logical antenna identifiers.

**Parameters**

| Name | Description |
|---|---|
| `antIdTranslation` | Each byte contains the corresponding internal logical ID of the antenna. |

**Remarks**

**WARNING: it is highly recommended not change the internal mappings.**

Think thoroughly before using this method; the behavior may be very unexpected.

###### Method: `SetConstantChannelIndex(int)`

Set channel index to use in current hop table.
This prevents NUR from hopping in different channel.
Use with care: RF frequency is locked as long as this is set.
Restore normal channel hopping with parameter -1

**Parameters**

| Name | Description |
|---|---|
| `channelIdx` | Channel index to use in current hop table. Set -1 to restore normal channel hopping. |

###### Method: `SetCustomHoptable(uint[], uint, uint, uint, uint, uint)`

Set pre-built custom hop table.

**Parameters**

| Name | Description |
|---|---|
| `freqArr` | Array of generated frequencies. Values are in kHz, range is 840000...960000.             Must be disvisible by 25. Number of frequencies is 1...`NurApi.MAX_CUSTOM_FREQS` and it must match the `nChan` parameter. |
| `nChan` | Number of channels in `freqArr`. |
| `chTime` | Channel time in milliseconds. Minimum is 100. |
| `pauseTime` | Pause time between channel change in milliseconds. Maximum is 1000. |
| `lf` | Maximum link frequency. Valid values are 160000, 256000 and 320000. |
| `Tari` | Tari setting: 1 = 12.5us, 2=25us. Other are invalid. |

###### Method: `SetCustomHoptableEx(uint[], uint, uint, uint, uint, uint, int, uint)`

Set pre-built, extended custom hop table (+LBT threshold and maximum TX level).

**Parameters**

| Name | Description |
|---|---|
| `freqArr` | Array of generated frequencies. Values are in kHz, range is 840000...960000.             Must be disvisible by 25. Number of frequencies is 1...`NurApi.MAX_CUSTOM_FREQS` and it must match the `nChan` parameter. |
| `nChan` | Number of channels in `freqArr`. |
| `chTime` | Channel time in milliseconds. Minimum is 100. |
| `pauseTime` | Pause time between channel change in milliseconds. Maximum is 1000. |
| `lf` | Maximum link frequency. Valid values are 160000, 256000 and 320000. |
| `Tari` | Tari setting: 1 = 12.5us, 2=25us. Other are invalid. |
| `lbtThresh` | LBT threshold value in dBm, if used. Minimum value is -90. |
| `maxTxLevel` | Maximum TX level. Range is 0...19. |

###### Method: `SetEthConfig(NurApi.EthConfig)`

Set Ethernet device configuration.

**Parameters**

| Name | Description |
|---|---|
| `ec` | Reference to the Ethernet configuration as specified by `EthConfig`. |

###### Method: `SetExtendedCarrier(bool)`

Causes the module to leave carrier on after a command and not to jump to new frequency.
The carrier on time is limited by the maximum channel time.

**Parameters**

| Name | Description |
|---|---|
| `on` | When set to true then the carrier is left on (after the following command) until channel time is up or              this function is called with this parameter as false. |

###### Method: `SetGen2XConfig(NurApi.Gen2XConfig)`

Set Gen2XConfig

**See also:** `Gen2XConfig`

###### Method: `SetGPIOConfig(NurApi.GpioEntry[])`

Set NUR module GPIO configuration.

**Parameters**

| Name | Description |
|---|---|
| `config` | New GPIO configuration. |

###### Method: `SetGPIOStatus(int, bool)`

Set single GPIO pin state.
**NOTE: GPIO must be configured as output**

**Parameters**

| Name | Description |
|---|---|
| `gpio` | Zero based GPIO number. |
| `state` | State to set. true = high, false = low. |

###### Method: `SetGPIOStatusMask(int, bool)`

Set state for Gpio's specified by gpioMask  

For example: value 0x50 set state for GPIO5 and GPIO7

**Parameters**

| Name | Description |
|---|---|
| `gpioMask` | Mask of GPIO's |
| `state` | State to set. true = high, false = low. |

###### Method: `SetHostFlags(uint)`

Sends host flags to the module.

**Parameters**

| Name | Description |
|---|---|
| `hostFlags` | `NurApi.HOSTFLAGS_EN_UNSOL_ACK` |

**Returns:** Result of ping as string

###### Method: `SetInventoryRead(NurApi.IrInformation)`

Set Inventory read configuration.

**Parameters**

| Name | Description |
|---|---|
| `irInfo` | `IrInformation` Inventory+read information structure. |

**See also:** `IrInformation`

###### Method: `SetKillPassword(uint, bool, byte, uint, byte[], uint)`

Write new kill password to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `newPasswd` | New kill password to write. |

**See also:** `NurApi.GetKillPassword`, `NurApi.GetKillPasswordByEPC`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPassword`

###### Method: `SetKillPassword(uint, bool, byte, uint, int, byte[], uint)`

Write new kill password to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `newPasswd` | New kill password to write. |

**See also:** `NurApi.GetKillPassword`, `NurApi.GetKillPasswordByEPC`, `NurApi.SetKillPasswordByEPC`, `NurApi.GetAccessPassword`

###### Method: `SetKillPasswordByEPC(uint, bool, byte[], uint)`

Write new kill password to specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `newPasswd` | New kill password to write. |

###### Method: `SetLock(uint, byte, uint, byte[], uint, uint)`

Set memory lock for tag with specific singulation.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `memoryMask` | Which memories to lock. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |
| `action` | Action to perform for memories. See flags: `NurApi.LOCK_USERMEM`  `NurApi.LOCK_TIDMEM`  `NurApi.LOCK_EPCMEM`  `NurApi.LOCK_ACCESSPWD`  `NurApi.LOCK_KILLPWD` |

**See also:** `NurApi.SetLockByEPC`, `NurApi.SetLockRaw`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `SetLock(uint, byte, uint, int, byte[], uint, uint)`

Set memory lock for tag with specific singulation.

Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `memoryMask` | Which memories to lock. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |
| `action` | Action to perform for memories. See flags: `NurApi.LOCK_USERMEM`  `NurApi.LOCK_TIDMEM`  `NurApi.LOCK_EPCMEM`  `NurApi.LOCK_ACCESSPWD`  `NurApi.LOCK_KILLPWD` |

**See also:** `NurApi.SetLockByEPC`, `NurApi.SetLockRaw`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `SetLockByEPC(uint, byte[], uint, uint)`

Set memory lock for specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `epc` | EPC memory to singulate against. |
| `memoryMask` | Which memories to lock. See flags: `NurApi.LOCK_USERMEM`  `NurApi.LOCK_TIDMEM`  `NurApi.LOCK_EPCMEM`  `NurApi.LOCK_ACCESSPWD`  `NurApi.LOCK_KILLPWD` |
| `action` | Action to perform for memories. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |

**See also:** `NurApi.SetLock`, `NurApi.SetLockRaw`

###### Method: `SetLockRaw(uint, byte, uint, byte[], uint, uint)`

Set memory lock for tag with specific singulation.

Tag can be singluted against desired memory bank and mask.

Lock mask and action parameter are in raw format defined in UHF C1G2 standard section "6.3.2.11.3.5 Lock (mandatory).

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `lockMask` | Standard defined lock payload bits 19-10, starting from bit 0. |
| `lockAction` | Standard defined lock payload bits 9-0, starting from bit 0. |

**See also:** `NurApi.SetLock`, `NurApi.SetLockByEPC`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `SetLockRaw(uint, byte, uint, int, byte[], uint, uint)`

Set memory lock for tag with specific singulation.

Tag can be singluted against desired memory bank and mask.

Lock mask and action parameter are in raw format defined in UHF C1G2 standard section "6.3.2.11.3.5 Lock (mandatory).

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `lockMask` | Standard defined lock payload bits 19-10, starting from bit 0. |
| `lockAction` | Standard defined lock payload bits 9-0, starting from bit 0. |

**See also:** `NurApi.SetLock`, `NurApi.SetLockByEPC`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `SetLogFilePath(string)`

Set Log file path  

See `NurApi.SetLogToFile`

**Parameters**

| Name | Description |
|---|---|
| `path` | Set full path of log file |

**See also:** `NurApi.SetLogToFile`, `NurApi.SetLogLevel`

###### Method: `SetLogLevel(int)`

Set Logging level

**Parameters**

| Name | Description |
|---|---|
| `mask` | Use NurApi.LOG_VERBOSE,NurApi.LOG_ERROR,NurApi.LOG_USER,NurApi.LOG_DATA,NurApi.LOG_ALL |

**Example**

```csharp
hNur.SetLogLevel(NurApi.LOG_ERROR | NurApi.LOG_DATA);
```

**See also:** `NurApi.SetLogToFile`, `NurApi.SetLogLevel`

###### Method: `SetLogToFile(bool)`

Enables log generation to file. Default is "NurApiLog.txt" in to app working folder  

To set path use `NurApi.SetLogFilePath`
`NurApi.SetLogToFile`
`NurApi.SetLogLevel`

**Parameters**

| Name | Description |
|---|---|
| `enable` | Set true if logs are generated to file |

###### Method: `SetLogToStdout(bool)`

Set log to stdout.

**Parameters**

| Name | Description |
|---|---|
| `enable` | If set to true, all enabled logs are written also to stdout. |

**Remarks**

LogEvents are not sent to application if this is enabled

###### Method: `SetModuleSetup(int, ref NurApi.ModuleSetup)`

Set module settings according to given flags.

**Parameters**

| Name | Description |
|---|---|
| `setupFlags` | The setup fields to include presented as flag bits, see remarks. |
| `setup` | Module settings as  structure |

**Remarks**

See flags:

Set link frequency: `NurApi.SETUP_LINKFREQ`

Set Set `NurApi.SETUP_RXDEC`

Set TX level: `NurApi.SETUP_TXLEVEL`

Set TX modulation: `NurApi.SETUP_TXMOD`, modulations: `NurApi.TXMODULATION_ASK`, `NurApi.TXMODULATION_PRASK`

Set region: `NurApi.SETUP_REGION`

Set default inventory Q: `NurApi.SETUP_INVQ`

Set default inventory session: `NurApi.SETUP_INVSESSION`

Set default inventory rounds/call: `NurApi.SETUP_INVROUNDS`

Set default single scan timeout in ms: `NurApi.SETUP_SCANSINGLETO`

Set default inventory timeout in ms: `NurApi.SETUP_INVENTORYTO`, range is 0...60000 ms.

Set currently selected antenna: `NurApi.SETUP_SELECTEDANTENNA`, 0...3 in basic setup and 0...17 in beam reader.

Set operation flags: `NurApi.SETUP_OPFLAGS`, flags: `NurApi.OPFLAGS_EN_HOPEVENTS` and `NurApi.OPFLAGS_INVSTREAM_ZEROS`.

Set default inventory target: `NurApi.SETUP_INVTARGET`, targets: `NurApi.INVTARGET_A`, `NurApi.INVTARGET_B` and `NurApi.INVTARGET_AB`

Set fixed inventory EPC length: `NurApi.SETUP_INVEPCLEN`, range is 2...62 (must be aligned by 2) or -1 to accept all.

Set RSSI range for read operations: `NurApi.SETUP_READRSSIFILTER`, RSSI filter: `RssiFilter`.

Set RSSI range for write operations: `NurApi.SETUP_WRITERSSIFILTER`, RSSI filter: `RssiFilter`.

Set RSSI range for inventory: `NurApi.SETUP_INVRSSIFILTER`, RSSI filter: `RssiFilter`.

Set tag read timeout: `NurApi.SETUP_READTIMEOUT`, range: 20...1000 ms.

Set tag write timeout: `NurApi.SETUP_WRITETIMEOUT`, range: 20...2000 ms.

Set tag lock timeout: `NurApi.SETUP_LOCKTIMEOUT`, range: 20...2000 ms.

Set tag kill timeout: `NurApi.SETUP_KILLTIMEOUT`, range: 20...2000 ms.

Set reader duty cycle in inventory stream: `NurApi.SETUP_AUTOPERIOD`, values: 0 = off, 1 = max 100 ms off, 2 = max 500 ms off and 3 = max 100 off.

Set per antenna TX level (in 4 antenna reader): `NurApi.SETUP_PERANTPOWER`, entry having value -1 means "not used". Otherwise range as in TX level i.e. 0...19.

Set antenna TX level offset: `NurApi.SETUP_PERANTOFFSET`, range is -1...1. E.g. TX level 10 with offset will become 11 (-1 i.e. less). Note that only first value is used, other are currently ignored.

Set antenna mask: `NurApi.SETUP_ANTMASKEX`, masks: `NurApi.ANTENNAMASK_1` ... `NurApi.ANTENNAMASK_32`, `NurApi.ANTENNAMASK_ALL`

Set RF profile: `NurApi.SETUP_RFPROFILE`, values `NurApi.RFPROFILE_ROBUST`, `NurApi.RFPROFILE_NOMINAL`, `NurApi.RFPROFILE_HIGHSPEED`, `NurApi.RFPROFILE_HIGHSPEED_2`, `NurApi.RFPROFILE_FAST`, `NurApi.RFPROFILE_AUTOSET`

Combination of all flags: `NurApi.SETUP_ALL`.

**See also:** `ModuleSetup`, `NurApi.GetModuleSetup`

###### Method: `SetSensorConfig(NurApi.SensorConfig)`

Set sensor configuration

**Parameters**

| Name | Description |
|---|---|
| `cfg` | Configuration data as `SensorConfig` |

###### Method: `SetUseBlockWrite(bool)`

When set to true, all NurApi tag write functions will use UHF C1G2 BlockWrite command (uhf c1g2 spec available at epcglobal) to write data to tag.

**Parameters**

| Name | Description |
|---|---|
| `val` | true is enabled, false is disabled |

###### Method: `SimpleInventory()`

Use `NurApi.Inventory` instead.

**Returns:** Inventory result data as `InventoryResponse`

**See also:** `NurApi.Inventory`

###### Method: `StartInventoryEx(NurApi.InventoryExParams, NurApi.InventoryExFilter[])`

Start extended inventory streaming command with multiple select filters.

**Parameters**

| Name | Description |
|---|---|
| `param` | Reference to inventory parameters. |
| `filters` | Array of select filters or null. |

**Example**

```csharp
hNur.InventoryStreamEvent += new EventHandler<NurApi.InventoryStreamEventArgs>(hNur_InventoryStreamEvent);
```

**See also:** `InventoryExParams`, `InventoryExFilter`

###### Method: `StartInventoryEx(ref NurApi.InventoryExParams, NurApi.InventoryExFilter[])`

Start extended inventory streaming command with multiple select filters.

**Parameters**

| Name | Description |
|---|---|
| `param` | Reference to inventory parameters. |
| `filters` | Array of select filters or null. |

**See also:** `InventoryExParams`, `InventoryExFilter`

###### Method: `StartInventorySelectStream(int, int, int, bool, byte, uint, byte[])`

Start inventory streaming with tag select on module. Module will start continuos inventory and sends new tags to host as `NurApi.InventoryStreamEvent`.

To stop inventory stream use `NurApi.StopInventoryStream`

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |
| `invertSelect` | Invert select. Select tags that do not match the selection criteria. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |

###### Method: `StartInventorySelectStream(int, int, int, bool, byte, uint, int, byte[])`

Start inventory streaming with tag select on module. Module will start continuos inventory and sends new tags to host as `NurApi.InventoryStreamEvent`.

To stop inventory stream use `NurApi.StopInventoryStream`

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |
| `invertSelect` | Invert select. Select tags that do not match the selection criteria. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |

###### Method: `StartInventoryStream()`

Start inventory stream using RFID reader current rounds, Q, session settings. `NurApi.InventoryStreamEvent` is fired when data available. To stop inventory stream use `NurApi.StopInventoryStream`

**See also:** `NurApi.StopInventoryStream`

###### Method: `StartInventoryStream(int, int, int)`

Start inventory streaming on module. Module will start continuos inventory and sends new tags to host as `NurApi.InventoryStreamEvent`.

To stop inventory stream use `NurApi.StopInventoryStream`

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10. Value 0 means automatic round number. (see `NurApi.InventoryRounds` property) |
| `Q` | The Q parameter. Range 0 - 15. Value 0 means automatic Q calculation. (see `NurApi.InventoryQ` property) |
| `session` | The session parameter. Range 0 - 3.(see `NurApi.InventorySession` property) |

###### Method: `StopContCarrier()`

Stop continuous carrier test.

**Remarks**

For testing purposes only: Do not use.

###### Method: `StopContinuous()`

Force stop all NUR module running continuous functions.

###### Method: `StopInventoryEx()`

Stop extended inventory streaming in module.

###### Method: `StopInventoryStream()`

Stop inventory streaming on module.

**See also:** `NurApi.StartInventoryStream`

###### Method: `StoreCurrentSetup()`

Store current module settings to the reader's non-volatile memory.

**See also:** `NurApi.StoreCurrentSetup`, `NurApi.GetModuleSetup`, `NurApi.GetModuleSetup`, `NurApi.SetModuleSetup`

###### Method: `StoreCurrentSetup(int)`

Store current module setup. Flags indicate which part of settings will be stored.

**Parameters**

| Name | Description |
|---|---|
| `flags` | The bit flags that instruct what to save, see remarks. |

**Remarks**

See store flags:

Store current baudrate: `NurApi.STORE_BAUDRATE`

Store current GPIO setup: `NurApi.STORE_GPIO`

Store current RF settings: `NurApi.STORE_RF`, includes: TX level(s), TX modulation, RX decoding, link frequency region, inventory defaults, all timeout defaults and antenna settings.

Store current operation flags: `NurApi.STORE_OPFLAGS`, flags: `NurApi.OPFLAGS_EN_HOPEVENTS` and `NurApi.OPFLAGS_INVSTREAM_ZEROS`.

Store everything: `NurApi.STORE_ALL`

**See also:** `NurApi.StoreCurrentSetup`, `NurApi.GetModuleSetup`, `NurApi.GetModuleSetup`, `NurApi.SetModuleSetup`

###### Method: `SwapEndian(ushort)`

Swap endianess of 16-bit value

**Parameters**

| Name | Description |
|---|---|
| `value` | ushort value to swap |

**Returns:** swapped value

###### Method: `SwapEndian(uint)`

Swap endianess of 32-bit value

**Parameters**

| Name | Description |
|---|---|
| `value` | value to swap |

**Returns:** swapped uint value

###### Method: `TIDInventory(uint, uint)`

Setup TID inventory.
Configures inventory + read so that it result only in TID data.

**Parameters**

| Name | Description |
|---|---|
| `firstWord` | First word to read. |
| `nWords` | Number of words to read. Range is 1...31 (2...64 bytes). |

###### Method: `TimeStampToDate(uint)`

Convert NurApi timestamp to DateTime

**Parameters**

| Name | Description |
|---|---|
| `ts` | NurApi timestamp |

**Returns:** DateTime

###### Method: `TimeStampToDateUtc(uint)`

Convert NurApi timestamp to UTC DateTime

**Parameters**

| Name | Description |
|---|---|
| `ts` | NurApi timestamp |

**Returns:** UTC DateTime

###### Method: `TraceTag(byte, uint, int, byte[], int)`

Trace singulated single tag.

**Parameters**

| Name | Description |
|---|---|
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `flags` | Flags for trace. See `NurApi.TRACETAG_NO_EPC`  `NurApi.TRACETAG_START_CONTINUOUS`  `NurApi.TRACETAG_STOP_CONTINUOUS` |

**Returns:** Receives trace response in to `TraceTagData`. If continuous tracing is specified in flags response is not received, instead module will send `NurApi.TraceTagEvent` notification for tracing.

**See also:** `NurApi.TraceTagByEPC`

###### Method: `TraceTagByEPC(byte[], int)`

Trace single tag singluated against tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `epc` | EPC memory to singulate against. |
| `flags` | Flags for trace. See `NurApi.TRACETAG_NO_EPC`  `NurApi.TRACETAG_START_CONTINUOUS`  `NurApi.TRACETAG_STOP_CONTINUOUS` |

**Returns:** Receives trace response in to `TraceTagData`. If continuous tracing is specified in flags response is not received, instead module will send `NurApi.TraceTagEvent` notification for tracing.

**See also:** `NurApi.TraceTag`

###### Method: `TuneAntenna(int, bool, bool)`

Executes antenna tune sequence.

**Parameters**

| Name | Description |
|---|---|
| `antenna` | Antenna number to tune (0...Max antennas). |
| `deepTune` | If set to false the tune is 'quick'. When true, the tuning is done with more wider value area. |
| `saveResults` | If set to true the tuning result is stored into the module's non-volatile memory.              Otherwise the results are just taken into use for as long as the module is powered. |

**Returns:** An array of integers representing dBm reflected power in each of the 6 tuning bands (the values are multiplied by 1000).

**Remarks**

Use with care. If not sure that you need for this, do not use!

###### Method: `ULog(string)`

Writes text to log using LOG_USER level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Text line to log |

**Remarks**

Use `NurApi.ULog` instead

###### Method: `ULog(Func{System.String})`

Writes text to log using LOG_USER level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Func delegate that returns text line to log. Delegate is only called if log level is enabled |

###### Method: `UserMemInventory(uint, uint)`

Setup user memory inventory.
Configures inventory + read so that it result only in user memory data.

**Parameters**

| Name | Description |
|---|---|
| `firstWord` | First word to read. |
| `nWords` | Number of words to read. Range is 1...31 (2...64 bytes). |

###### Method: `VLog(string)`

Writes text to log using LOG_VERBOSE level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Text line to log |

**Remarks**

Use `NurApi.VLog` instead

###### Method: `VLog(Func{System.String})`

Writes text to log using LOG_VERBOSE level mask.

**Parameters**

| Name | Description |
|---|---|
| `txt` | Func delegate that returns text line to log. Delegate is only called if log level is enabled |

###### Method: `WLanAddEnterpriseProfile(string, string, string, string, NurApi.WLAN_EAP_METHOD, byte)`

NOTE: Currently not implemented in any product!
Add enterprise connection profile to WLAN module. The device connects to a station from the profiles table. Only one enterprise profile is supported.

**Parameters**

| Name | Description |
|---|---|
| `ssid` | SSID name |
| `secKey` | Security key. (hexadecimal digits 0-9, a-f and A-F) |
| `user` | The enterprise user name |
| `anonuser` | The anonymous user name (optional) for two phase enterprise connections. |
| `eapmethod` | EAP Method |
| `priority` | 0-7 (0=lowest) If several profiles configured the device chose the highest priority profile, within each priority group, device will chose profile based on security policy, signal strength, etc parameters |

###### Method: `WLanAddProfile(string, byte, string, byte)`

Add connection profile to WLAN module. The device connects to a station from the profiles table. Up to 7 profiles are supported.

**Parameters**

| Name | Description |
|---|---|
| `ssid` | SSID name |
| `secType` | Security type. `WLAN_SECTYPE` |
| `secKey` | Security key. (hexadecimal digits 0-9, a-f and A-F) |
| `priority` | 0-7 (0=lowest) If several profiles configured the device chose the highest priority profile, within each priority group, device will chose profile based on security policy, signal strength, etc parameters |

###### Method: `WLanDelProfile(byte)`

Used for deleting a certain stored profile, or for deleting all profiles at once.

**Parameters**

| Name | Description |
|---|---|
| `profileIndex` | profile index to delete (1-7) 0=delete all profiles |

###### Method: `WLanEnable(bool)`

Enable/Disable WLan functionality from reader.

**Parameters**

| Name | Description |
|---|---|
| `enable` | true=WLan nodule running. false=Wlan module not in use. |

**Exceptions**

- `NurApiException`: Thrown when "API not created" or "WLanEnable" error

###### Method: `WLanFileDelete(string)`

NOTE: Currently not implemented in any product!
Delete file from file system of WLAN module

**Parameters**

| Name | Description |
|---|---|
| `name` | name/path of file to delete |

###### Method: `WLanFileWrite(string, int, byte[])`

NOTE: Currently not implemented in any product!
Write file to WLAN module file system

**Parameters**

| Name | Description |
|---|---|
| `name` | Name/Path of the file |
| `length` | File length in bytes |
| `buf` | data buffer of file |

###### Method: `WLanGetProfile(byte)`

Get WLAN profile from module.
Index of profile for retrieving information (1-7)
get/ WLanProfile struct of given profileIndex. If not exist, WlanProfile-->index = 0`WLanStatus`
Thrown when "API not created" or "WLanGetStatus" error 
Thrown when profileIndex out of range. (Use 1-7)

###### Method: `WLanGetStatus()`

Get status of WLan.

**Returns:** WLAN status information data: `WLanStatus`

**Exceptions**

- `NurApiException`: Thrown when "API not created" or "WLanGetStatus" error

###### Method: `WLanScanEnable(bool)`

Enable/Disable WLan network scan.
NOTE: Sampo S2 gives HW error exception if WLan scan disabling is attempted.

**Parameters**

| Name | Description |
|---|---|
| `enable` | true=WLan nodule running. false=Wlan module not in use. |

**Exceptions**

- `NurApiException`: Thrown when "API not created" or "WLanScanEnable" error

###### Method: `WriteEPC(uint, bool, byte, uint, int, byte[], byte[])`

Write new EPC to tag with specific singulation.This function sets also tag PC word correctly for new EPC length. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `epcBuffer` | New EPC to write. |

**See also:** `NurApi.WriteEPCByEPC`, `NurApi.WriteEPCByEPC`

###### Method: `WriteEPCByEPC(uint, bool, byte[], byte[])`

Write new EPC to specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | True if operation is secured, otherwise false. |
| `currentEpcBuffer` | EPC of the tag to write. |
| `newEpcBuffer` | New EPC to write. |

###### Method: `WriteEPCByEPC(uint, bool, string, string)`

Write new EPC to specific tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | True if operation is secured, otherwise false. |
| `currentEpcBuffer` | Current of EPC of the tag to write as HEX String. |
| `newEpcBuffer` | New EPC to write as (HEX) string. |

###### Method: `WriteSingulatedTag(uint, bool, byte, uint, byte[], byte, uint, byte[])`

Write data to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMask` | Mask data buffer. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `WriteSingulatedTag(uint, bool, byte, uint, int, byte[], byte, uint, byte[])`

Write data to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `WriteSingulatedTag(uint, bool, byte, uint, int, byte[], byte, uint, byte[], int, int)`

Write data to tag with specific singulation. Tag can be singluted against desired memory bank and mask.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `sBank` | Memory bank used for tag singulation. 1=`NurApi.BANK_EPC` 2=`NurApi.BANK_TID` 3=`NurApi.BANK_USER` |
| `sAddress` | Singulation data address in bits. |
| `sMaskBitLength` | Length of the mask data in bits. |
| `sMask` | Mask data buffer. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.WriteTag`, `NurApi.WriteTagByEPC`

###### Method: `WriteTag(uint, bool, byte, uint, byte[])`

Write data to tag without any singulation data. This function can be used for tags that do not have an EPC.

Note:If there's more than one tag in range, this function will most likely fail due to the RF collision.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |

**See also:** `NurApi.WriteSingulatedTag`, `NurApi.WriteTagByEPC`

###### Method: `WriteTag(uint, bool, byte, uint, byte[], int, int)`

Write data to tag without any singulation data. This function can be used for tags that do not have an EPC.

Note:If there's more than one tag in range, this function will most likely fail due to the RF collision.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. Must be atleast wrByteCount bytes long. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.WriteSingulatedTag`, `NurApi.WriteTagByEPC`

###### Method: `WriteTagByEPC(uint, bool, byte[], byte, uint, byte[])`

Write data to tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |

**See also:** `NurApi.WriteSingulatedTag`, `NurApi.WriteTag`

###### Method: `WriteTagByEPC(uint, bool, byte[], byte, uint, byte[], int, int)`

Write data to tag singulated by tag's EPC memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `epc` | EPC memory to singulate against. |
| `wrBank` | Memory bank for write operation. |
| `wrAddress` | Word address for write operation. |
| `wrBuffer` | Data to write. |
| `wrBufferPos` | Start position |
| `wrBufferLen` | Number of bytes to write. This must divisible by two. |

**See also:** `NurApi.WriteSingulatedTag`, `NurApi.WriteTag`

###### Method: `XDigitValue(char)`

Check whether given character is a hexadecimal digit.

**Parameters**

| Name | Description |
|---|---|
| `isdigit` | Character to check. |

**Returns:** The hexadecimal value if OK, otherwise -1.

##### Properties

###### Property: `AntennaMask`

Bitmask of enabled antennas.  
DEPRECATED: Do not use for new designs, use AntennaMaskEx instead.

###### Property: `AntennaMaskEx`

Bitmask of enabled antennas, support up to 32 antennas. Value 0x1 - 0xFFFFFFFF.

**Value:** The value ranges from `NurApi.ANTENNAMASK_1` to `NurApi.ANTENNAMASK_32`.
Actually used and applicable values depend on the module's configuration

###### Property: `AntennaPowerEx`

Per antenna tx level settings. Array with exactly 32 entries must be supplied.

**Value:** Array of the per antenna tx level values. Range is 0..31 (depends on used device); Defaults to -1. 
If set to -1 default tx level is used from the module setup.

Array with exactly 32 entries must be supplied.

**See also:** `NurApi.TxLevel`

###### Property: `AutoReconnect`

Enable/disable automatic reconnection on connection loss.

###### Property: `Autotune`

Runtime antenna tuning settings.

**Value:** The parameter set or read is `AutotuneSetup`.

**Remarks**

This has no effect in NUR2, NUR3 based devices.

###### Property: `AutotuneEnable`

Enables the run-time automatic tuning.
This feature is supported in the L2 module's FW version 5.0-A and on.

**Value:** Set to true to enable this feature.

###### Property: `AutotuneThreshold`

Run-time automatic tuning's threshold value in dBm.

**Value:** This is a negative value.
The actual value depends strongly on the current situation. "Typically" it could be considered to be in range -5...-2.

###### Property: `AutotuneThresholdEnable`

Enable or disable using of the run-time automatic tuning's threshold value.
This feature is supported in the L2 module's FW version 5.0-A and on.

**Value:** Set to true to enable use of the run-time automatic tuning's threshold value.

###### Property: `AvailablePhysicalAntennas`

Get list of available physical antennas supported by connected reader.

`NurApi.EnabledPhysicalAntennas`

**Returns:** List of supported antenna names if successful.

**Value:** List of supported antenna names if successful.

###### Property: `BaudRate`

NUR serial port baudrate index.

**Value:** | Term | Description |
|---|---|
|  | `NurApi.BR_38400`38400 |
|  | `NurApi.BR_115200`115200 |
|  | `NurApi.BR_230400`230400 |
|  | `NurApi.BR_500000`500000 |
|  | `NurApi.BR_1000000`1000000 (1M) |
|  | `NurApi.BR_1500000`1500000 (1M5) |

**Remarks**

Use this only when NUR device is directly connected to serial port

###### Property: `Capabilites`

Get reader capabilities about connected device.

###### Property: `CommCmdRetries`

Communication cmd re-send retries, if no response received within timeout.
Default is 2

###### Property: `CommLongTimeoutMilliSec`

Communication timeout for possible long runnning commands in milliseconds.
Some tag operation commands may take long time to finish, depending on enabled antenna count and/or parameters.
Inventory and tag access commands uses this timeout, such as Inventory, InventorySelect, Read, Write, Lock, Kill, Gen2V2
Default is 17000 ms

###### Property: `CommTimeout`

Set communication timeout in seconds. Range is 3...15.

**Value:** The timeout value is in seconds ranging from 3 to 15.

###### Property: `CommTimeoutMilliSec`

Communication timeout in milliseconds.
Default is 3000 ms

###### Property: `ConnectedDeviceUri`

Get Uri of currently connected device, null if not connected.

###### Property: `ConnectionStatus`

Get current transport connection status.

###### Property: `EnabledAntennas`

Antenna enable. This will internally set `NurApi.AntennaMaskEx`

**Value:** Set antennas as a list of integer ranging from ANTENNAID_1 to ANTENNAID_32.

Get an integer list stating which antennas are enabled.

###### Property: `EnabledPhysicalAntennas`

Get or sets list of enabled physical antennas in connected reader.

`NurApi.AvailablePhysicalAntennas`
`NurApi.SelectedAntenna`

**Returns:** List of enabled physical antennas.

**Value:** The value when set is a string list in which each member is expected to contain a valid, not case sensitive name of a physical antenna.

###### Property: `EnableHopEvents`

Enable frequency hop event generation.
`NurApi.OpFlags`
`NurApi.OPFLAGS_EN_HOPEVENTS`

**Value:** true to enable, false to disable

###### Property: `EnableInvStreamZeros`

Enable "zero tags found" notification during inventory streams
`NurApi.OpFlags`
`NurApi.OPFLAGS_INVSTREAM_ZEROS`

**Value:** true to enable, false to disable

###### Property: `EnableTagPhaseDiff`

Tag phase diff. Return tag phase angle difference in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR3 modules.
`NurApi.OpFlags`
`NurApi.OPFLAGS_EN_PHASE_DIFF`

**Value:** true to enable, false to disable

###### Property: `EnableTagPhaseInfo`

Tag phase info. Return tag phase angle in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR2 modules.
`NurApi.OpFlags`
`NurApi.OPFLAGS_EN_TAG_PHASE`

**Value:** true to enable, false to disable

###### Property: `EnableTuneEvents`

Enable run-time tuning events
`NurApi.OpFlags`
`NurApi.OPFLAGS_EN_TUNEEVENTS`

**Value:** true to enable, false to disable

###### Property: `FileVersion`

The NurApi assembly version.

**Returns:** Returns the NurApi assembly version string.

###### Property: `Info`

Get information about connected device.

###### Property: `InventoryEpcLength`

Desired EPC Length filter in bytes. All other EPC's will be discarded during inventory.

**Value:** Use even values in range 2...62 or -1 for "accept all".

**Remarks**

Setting this to a specific value causes the module to ignore any EPC having a different length than this setting.

**See also:** `NurApi.SetModuleSetup`

###### Property: `InventoryQ`

Default Q used for inventory. Value 0 - 15, where value 0 means automatic Q selection.

**Value:** | Q - value | Slots |
|---|---|
| 0 | automatic (default) |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 4 | 16 |
| 5 | 32 |
| 6 | 64 |
| 7 | 128 |
| 8 | 256 |
| 9 | 512 |
| 10 | 1024 |
| 11 | 2048 |
| 12 | 4096 |
| 13 | 8192 |
| 14 | 16384 |
| 15 | 32768 |

**Remarks**

Q-value defines the amount of open response slots that tags can use per one inventory round.
Number of slots can be calculated by this formula (s = number of "time slots"): s= Q^2 i.e. slots equal to Q to the power of 2.
It is advised to use twice as much slots compared to amount of tags that you have in your readers reading field simultaneously.
Selectable values are 0 – 15 and value 0 means automatic Q-value adjustment.
When Q=0 is used reader will automatically increase the Q-value when lots of collisions are noticed and decreased the value when there are only few collisions.
By default Q-value is set to 0.

**See also:** `ModuleSetup`

###### Property: `InventoryReadCtl`

Takes the inventory + read into use (true) or turns it off (false).
When read tells whether there is a valid inventory + read configuration present in the module or not.
Uses the configuration set with `NurApi.InventoryRead`, `NurApi.TIDInventory` or `NurApi.UserMemInventory`

**Value:** When set to true then the current inventory + read configuration stored into the module is taken into use.
NOTE: the inventory + read takes place next time an inventory, in any form, is performed so calling this does not perform anythin rather than only takes the configuration into use.

Reading returns whether the inventory + read is currently active or not.

**See also:** `NurApi.GetInventoryRead`, `NurApi.SetInventoryRead`

###### Property: `InventoryRounds`

Default rounds for inventory. Value 0 - 10, where 0 means automatic rounds selection.
This value specifies full G2 query rounds performed in one inventory command.

**Value:** Range is from 0 to 10 where zero means "automatic rounds".

**Remarks**

Rounds setting defines how many full G2 query rounds is done inside one inventory round. After every inventory round reader will send data to the Host.
Selectable values are 0 – 10. Zero meaning automatic rounds adjustment.
Automatic adjustment decides after every query round that is another round necessary based on amount of collisions.
By default rounds setting is set to 0.

**See also:** `ModuleSetup`

###### Property: `InventoryRssiFilter`

RSSI filters used for inventory operations.

**Value:** The value is specified with `RssiFilter`.

###### Property: `InventorySession`

Default session for inventory. Value 0 - 3.

**Value:** Default session for inventory. Value 0 - 3.

**Remarks**

There are four session options what you can use when initializing inventory round.
Every session has two target states A and B. By default gen2 tags are at state A if tag has not been read recently.
When tag is read it flips to state B and doesn’t replay to readers query.
Table above describes persistence of tags state machine when using different session values.
For example when using session 0 tag will come back to state A immediately when tag power is lost.
Tag power is usually lost when reader stops the inventory round or chances the channel. 
With session 1 tag will keep it state over 500ms but less than 5s. 
With session values 2 and 3 tags will keep it states over 2s when tag power is lost. 
Time can vary depending what tag IC is used.

Table indicating persistence characteristics of gen2 tags.

| value | Description |
|---|---|
| 0 | 0indefinitenone |
| 1 | 1500ms < t < 5s500ms < t < 5s |
| 2 | 2indefinitet > 2s |
| 3 | 3indefinitet > 2s |

**See also:** `ModuleSetup`

###### Property: `InventoryTarget`

Inventory target.

**Value:** 0 = A, 1 = B, 2 = toggle between A and B.

###### Property: `InventoryTriggerTimeout`

Triggered inventory timeout in milliseconds.

Device will scan new tags specified timeout when no new tags are found.

If no new tags found within timeout, triggred inventory is considered done and results are sent to the host.

**Value:** Range is 0...60000, unit is milliseconds.

**See also:** `ModuleSetup`, `NurApi.SetSensorConfig`

###### Property: `KillTimeout`

Kill operation timeout.

**Value:** Unit is ms in range 20...2000.

###### Property: `LastConnectUri`

Get Uri of last Connect(Uri) call.

###### Property: `LinkFrequency`

Tag backscatter link frequency in Hz.

**Value:** | value | Link Frequency |
|---|---|
| 160000 | 160 kHz |
| 256000 | 256 kHz |
| 320000 | 320 kHz |

By default link frequency is set 256 kHz. 256 kHz or 320 kHz settings must be used when operating in DRM mode.

**Remarks**

**It is recommended to use RfProfile instead of this.**

**See also:** `NurApi.RfProfile`

###### Property: `LockTimeout`

Lock operation timeout.

**Value:** Unit is ms in range 20...2000.

###### Property: `OpFlags`

Operation flags.

**Value:** Enable hop events: `NurApi.OPFLAGS_EN_HOPEVENTS`

Enable "zero tags found" notification during inventory streams: `NurApi.OPFLAGS_INVSTREAM_ZEROS`

Enable run-time tuning events: `NurApi.OPFLAGS_EN_TUNEEVENTS`

Return tag phase angle in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR2/NUR3 modules.: `NurApi.OPFLAGS_EN_TAG_PHASE`

NXP Brand ID in NXP UCODE8 tag is enabled: `NurApi.OPFLAGS_EN_NXP_BID`

Inventory read will report EPC even if there is memory overrun error (f.ex. no user mem bank): `NurApi.OPFLAGS_EN_IR_MEM_OVERRUN`

Return tag phase angle difference in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR3 modules.: `NurApi.OPFLAGS_EN_PHASE_DIFF`

The value can be either of the above flags, none or both. OR-operation can be used as these flags are bits.

**See also:** `ModuleSetup`, `ModuleSetup.opFlags`

###### Property: `PeriodSetup`

Configures inventory stream's duty cycle.
Does not save the setting into the module's non-volatile settings.

**Value:** | Term | Description |
|---|---|
|  | `NurApi.NUR_AUTOPER_OFF`The internal duty cycle is not used. |
|  | `NurApi.NUR_AUTOPER_25`The inventory stream off time is a maximum of 1000ms. |
|  | `NurApi.NUR_AUTOPER_33`The inventory stream off time is a maximum of 500ms. |
|  | `NurApi.NUR_AUTOPER_50`The inventory stream off time is a maximum of 100ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_1000MS`The inventory stream off time is forced 1000ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_500MS`The inventory stream off time is forced 500ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_100MS`The inventory stream off time is forced 100ms. |

**Remarks**

The period setup (duty cycle) is available in all L2 devices but is usually used with Stix/mobile reader in order to reduce the inventory streams power consumption.

###### Property: `PeriodSetupSave`

Configures inventory stream's duty cycle.
Setting this value also saves the setting into the module's non-volatile settings.

**Value:** | Term | Description |
|---|---|
|  | `NurApi.NUR_AUTOPER_OFF`The internal duty cycle is not used. |
|  | `NurApi.NUR_AUTOPER_25`The inventory stream off time is a maximum of 1000ms. |
|  | `NurApi.NUR_AUTOPER_33`The inventory stream off time is a maximum of 500ms. |
|  | `NurApi.NUR_AUTOPER_50`The inventory stream off time is a maximum of 100ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_1000MS`The inventory stream off time is forced 1000ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_500MS`The inventory stream off time is forced 500ms. |
|  | `NurApi.NUR_AUTOPER_FORCE_100MS`The inventory stream off time is forced 100ms. |

**Remarks**

The period setup (duty cycle) is available in all L2 devices but is usually used with Stix/mobile reader in order to reduce the inventory streams power consumption.

###### Property: `ReadRssiFilter`

RSSI filters used for read operations.

**Value:** The value is specified with `RssiFilter`.

###### Property: `ReadTimeout`

Read operations timeout.

**Value:** Unit is ms in range 20...1000.

###### Property: `RealBaudRate`

NUR serial port baudrate in bps.  

If value not support, default 115200 bps will be set

**Value:** The value is real baudrate; it is up to the platform whether a given baudrate is supported or not.

Supported baudrates in the module are:

| Term | Description |
|---|---|

###### Property: `Region`

Operating region.

**Value:** | Term | Description |
|---|---|
|  | `NurApi.REGIONID_EU`ETSI / Europe |
|  | `NurApi.REGIONID_FCC`North-America |
|  | `NurApi.REGIONID_PRC`People's Republic of China (upper band) |
|  | `NurApi.REGIONID_MALAYSIA`Malaysia |
|  | `NurApi.REGIONID_BRAZIL`Brazil |
|  | `NurApi.REGIONID_AUSTRALIA`Australia |
|  | `NurApi.REGIONID_NEWZEALAND`New Zealand |
|  | `NurApi.REGIONID_JA250MW`Japan (maximum level = 250mW, mode = LBT, `NurApi.TxLevel` = 3 with 500mW device.) |
|  | `NurApi.REGIONID_JA500MW`Japan (maximum level = 500mW, mode = DRM) |
|  | `NurApi.REGIONID_KOREA`, `NurApi.REGIONID_KOREA_LBT`Korea (LBT). |
|  | `NurApi.REGIONID_INDIA`India |
|  | `NurApi.REGIONID_RUSSIA`Russia |
|  | `NurApi.REGIONID_VIETNAM`Vietnam |
|  | `NurApi.REGIONID_SINGAPORE`Singapore |
|  | `NurApi.REGIONID_THAILAND`Thailand |
|  | `NurApi.REGIONID_PHILIPPINES`Philippines |
|  | `NurApi.REGIONID_MOROCCO`Morocco |
|  | `NurApi.REGIONID_PERU`Peru |
|  | 0xFE (254), `NurApi.REGIONID_CUSTOM`                            Custom hoptable: `NurApi.REGIONID_CUSTOM`.                 See about custom hoptable:                 `NurApi.BuildCustomHoptable`                 `NurApi.SetCustomHoptable`. |

**Remarks**

NOTE: Devices are usually region locked, thus this cannot be changed.

Region setting changes reader to operate correctly for specified country of region.

It is very important that this setting is correct to meet local radio regulations.

The used antenna needs to be suitable for the selected operating region.

`ModuleSetup`

###### Property: `RfProfile`

RF profile setting. Device will select best RF settings based on profile.

**Value:** The value can be `NurApi.RFPROFILE_ROBUST`, `NurApi.RFPROFILE_NOMINAL` or `NurApi.RFPROFILE_HIGHSPEED`.

**See also:** `NurApi.RFPROFILE_ROBUST`, `NurApi.RFPROFILE_NOMINAL`, `NurApi.RFPROFILE_HIGHSPEED`, `NurApi.RFPROFILE_HIGHSPEED_2`, `NurApi.RFPROFILE_FAST`, `NurApi.RFPROFILE_AUTOSET`

###### Property: `RxDecoding`

RX encoding (Miller encoding) value FM0 (0), M2 (1), M4 (2) or M8 (3)

**Value:** | value | RX encoding |
|---|---|
| `NurApi.RXDECODING_FM0` | FM0 (least robust reception) |
| `NurApi.RXDECODING_M2` | Miller-2 |
| `NurApi.RXDECODING_M4` | Miller-4 (default) |
| `NurApi.RXDECODING_M8` | Miller-8 (most robust reception) |

**Remarks**

**It is recommended to use RfProfile instead of this.**

Miller coding scheme affects tag to reader data rate.
In practice miller coding affects the number of clock cycles that tag uses to modulate one symbol.
So when using higher Miller coding scheme tag to reader data rate will be slower but at the same time it is more robust to interferences.
Also tags response spectrum is more concentrated around the link frequency when using high miller scheme.
This allows receiver to use narrower channel filters. Selectable values are 2,4 and 8.
When operating on DRM mode values 4 or 8 should be used. By default Miller 4 is used.

**See also:** `NurApi.RfProfile`

###### Property: `RxSensitivity`

Receiver sensitivity setting.

**Value:** The value can be `NurApi.RXSENS_LOW`, `NurApi.RXSENS_NOMINAL` or `NurApi.RXSENS_HIGH`.

**See also:** `NurApi.RXSENS_LOW`, `NurApi.RXSENS_NOMINAL`, `NurApi.RXSENS_HIGH`

###### Property: `ScanSingleTriggerTimeout`

Triggered single tag scan timeout in milliseconds.

**Value:** Value is in range 50 - 500, unit is milliseconds.

**See also:** `ModuleSetup`

###### Property: `SelectedAntenna`

Zero based index of selected antenna logical id. ANTENNAID_AUTOSELECT (-1) means auto switch between enabled antennas.

**Value:** Zero based index of selected antenna logical id

Use value `NurApi.ANTENNAID_AUTOSELECT` to make the module auto switch between enabled antennas.

**Remarks**

Selected antenna must be enabled before set.

**See also:** `ModuleSetup`

###### Property: `Setup`

Get current connected device ModuleSetup

###### Property: `Title`

Title string of NUR module.

**Value:** A string value that represents the "friendly name" of the device.

###### Property: `TxLevel`

Transmission level attenuation in 1dB steps.

**Value:** Range is 0...19, 0...29, 0...31 depending on used device.

This value is subtracted from the maxiumum TX level producing the actual level as follows:

| TX Level | Description |
|---|---|
| 0 | 27 / 500 |
| 1 | 26 / 398 |
| 2 | 25 / 316 |
| 3 | 24 / 251 |
| 4 | 23 / 200 |
| 5 | 22 / 158 |
| 6 | 21 / 126 |
| 7 | 20 / 100 |
| 8 | 19 / 79 |
| 9 | 18 / 63 |
| 10 | 17 / 50 |
| 11 | 16 / 40 |
| 12 | 15 / 32 |
| 13 | 14 / 25 |
| 14 | 13 / 20 |
| 15 | 12 / 16 |
| 16 | 11 / 13 |
| 17 | 10 / 10 |
| 18 | 9 / 8 |
| 19 | 8 / 6 |

**Remarks**

Maximum output power is 27dBm (500mW) with NUR05W, NUR05WL and NUR05WL2 devices.

Maximum output power is 30dBm (1W) with NUR10W, NUR2, NUR3 devices.

Maximum output power is 32dBm (1.5W) with FR22 NUR3 devices (excl. FCC region).

When using high output power it must be remembered that then antenna's SWR (Standing Wave Ratio) comes even more important.

Because high output power combined with antenna with poor SWR means that lot of power is reflected back to receiver.

**See also:** `ModuleSetup`, `ModuleSetup.txLevel`, `NurApi.SetModuleSetup`, `NurApi.GetModuleSetup`

###### Property: `TxModulation`

Transmission modulation.

**Value:** The TX modulation is either ASK (`NurApi.TXMODULATION_ASK`) or PR-ASK (`NurApi.TXMODULATION_PRASK`).

**Remarks**

**It is recommended to use RfProfile instead of this.**

It is possible to use ASK (amplitude shift keying) or PR-ASK (phase reversed amplitude shift keying) modulation.
Tags that are compliant with ISO18000-6C (EPC C1G2) must support both of these modulations.
PR-ASK has lower transmission data rate and because of that it has narrower output spectrum.
This is why it is recommended to be used when operating in DRM mode. By default the modulation is set to `NurApi.TXMODULATION_PRASK`.

**See also:** `NurApi.RfProfile`

###### Property: `UserData`

User defined object

###### Property: `WriteRssiFilter`

RSSI filters used for write operations.

**Value:** The value is specified with `RssiFilter`.

###### Property: `WriteTimeout`

Write operations timeout.

**Value:** Unit is ms in range 20...2000.

###### Property: `XPCRemoval`

XPC removal control.

**Value:** Set to true (default) to enable the XPC removal when a tag is retrieved from the storage.

Setting to false leaves the tag's EPC contents "as is".

**Remarks**

If the XPC removal is set to true, then the API removes the possible XPC bytes from the beginning of the EPC data.

The removal is done when the tags are retrieved from the API's storage.

Also note that if the XPC is present and it is not removed, then the tags' operations (read, write, lock, kill, etc.) that are based on the use of the EPC will fail.

##### Events

###### Event: `AccessoryRangeDataEvent`

Occurs when the Accessory sensor value range data is received.

###### Event: `AccessorySensorChangedEvent`

Occurs when the sensor is added or removed to/from reader.

###### Event: `AccessorySensorToFFrBfaRawDataEvent`

Occurs when the Accessory sensor value ToF FR BFA raw data is received.

###### Event: `BootEvent`

BootEvent

###### Event: `ConnectedEvent`

Occurs when the reader is connected.

###### Event: `ConnectionStatusEvent`

Transport status event fired when change happend in transportation between reader and NurApi

###### Event: `DiagReportEvent`

DiagReportEvent

###### Event: `DisconnectedEvent`

Occurs when the reader is disconnected.

###### Event: `HopEvent`

Frequency hop.

###### Event: `InventoryExEvent`

Tag data from extended inventory stream.

###### Event: `InventoryStreamEvent`

Tag data from inventory stream

###### Event: `IOChangeEvent`

IO Change event

###### Event: `LogEvent`

Occurs when the notification Log is received.

###### Event: `NXPAlarmStreamEvent`

NXP EAS Alarm state change.

###### Event: `OnAccBarcodeResult`

Occurs when the accessory barcode reader produces a scan result.

###### Event: `OnAccRangeDataEvent`

Occurs when the Accessory sensor value range data is received.

###### Event: `OnAccSensorChangedEvent`

Occurs when the sensor is added or removed to/from reader.

###### Event: `PermissionRequiredEvent`

Triggered when a reconnected device lacks the necessary permissions for nur to proceed.

###### Event: `TraceTagEvent`

Tag data from trace tag

###### Event: `TriggerReadEvent`

Triggered tag read.

###### Event: `TuneEvent`

The automatic tune event.

###### Event: `UnknownNotifyEvent`

Occurs when the unknown notification is received.

###### Event: `WLanSearchEvent`

WLanSearchEvent
NOTE: Not tested as products do not support this functionality

##### Fields

###### Constants `MAX_*`

| Name | Description |
|---|---|
| `MAX_EPC_LENGTH` | Maximum length of EPC data in bytes. |
| `MAX_EPC_LENGTH_EX` | Maximum length of EPC data in bytes with extended tag data. |
| `MAX_IRDATA_LENGTH` | Maximum length of associated inventory read data |
| `MAX_EE_EPCLEN` | Maximum length of an enumerated EPC. |
| `MAX_BLOCKLOCK_WORDS` | Maximum number of block permalock words in response or lock parameter. |
| `MAX_EE_TIDLEN` | Maximum length of assigned TID data in EPC enumeration. |
| `MAX_SELMASK` | Maximum length of Select mask data in bytes. |
| `MAX_BITSTR_BITS` | Maximum number of bits in the custom bit stream. |
| `MAX_REGION_NAME` | Maximum length of region name in bytes. |
| `MAX_GPIO` | Maximum number of GPIOs. |
| `MAX_MAPPINGLEN` | Maximum name of an antenna mapping. |
| `MAX_FILTERS` | Maximum number of extended inventory filters. |
| `MAX_CUSTOM_FREQS` | Maximum number of custom frequencies in custom hop table. |
| `MAX_FREQUENCY` | Maximum value of custom hop table frequency in kHz. |
| `MAX_PAUSETIME` | Maximum value of custom hop table pause time. |
| `MAX_SERIAL_LENGTH` | Max serial length. |
| `MAX_NAME_LENGTH` | Max name length. |
| `MAX_FCCID_LENGTH` | Max fccId length. |
| `MAX_HWVER_LENGTH` | Max hwVer length. |
| `MAX_TAM_OFFSET` | ISO29167-10 authentication: maximum block offset/address value. |
| `MAX_CONFIG_REGIONS` | Maximum number of regions. |
| `MAX_ANTENNAS` | Maximum number of antennas. |
| `MAX_ANTENNAS_EX` | Maximum number of antennas in extended version. |
| `MAX_SCRATCHPAGE` | Last available user scratch data page in the module. |
| `MAX_SCRATCHBYTES` | Maximum number of bytes to write into a scratch page. |
| `MAX_WLAN_PROFILE_INDEX` | Maximum allowed WLAN profile index. |
| `MAX_AUTHRESPBITS` | Gen2 version 2 "Authenticate": maximum expected RX length in bits. |

###### Constants `BR_*`

| Name | Description |
|---|---|
| `BR_115200` | Baudrate 115200 bps |
| `BR_230400` | Baudrate 230400 bps |
| `BR_500000` | Baudrate 500000 bps |
| `BR_1000000` | Baudrate 1000 000 bps |
| `BR_1500000` | Baudrate 1500 000 bps |
| `BR_38400` | Baudrate 38400 bps |
| `BR_9600` | Baudrate 9600 bps |

###### Constants `LOCK_*`

| Name | Description |
|---|---|
| `LOCK_OPEN` | Associated memory bank is readable from open/secured states. |
| `LOCK_PERMAWRITE` | Associated memory bank is permanently writable from open/secured states and may never be locked. |
| `LOCK_SECURED` | Associated memory bank is writable only from secured state. |
| `LOCK_PERMALOCK` | Associated memory bank is not writable from any state. |
| `LOCK_USERMEM` | User memory bank lock mask. |
| `LOCK_TIDMEM` | TID memory bank lock mask. |
| `LOCK_EPCMEM` | EPC memory bank lock mask. |
| `LOCK_ACCESSPWD` | Access password memory lock mask. |
| `LOCK_KILLPWD` | Kill password memory lock mask. |

###### Constants `GPIO_*`

| Name | Description |
|---|---|
| `GPIO_ACT_NONE` | No action. GPIO state can be read manually. |
| `GPIO_ACT_NOTIFY` | Send `NurApi.IOChangeEvent` notification on GPIO/sensor change. |
| `GPIO_ACT_SCANTAG` | Start single tag scan on GPIO/sensor change. Tag result is received with `NurApi.TriggerReadEvent` notification. |
| `GPIO_ACT_INVENTORY` | Start inventory on GPIO/sensor change. Result is received with `NurApi.InventoryStreamEvent` notification. |
| `GPIO_EDGE_FALLING` | Trigger IO's configured action on falling edge of IO |
| `GPIO_EDGE_RISING` | Trigger IO's configured action on rising edge of IO |
| `GPIO_EDGE_BOTH` | Trigger IO's configured action on both edges of IO |
| `GPIO_TYPE_OUTPUT` | GPIO is configured as output pin. |
| `GPIO_TYPE_INPUT` | GPIO is configured as input pin. |
| `GPIO_TYPE_RFIDON` | GPIO will act as a Sampo S1 RFID on led (high active) |
| `GPIO_TYPE_RFIDREAD` | GPIO will act as a Sampo S1 RFID read led (high active) |
| `GPIO_TYPE_BEEPER` | GPIO will act as a beeper (high active) |
| `GPIO_TYPE_ANTCTL1` | GPIO is configured as antenna control 1 (bit0) |
| `GPIO_TYPE_ANTCTL2` | GPIO is configured as antenna control 2 (bit1) |

###### Constants `REGIONID_*`

| Name | Description |
|---|---|
| `REGIONID_CURRENT` | Region ID: Represent current region set in to module |
| `REGIONID_EU` | Region ID: Europe |
| `REGIONID_FCC` | Region ID: North-America |
| `REGIONID_PRC` | Region ID: People's Republic of China (Upper Band) |
| `REGIONID_MALAYSIA` | Region ID: Malaysia |
| `REGIONID_BRAZIL` | Region ID: Brazil |
| `REGIONID_AUSTRALIA` | Region ID: Australia |
| `REGIONID_NEWZEALAND` | Region ID: New Zealand |
| `REGIONID_JA250MW` | Region ID: Japan 250mW LBT |
| `REGIONID_JA500MW` | Region ID: Japan 500mW DRM |
| `REGIONID_KOREA` | Region ID: Korean LBT. |
| `REGIONID_KOREA_LBT` | Region ID: Korean LBT. For compatibility |
| `REGIONID_INDIA` | Region ID: India. |
| `REGIONID_RUSSIA` | Region ID: Russian (EU with first channel missing). |
| `REGIONID_VIETNAM` | Region ID: Vietnamese. |
| `REGIONID_SINGAPORE` | Region ID: Singapore. |
| `REGIONID_THAILAND` | Region ID: Thailand. For compatibility. |
| `REGIONID_PHILIPPINES` | Region ID: Philippines. For compatibility. |
| `REGIONID_MOROCCO` | Region ID: Morocco. |
| `REGIONID_PERU` | Region ID: Peru. |
| `REGIONID_ISRAEL` | Region ID: Israel. |
| `REGIONID_HONGKONG` | Region ID: Hong Kong. |
| `REGIONID_LAST` | Last region ID. |
| `REGIONID_CUSTOM` | Region ID: custom |

###### Constants `SETUP_*`

| Name | Description |
|---|---|
| `SETUP_LINKFREQ` | linkFreq field in struct ModuleSetup is valid |
| `SETUP_RXDEC` | rxDecoding field in struct ModuleSetup is valid |
| `SETUP_TXLEVEL` | txLevel field in struct ModuleSetup is valid |
| `SETUP_TXMOD` | txModulation field in struct ModuleSetup is valid |
| `SETUP_REGION` | regionId field in struct ModuleSetup is valid |
| `SETUP_INVQ` | inventoryQ field in struct ModuleSetup is valid |
| `SETUP_INVSESSION` | inventorySession field in struct ModuleSetup is valid |
| `SETUP_INVROUNDS` | inventoryRounds field in struct ModuleSetup is valid |
| `SETUP_ANTMASK` | antennaMask field in struct ModuleSetup is valid |
| `SETUP_SCANSINGLETO` | scanSingleTriggerTimeout field in struct ModuleSetup is valid |
| `SETUP_INVENTORYTO` | inventoryTriggerTimeout field in struct ModuleSetup is valid |
| `SETUP_SELECTEDANTENNA` | selectedAntenna field in struct ModuleSetup is valid |
| `SETUP_OPFLAGS` | opFlags field in struct ModuleSetup is valid |
| `SETUP_INVTARGET` | inventoryTarget field in struct ModuleSetup is valid |
| `SETUP_INVEPCLEN` | inventoryEpcLength field in struct ModuleSetup is valid |
| `SETUP_READRSSIFILTER` | readRssiFilter field in struct ModuleSetup is valid |
| `SETUP_WRITERSSIFILTER` | writeRssiFilter field in struct ModuleSetup is valid |
| `SETUP_INVRSSIFILTER` | inventoryRssiFilter field in struct ModuleSetup is valid |
| `SETUP_READTIMEOUT` | readTO field in struct ModuleSetup is valid. |
| `SETUP_WRITETIMEOUT` | writeTO field in struct ModuleSetup is valid. |
| `SETUP_LOCKTIMEOUT` | lockTO field in struct ModuleSetup is valid. |
| `SETUP_KILLTIMEOUT` | killTO field in struct ModuleSetup is valid. |
| `SETUP_AUTOPERIOD` | periodSetup field in struct ModuleSetup is valid. |
| `SETUP_PERANTPOWER` | perAntPower field in struct ModuleSetup is valid. |
| `SETUP_PERANTOFFSET` | perAntOffset field in struct ModuleSetup is valid. |
| `SETUP_ANTMASKEX` | antennaMaskEx field in struct NUR_MODULESETUP is valid. |
| `SETUP_AUTOTUNE` | autotune field in struct NUR_MODULESETUP is valid (run-time automatic tuning). |
| `SETUP_PERANTPOWER_EX` | The antPowerEx field in struct NUR_MODULESETUP is valid. |
| `SETUP_RXSENS` | rxSensitivity field in struct NUR_MODULESETUP is valid. |
| `SETUP_RFPROFILE` | rfProfile field in struct NUR_MODULESETUP is valid. |
| `SETUP_TO_SLEEP_TIME` | "To sleep time" field in struct NUR_MODULESETUP is valid. |
| `SETUP_ALL` | All setup flags. |

###### Constants `OPFLAGS_*`

| Name | Description |
|---|---|
| `OPFLAGS_EN_HOPEVENTS` | Notification NUR_NOTIFICATION_HOPEVENT is enabled. |
| `OPFLAGS_INVSTREAM_ZEROS` | Inventory stream frunction will report zero count inventory rounds also. |
| `OPFLAGS_EN_TUNEEVENTS` | Set this flag to enable the run-time tuning events.  See also the `NurApi.TuneEvent`, `TuneEventArgs` and `TuneEventData`. |
| `OPFLAGS_EN_EXACT_BLF` | Return exact BLF in Hz in tag meta data frequency field. Supported only in NUR L2 modules. |
| `OPFLAGS_EN_TAG_PHASE` | Return tag phase angle in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR2 modules. |
| `OPFLAGS_EN_NXP_BID` | NXP Brand ID in NXP UCODE8 tag is enabled |
| `OPFLAGS_EN_IR_MEM_OVERRUN` | Inventory read will report EPC even if there is memory overrun error (f.ex. no user mem bank) |
| `OPFLAGS_EN_PHASE_DIFF` | Return tag phase angle difference in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR3 modules. |

###### Constants `CHERR_*`

| Name | Description |
|---|---|
| `CHERR_COUNT` | Custom hop table command error code: Invalid custom hoptable channel count |
| `CHERR_CHTIME` | Custom hop table command error code: Invalid custom hoptable channel time |
| `CHERR_PAUSETIME` | Custom hop table command error code: Invalid custom hoptable pause time |
| `CHERR_LF` | Custom hop table command error code: Invalid custom hoptable max LF |
| `CHERR_TARI` | Custom hop table command error code: Invalid custom hoptable Tari |
| `CHERR_SIZE` | Custom hop table command error code: Custom hoptable size mismatch |
| `CHERR_FREQ` | Custom hop table command error code: Encountered invalid frequency in custom hoptable |
| `CHERR_TXLIMIT` | Custom hop table command error code: Encountered invalid maximum TX level |
| `CHERR_LBT` | Custom hop table command error code: Encountered invalid LBT threshold |

###### Constants `ANTENNAID_*`

| Name | Description |
|---|---|
| `ANTENNAID_AUTOSELECT` | Auto switch antenna based on supported antenna count. |
| `ANTENNAID_1` | Antenna ID 1 |
| `ANTENNAID_2` | Antenna ID 2 |
| `ANTENNAID_3` | Antenna ID 3 |
| `ANTENNAID_4` | Antenna ID 4 |
| `ANTENNAID_5` | Antenna ID 5 |
| `ANTENNAID_6` | Antenna ID 6 |
| `ANTENNAID_7` | Antenna ID 7 |
| `ANTENNAID_8` | Antenna ID 8 |
| `ANTENNAID_9` | Antenna ID 9 |
| `ANTENNAID_10` | Antenna ID 10 |
| `ANTENNAID_11` | Antenna ID 11 |
| `ANTENNAID_12` | Antenna ID 12 |
| `ANTENNAID_13` | Antenna ID 13 |
| `ANTENNAID_14` | Antenna ID 14 |
| `ANTENNAID_15` | Antenna ID 15 |
| `ANTENNAID_16` | Antenna ID 16 |
| `ANTENNAID_17` | Antenna ID 17 |
| `ANTENNAID_18` | Antenna ID 18 |
| `ANTENNAID_19` | Antenna ID 19 |
| `ANTENNAID_20` | Antenna ID 20 |
| `ANTENNAID_21` | Antenna ID 21 |
| `ANTENNAID_22` | Antenna ID 22 |
| `ANTENNAID_23` | Antenna ID 23 |
| `ANTENNAID_24` | Antenna ID 24 |
| `ANTENNAID_25` | Antenna ID 25 |
| `ANTENNAID_26` | Antenna ID 26 |
| `ANTENNAID_27` | Antenna ID 27 |
| `ANTENNAID_28` | Antenna ID 28 |
| `ANTENNAID_29` | Antenna ID 29 |
| `ANTENNAID_30` | Antenna ID 30 |
| `ANTENNAID_31` | Antenna ID 31 |
| `ANTENNAID_32` | Antenna ID 32 |

###### Constants `ANTENNAMASK_*`

| Name | Description |
|---|---|
| `ANTENNAMASK_1` | Mask for antenna ID 1. |
| `ANTENNAMASK_2` | Mask for antenna ID 2. |
| `ANTENNAMASK_3` | Mask for antenna ID 3. |
| `ANTENNAMASK_4` | Mask for antenna ID 4. |
| `ANTENNAMASK_5` | Mask for antenna ID 5. |
| `ANTENNAMASK_6` | Mask for antenna ID 6. |
| `ANTENNAMASK_7` | Mask for antenna ID 7. |
| `ANTENNAMASK_8` | Mask for antenna ID 8. |
| `ANTENNAMASK_9` | Mask for antenna ID 9. |
| `ANTENNAMASK_10` | Mask for antenna ID 10. |
| `ANTENNAMASK_11` | Mask for antenna ID 11. |
| `ANTENNAMASK_12` | Mask for antenna ID 12. |
| `ANTENNAMASK_13` | Mask for antenna ID 13. |
| `ANTENNAMASK_14` | Mask for antenna ID 14. |
| `ANTENNAMASK_15` | Mask for antenna ID 15. |
| `ANTENNAMASK_16` | Mask for antenna ID 16. |
| `ANTENNAMASK_17` | Mask for antenna ID 17. |
| `ANTENNAMASK_18` | Mask for antenna ID 18. |
| `ANTENNAMASK_19` | Mask for antenna ID 19. |
| `ANTENNAMASK_20` | Mask for antenna ID 20. |
| `ANTENNAMASK_21` | Mask for antenna ID 21. |
| `ANTENNAMASK_22` | Mask for antenna ID 22. |
| `ANTENNAMASK_23` | Mask for antenna ID 23. |
| `ANTENNAMASK_24` | Mask for antenna ID 24. |
| `ANTENNAMASK_25` | Mask for antenna ID 25. |
| `ANTENNAMASK_26` | Mask for antenna ID 26. |
| `ANTENNAMASK_27` | Mask for antenna ID 27. |
| `ANTENNAMASK_28` | Mask for antenna ID 28. |
| `ANTENNAMASK_29` | Mask for antenna ID 29. |
| `ANTENNAMASK_30` | Mask for antenna ID 30. |
| `ANTENNAMASK_31` | Mask for antenna ID 31. |
| `ANTENNAMASK_32` | Mask for antenna ID 32. |
| `ANTENNAMASK_ALL` | All antennas  mask IDs combined |

###### Constants `AT_*`

| Name | Description |
|---|---|
| `AT_NR_OF_BANDS` | Number of bands that antenna tuning occurs in. |
| `AT_LOWEST_BANDNUM` | Lowest band number. |
| `AT_LAST_BAND` | Last antenna tune band number. |
| `AT_BAND0` | Band 0 frequency in kHz |
| `AT_BAND1` | Band 1 frequency in kHz |
| `AT_BAND2` | Band 2 frequency in kHz |
| `AT_BAND3` | Band 3 frequency in kHz |
| `AT_BAND4` | Band 4 frequency in kHz |
| `AT_BAND5` | Band 5 frequency in kHz |
| `AT_BANDWIDTH` | A single band's width in kHz |

###### Constants `NUR_*`

| Name | Description |
|---|---|
| `NUR_AUTOPER_OFF` | Auto-inventory off. |
| `NUR_AUTOPER_25` | Auto-inventory has one second off time. |
| `NUR_AUTOPER_33` | Auto-inventory has 500ms off time. |
| `NUR_AUTOPER_50` | Auto-inventory has 100ms off time. |
| `NUR_AUTOPER_FORCE_1000MS` | Force 1s sleep |
| `NUR_AUTOPER_FORCE_500MS` | Force 500ms sleep |
| `NUR_AUTOPER_FORCE_100MS` | Force 100ms sleep |
| `NUR_DC_RXDECFM0` | RX modulation FM0. |
| `NUR_DC_RXDECM2` | RX modulation Miller-2. |
| `NUR_DC_RXDECM4` | RX modulation Miller-4. |
| `NUR_DC_RXDECM8` | RX modulation Miller-8. |
| `NUR_DC_RXLF40k` | Backscatter LF of 40kHz. |
| `NUR_DC_RXLF80k` | Backscatter LF of 80kHz. |
| `NUR_DC_RXLF160k` | Backscatter LF of 160kHz. |
| `NUR_DC_RXLF256k` | Backscatter LF of 256kHz. |
| `NUR_DC_RXLF320k` | Backscatter LF of 320kHz. |
| `NUR_DC_RXLF640k` | Backscatter LF of 640kHz. |
| `NUR_DC_RXLFres1` | Reserved LF 1. |
| `NUR_DC_RXLFres2` | Reserved LF 2. |
| `NUR_DC_HASBEEP` | The device has beeper available. |
| `NUR_DC_HASLIGHT` | The device has light sensor available. |
| `NUR_DC_HASTAP` | The device has tap sensor available. |
| `NUR_DC_ANTTUNE` | The antenna or antennas in this device can be tuned. |
| `NUR_DC_CHSCANNER` | This module can run channel scan. |
| `NUR_DC_INVREAD` | This module supports inventory + read. |
| `NUR_DC_ANTPOWER` | This module supports per antenna power setting. |
| `NUR_DC_POWEROFS` | This module supports per antenna low power setting offset -1...1. |
| `NUR_DC_BEAMANTENNA` | This module supports beam forming antenna. |
| `NUR_DC_FETCHSINGLE` | This module supports fetching tags one by one. |
| `NUR_DC_ANTENNAMAP` | This module provides antenna mapping information. |
| `NUR_DC_GEN2VER2` | Bit is set if this module support Gen 2 version 2 commands (at least partly). |
| `NUR_DC_RFPROFILE` | Bit is set if this module FW supports RF profile setting. |
| `NUR_DC_DIAG` | Bit is set if this module FW supports diagnostics commands. |
| `NUR_DC_TAGPHASE` | Bit is set if this module FW supports tag phase info. see OPFLAGS_EN_TAG_PHASE |
| `NUR_DC_SLEEP` | Bit is set if this module FW supports sleep. |
| `NUR_DC_PHASEDIFF` | This module FW supports tag phase diff info. see OPFLAGS_EN_PHASE_DIFF |
| `NUR_DC_GEN2X` | The module FW supports impinj Gen2X at some level. |
| `NUR_IR_EPCDATA` | Inventory read is the type of EPC + data. |
| `NUR_IR_DATAONLY` | Inventory read is the type of data only (placed into the EPC field). |
| `NUR_IR_EPCXTID` | The XTID based read is appended to the EPC data. |
| `NUR_IR_XTIDONLY` | The XTID based read result is returned in place of the EPC data. |
| `NUR_IR_XTID_EX_FLAG` | The flag bit in the inventory + read type that tells whether the TID contents is included in whole or serial only. |

###### Constants `FACTION_*`

| Name | Description |
|---|---|
| `FACTION_0` | Filter action for extended inventory:  Matching tags: assert SL or inventoried session flag -> A. Non-matching: deassert SL or inventoried session flag -> B. |
| `FACTION_1` | Filter action for extended inventory:  Matching tags: assert SL or inventoried session flag -> A. Non-matching: do nothing. |
| `FACTION_2` | Filter action for extended inventory:  Matching tags: do nothing. Non-matching: deassert SL or inventoried session -> B. |
| `FACTION_3` | Filter action for extended inventory:  Matching tags: negate SL or invert inventoried session flag (A->B, B->A). Non-matching: do nothing. |
| `FACTION_4` | Filter action for extended inventory:  Matching tags: deassert SL or inventoried session flag -> B. Non-matching: assert SL or inventoried session flag -> A. |
| `FACTION_5` | Filter action for extended inventory:  Matching tags: deassert SL or inventoried session flag -> B. Non-matching: do nothing. |
| `FACTION_6` | Filter action for extended inventory:  Matching tags: do nothing. Non-matching: assert SL or inventoried session flag -> A. |
| `FACTION_7` | Filter action for extended inventory:  Matching tags: do nothing. Non-matching: negate SL or invert inventoried session flag (A->B, B->A). |

###### Constants `CHIPVER_*`

| Name | Description |
|---|---|
| `CHIPVER_AS3992` | Chip version AS3992. |
| `CHIPVER_AS3993` | Chip version AS3993. |
| `CHIPVER_R2000` | Chip version R2000. |
| `CHIPVER_R2000D` | Chip version R2000 direct |
| `CHIPVER_E310` | Chip version impinj E310 |
| `CHIPVER_E510` | Chip version impinj E510 |
| `CHIPVER_E710` | Chip version impinj E710 |
| `CHIPVER_E910` | Chip version impinj E910 |

###### Constants `MODULETYPE_*`

| Name | Description |
|---|---|
| `MODULETYPE_NUR05W` | Module type NUR05W. |
| `MODULETYPE_NUR05WL` | Module type NUR05WL. |
| `MODULETYPE_NUR05WL2` | Module type NUR05WL2. |
| `MODULETYPE_NUR10W` | Module type NUR10W (1W module). |
| `MODULETYPE_NUR2_1W` | Module type NUR2-1W (1W module). |
| `MODULETYPE_NUR2_01W` | Module type nanoNUR-01W |
| `MODULETYPE_NUR3_RSVD` | Reserved |
| `MODULETYPE_NUR3FR_1W` | Module type FR22 integrated nur3 |
| `MODULETYPE_NUR3MOD_1W` | Module type NUR3-1W |
| `MODULETYPE_NUR3IR_1W` | Module type NUR3IR_1W |
| `MODULETYPE_NUR3MOD_0W1` | Module type NUR3MOD_0W1 |
| `MODULETYPE_NUR3MOD_0W5` | Module type NUR3MOD_0W5 |
| `MODULETYPE_NUR3IOLINK_1W` | Module type NUR3IOLINK_1W |
| `MODULETYPE_NUR3FR26_1W` | Module type NUR3FR26_1W |

###### Constants `RFPROFILE_*`

| Name | Description |
|---|---|
| `RFPROFILE_ROBUST` | Robust RF profile. This profile is recommended to use in noisy RF environments. |
| `RFPROFILE_NOMINAL` | Nominal RF profile. This profile works good in most environments. |
| `RFPROFILE_HIGHSPEED` | High speed RF profile. This profile provides best throughput, but is prone to RF interference. |
| `RFPROFILE_HIGHSPEED_2` | High speed 2 RF profile. This profile optimizes for speed by reducing the Tari value for the pulse interval encoded (PIE) data. |
| `RFPROFILE_FAST` | Fast RF profile. This profile provides a balance between speed and sensitivity. |
| `RFPROFILE_AUTOSET` | Autoset RF profile. This profile switches across different rf modes during each inventory. |

###### Constants `DIAG_*`

| Name | Description |
|---|---|
| `DIAG_GETREPORT_NONE` | Diagnostics get flag: None |
| `DIAG_GETREPORT_RESET_STATS` | Diagnostics get flag: Reset all diagnostics statistics to zero. |
| `DIAG_CFG_NOTIFY_NONE` | Diagnostics config flag: Never send diagnostics report notification. |
| `DIAG_CFG_NOTIFY_PERIODIC` | Diagnostics config flag: Send diagnostics report notification periodically. |
| `DIAG_CFG_NOTIFY_WARN` | Diagnostics config flag: Send diagnostics report notification on warning/error. |
| `DIAG_CFG_FW_ERROR_LOG` | Diagnostics config flag: Module sends error log messages. Messages are prefixed with "FW:". |
| `DIAG_CFG_FW_DEBUG_LOG` | Diagnostics config flag: Module sends verbose debug log messages. Messages are prefixed with "FW:". |
| `DIAG_REPORT_PERIODIC` | Diagnostics return flag: Set in DiagReport.flags when module sends periodic report. |
| `DIAG_REPORT_TEMP_HIGH` | Diagnostics return flag: Set in DiagReport.flags if module temperature is high. Host application SHOULD stop performing RF operations for a while. |
| `DIAG_REPORT_TEMP_OVER` | Diagnostics return flag: Set in DiagReport.flags if module temperature is over limits. All RF operations will fail with error NUR_ERROR_OVER_TEMP in this stage. |
| `DIAG_REPORT_LOWVOLT` | Diagnostics return flag: Set in DiagReport.flags if low voltage is detected. All RF operations will fail with error NUR_ERROR_LOW_VOLTAGE in this stage. |

###### Constants `GEN2X_*`

| Name | Description |
|---|---|
| `GEN2X_ENABLE_SCANID` | Enable ScanId feature |
| `GEN2X_ENABLE_TAGFOCUS` | Enable TagFocus feature |
| `GEN2X_ENABLE_FASTID` | Enable FastID feature |
| `GEN2X_ACCEPT_CRC5_CRC5PLUS` | Enable accepting both CRC5 and CRC5Plus for CR protection |
| `GEN2X_POWER_BOOST` | Enable gen2v3 power boost feature |
| `GEN2X_ENABLE_PROTECTED_MODE` | Enable protected mode feature |
| `GEN2X_ALL_FLAGS` | All supported flags |

###### Constants `CXF_*`

| Name | Description |
|---|---|
| `CXF_ASWRITE` | Custom exchange flag: Act if this was a write operation |
| `CXF_USEHANDLE` | Custom exchange flag: RN16 resulting from sinulation shall be appended to the bit stream |
| `CXF_XORRN16` | Custom exchange flag: if CXF_ASWRITE == '1' and TX bit length == 16, XOR the TX data with RN16 received from the tag access. |
| `CXF_TXONLY` | Custom exchange flag: Transmit only. No response is expected. |
| `CXF_NOTXCRC` | Custom exchange flag: No TX CRC. |
| `CXF_NORXCRC` | Custom exchange flag: Do not decode RX CRC, return the response as is. |
| `CXF_CRC5` | Custom exchange flag: TX uses CRC-5 instead of CRC-16. |
| `CXF_NORXLEN` | Custom exchange flag: Unknown RX length. RX length is ignored. |
| `CXF_STRIPHND` | Custom exchange flag: Leave out the bacscattered handle in the response. |
| `CXF_SKIPRESEL` | Custom exchange flag: Skip tag re-selection during the custom exchange. |

###### Other fields

| Name | Description |
|---|---|
| `RESET_BOOTLOADER_DFU_START` | Instruct the restart command to enter the DFU mode. |
| `RESET_POWEROFF` | Instruct the restart command to actually power off the device. |
| `AccBarcodeEncoding` | Set/Get Barcode Encoding. Default UTF8 |
| `IDBUFFER_ENTRY_SIZE_WITH_IRDATA` | The size of the IDBUFFER entry with IrData in bytes. |
| `IDBUFFER_ENTRY_SIZE_WITHOUT_IRDATA` | The size of the IDBUFFER entry without IrData in bytes. |
| `IDBUFFER_ENTRY_SIZE_WITHOUT_METADATA` | The size of the IDBUFFER entry without MetaData in bytes. |
| `MAXN_ANTMAPPINGS` | Maximum number of antenna mappings. |
| `MIN_FREQUENCY` | Minimum value of custom hop table frequency in kHz. |
| `MIN_LBTTHRESH` | Minimum LBT threshold |
| `CUSTHT_TARI_125` | Custom hoptable's Tari setting 12.5us. |
| `CUSTHT_TARI_25` | Custom hoptable's Tari setting 25us. |
| `DEFAULT_BAUDRATE` | Default baudrate 115200 bps |
| `LOG_VERBOSE` | Log level Verbose |
| `LOG_ERROR` | Log level Error. Errors are logged |
| `LOG_USER` | Log level User. User defined log items |
| `LOG_DATA` | Log level data. Data items are shown in the log |
| `LOG_ALL` | All items are logged |
| `BANK_PASSWD` | Password memory bank. |
| `BANK_EPC` | EPC memory bank. |
| `BANK_TID` | TID memory bank. |
| `BANK_USER` | User memory bank. |
| `TRACETAG_NO_EPC` | Do not transfer EPC back from trace tag function. |
| `TRACETAG_START_CONTINUOUS` | Start continuous tag tracing. |
| `TRACETAG_STOP_CONTINUOUS` | Stop continuous tag tracing. |
| `AUTOTUNE_MODE_ENABLE` | Enable autotune procedure during RF operations. |
| `AUTOTUNE_MODE_THRESHOLD_ENABLE` | Enable dBm threshold for autotune procedure. |
| `GEN2V2_MAX_AUTHBYTES` | Gen 2 version 2 "Authenticate": maximum byte length of the message. |
| `SZ_TAM2_CMACLEN` | ISO29167-10 authentication: size of protection mode 2,3 CMAC in bytes. |
| `TAM_CHALLENGE_BYTELEN` | ISO29167-10 authentication: Challenge length |
| `TAM1_MSG_BYTELENGTH` | ISO29167-10 authentication: TAM1 message length |
| `TAM_KEY_BYTELENGTH` | ISO29167-10 authentication: Key length |
| `ISO29167_TAM_CONSTANT` | ISO29167-10 authentication: Fixed CTAM value |
| `GPIO1` | Module GPIO 1 |
| `GPIO2` | Module GPIO 2 |
| `GPIO3` | Module GPIO 3 |
| `GPIO4` | Module GPIO 4 |
| `GPIO5` | Module GPIO 5 |
| `GPIO6` | Module GPIO 6 |
| `GPIO7` | Module GPIO 7 |
| `GPIO8` | Module GPIO 8 |
| `STORE_RF` | Store RF settings to module internal non-volatile memory. |
| `STORE_GPIO` | Store GPIO/Sensor settings to module internal non-volatile memory. |
| `STORE_BAUDRATE` | Store baudrate settings to module internal non-volatile memory. |
| `STORE_OPFLAGS` | Store Opflags settings to module internal non-volatile memory. |
| `STORE_ALL` | Store all settings to module internal non-volatile memory. |
| `SZ_NUR_DEVCAPS` | Constant size of the device capabilites. |
| `RXDECODING_FM0` | RX modulation FM0. |
| `RXDECODING_M2` | Miller-2 |
| `RXDECODING_M4` | Miller-4 |
| `RXDECODING_M8` | Miller-8 |
| `TXMODULATION_ASK` | TX modulation |
| `TXMODULATION_PRASK` | PR-ASK |
| `LAST_ANTENNAID` | Last valid antenna ID |
| `TUNEBAND_EU` | EU tuning band definition. |
| `TUNEBAND_FCC1` | FCC lower tuning band definition. |
| `TUNEBAND_FCC2` | FCC upper tuning band definition. |
| `MIN_LBT_THRESHOLD` | Minimum value for the LBT threshold parameter in `NurApi.SetCustomHoptableEx`. |
| `MIN_SCRATCHPAGE` | First available user scratch data page in the module. |
| `MIN_SCRATCHBYTES` | Minimum number of bytes to write into a scratch page. |
| `INVTARGET_A` | Query tags with inventoried flag set to A |
| `INVTARGET_B` | Query tags with inventoried flag set to B |
| `INVTARGET_AB` | Query tags with inventoried flag set to A or B |
| `SELSTATE_ALL` | G2 Query sel state: All tags respond, ignoring SL flag |
| `SELSTATE_NOTSL` | G2 Query sel state: Only tags with SL deasserted responds |
| `SELSTATE_SL` | G2 Query sel state: Only tags with SL asserted responds |
| `SESSION_S0` | Session 0 |
| `SESSION_S1` | Session 1 |
| `SESSION_S2` | Session 2 |
| `SESSION_S3` | Session 3 |
| `SESSION_SL` | SL Flag (filter) |
| `INVALID_HANDLE_VALUE` | Invalid handle value (-1) |
| `XPC_W1_MASK` | The XPC_W1 presence mask. |
| `XPC_XEB_MASK` | The XPC_W2 presence mask. |
| `RXSENS_NOMINAL` | Receiver sensitivity "nominal". |
| `RXSENS_LOW` | Receiver sensitivity "low". |
| `RXSENS_HIGH` | Receiver sensitivity "high". |
| `HOSTFLAGS_EN_UNSOL_ACK` | When set, module sends ACK request with unsolicited packets. |
| `FW_INFO_REQUEST_SEC_CHIP` | Parameter value used in GetSecChipFWINFO when requesting secondary chip FW info |
| `TID_HIDE_NONE` | Gen2 version 2 TID hide policy: hide none. |
| `TID_HIDE_SOME` | Gen2 version 2 TID hide policy: hide some. |
| `TID_HIDE_ALL` | Gen2 version 2 TID hide policy: hide all. |
| `UTRACE_RANGE_NORMAL` | Gen2 version 2: Untraceable's range reduction policy: normal. |
| `UTRACE_RANGE_TOGGLE` | Gen2 version 2: Untraceable's range reduction policy: toggle (NOTE: not supported at the moment). |
| `UTRACE_RANGE_REDUCE` | Gen2 version 2: Untraceable's range reduction policy: reduce. |
| `GEN2V2_MAX_AUTHBITS` | Gen2 version 2 "Authenticate": maximum bit length of the message. |
| `GEN2V2_MIN_AUTHBITS` | Gen2 version 2 "Authenticate": minimum bit length of the message. |
| `TAM_KEYLEN` | ISO29167-10 authentication: key length. |
| `TAM_MAXBLOCKS` | ISO29167-10 authentication: maximum block at once. |
| `SZ_TAM2_BLOCK` | ISO29167-10 authentication: size of single custom data block in bytes. |
| `TAM2_MSG_BITLEN` | ISO29167-10 authentication: size of TAM2 message in bits |
| `RW_SEC` | Operation is secured. |
| `RW_SBP` | Singulation block present. |
| `RW_EA1` | Extended address 1. In the singulation data the address is extended i.e. 64-bit instead of 32-bit. |
| `RW_EA2` | Extended address 2. In the read and write the address is extended i.e. 64-bit instead of 32-bit. |
| `TUNE_REVERT_USER` | Restore tuning from user memory. |
| `TUNE_REVERT_FACTORY` | Restore tuning from factory defaults to currently used . |
| `TUNE_REVERT_OVERRIDE` | Override currently used and user saved tuning with factory defaults. |

##### Nested types

##### Type `AccessoryBatteryInfo`

Full name: `NurApiDotNet.NurApi.AccessoryBatteryInfo`

Hold information about battery of accessory

###### Fields

| Name | Description |
|---|---|
| `Charging` | True if accessory currently charging |
| `Percentage` | Battery percentage level 0-100. -1 if unknown |
| `Voltage` | Battery voltage level in mV. -1 if unknown. |
| `Current` | Current battery current draw in mA. |
| `Capacity` | Battery capacity in mAh. -1 if unknown. |

##### Type `AccessoryCommand`

Full name: `NurApiDotNet.NurApi.AccessoryCommand`

Accessory commands

###### Fields

###### Constants `ACC_*`

| Name | Description |
|---|---|
| `ACC_EXT_GET_FWVERSION` | BLE FW version. |
| `ACC_EXT_GET_CFG` | Get configuration command. |
| `ACC_EXT_SET_CFG` | Set configuration command. |
| `ACC_EXT_GET_BATT` | Get Battery Voltage(in mV) command. |
| `ACC_EXT_READ_BARCODE` | Read Imager/barcode command.(blocking). |
| `ACC_EXT_RESTART` | System restart command. |
| `ACC_EXT_READ_BARCODE_ASYNC` | Asynchronous barcode scan (non-blocking). |
| `ACC_EXT_SET_LED_OP` | Set external LED. |
| `ACC_EXT_BEEP_ASYNC` | Asynchronous beep operation. |
| `ACC_EXT_GET_BATT_INFO` | Battery information ("extended information"). |
| `ACC_EXT_ENTER_TESTMODE` | NUR/BLE Radio TestMode settings |
| `ACC_EXT_GET_HEALTHSTATE` | Get HW status (imager, NUR module etc.). |
| `ACC_EXT_WIRELESS_CHARGE` | Set/ get wireless charging. |
| `ACC_EXT_IMAGER` | Imager base Command |
| `ACC_EXT_VIBRATE` | Use device's vibra. |
| `ACC_EXT_CLEAR_PAIRS` | Clear device pairing information. |
| `ACC_EXT_GET_MODEL_INFORMATION` | Get Model information. |
| `ACC_EXT_BLE_PACKET_SEND_TEST` | BLE Packet Test via NUR_NOTIFY_BLE_READER. |
| `ACC_EXT_GET_CONNECTION_INFO` | Get connection info. |
| `ACC_EXT_SENSOR_ENUMERATE` | Enumerate sensors. |
| `ACC_EXT_SENSOR_SET_CONFIG` | Set sensor config. |
| `ACC_EXT_SENSOR_GET_CONFIG` | Get sensor config. |
| `ACC_EXT_SENSOR_SET_FILTER` | Set sensor filter. |
| `ACC_EXT_SENSOR_GET_FILTER` | Get sensor filter. |
| `ACC_EXT_SENSOR_GET_VALUE` | Get sensor value. |
| `ACC_EXT_SENSOR_SET_SETTINGS` | Get sensor settings. |
| `ACC_EXT_SENSOR_GET_SETTINGS` | Get sensor settings. |
| `ACC_EXT_CONFLICTED_27` | CONFLICTED. Remove if used. |
| `ACC_EXT_MCUMGR` | Mcumgr Base Command |
| `ACC_EXT_HID` | HID Base command |

##### Type `AccessoryEventArgs`

Full name: `NurApiDotNet.NurApi.AccessoryEventArgs`

Accessory Event Arguments class (for AccessoryEvent)

###### Constructors

###### Constructor: `AccessoryEventArgs(uint, int, NurApi.AccessoryEventType, byte[])`

AccessoryEvent Arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `status` | status code |
| `type` | Type of event |
| `data` | byte array of event arguments |

###### Fields

| Name | Description |
|---|---|
| `type` | Type of AccessoryEvent |
| `data` | byte array of AccessoryEvent arguments |

##### Type `AccessoryEventType`

Full name: `NurApiDotNet.NurApi.AccessoryEventType`

Event types of AccessoryEvent

###### Fields

| Name | Description |
|---|---|
| `None` | No event |
| `Barcode` | Barcode result |
| `SensorChanged` | Sensor removed/added |
| `SensorRangeData` | Range sensor data |
| `SensorTofFrBfaRawData` | Raw data from FR BFA ToF sensor |
| `SpeedTest` | SpeedTest result |

##### Type `AccessoryFWInfo`

Full name: `NurApiDotNet.NurApi.AccessoryFWInfo`

Information about accessory firmwares

###### Constructors

###### Constructor: `AccessoryFWInfo(string)`

Decode accessory device version info

**Parameters**

| Name | Description |
|---|---|
| `version` |  |

###### Fields

| Name | Description |
|---|---|
| `ApplicationVersion` | Application FW version of accessory |
| `FullAppVersion` | Full version information of accessory application |
| `BootloaderVersion` | Bootloader FW version of accessory |

##### Type `AccessoryRangeDataEventArgs`

Full name: `NurApiDotNet.NurApi.AccessoryRangeDataEventArgs`

Accessory Range Data Event Arguments class (for AccessoryRangeDataEvent)

###### Constructors

###### Constructor: `AccessoryRangeDataEventArgs(uint, AccSensorRangeData)`

AccessoryRangeDataEvent Arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `rangeData` | AccSensorRangeData |

###### Fields

| Name | Description |
|---|---|
| `rangeData` | Range data information |

##### Type `AccessorySensorChangedEventArgs`

Full name: `NurApiDotNet.NurApi.AccessorySensorChangedEventArgs`

Accessory Sensor Changed Event Arguments class (for AccessorySensorChangedEvent)

###### Constructors

###### Constructor: `AccessorySensorChangedEventArgs(uint, AccessorySensorChanged)`

AccessorySensorChangedEvent Arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `sensorChanged` | AccessorySensorChanged |

###### Fields

| Name | Description |
|---|---|
| `sensorChanged` | Information about sensor change |

##### Type `AccessorySensorConfig`

Full name: `NurApiDotNet.NurApi.AccessorySensorConfig`

Nur accessory sensor configuration.

###### Methods

###### Method: `ClearModeFlag(NurApi.AccessorySensorMode)`

Clear mode flag

**Parameters**

| Name | Description |
|---|---|
| `flag` | flag to clear |

###### Method: `getFeatureFlags()`

Get feature flags set

**Returns:** null if no flags set.

###### Method: `getModeFlags()`

Get mode flags set

**Returns:** null if no flags set

###### Method: `HasFeature(NurApi.AccessorySensorFeature)`

Check if specific feature flag set

**Parameters**

| Name | Description |
|---|---|
| `flag` | feature to check |

**Returns:** true if set

###### Method: `HasMode(NurApi.AccessorySensorMode)`

Check if specific mode flag set

**Parameters**

| Name | Description |
|---|---|
| `flag` | mode to check |

**Returns:** true if set

###### Method: `SetModeFlag(NurApi.AccessorySensorMode)`

Set mode flag

**Parameters**

| Name | Description |
|---|---|
| `flag` | flag to set |

###### Fields

| Name | Description |
|---|---|
| `source` | Sensor/GPIO pin number changes will be reported on. Assigned by reader. |
| `type` | Type of sensor as `AccessorySensorType`. Assigned by reader. |
| `feature` | Features supported by this sensor as a bitmask of `AccessorySensorFeature` flags. Assigned by reader. |
| `mode` | Configurable bitmask of `AccessorySensorMode` flags specifying how sensor changes are reported. |

##### Type `AccessorySensorFeature`

Full name: `NurApiDotNet.NurApi.AccessorySensorFeature`

Accessory sensor features (used as a bitmask)

###### Fields

| Name | Description |
|---|---|
| `Range` | GPIO changes is triggered based on limit threshold of read values (range sensor) |
| `StreamValue` | Supports streaming of raw sensor values |

##### Type `AccessorySensorFilter`

Full name: `NurApiDotNet.NurApi.AccessorySensorFilter`

Nur accessory sensor filter. Configures sensor triggers/debounce parameters.

###### Fields

| Name | Description |
|---|---|
| `flags` | Enabled filter flags (see AccessorySensorFilterFlag) as a bitmask. |
| `rangeThreshold` | Range threshold. Goes high->low when sensors reads less than lo, low->high when sensors reads equals or more than hi. Unit: mm. |
| `timeThreshold` | Time threshold. Triggers when level going high->low for lo amount of time, and low->high for hi amount of time. Unit: ms. |

##### Type `AccessorySensorFilterFlag`

Full name: `NurApiDotNet.NurApi.AccessorySensorFilterFlag`

Accessory sensor mode (used as a bitmask)

###### Fields

| Name | Description |
|---|---|
| `Range` | rangeThreshold defines when range sensor triggers events |
| `Time` | timeThreshold defines event debounce filter |

##### Type `AccessorySensorFilterThrehold`

Full name: `NurApiDotNet.NurApi.AccessorySensorFilterThrehold`

Nur accessory sensor filter threshold.

###### Fields

| Name | Description |
|---|---|
| `lo` | Low threshold limit. GPIO event will go lo->high when sensor value is lower than this value. |
| `hi` | High threshold limit. GPIO event will go high->lo when sensor value equals or is higher than this value. |

##### Type `AccessorySensorMode`

Full name: `NurApiDotNet.NurApi.AccessorySensorMode`

Accessory sensor mode (used as a bitmask)

###### Fields

| Name | Description |
|---|---|
| `Gpio` | Report changes as GPIO events on IOChangeEvent. IOChangeData.sensor will be set to true, and for compability reasons, 128 needs to be added to IOChangeData.source to get the source id used for Accessory Sensors. |
| `Stream` | Stream raw sensor values via an event handler. The dispatch event depends on the sensor type: range sensors raise `NurApi.AccessoryRangeDataEvent`, while the FR BFA (ToF) sensor raises `NurApi.AccessorySensorToFFrBfaRawDataEvent`. (Feature flag requirement: `AccessorySensorFeature.StreamValue`.) |

##### Type `AccessorySensorSettings`

Full name: `NurApiDotNet.NurApi.AccessorySensorSettings`

Sensor settings for the FR BFA (ToF) accessory sensor.

###### Fields

| Name | Description |
|---|---|
| `frFba` | Settings for the FR BFA (ToF) sensor. Use the nested `AccessorySensorSettingsFrFba` fields (e.g. `AccessorySensorSettingsFrFba.freqHz`). |

###### Nested types

###### Type `AccessorySensorSettingsFrFba`

Full name: `NurApiDotNet.NurApi.AccessorySensorSettings.AccessorySensorSettingsFrFba`

Settings specific to the FR BFA (ToF) sensor.

###### Fields

| Name | Description |
|---|---|
| `freqHz` | Sampling frequency in hertz. Value 1 - 60 |

##### Type `AccessorySensorSource`

Full name: `NurApiDotNet.NurApi.AccessorySensorSource`

Accessory sensor source

###### Fields

| Name | Description |
|---|---|
| `GpioPin1` | GPIO pin 1 |
| `GpioPin2` | GPIO pin 2 |
| `GpioPin3` | GPIO pin 3 |
| `GpioPin4` | GPIO pin 4 |
| `ButtonTrigger` | Trigger button pressed |
| `ButtonPower` | Power button pressed |
| `ButtonUnpair` | Unpair button pressed |
| `TapSensor` | Tap Sensor |
| `USB1Sensor` | USB Sensor connected directly or to hub port 1 |
| `USB2Sensor` | USB Sensor hub port 2 |
| `USB3Sensor` | USB Sensor hub port 3 |
| `USB4Sensor` | USB Sensor hub port 4 |
| `ToFSensor` | ToF Sensor |
| `ToFSensorFrBfa` | FR BFA ToF Sensor |

##### Type `AccessorySensorToFFrBfaRawDataEventArgs`

Full name: `NurApiDotNet.NurApi.AccessorySensorToFFrBfaRawDataEventArgs`

Event arguments for `NurApi.AccessorySensorToFFrBfaRawDataEvent`.

###### Constructors

###### Constructor: `AccessorySensorToFFrBfaRawDataEventArgs(uint, AccSensorToFFrBfaRawData)`

AccessorySensorToFFrBfaRawDataEvent Arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `rawData` | AccSensorToFFrBfaRawData |

###### Fields

| Name | Description |
|---|---|
| `rawData` | Raw FR BFA ToF data |

##### Type `AccessorySensorType`

Full name: `NurApiDotNet.NurApi.AccessorySensorType`

Accessory sensor types

###### Fields

| Name | Description |
|---|---|
| `UltrasonicMaxSonar` | Maxbotix HRUSB MaxSonar EZ range sensor |
| `DeviceGpio` | Device GPIO input pins |
| `DeviceTap` | Device tap sensor |
| `DeviceToF` | Device Time of Flight sensor |
| `ExtensionToFFrBfa` | FR BFA Time-of-Flight sensor |

##### Type `AccWirelessChargeStatus`

Full name: `NurApiDotNet.NurApi.AccWirelessChargeStatus`

Wireless charging status

###### Fields

| Name | Description |
|---|---|
| `OFF` | The accessory stated that wireless charging is currently off. |
| `ON` | The accessory stated that wireless charging is currently on. |
| `REFUSED` | The accessory stated that wireless charging is currently not available. |
| `FAIL` | There was an unexpected error in the communications (no reply, timeout etc..) |
| `NOT_SUPPORTED` | The accessory device replied with HW mismatch error |

##### Type `AuthenticateParam`

Full name: `NurApiDotNet.NurApi.AuthenticateParam`

Gen2 version 2 Authenticate-command's parameters.

###### Constructors

###### Constructor: `AuthenticateParam()`

Basic constructor with nothing specific set up yet.

###### Constructor: `AuthenticateParam(NurApi.AuthenticateParam)`

Constructor that copies parameters from another object.

**Parameters**

| Name | Description |
|---|---|
| `other` | object to copy from |

###### Methods

###### Method: `GetMessage()`

Get the current message from the class.

**Returns:** If OK, returns the copy of the currently set up message

###### Method: `SetMessage(int, byte[])`

Set up the message required by the used CSI.

**Parameters**

| Name | Description |
|---|---|
| `msgBitLen` | Bit length of the message |
| `message` | Message contents as byte array |

###### Fields

| Name | Description |
|---|---|
| `csi` | The Cruptographic Suite Indicator. |
| `rxLength` | Set to 0 if reception length is not known, otherwise this is the bit length of the reception ranging in 1...1008. |
| `rxAttn` | RX attenuation for response reception; true causes "write-like" operation thus reduces operation's range. |
| `reSelect` | If module needs to internally use the ReadBuffer command then setting this to true causes the tag to be re-selected between operations. |
| `timeout` | Response timeout similar to read or write; unit is milliseconds ranging from 20...50. |
| `preTxWait` | Additional wait time before executing the command in microseconds (0...50000); may be used to energize the tag properly (carrier is on). |
| `msgBitLength` | The CSI message's length in bits. |
| `mMessage` | Must be taken care by the host application. |

##### Type `AuthenticateResp`

Full name: `NurApiDotNet.NurApi.AuthenticateResp`

Gen2 version 2 Authenticate-command's response.

###### Fields

| Name | Description |
|---|---|
| `RESPONSE_RECEIVED` | Indicates that was some response, whether it is OK or not, from the tag. |
| `NO_RESPONSE` | Indicates that there was no data nor reply received from the tag. |
| `TAG_ERROR` | Indicates that there was a clear, one byte error reply from the tag. |
| `ERROR_NOT_RECEIVED` | Indicates that the tag backscattered error code is not present. |
| `status` | General status of the data exchange with the tag. |
| `tagError` | The tag's error code is present. |
| `bitLength` | Number of bits received from the tag. |
| `reply` | The tag's backscattered bits. |

##### Type `AutotuneSetup`

Full name: `NurApiDotNet.NurApi.AutotuneSetup`

AutoTune setup

###### Constructors

###### Constructor: `AutotuneSetup(byte, sbyte)`

Controls the module's internal automatic tuning during inventories.

**Parameters**

| Name | Description |
|---|---|
| `mode` | Autotune enable/disable and threshold use enable/disable. |
| `thresh` | Threshold when used and autotune enabled. Reflected power higher than this value causes the autotune to execute. |

###### Fields

| Name | Description |
|---|---|
| `mode` | Autotune mode bits: `NurApi.AUTOTUNE_MODE_ENABLE`, `NurApi.AUTOTUNE_MODE_THRESHOLD_ENABLE`. |
| `threshold_dBm` | Threshold when used. Reflected power higher than this value causes the autotune to execute. |

###### Nested types

###### Type `Mode`

Full name: `NurApiDotNet.NurApi.AutotuneSetup.Mode`

AutoTune modes

###### Fields

| Name | Description |
|---|---|
| `Off` | Autotune not in use. |
| `Enable` | Autotune enable. |
| `ThresholdEnable` | Autotune threshold use enable. |

##### Type `BarcodeReadResult`

Full name: `NurApiDotNet.NurApi.BarcodeReadResult`

Barcode read result

###### Properties

###### Property: `Status`

Get status

##### Type `BarcodeReadStatus`

Full name: `NurApiDotNet.NurApi.BarcodeReadStatus`

Status of Barcode read operation

###### Fields

| Name | Description |
|---|---|
| `Success` | Barcode read success |
| `HardwareNotAvailable` | Hardware failure or not present on the device |
| `NoBarcode` | Timeout |
| `Cancelled` | Reading operation cancelled |
| `Unknown` | Unknown status |

##### Type `BootEventArgs`

Full name: `NurApiDotNet.NurApi.BootEventArgs`

Boot event arguments class (`NurApi.BootEvent`)

###### Constructors

###### Constructor: `BootEventArgs(uint, string)`

Boot event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `message` | Event message string |

###### Fields

| Name | Description |
|---|---|
| `message` | Event message string |

##### Type `CacheStats`

Full name: `NurApiDotNet.NurApi.CacheStats`

Internal reader cache hit/miss statistics.

##### Type `CRC16`

Full name: `NurApiDotNet.NurApi.CRC16`

CRC-16 (CCITT) utility.

##### Type `CRC32`

Full name: `NurApiDotNet.NurApi.CRC32`

CRC-32 utility.

##### Type `CustomExchangeParams`

Full name: `NurApiDotNet.NurApi.CustomExchangeParams`

Parameters for a custom bit-level exchange with a tag.

###### Methods

###### Method: `GetByteLength(NurApi.CustomExchangeParams)`

Get required buffer size for parameters.

**Parameters**

| Name | Description |
|---|---|
| `parameters` | Parameters from which the size is calculated from. |

**Returns:** Number of byte required for serializing given parameters.

###### Method: `Serialize()`

Serialize CustomExchangeFlags flags

**Returns:** byte Array of serialized flags

###### Fields

| Name | Description |
|---|---|
| `MIN_TIMEOUT` | Minimum timeout in milliseconds to wait for a response. |
| `MAX_TIMEOUT` | Maximum timeout in milliseconds to wait for a response. |
| `txLen` | Transmission length in bits. |
| `rxLen` | Expected number bit in the response. |
| `rxTimeout` | Response wait timeout in ms (20...100). |
| `asWrite` | Tells the module to behave as if this operation was a write operation. |
| `appendHandle` | The handle that is received from the tag singulation is appended to the bit stream. |
| `xorRN16` | The RN16 received from the tag singulation is XOR'ed with the TX data in case the TX data length is 16 bits. |
| `txOnly` | ve The bit stream is only transmitted no response is expected. |
| `noTxCRC` | The transmission shall contain no CRC. |
| `noRxCRC` | The receiver shall not decode the CRC. The data is received 'as is'. |
| `txCRC5` | The transmission CRC shall be CRC-5 instead of CRC-16. |
| `rxLenUnknown` | RX length is unkown; rxLen parameter will be ignored. |
| `rxStripHandle` | Leave out the bacscattered handle in the reponse. |
| `bitBuffer` | Bit data. |

##### Type `CustomExchangeResponse`

Full name: `NurApiDotNet.NurApi.CustomExchangeResponse`

Custom bit stream / exchange response.

###### Fields

| Name | Description |
|---|---|
| `error` | Error from the native API. |
| `tagBytes` | Byte array from the tag. |

**`error` — remarks**

If this error is tag's error (0x42) then the tag bytes 
can be used to determine the error (byte at index 0 is the tag backscattered error).

##### Type `CustomHoptable`

Full name: `NurApiDotNet.NurApi.CustomHoptable`

Extended custom hoptable: added LBT limit and maximum TX level.

###### Fields

| Name | Description |
|---|---|
| `Count` | Channel count. |
| `chTime` | Channel time. |
| `silentTime` | Pause time between channel change. |
| `maxLF` | Maximum LF. |
| `Tari` | Tari. (1=12.5 us, 2=25 us) |
| `lbtThresh` | LBT threshold. Minimum value is -90. |
| `maxTxLevel` | Maximum TX level. Range is 0...19; level = 27 - max dBm. |
| `freqs` | Frequencies. |

##### Type `CustomHoptableEx`

Full name: `NurApiDotNet.NurApi.CustomHoptableEx`

Extended custom hop table (backward-compatibility alias for `CustomHoptable`).

##### Type `DeviceCapabilites`

Full name: `NurApiDotNet.NurApi.DeviceCapabilites`

Device capabilities.

###### Methods

###### Method: `GetSupportedLinkFreqs()`

Get supported link frequencies.

**Returns:** List of supported link frequencies

###### Method: `GetTxLevels()`

Get list of supported Tx levels as milli Watts (mW).

**Returns:** list of mW values

###### Method: `IsBeamReader()`

Beam reader configuration.

**Returns:** True if the module is configured to act as a beam reader.

###### Method: `IsEthernetTableReader()`

Ethernet table reader configuration.

**Returns:** True if the device has been configured as an Ethernet table reader.

###### Method: `IsOneWattReader()`

1W / high power support.

**Returns:** True if the module's RF front end has been configured to operate in 1W mode.

###### Method: `IsStixReader()`

STIX mini reader configuration.

**Returns:** True if the device has been configured as a STIX mini reader.

###### Method: `IsUsbTableReader()`

USB table reader configuration.

**Returns:** True if the device has been configured as a USB table reader.

###### Properties

###### Property: `antennaMap`

True if the module provides antenna mapping information

###### Property: `beamAntenna`

True if the module supports beam forming antenna.

###### Property: `beep`

Bepper presence.

###### Property: `diagCommands`

True if the module FW supports diagnostics commands.

###### Property: `fetchSingle`

True if the module supports fetching tags one by one

###### Property: `fm0`

FM0 RX decoding support.

###### Property: `gen2ver2`

True if the module FW supports Gen2V2 at some level. See the level from gen2v2Support.

###### Property: `gen2x`

True if the module FW supports impinj Gen2X at some level.

###### Property: `gridAntenna`

DEPRECATED! Provided for compatibility. Use beamAntenna member instead.

###### Property: `invRead`

Support for inventory + read.

###### Property: `lf160k`

Link frequency of 160kHz support.

###### Property: `lf256k`

Link frequency of 256kHz support.

###### Property: `lf320k`

Link frequency of 320kHz support.

###### Property: `lf40k`

Link frequency of 40kHz support.

###### Property: `lf640k`

Link frequency of 640kHz support.

###### Property: `lf80k`

Link frequency of 80kHz support.

###### Property: `light`

Light sensor support.

###### Property: `m2`

Miller-2 RX decoding support.

###### Property: `m4`

Miller-4 RX decoding support.

###### Property: `m8`

Miller-8 RX decoding support.

###### Property: `perAntOffset`

Per antenna low power setting offset support (-1...1).

###### Property: `perAntPower`

Per antenna power support.

###### Property: `rfProfile`

True if the module FW supports RF profile setting.

###### Property: `scanChan`

Support for channel scan.

###### Property: `sleep`

True if the module FW supports sleep

###### Property: `tagPhaseDiffInfo`

True if the module FW supports tag phase diff info. see OPFLAGS_EN_PHASE_DIFF

###### Property: `tagPhaseInfo`

True if the module FW supports tag phase info. see OPFLAGS_EN_TAG_PHASE */

###### Property: `tap`

Tap sensor support.

###### Property: `tune`

Antenna tune support.

###### Fields

| Name | Description |
|---|---|
| `flagSet1` | Device capabilities flag set 1. |
| `flagSet2` | Device capabilities flag set 2. |
| `maxTxdBm` | Maximum TX power in terms of dBm. |
| `txAttnStep` | TX level attenuation pre step in dBm. |
| `maxTxmW` | Maximum TX level in mW. |
| `txSteps` | Number of TX attenuation levels available. |
| `szTagBuffer` | Number of 96-bit EPCs that the module tag buffer can currently hold. |
| `maxAnt` | Number of maximum possible antennas with current configuration. |
| `maxGPIO` | Number of maximum possible GPIO pins with current configuration. |
| `chipVersion` | RFID chip version. |
| `chipVersionCode` | RFID chip version. |
| `moduleType` | Module type. |
| `moduleTypeCode` | Module type. |
| `moduleConfigFlags` | Module configuration flag bits. |
| `gen2v2Support` | Support level of Gen2 version 2 command. Zero means no support. 1 = Authenticate, Untraceable and ReadBuffer. |
| `secChipMajorVersion` | Secondary chip major SW version |
| `secChipMinorVersion` | Secondary chip minor SW version |
| `secChipMaintenanceVersion` | Secondary chip maintenance SW version |
| `secChipReleaseVersion` | Secondary chip release SW version |

###### Nested types

###### Type `ChipVersionCode`

Full name: `NurApiDotNet.NurApi.DeviceCapabilites.ChipVersionCode`

RFID chip version

###### Fields

| Name | Description |
|---|---|
| `AS3992` | 1st generation RFID chip version. |
| `AS3993` | 2nd generation RFID chip version. |
| `R2000` | Chip version R2000 |
| `R2000D` | Chip version R2000 direct |
| `E310` | Chip version impinj E310 |
| `E510` | Chip version impinj E510 |
| `E710` | Chip version impinj E710 |
| `E910` | Chip version impinj E910 |

###### Type `FlagSet1`

Full name: `NurApiDotNet.NurApi.DeviceCapabilites.FlagSet1`

Enums of device capabilities flag set 1.

###### Fields

| Name | Description |
|---|---|
| `RXDECFM0` | FM0 receiver decoding. |
| `RXDECM2` | Miller-2 receiver decoding. |
| `RXDECM4` | Miller-4 receiver decoding. |
| `RXDECM8` | Miller-8 receiver decoding. |
| `RXLF40k` | Link frequency of 40kHz supported. |
| `RXLF80k` | Link frequency of 80kHz supported. |
| `RXLF160k` | Link frequency of 160kHz supported. |
| `RXLF256k` | Link frequency of 256kHz supported. |
| `RXLF320k` | Link frequency of 320kHz supported. |
| `RXLF640k` | Link frequency of 640kHz supported. |
| `RXLFres1` | Reserved LF 1. |
| `RXLFres2` | Reserved LF 2. |
| `RXLFMask` | Link frequency bit mask. |
| `HasBeep` | Module can "beep". |
| `HasLight` | Light sensor supported. |
| `HasTap` | Tap sensor supported. |
| `AntTune` | Antenna tuning supported. |
| `ChScanner` | XChannel scanning is supported. |
| `InvRead` | Inventory read is supported NUR05WL2/NUR10W only. |
| `AntPower` | Per antenna power supported. |
| `PowerOffset` | Power "offset" supported. |
| `BeamAnt` | Antenna beam control supported. |
| `FetchSingle` | Can fetch single tag entry from the internal buffer. |
| `AntennaMap` | Internal antenna map supported. |
| `Gen2Ver2` | Gen2 version 2 command support / not. |
| `RfProfile` | The module FW supports RF profile setting |
| `Diag` | This module FW supports diagnostics commands. |
| `TagPhase` | This module FW supports tag phase info. |
| `Sleep` | This module FW supports sleep. |
| `TagPhaseDiff` | This module FW supports tag phase diff info. see OPFLAGS_EN_PHASE_DIFF |
| `Gen2X` | The module FW supports impinj Gen2X at some level. |

###### Type `ModuleConf`

Full name: `NurApiDotNet.NurApi.DeviceCapabilites.ModuleConf`

Module configuration bits

###### Fields

| Name | Description |
|---|---|
| `None` | No configuration set for the module. |
| `UsbTableReader` | USB table reader configuration bit. |
| `EthTableReader` | Ethernet table reader configuration bit. |
| `StixReader` | STIX mini reader configuration bit. |
| `OnewattReader` | One watt reader configuration bit. |
| `BeamReader` | Beam forming reader configuration bit. |
| `Multiport` | Multiport reader. |

###### Type `ModuleTypeCode`

Full name: `NurApiDotNet.NurApi.DeviceCapabilites.ModuleTypeCode`

Type of NUR module

###### Fields

| Name | Description |
|---|---|
| `NUR05W` | 1st generation NUR. |
| `NUR05WL` | 2nd generation NUR. |
| `NUR05WL2` | 3rd generation NUR. |
| `NUR1W0` | 3rd generation NUR (1W device). |
| `NUR2_1W` | Module type NUR2-1W (1W module) |
| `NUR2_01W` | Module type nanoNUR-01W |
| `NUR3_RSVD` | Reserved |
| `NUR3FR_1W` | Module type FR22 integrated nur3 |
| `NUR3MOD_1W` | Module type NUR3-1W |
| `NUR3IR_1W` | Module type NUR3IR-1W |
| `NUR3MOD_0W1` | Module type NUR3MOD-0W1 |
| `NUR3MOD_0W5` | Module type NUR3MOD-0W5 |
| `NUR3IOLINK_1W` | Module type NUR3IOLINK-1W |
| `NUR3FR26_1W` | Module type NUR3FR26-1W |

##### Type `DiagReport`

Full name: `NurApiDotNet.NurApi.DiagReport`

Diagnostics report data.
`NurApi.DiagGetReport`, `NurApi.DiagGetConfig`, `NurApi.DiagSetConfig`

###### Fields

| Name | Description |
|---|---|
| `flags` | Report flags. see enum NUR_DIAG_REPORT_FLAGS |
| `uptime` | Uptime in milliseconds |
| `rfActiveTime` | RF on time in milliseconds |
| `temperature` | Temperature in celcius. 1000 if not supported |
| `bytesIn` | Number of bytes in to module |
| `bytesOut` | Number of bytes out from module |
| `bytesIgnored` | Number of ignored (invalid) bytes |
| `antennaErrors` | Number of bad antenna errors |
| `hwErrors` | Number of automatically recovered internal HW failures |
| `invTags` | Number of successfully inventoried tags |
| `invColl` | Number of collisions during inventory |
| `readTags` | Number of successfully read tag commands |
| `readErrors` | Number of failed read tag commands |
| `writeTags` | Number of successfully write tag commands |
| `writeErrors` | Number of failed write tag commands |
| `errorConds` | Number of temporary error conditions (over temp, low voltage) occured |
| `setupErrs` | Number of invalid setup errors |
| `invalidCmds` | Number of invalid (not supported) commands received |

##### Type `DiagReportEventArgs`

Full name: `NurApiDotNet.NurApi.DiagReportEventArgs`

Diagnostics report event arguments class.

###### Constructors

###### Constructor: `DiagReportEventArgs(uint, NurApi.DiagReport)`

Diagnostics report event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | DiagReport item argument as `DiagReport` |

###### Fields

| Name | Description |
|---|---|
| `data` | DiagReport event arguments as `DiagReport` |

##### Type `EthConfig`

Full name: `NurApiDotNet.NurApi.EthConfig`

Holds information about Ethernet settings of connected module if available (`NurApi.GetEthConfig`)

###### Constructors

###### Constructor: `EthConfig()`

Used to create an empty NUR module Ethernet configure.

###### Fields

| Name | Description |
|---|---|
| `transport` | Transport method used with NurApiSetEthConfig(). if transport = 0 then ethernet settings will be set to Sampo via current connection.(USB,serial or TCP) if transport = 1 then ethernet settings will be set to Sampo using broadcast message. This method requires that correct 'mac' address has been set to structure. MAC address is used for filtering that only certain device receives new configurations. |
| `title` | Get / Set the title of an Ethernet Sampo device. |
| `version` | (Get) Current Revision of ethernet CPU firmware |
| `ip` | (Get) Current IP address of Sampo device |
| `mask` | (Get/Set) Subnet mask (used in static IP mode) |
| `gw` | (Get/Set) Gateway	(used in static IP mode) |
| `addrType` | (Get/Set) Address type 0=DHCP(default) 1=STATIC |
| `staticip` | (Get/Set) Static IP. When using static IP address, set addrType to 1=STATIC |
| `mac` | (Get/(Set only if using transport as broadcast)) MAC address of device. Used for addressing when sending new settings via Broadcast. |
| `serverPort` | (Get/Set) Server port where client connects to when hostmode=Server. default 1300. |
| `hostmode` | (Get/Set) hostmode 0=Server (default) 1=Client. If server, Sampo listens port 'serverPort' for client connections (default). If Client, Sampo automatically tries to initialize connection to 'hostip' : 'hostPort' server. |
| `hostip` | (Get/Set) Client host IP (if Mode=Client) |
| `hostPort` | (Get/Set) Client host port (if Mode=Client) |
| `reserved` | (Get/Set) reserved for future usage |

##### Type `Gen2XConfig`

Full name: `NurApiDotNet.NurApi.Gen2XConfig`

Gen2X (Impinj) feature configuration.

###### Fields

| Name | Description |
|---|---|
| `flags` | Gen2X control flags. see enum Gen2XFlags flags |
| `inventoryMode` | Inventory mode: 0=Gen2, 1=Gen2X, 2=Hybrid |
| `scanCodeType` | Scan/ScanId encoding method: 0=Rfu, 1=Antipodal, 2=CCOneHalf, 3=CCThreeQuarters |
| `scanCRType` | Scan/ScanId collision resolution: 0=ID32, 1=ID16, 2=StoredCRC, 3=RN16 |
| `scanProtectionType` | Scan/ScanId data protection setting: 0=None, 1=Parity, 2=CRC5, 3=CRC5Plus |
| `scanIdType` | Scan/ScanId ID setting: 0=NoAckResponse, 1=TMNPlusTSN, 2=Part, 3=Full |
| `scanCrypto` | Scan/ScanId Crypto setting: 0=All tags, 1=S=1 tags only |
| `scanIdAppSize` | ScanId application size: 0=Rfu, 1=24 bits, 2=16 bits, 3=8 bits |
| `scanIdAppId` | ScanId AppId setting used to select certain tag population |
| `protectedModePin` | Protected mode PIN code |

##### Type `GpioConfig`

Full name: `NurApiDotNet.NurApi.GpioConfig`

Module GPIO configuration.

###### Fields

| Name | Description |
|---|---|
| `count` | Number of entries filled. |
| `entries` | Configuration entries. Each entry represents one GPIO in module. |

##### Type `GpioEntry`

Full name: `NurApiDotNet.NurApi.GpioEntry`

Single GPIO configuration.

###### Constructors

###### Constructor: `GpioEntry()`

constructor

###### Fields

| Name | Description |
|---|---|
| `available` | true if configuration is available. When writing new configuration set to 0 if no need to configure this GPIO. |
| `enabled` | true if GPIO is enabled. |
| `type` | Type of GPIO; see `GPIO_TYPE_*` constants. |
| `edge` | Trigger edge, falling, rising or both; see `GPIO_EDGE_*` constants. |
| `action` | Trigger action; see `GPIO_ACT_*` constants. |

##### Type `GpioStatus`

Full name: `NurApiDotNet.NurApi.GpioStatus`

Single GPIO status.

###### Fields

| Name | Description |
|---|---|
| `enabled` | true  if GPIO is enabled. |
| `type` | Type of GPIO; see `GPIO_TYPE_*` constants. |
| `state` | State of the GPIO. Only valid if GPIO is configured as input (NurApi.GPIO_TYPE_INPUT). |

##### Type `HIDMode`

Full name: `NurApiDotNet.NurApi.HIDMode`

HID modes of Accessory

###### Fields

| Name | Description |
|---|---|
| `Disabled` | HID disabled |
| `Barcode` | HID Barcode only |
| `RFID` | HID RFID only |
| `BarcodeRFID` | HID Barcode + RFID |

##### Type `HopEventArgs`

Full name: `NurApiDotNet.NurApi.HopEventArgs`

Hop event arguments class (`NurApi.HopEvent`)

###### Constructors

###### Constructor: `HopEventArgs(uint, HopEventData)`

Hop Event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | Hop event arguments as `HopEventData` |

###### Fields

| Name | Description |
|---|---|
| `data` | Hop event arguments as `HopEventData` |

##### Type `ImagerCommand`

Full name: `NurApiDotNet.NurApi.ImagerCommand`

Imager Commands

###### Fields

| Name | Description |
|---|---|
| `IMAGER_CMD_RAW` | Imager configuration Command |
| `IMAGER_POWER` | Imager power on/off |
| `IMAGER_AIM` | Imager aiming on/off |

##### Type `ImagerType`

Full name: `NurApiDotNet.NurApi.ImagerType`

Imager types

###### Fields

| Name | Description |
|---|---|
| `Opticon` | Opticon |

##### Type `InventoryExFilter`

Full name: `NurApiDotNet.NurApi.InventoryExFilter`

Inventory filter parameters. Represents G2 Select command, see UHF G2 standard section 6.3.2.11.1.1.

###### Fields

| Name | Description |
|---|---|
| `truncate` | Set to false always. NOT SUPPORTED AT THE MOMENT |
| `target` | Target session or SL. Indicates whether G2 select command modifies tag's SL flag or inventoried (A/B) flag. |
| `action` | Indicates whether matching tags assert or deassert SL, or set their inventoried flag to A or B. |
| `bank` | Memory bank used for filter mask (1, 2 or 3). Bank must not be passwd bank. |
| `address` | Filter mask data address in **bits**. |
| `maskBitLength` | Length of the mask data in **bits**. Maximum length is 255 bits |
| `maskData` | Mask data buffer. |

**`action` — remarks**

The field action as per standard section 6.3.2.11.1.1 is defined as follows:

| Value | Action |
|---|---|
| 0 | Matching tags: assert SL or inventoried session flag -> A. Non-matching: deassert SL or inventoried session flag -> B. |
| 1 | Matching tags: assert SL or inventoried session flag -> A. Non-matching: do nothing. |
| 2 | Matching tags: do nothing. Non-matching: deassert SL or inventoried session -> B. |
| 3 | Matching tags: negate SL or invert inventoried session flag (A->B, B->A). Non-matching: do nothing. |
| 4 | Matching tags: deassert SL or inventoried session flag -> B. Non-matching: assert SL or inventoried session flag -> A. |
| 5 | Matching tags: deassert SL or inventoried session flag -> B. Non-matching: do nothing. |
| 6 | Matching tags: do nothing. Non-matching: assert SL or inventoried session flag -> A. |
| 7 | Matching tags: do nothing. Non-matching: negate SL or invert inventoried session flag (A->B, B->A). |

**`maskData` — remarks**

Note that the data is left aligned.

##### Type `InventoryExParams`

Full name: `NurApiDotNet.NurApi.InventoryExParams`

Extended inventory function parameters

###### Fields

| Name | Description |
|---|---|
| `Q` | Q value used for inventory. Value 0 - 15, where value 0 means automatic Q selection. The Q is number of tag slots in single G2 query round. |
| `session` | Session for inventory. Value 0 - 3. |
| `rounds` | Default rounds for inventory. Value 0 - 10, where 0 means automatic rounds selection.  This value specifies full G2 query rounds performed in one inventory command. NOTE: If transitTime is specified, this value is ignored. |
| `transitTime` | Total inventory time specified in milliseconds. Time is limited by maximum region channel time. Use 0 to disable. |
| `inventoryTarget` | Inventory target, select whether tags whose inventoried flag is A or B participate in the inventory. |
| `inventorySelState` | Chooses which tags respond to the inventory. |

##### Type `InventoryResponse`

Full name: `NurApiDotNet.NurApi.InventoryResponse`

Last inventory data result

###### Fields

| Name | Description |
|---|---|
| `numTagsFound` | Number of tags found in this inventory. |
| `numTagsMem` | Total number of tags in module memory. |
| `roundsDone` | Number of full Q rounds done in this inventory. |
| `collisions` | Number of possible collisions or reception errors in this inventory. |
| `Q` | Q used in this inventory. |

##### Type `InventoryStreamEventArgs`

Full name: `NurApiDotNet.NurApi.InventoryStreamEventArgs`

Inventory Stream Event arguments class (`NurApi.InventoryStreamEvent`)

###### Constructors

###### Constructor: `InventoryStreamEventArgs(uint, InventoryStreamData)`

Inventory Stream Event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | Inventory stream event arguments as `InventoryStreamData` |

###### Fields

| Name | Description |
|---|---|
| `data` | Inventory stream event arguments as `InventoryStreamData` |

##### Type `IOChangeEventArgs`

Full name: `NurApiDotNet.NurApi.IOChangeEventArgs`

I/O change event arguments class (`NurApi.IOChangeEvent`)

###### Constructors

###### Constructor: `IOChangeEventArgs(uint, IOChangeData)`

IOChange event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | I/O change event arguments as `IOChangeData` |

###### Fields

| Name | Description |
|---|---|
| `data` | I/O change results as `IOChangeData` |

##### Type `IrInformation`

Full name: `NurApiDotNet.NurApi.IrInformation`

NUR module inventory + read configuration.

###### Fields

| Name | Description |
|---|---|
| `active` | Inventory + read active / not. |
| `type` | Type of the inventory read. |
| `bank` | Bank the read from. |
| `wAddress` | Word address to start from. |
| `wLength` | Number of words toread. Range is 1...32 (=2...64 bytes). |

##### Type `LogEventArgs`

Full name: `NurApiDotNet.NurApi.LogEventArgs`

Log event arguments class (`NurApi.LogEvent`)

###### Constructors

###### Constructor: `LogEventArgs(uint, string)`

Log event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `message` | Event message string |

###### Fields

| Name | Description |
|---|---|
| `message` | Event message string |

##### Type `ModuleSetup`

Full name: `NurApiDotNet.NurApi.ModuleSetup`

Module settings data.

###### Properties

###### Property: `ReturnedFlags`

ModuleSetup flags returned when last fetched from NUR.

###### Fields

| Name | Description |
|---|---|
| `linkFreq` | Link frequency. See also the link frequency property: `NurApi.LinkFrequency`.  160000/256000/320000 = 160/256/320 kHz. |
| `rxDecoding` | RX encoding (Miller encoding) (see`NurApi.RxDecoding` property)  FM0: `NurApi.RXDECODING_FM0` (least robust reception)  Miller-2: `NurApi.RXDECODING_M2`  Miller-4: `NurApi.RXDECODING_M4`  Miller-8: `NurApi.RXDECODING_M8` |
| `txLevel` | Transmission (TX) power level in 1dB steps. See also the `NurApi.TxLevel` property)			  Range is 0...19: there are 20 (0...19) steps so minimum output power value for 500mW devices is 8dBm (about 6mW) and 11dBm (about 40W) for the 1W devices.  This value is subtracted from the maxiumum TX level producing the actual level as follows:  | TX Level | Description | |---|---| | 0 | 27 / 500 | | 1 | 26 / 398 | | 2 | 25 / 316 | | 3 | 24 / 251 | | 4 | 23 / 200 | | 5 | 22 / 158 | | 6 | 21 / 126 | | 7 | 20 / 100 | | 8 | 19 / 79 | | 9 | 18 / 63 | | 10 | 17 / 50 | | 11 | 16 / 40 | | 12 | 15 / 32 | | 13 | 14 / 25 | | 14 | 13 / 20 | | 15 | 12 / 16 | | 16 | 11 / 13 | | 17 | 10 / 10 | | 18 | 9 / 8 | | 19 | 8 / 6 | |
| `txModulation` | Tx modulation style (see`NurApi.TxModulation` property).  The TX modulation is either ASK (`NurApi.TXMODULATION_ASK`) or PR-ASK (`NurApi.TXMODULATION_PRASK`). |
| `regionId` | Region ID. See also the `NurApi.Region` property. |
| `inventoryQ` | Inventory Q (see `NurApi.InventoryQ` property).  Range is from 0 to 15 where zero means "automatic Q". |
| `inventorySession` | Session (see `NurApi.InventorySession` property)  Valid session is 0...3. |
| `inventoryRounds` | Module's Internal inventory rounds per call (see `NurApi.InventoryRounds` property).  Range is from 0 to 10 where zero means "automatic rounds". |
| `antennaMask` | Bitmask of enabled antennas. Mask constants in range `NurApi.ANTENNAMASK_1`...`NurApi.ANTENNAMASK_32`. |
| `scanSingleTriggerTimeout` | Triggered SingleScan scanning timeout in milliseconds. |
| `inventoryTriggerTimeout` | Triggered Inventory timeout in milliseconds.  Range is 0...60000, unit is milliseconds. |
| `selectedAntenna` | Zero based index of selected antenna.  Values are in range `NurApi.ANTENNAID_1`...`NurApi.ANTENNAID_32`.  Use value `NurApi.ANTENNAID_AUTOSELECT` to make the module automativally select the antenna. |
| `opFlags` | Operation flags.  Enable hop events: `NurApi.OPFLAGS_EN_HOPEVENTS`  Enable "zero tags found" notification during inventory streams: `NurApi.OPFLAGS_INVSTREAM_ZEROS`  The value can be either of the above flags, none or both. OR-operation can be used as these flags are bits. |
| `inventoryTarget` | Inventory target, select whether tags whose inventoried flag is: 0 = A, 1 = B, 2 = A or B (dual target). |
| `inventoryEpcLength` | The exact EPC reception length in bytes.  Use even values in range 2...62 or -1 for "accept all". |
| `readRssiFilter` | RSSI Filters used for read operations.  Required module firmware 2.5-A or later or NUR05WL2 module. |
| `writeRssiFilter` | RSSI Filters used for write operations.  Required module firmware 2.5-A or later or NUR05WL2 module. |
| `inventoryRssiFilter` | RSSI Filters used for inventory operations.  Required module firmware 2.5-A or later or NUR05WL2 module. |
| `readTO` | Tag read timeout in ms. |
| `writeTO` | Tag write timeout in ms. |
| `lockTO` | Tag lock timeout in ms. |
| `killTO` | Tag kill timeout in ms. |
| `periodSetup` | Defines how the periodic auto-inventory power saving is configured.  When in use, reader will be power save mode while no tags in view.  Settings: `NurApi.NUR_AUTOPER_OFF`, `NurApi.NUR_AUTOPER_25`, `NurApi.NUR_AUTOPER_33` and `NurApi.NUR_AUTOPER_50`. |
| `perAntPower` | DEPRECATED! Per antenna specific power levels. Use antPowerEx instead. |
| `perAntOffset` | DEPRECATED! Per antenna specific power levels. Use antPowerEx instead. |
| `antennaMaskEx` | Extended version of the antenna mask.             Supported in L2 module from FW version 5.0-A onwards. Recommedation is to use only this with L2 from FW version 5.0-A onwards. |
| `autotune` | Runtime autotuning setup, setup: `AutotuneSetup` |
| `antPowerEx` | Extended version per antenna power settings. |
| `rxSensitivity` | Receiver sensitivity: `NurApi.RXSENS_LOW`, `NurApi.RXSENS_NOMINAL` and `NurApi.RXSENS_HIGH`. |
| `rfProfile` | RF Profile:  `NurApi.RFPROFILE_ROBUST`,  `NurApi.RFPROFILE_NOMINAL`,  `NurApi.RFPROFILE_HIGHSPEED`,  `NurApi.RFPROFILE_HIGHSPEED_2`,  `NurApi.RFPROFILE_FAST`  and  `NurApi.RFPROFILE_AUTOSET`. |
| `toSleepTime` | Time before module enters deep sleep in milliseconds.  0 disables deep sleep.  NOTE: When module is in deep sleep there might be slight (100ms) delay before command is executed. |

##### Type `ModuleVersions`

Full name: `NurApiDotNet.NurApi.ModuleVersions`

Hold information about the module version.  

See `NurApi.GetVersions`

###### Properties

###### Property: `applicationVersion`

Get application version

###### Property: `bootloaderVersion`

Get bootloader version

###### Fields

| Name | Description |
|---|---|
| `isApplicationMode` | True if the reply was received when running in application mode. |
| `mode` | A = application (primary version is application version) B = bootloader (primary version is bootloader version) |
| `primaryVersion` | Primary version. |
| `secondaryVersion` | Secondary version. |

##### Type `NUR_ACC_SENSOR_TYPE`

Full name: `NurApiDotNet.NurApi.NUR_ACC_SENSOR_TYPE`

Sensor types

##### Type `NurEventArgs`

Full name: `NurApiDotNet.NurApi.NurEventArgs`

Nur event arguments

###### Constructors

###### Constructor: `NurEventArgs(uint)`

Nur event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |

###### Constructor: `NurEventArgs(uint, int)`

Nur event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `status` | Notification status |

###### Fields

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `status` | Notification status code, this one of the NurApiErrors |

##### Type `NXPAlarmStreamEventArgs`

Full name: `NurApiDotNet.NurApi.NXPAlarmStreamEventArgs`

NXP alarm stream event arguments class (`NurApi.NXPAlarmStreamEvent`)

###### Constructors

###### Constructor: `NXPAlarmStreamEventArgs(uint, NXPAlarmStreamData)`

Inventory Stream Event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | NXP EAS Alarm stream event arguments as `NXPAlarmStreamData` |

###### Fields

| Name | Description |
|---|---|
| `data` | NXP EAS Alarm stream event arguments as `NXPAlarmStreamData` |

##### Type `PairingMode`

Full name: `NurApiDotNet.NurApi.PairingMode`

Pairing mode

###### Fields

| Name | Description |
|---|---|
| `Disabled` | Disabled. Accessory cannot be paired with host device. |
| `Enabled` | Enabled. Accessory can be paired with the host device. |

##### Type `PermalockResp`

Full name: `NurApiDotNet.NurApi.PermalockResp`

Response to block permalock status read.

###### Fields

| Name | Description |
|---|---|
| `bank` | Read from bank. |
| `from` | Starting from this address. |
| `nBlocks` | Number of mask words in response. |
| `lockStates` | Lock states. Each word represents the lock state of 16 blocks. |

##### Type `ReaderInfo`

Full name: `NurApiDotNet.NurApi.ReaderInfo`

Holds information about connected module.

###### Methods

###### Method: `GetVersionString()`

Get version string

**Returns:** Current version of reader

###### Fields

| Name | Description |
|---|---|
| `serial` | Module serial number. |
| `altSerial` | Alternative manufacturer serial number. |
| `name` | Module name. |
| `fccId` | FCC ID |
| `hwVersion` | Hardware version |
| `swVerMajor` | Software version major number |
| `swVerMinor` | Software version minor number |
| `devBuild` | Software development build identifier. |
| `numGpio` | Number of GPIO's available on module. |
| `numSensors` | Number of sensors available on module. |
| `numRegions` | Number of regions available on module. |
| `numAntennas` | Number of enabled antennas on module. |
| `maxAntennas` | Number of maximum antennas on module. |

##### Type `ReflectedPowerInfo`

Full name: `NurApiDotNet.NurApi.ReflectedPowerInfo`

Reflected power data. See `NurApi.GetReflectedPower`

###### Properties

###### Property: `dBm`

Get reflected power as dBm

###### Fields

| Name | Description |
|---|---|
| `iPart` | i Part *** |
| `qPart` | q Part *** |
| `div` | div *** |
| `freq` | Frequency in kHz or 0 if not available |

##### Type `RegionInfo`

Full name: `NurApiDotNet.NurApi.RegionInfo`

Holds information about specific region

###### Fields

| Name | Description |
|---|---|
| `name` | Name of region |
| `regionId` | Region ID see `NurApi.Region` property |
| `baseFrequency` | RF base frequency in kHz. |
| `channelSpacing` | RF channel spacing in kHz. |
| `channelCount` | RF channel count. |
| `channelTime` | Maximum RF channel on time. |

##### Type `RssiFilter`

Full name: `NurApiDotNet.NurApi.RssiFilter`

Tag RSSI filter.

###### Constructors

###### Constructor: `RssiFilter()`

Constructor

###### Constructor: `RssiFilter(int, int)`

Constructor

**Parameters**

| Name | Description |
|---|---|
| `min` | Minimum accepted RSSI in dBm. Use 0 to disable filtering. |
| `max` | Maximum accepted RSSI in dBm.Use 0 to disable filtering |

###### Fields

| Name | Description |
|---|---|
| `min` | Minimum accepted RSSI in dBm. Use 0 to disable filtering. |
| `max` | Maximum accepted RSSI in dBm. Use 0 to disable filtering. |

##### Type `ScanChannelInfo`

Full name: `NurApiDotNet.NurApi.ScanChannelInfo`

Scannel scan data. See `NurApi.ScanChannels`

###### Fields

| Name | Description |
|---|---|
| `freq` | Frequency used |
| `rssi` | RSSI (Received Signal Strength Indicator) value |
| `rawiq` | Raw IQ |

##### Type `SensorConfig`

Full name: `NurApiDotNet.NurApi.SensorConfig`

Sensor configuration structure see `NurApi.GetSensorConfig`, `NurApi.SetSensorConfig`

###### Constructors

###### Constructor: `SensorConfig()`

Constructor

###### Fields

| Name | Description |
|---|---|
| `tapEnabled` | Tap sensor enable |
| `tapAction` | Action for tap sensor. |
| `lightEnabled` | Enable Light sensor |
| `lightAction` | Action for light sensor. |

##### Type `SystemInfo`

Full name: `NurApiDotNet.NurApi.SystemInfo`

Holds information about NUR module system.

###### Fields

| Name | Description |
|---|---|
| `blAddr` | Bootloader address. |
| `appAddr` | Application base address. |
| `vectorBase` | Interrupt vector base. |
| `appSzWord` | Application size. |
| `appCRCWord` | Application CRC. |
| `szFlash` | Flash memory size. |
| `szSram` | Internal SRAM size. |
| `stackTop` | Top of stack. |
| `nvSetAddr` | Non-vilatile settings' address. |
| `szNvSettings` | Size reserved for non-volatile settings. |
| `mainStackUsage` | Stack usage when entered main(). |
| `szUsedSram` | Used SRAM. |
| `szTagBuffer` | Tag buffer size in bytes. |

##### Type `Tag`

Full name: `NurApiDotNet.NurApi.Tag`

Class of tag

###### Constructors

###### Constructor: `Tag()`

Contructor

###### Constructor: `Tag(NurApi)`

Constructor

**Parameters**

| Name | Description |
|---|---|
| `api` | NurApi handle |

###### Constructor: `Tag(NurApi.Tag)`

Copy Constructor

**Parameters**

| Name | Description |
|---|---|
| `src` | Source Tag |

###### Constructor: `Tag(NurApi, NurApi.TagData)`

Constructor

**Parameters**

| Name | Description |
|---|---|
| `api` | NurApi handle |
| `tData` | Source tag data as `TagData` |

###### Constructor: `Tag(NurApi, ref NurApi.TagData)`

Constructor

**Parameters**

| Name | Description |
|---|---|
| `api` | NurApi handle |
| `tData` | Source tag data as `TagData` |

###### Constructor: `Tag(NurApi, NurApi.TagDataEx)`

Constructor for inventory+read.

**Parameters**

| Name | Description |
|---|---|
| `api` | NurApi handle |
| `eData` | Source tag data as `TagDataEx` |

###### Constructor: `Tag(NurApi, ref NurApi.TagDataEx)`

Constructor for inventory+read.

**Parameters**

| Name | Description |
|---|---|
| `api` | NurApi handle |
| `dataEx` | Source tag data as `TagDataEx` |

###### Methods

###### Method: `BlockErase(byte, uint, byte)`

Block erase.

**Parameters**

| Name | Description |
|---|---|
| `erBank` | Bank where the `erAddress` is located in.               | Value | See | |---|---| | `NurApi.BANK_PASSWD` | Password/reserded memory | | `NurApi.BANK_EPC` | EPC memory | | `NurApi.BANK_TID` | TID memory | | `NurApi.BANK_USER` | User memory | |
| `erAddress` | Word address for the first word to erase. |
| `erWords` | Number of words to erase starting from **erAddress**. |

###### Method: `BlockErase(uint, byte, uint, byte)`

Secured block erase.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for erase. |
| `erBank` | Bank where the block(s) are located in. |
| `erAddress` | Word address for the first word to erase. |
| `erWords` | Number of words to erase starting from **erAddress**. |

###### Method: `BlockPermalock(uint, bool, uint, uint, uint, ushort[])`

Do BlockPermalock with this tag.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to apply the mask to (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to apply the mask to. |
| `lockMask` | Each word represents on 16-block chunks lock mask as specified by Gen2 specification 1.2.0. |

###### Method: `BlockWrite(byte, uint, byte[], byte)`

Write tag using parameterized block write. The write is non secured and does not use a password.
The tag is singulated by its EPC.

**Parameters**

| Name | Description |
|---|---|
| `bank` | Bank to write to. |
| `wrAddress` | Word address of the write. |
| `wrData` | Data to write. Size must be aligned by 2; if **blSize** is non-zero then data length also be divisible by `blSize`. |
| `blSize` | A single block's size in **16-bit words**. |

###### Method: `BlockWrite(uint, byte, uint, byte[], byte)`

Write tag using parameterized block write. The write is secured and uses a password.
The tag is singulated by its EPC.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password to for write. |
| `bank` | Bank to write to. |
| `wrAddress` | Word address of the write. |
| `wrData` | Data to write. Size must be aligned by 2; if **blSize** is non-zero then data length also be divisible by `blSize`. |
| `blSize` | A single block's size in **16-bit words**. |

###### Method: `Clone()`

Clone this object

**Returns:** Deep copy of Tag object

###### Method: `Compare(NurApi.Tag)`

Compare tags

**Parameters**

| Name | Description |
|---|---|
| `t` | tag object to compare |

**Returns:** true, if tags are same

###### Method: `CopyTagValues(NurApi.Tag)`

Copy values from other Tag

**Parameters**

| Name | Description |
|---|---|
| `src` | Values to copy from |

###### Method: `Equals(object)`

Compare tag object

**Parameters**

| Name | Description |
|---|---|
| `obj` | Tag object to compare |

**Returns:** True, if this tag contains same EPC, false otherwise

###### Method: `Gen2v2Authenticate(NurApi.AuthenticateParam)`

Perform the Gen2 version 2 authentication command in open state (recommended).

**Parameters**

| Name | Description |
|---|---|
| `authParam` | Parameters required for authentication. |

**Returns:** Returns the authentication response.

**See also:** `AuthenticateParam`, `AuthenticateResp`, `AuthenticateParam`, `AuthenticateResp`, `NurApi.Gen2v2AuthenticateByEPC`, `NurApi.Gen2v2AuthenticateByEPC`

###### Method: `Gen2v2ReadBuffer(bool, uint, ushort, ushort)`

Gen2 version 2 ReadBuffer command with the tag being selected by its EPC contents.

This is similar to the regular read command but the read data source is the version 2 tag's internal buffer.

**Parameters**

| Name | Description |
|---|---|
| `secured` | Set to true if the tag is accessed with password prior to the read command. |
| `password` | Password to use in case the tag's access is secured. |
| `bitAddress` | The bit  address to start the reading from. |
| `bitCount` | Number of bits to read from the buffer. |

**Returns:** Returns the structure containing the data and the actual bit length of the data.

**Remarks**

Note that the application is responsible for the bit data handling.

The bit level understanding is especially required in case where the returned data is not exactly byte (8-bit) aligned.

**See also:** `V2ReadBufferResp`, `NurApi.Gen2v2ReadBufferByEPC`

###### Method: `Gen2v2Untraceable(uint, UntraceableParam)`

Perform the Untraceable command.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password must be valid; alwas executed in secure state. |
| `utrParam` | The Untracable command's parameters. |

**See also:** `UntraceableParam`

###### Method: `GetAccessPassword(uint, bool)`

Get Access password of tag

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Current access password |
| `secured` | Set true if secured |

**Returns:** Access password

**Example**

A tag's ('aTag') password memory has been locked with password 0xA5A5FEFE.

```csharp
bool CheckThisPassword(NurApi.Tag aTag, uint accessPwd)
{
	uint accessPwd = 0xA5A5FEFE;

	try
	{
		// The value needs not to be checked; a successfule access will tell that it is OK.
		aTag.GetAccessPassword(accessPwd, true);
		return true;
	}
	catch { /* More error handling here if necessary. */ }
	
	return false;
}
```

###### Method: `GetDataString()`

Converts the associated inventory+read data into HEX string if available.

**Returns:** Formatted hex data string

###### Method: `GetEpcString()`

Get EPC as formatted hex string

**Returns:** EPC code as Hex string

###### Method: `GetHashCode()`

Get hash code from EPC string

**Returns:** hash code

###### Method: `GetKillPassword(uint, bool)`

Get kill password from tag

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Current access password |
| `secured` | Set true if secured |

**Returns:** Kill password

**Example**

Assuming the tag's password is protected in whole by the access password, here's how to read the current kill password:

```csharp
// Note: needs to have try-catch.
uint GetCurrentKillPassword(NurApi.Tag aTag, uint accessPwd)
{
	// Can throw NurApiException.
	return aTag.GetKillPassword(accessPwd, true);
}
```

###### Method: `Inventory()`

Performs inventory select for this tag using 2 rounds Q=1 in session 0.
Can be used to update e.g. the RSSI value of the tag.

**See also:** `Tag.Inventory`

###### Method: `Inventory(int, int, int)`

Start inventory for current tag. Reader is performing inventory select for tag's EPC. If not found, exception thrown.

**Parameters**

| Name | Description |
|---|---|
| `rounds` | Full query rounds to perform in inventory. Range 0 - 10, where 0 means automatic rounds selection |
| `Q` | Query Q parameter. Range 0 - 15, where value 0 means automatic Q selection |
| `session` | Query session parameter. Range 0 - 3 |

**Remarks**

Can be used to update the various values associated with the tag: RSSI, timestamp etc.

###### Method: `IsNull()`

Detect if this tag has not been initialized correctly

**Returns:** true if tag's content is null

###### Method: `KillTag(uint)`

Kill tag

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Current kill password |

###### Method: `op_Equality(NurApi.Tag, NurApi.Tag)`

Compare two tag objects.

**Parameters**

| Name | Description |
|---|---|
| `left` | Tag object left |
| `right` | Tag object right |

**Returns:** True, if left and right tag contains same EPC, false otherwise

###### Method: `op_Inequality(NurApi.Tag, NurApi.Tag)`

Compare two tag objects.

**Parameters**

| Name | Description |
|---|---|
| `left` | Tag object left |
| `right` | Tag object right |

**Returns:** False, if left and right tag contains same EPC, true otherwise

###### Method: `OpenStateLock(uint, uint)`

Set tag lock in open state i.e. without password access.

**Parameters**

| Name | Description |
|---|---|
| `memoryMask` | Which memories to lock. See flags: `NurApi.LOCK_OPEN`  `NurApi.LOCK_SECURED`  `NurApi.LOCK_PERMAWRITE`  `NurApi.LOCK_PERMALOCK` |
| `action` | Which memories to lock. Memory mask flags: `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD` |

###### Method: `OpenStateLockRaw(uint, uint)`

Set tag lock in open state i.e. without password access using raw mask and action data.

**Parameters**

| Name | Description |
|---|---|
| `lockMask` | Standard defined lock payload bits 19-10, starting from bit 0. |
| `lockAction` | Standard defined lock payload bits 9-0, starting from bit 0. |

**Remarks**

Lock mask and action parameter are in raw format defined in UHF C1G2 standard section "6.3.2.11.3.5 Lock (mandatory).

**See also:** `NurApi.OpenStateLockByEPC`, `Tag.OpenStateLockRaw`, `NurApi.LOCK_OPEN`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_PERMALOCK`, `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD`

###### Method: `ReadPermalock(uint, bool, uint, uint, uint)`

Read block permalock statuses from this tag.

**Parameters**

| Name | Description |
|---|---|
| `password` | Password parameter for access. |
| `secured` | If true then access is done with the password |
| `bank` | Bank range is 1...3. |
| `addr` | This is the first address of the first of 16-block chunk to read (0 -> 0, 1 -> 16, ...). |
| `range` | Number of 16-block chunks to read. |

**Returns:** Return an array of ushort (unsigned 16-bit) values representing the lock bits.

**Remarks**

Each return word represents 16 block lock states i.e. on bit corresponds to a block.

The bit 0 represent block at address, bit 1 at address +1 and so on.

###### Method: `ReadTag(uint, bool, byte, uint, int)`

Read tag's memory.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password to use if required. |
| `secured` | Set true if secured tag |
| `rdBank` | Memory bank to read from.             Password/reserved memory: `NurApi.BANK_PASSWD`             EPC memory: `NurApi.BANK_EPC`             TID memory `NurApi.BANK_TID`             User memory: `NurApi.BANK_USER` |
| `rdAddress` | **Word** address for read operation |
| `rdByteCount` | Number of bytes to read. This must **divisible by two**. |

**Returns:** Array of bytes from tag memory

**Example**

Example shows how to read 32 words from user memory. The tag has been retrieved from the tag storage.

```csharp
int rdByteCount;
byte []userMemory;

rdByteCount = 32 * 2;	// Make byte length.			

// The tag is internally selected by its EPC contents.
// Password is not used in this read.
try
{
	[]userMemory = aTag.ReadTag(0, false, NurApi.BANK_USER, 0, rdByteCount);
}
catch (NurApiException e)
{
	HandleReadError(e.error);
}
```

###### Method: `SetAccessPassword(uint, bool, uint)`

Set access password of tag.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Current access password |
| `secured` | Set true if secured |
| `newPasswd` | New access password to write |

###### Method: `SetKillPassword(uint, bool, uint)`

Set new kill password to tag. The tag is selected by its EPC contents.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Current access password |
| `secured` | Set true if secured |
| `newPasswd` | New kill password |

**Example**

Assuming the tag's password is protected in whole by the access password, here's how to write a new kill password:

```csharp
// Note: needs to have try-catch.
void WriteNewKillPassword(NurApi.Tag aTag, uint accessPwd, uint newKillPwd)
{
	// Can throw NurApiException.
	aTag.SetKillPassword(accessPwd, true, newKillPwd);
}
```

###### Method: `SetLock(uint, uint, uint)`

Set memory lock for tag

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. Password is always needed. |
| `memoryMask` | Which memories to lock. Memory mask flags: `NurApi.LOCK_USERMEM`, `NurApi.LOCK_TIDMEM`, `NurApi.LOCK_EPCMEM`, `NurApi.LOCK_ACCESSPWD`, `NurApi.LOCK_KILLPWD` |
| `action` | Action to perform for memories. Memory lock action: `NurApi.LOCK_OPEN`, `NurApi.LOCK_PERMAWRITE`, `NurApi.LOCK_SECURED`, `NurApi.LOCK_PERMALOCK` |

**Example**

Note: prior to locking, the access password needs to beset with e.g.

```csharp
// Use in try-catch, may throw NurApiException.
void ProtectUserMemory(NurApi.Tag aTag, uint password)
{
	aTag.SetLock(password, NurApi.LOCK_USERMEM, NurApi.LOCK_SECURED);
}
```

**Example**

```csharp
// Use in try-catch, may throw NurApiException.
void ProtectPasswordMemory(NurApi.Tag aTag, uint password)
{
	// Write...
	aTag.SetAccessPassword(0, false, password);
	// ...and lock.
	aTag.SetLock(password, NurApi.LOCK_ACCESSPWD | NurApi.LOCK_KILLPWD, NurApi.LOCK_SECURED);
}
```

###### Method: `ToString()`

Converts EPC value to formatted hex string

**Returns:** Formatted hex EPC string

###### Method: `TraceTag(int)`

Trace this tag by its EPC contents.

**Parameters**

| Name | Description |
|---|---|
| `flags` | 0 for normal operation i.e. the trace is run once and the reponse `TraceTagData` is returned immediately.             Continuous operation flags: `NurApi.TRACETAG_START_CONTINUOUS`, `NurApi.TRACETAG_STOP_CONTINUOUS` |

**Returns:** Data from traced tag as `TraceTagData`. Only valid for normal operation.

**Example**

```csharp
hNur.TraceTagEvent += new EventHandler<NurApi.TraceTagEventArgs>(hNur_TraceTagEvent);
```

**Example**

```csharp
	try
	{
		aTag.TraceTag(NurApi.TRACETAG_START_CONTINUOUS);
	}
	catch (NurApiException e)
	{
		HandleTraceStartError(e.error);
	}
	
	// If OK, the trace events will now start to occur in the receiving control.
```

**See also:** `NurApi.TraceTagEvent`

###### Method: `WriteEPC(uint, bool, byte[])`

Write new EPC to tag.

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password for secured operations. |
| `secured` | TRUE if operation is secured, otherwise FALSE. |
| `newEpcBuffer` | New EPC to write. |

###### Method: `WriteTag(uint, bool, byte, uint, byte[])`

Write data to tag's memory

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password |
| `secured` | Set true if secured tag |
| `wrBank` | Memory bank to write to.             Password/reserved memory: `NurApi.BANK_PASSWD`             EPC memory: `NurApi.BANK_EPC`             TID memory `NurApi.BANK_TID`             User memory: `NurApi.BANK_USER` |
| `wrAddress` | **Word** address for write operation |
| `wrBuffer` | Write buffer |

**Example**

The example shows how to write a kill password bytes to a tag.

```csharp
void WriteNewKillPassword(uint killPwd, uint accessPwd)
{
	byte []killPwdBytes;		// Final bytes to write
	
	// Make byte array...
	killPwdBytes = BitConverter.GetBytes(killPwd);
	// ...and reverse: the tag's notation is big-endian.
	System.Array.Reverse(killPwdBytes);

	try
	{
		aTag.WriteTag(accessPwd, true, NurApi.BANK_PASSWD, 0, killPwdBytes);
	}
	catch (NurApiException e)
	{
		HandleKillPwdWriteError(e.error);
	}
}
```

###### Method: `WriteTag(uint, bool, byte, uint, byte[], int, int)`

Write data to tag's memory

**Parameters**

| Name | Description |
|---|---|
| `passwd` | Password |
| `secured` | Set true if secured tag |
| `wrBank` | Memory bank to write to.             Password/reserved memory: `NurApi.BANK_PASSWD`             EPC memory: `NurApi.BANK_EPC`             TID memory `NurApi.BANK_TID`             User memory: `NurApi.BANK_USER` |
| `wrAddress` | **Word** address for write operation |
| `wrBuffer` | Write buffer |
| `wrBufferPos` | Position of write buffer |
| `wrBufferLen` | Bytes to write |

**Remarks**

For an example, see `Tag.WriteTag`.

###### Properties

###### Property: `epc`

EPC data

**Value:** Byte array representation of the tag's EPC.

###### Property: `irData`

Associated inventory + read data.

**Value:** Byte array representation of the associated inventory + read data if present.

###### Property: `IsAdded`

True if tag is added in TagStorage since last read of this property. Reading this property sets this value to false.

###### Property: `IsUpdated`

True if tag is updated in TagStorage since last read of this property. Reading this property sets this value to false.

###### Property: `PhysicalAntenna`

The physical antenna's name from where the last best RSSI was detected.

**Value:** Physical antenna's name.

###### Property: `userData`

OBSOLETE! Use UserData instead.
User defined variable data

###### Fields

| Name | Description |
|---|---|
| `hApi` | Owner NurApi handle |
| `timestamp` | Timestamp from inventory start in milliseconds when tag was found |
| `rssi` | RSSI (Received Signal Strength Indicator) value |
| `scaledRssi` | Scaled RSSI 0-100 % |
| `frequency` | Frequency where tag found in khz |
| `pc` | Tag's PC (Protocol Control) word |
| `channel` | Index of the frequency channel in current hop table |
| `antennaId` | Zero based Antenna ID |
| `xpc_w1` | XPC word 1 if stripped from EPC response. |
| `xpc_w2` | XPC word 2 if stripped from EPC response. |
| `FirstSeenUtc` | When tag is first seen in TagStorage |
| `LastSeenUtc` | When tag is last updated in TagStorage |
| `UpdateCount` | How many tag has been updated in TagStorage |
| `UserData` | User defined variable data |

##### Type `TagData`

Full name: `NurApiDotNet.NurApi.TagData`

Tag data (backward-compatibility alias for `TagDataEx`).

##### Type `TagDataEx`

Full name: `NurApiDotNet.NurApi.TagDataEx`

Contains single tag inventoried information.

**Remarks**

Supported by the L2 (NUR05WL2) module.
Used in combined inventory + read.
`NurApi.GetInventoryRead`
`IrInformation`

###### Fields

| Name | Description |
|---|---|
| `timestamp` | Timestamp when tag was found in milliseconds; Only valid when meta data is fetched. |
| `rssi` | Tag RSSI; Only valid when meta data is fetched. |
| `scaledRssi` | Tag RSSI scaled to 0% - 100%; Only valid when meta data is fetched. |
| `freq` | Frequency in kHz where tag was found; Only valid when meta data is fetched. |
| `pc` | Tag PC word; Only valid when meta data is fetched. |
| `channel` | Channel index where tag was found; Only valid when meta data is fetched. |
| `antennaId` | Antenna ID where tag was found; Only valid when meta data is fetched. |
| `epcLen` | Number of bytes stored in epc field |
| `epc` | Tag EPC data.  Multiplied by two since the EPC may be appended with inventory + read data. |
| `dataLen` | Number of bytes stored in inventory read data field. |
| `irData` | Tag inventory + read data. |
| `xpc_w1` | The possibly present XPC_W1. |
| `xpc_w2` | The possible present XPC_W2. |

##### Type `TagStorage`

Full name: `NurApiDotNet.NurApi.TagStorage`

Fast EPC/C# optimized hash based tag data storage class.

###### Methods

###### Method: `AddOrUpdateTag(NurApi, NurApi.TagDataEx, ref NurApi.Tag)`

Add / update nur protocol tag in tag storage

**Parameters**

| Name | Description |
|---|---|
| `api` | Owner |
| `tagData` | Nur protocol tag data |
| `storedTag` | New or updated tag is stored here |

**Returns:** True if tag was added, false if tag was updated.

**Remarks**

If tag is already found in storage, it's meta data is updated from tag

###### Method: `AddTag(NurApi.Tag)`

Add new tag to storage. Tag is added only there's no tag with same EPC already.

**Parameters**

| Name | Description |
|---|---|
| `tag` | Tag to add |

**Returns:** True if tag was added, false otherwise

**Remarks**

If tag is already found in storage, it's meta data is updated from tag

###### Method: `AddTag(NurApi.Tag, ref NurApi.Tag)`

Add / update tag in tag storage

**Parameters**

| Name | Description |
|---|---|
| `tag` | Tag to add |
| `storedTag` | New or updated tag is stored here |

**Returns:** True if tag was added, false if tag was updated.

**Remarks**

If tag is already found in storage, it's meta data is updated from tag

###### Method: `Clear()`

Clear tag storage, including added and updated tags list.

###### Method: `Copy(NurApi.TagStorage)`

Copy tags from other TagStorage to this storage.
Only tags with different EPC are added.
If tag is already found in storage, it's meta data is updated from source tag storage

**Parameters**

| Name | Description |
|---|---|
| `srcStorage` | Source storage |

**Returns:** Number of newly added tags

###### Method: `GetAddedTags()`

Get list of newly added tags in this storage since last called `TagStorage.Clear`.

**Returns:** Dictionary with epc as key and Tag as value

**Remarks**

NOTE: TagStorage object must be locked when accessing returned Dictionary

###### Method: `GetEnumerator()`

IEnumerable interface

**Returns:** IEnumerator

###### Method: `GetTag(byte[])`

Gets tag by EPC code.

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC code |

**Returns:** Associated tag if found, otherwise null

###### Method: `GetTag(string)`

Gets tag by EPC code formatted as hex string, where 2 characters represents 1 byte.

**Parameters**

| Name | Description |
|---|---|
| `epcStr` | Formatted hex string, where 2 characters represents 1 byte. e.g. hex 0x32 is formatted as "32" |

**Returns:** Associated tag if found, otherwise null

###### Method: `GetUpdatedTags()`

Get list of updated tags in this storage since last called `TagStorage.Clear`.

**Returns:** Dictionary with epc as key and Tag as value

**Remarks**

NOTE: TagStorage object must be locked when accessing returned Dictionary

###### Method: `HasTag(byte[])`

Test if tag with this EPC is stored in storage already.

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC code |

**Returns:** True if tag is stored already in storage, false otherwise

###### Method: `HasTag(string)`

Test if tag with this EPC is stored in storage already.

**Parameters**

| Name | Description |
|---|---|
| `epcStr` | Formatted hex string, where 2 characters represents 1 byte. e.g. hex 0x32 is formatted as "32" |

**Returns:** True if tag is stored already in storage, false otherwise

###### Method: `HasTag(NurApi.Tag)`

Test if tag with same EPC is stored in storage already.

**Parameters**

| Name | Description |
|---|---|
| `tag` | Tag to test against |

**Returns:** True if tag is stored already in storage, false otherwise

###### Method: `IndexOf(byte[])`

Get tag index if found

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC as a byte array |

**Returns:** Zero based index when found, otherwise -1

###### Method: `IndexOf(string)`

Get tag's index if found

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC as a string. |

**Returns:** Zero based index when found, otherwise -1.

###### Method: `ParseIdBuffer(NurApi, NurApi.TagStorage, byte[], int, int, NurApi.TagStorage.ParseIdBufferFlags, NurApi.TagStorage.ParseIdBufferCallback)`

###### Method: `Remove(int)`

Remove a single tag entry (if found) from the storage.

**Parameters**

| Name | Description |
|---|---|
| `index` | Tag's index. |

**Returns:** Returns true if the tag was found and removed.

###### Method: `Remove(byte[])`

Remove a single tag entry (if found) from the storage.

**Parameters**

| Name | Description |
|---|---|
| `epc` | Tag's EPC as a byte array. |

**Returns:** true if the tag was found and removed.

###### Method: `Remove(string)`

**Returns:** true if the tag was found and removed.

###### Method: `TryGetTag(byte[], ref NurApi.Tag)`

Gets tag by EPC code

**Parameters**

| Name | Description |
|---|---|
| `epc` | EPC code |
| `tag` | Associated tag is stored here if found |

**Returns:** True if associated tag is found in storega, false otherwise.

###### Properties

###### Property: `Count`

Gets number tags currently stored in storage.

**Value:** Read only: returns the tag storage's tag count.

###### Property: `EnableXPCRemoval`

Set/Get automatic XPC removing. Defaults to true

###### Property: `Item`

Zero based index to get tag

**Parameters**

| Name | Description |
|---|---|
| `i` | The index of the tag. |

**Returns:** Tag at given index if present; otherwise null.

**Value:** The value `i` needs to be in range 0...`TagStorage.Count`.

###### Property: `Item`

Gets tag by EPC code

**Parameters**

| Name | Description |
|---|---|
| `epc` | The EPC to find. |

**Returns:** Tag spcified by `epc` if present; otherwise null.

**Value:** The EPC is a byte array representing the EPC memory contents to look up.

##### Type `TAM_PARAM`

Full name: `NurApiDotNet.NurApi.TAM_PARAM`

The ISO29167-10 authentication parameters for methods 1 and 2.

###### Fields

| Name | Description |
|---|---|
| `tam2` | If true then the method is 2 (TAM2 with custom data). |
| `decrypt` | If true then the contents are decrypted using the key. With TAM2 the contents are decrypted with key and using an IV (->CBC) from the first data block. |
| `keyNum` | Key number to use. |
| `mpi` | TAM2: Memory Profile Indicator. Basic indicators are: 0 = EPC, 1 = TID and 2 = user memory. |
| `protMode` | Encipherment mode. |
| `offset` | The block data's offset value in TAM2. |
| `blockCount` | Number of custom data blocks. Allowed range is 1...4 (8...32 bytes as a result). |
| `key` | Key to use if response is decrypted. |

##### Type `TAM_RESP`

Full name: `NurApiDotNet.NurApi.TAM_RESP`

The ISO29167-10 authentication response for methods 1 and 2.

###### Fields

| Name | Description |
|---|---|
| `response` | There is a response. |
| `ok` | The response is decrypted, C_TAM matches and challenge contents was OK. |
| `C_TAM` | The 16-bit constant in the first block. |
| `TRnd32` | The following 32-bit random value in the first block. |
| `szBlocks` | Actual number of byte int blockData in the block data. |
| `challenge` | Challenge that the native API generated. |
| `firstBlock` | Decrypted contents of the first block. |
| `blockData` | Block data if custom data was requested. |
| `cmac` | CMAC data if protection mode 2,3. |

##### Type `TraceTagData`

Full name: `NurApiDotNet.NurApi.TraceTagData`

Trace tag data after `NurApi.TraceTagEvent` event

###### Fields

| Name | Description |
|---|---|
| `rssi` | Tag RSSI, -127 if tag could not be found. |
| `scaledRssi` | Tag RSSI scaled to 0% - 100%. |
| `antennaID` | Antenna ID where tag was found. |
| `epcLen` | Number of bytes stored in epc field. |
| `epc` | Traced tag EPC data. |
| `epcStr` | EPC as string |

##### Type `TraceTagEventArgs`

Full name: `NurApiDotNet.NurApi.TraceTagEventArgs`

Trace Tag event arguments class (`NurApi.TraceTagEvent`)

###### Constructors

###### Constructor: `TraceTagEventArgs(uint, NurApi.TraceTagData)`

Trace tag event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | Trace Tag event arguments as `TraceTagData` |

###### Fields

| Name | Description |
|---|---|
| `data` | Trace Tag event result as `TraceTagData` |

##### Type `TransportStats`

Full name: `NurApiDotNet.NurApi.TransportStats`

Transport layer byte-count statistics.

##### Type `TriggerReadEventArgs`

Full name: `NurApiDotNet.NurApi.TriggerReadEventArgs`

Trigger Read Event arguments class (`NurApi.TriggerReadEvent`)

###### Constructors

###### Constructor: `TriggerReadEventArgs(uint, TriggerReadData)`

Trigger Read Event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | Trigger read event arguments as `TriggerReadData` |

###### Fields

| Name | Description |
|---|---|
| `data` | Trigger read event arguments as `TriggerReadData` |

##### Type `TuneEventArgs`

Full name: `NurApiDotNet.NurApi.TuneEventArgs`

Tune event arguments class.

###### Constructors

###### Constructor: `TuneEventArgs(uint, TuneEventData)`

Tune Event arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | Tune event arguments as `TuneEventData` |

###### Fields

| Name | Description |
|---|---|
| `data` | Tune event arguments as `TuneEventData` |

##### Type `UnknownNotifyEventArgs`

Full name: `NurApiDotNet.NurApi.UnknownNotifyEventArgs`

Unknown Notify Event Arguments class (`NurApi.UnknownNotifyEvent`)

###### Constructors

###### Constructor: `UnknownNotifyEventArgs(uint, int, byte[])`

Unknown Notify Event Arguments

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `type` | Type of notification |
| `data` | byte array of notification arguments |

###### Fields

| Name | Description |
|---|---|
| `type` | Type of notification |
| `data` | byte array of notification arguments |

##### Type `V2ReadBufferResp`

Full name: `NurApiDotNet.NurApi.V2ReadBufferResp`

Response to the Gen2 version 2 ReadBuffer command.

###### Fields

| Name | Description |
|---|---|
| `bitLength` | Number of valid bits in the result. |
| `buffer` | The tag's reply, bits are "left aligned". |

##### Type `WIRELESS_CHARGE_STATUS`

Full name: `NurApiDotNet.NurApi.WIRELESS_CHARGE_STATUS`

Accessory device wireless charging status

###### Fields

| Name | Description |
|---|---|
| `WIRELESS_CHARGE_OFF` | The accessory stated that wireless charging is currently off. |
| `WIRELESS_CHARGE_ON` | The accessory stated that wireless charging is currently on. |
| `WIRELESS_CHARGE_REFUSED` | The accessory stated that wireless charging is currently not available. |
| `WIRELESS_CHARGE_FAIL` | There was an unexpected error in the communications (no reply, timeout etc.) |
| `WIRELESS_CHARGE_NOT_SUPPORTED` | The accessory device replied with HW mismatch error. |

##### Type `WLAN_EAP_METHOD`

Full name: `NurApiDotNet.NurApi.WLAN_EAP_METHOD`

EAP methods for WLAN Enterprise security profile
NOTE: Currently not implemented in any product!

###### Fields

###### Constants `SL_*`

| Name | Description |
|---|---|
| `SL_ENT_EAP_METHOD_TLS` | EAP method TLS |
| `SL_ENT_EAP_METHOD_TTLS_TLS` | EAP method TTLS_TLS |
| `SL_ENT_EAP_METHOD_TTLS_MSCHAPv2` | EAP method TTLS_MSCHAPv2 |
| `SL_ENT_EAP_METHOD_TTLS_PSK` | EAP method TTLS_PSK |
| `SL_ENT_EAP_METHOD_PEAP0_TLS` | EAP method PEAP0_TLS |
| `SL_ENT_EAP_METHOD_PEAP0_MSCHAPv2` | EAP method PEAP0_MSCHAPv2 |
| `SL_ENT_EAP_METHOD_PEAP0_PSK` | EAP method PEAP0_PSK |
| `SL_ENT_EAP_METHOD_PEAP1_TLS` | EAP method PEAP1_TLS |
| `SL_ENT_EAP_METHOD_PEAP1_MSCHAPv2` | EAP method PEAP1_MSCHAPv2 |
| `SL_ENT_EAP_METHOD_PEAP1_PSK` | EAP method PEAP1_PSK |
| `SL_ENT_EAP_METHOD_FAST_AUTH_PROVISIONING` | EAP method FAST_AUTH_PROVISIONING |
| `SL_ENT_EAP_METHOD_FAST_UNAUTH_PROVISIONING` | EAP method FAST_UNAUTH_PROVISIONING |
| `SL_ENT_EAP_METHOD_FAST_NO_PROVISIONING` | EAP method NO_PROVISIONING |

##### Type `WLAN_ROLE`

Full name: `NurApiDotNet.NurApi.WLAN_ROLE`

Current role of WLAN module

###### Fields

###### Constants `ROLE_*`

| Name | Description |
|---|---|
| `ROLE_STA` | ROLE Station |
| `ROLE_AP` | ROLE Access Point |
| `ROLE_P2P` | ROLE P2P |
| `ROLE_STA_ERR` | Failure to load MAC/PHY in STA role |
| `ROLE_AP_ERR` | Failure to load MAC/PHY in AP role |
| `ROLE_P2P_ERR` | Failure to load MAC/PHY in P2P role |

##### Type `WLAN_SCAN_SECTYPE`

Full name: `NurApiDotNet.NurApi.WLAN_SCAN_SECTYPE`

WLAN security type for result of network scan

###### Fields

| Name | Description |
|---|---|
| `OPEN` | Open |
| `WEP` | WEP |
| `WPA` | WPA |
| `WPA2` | WPA2 |

##### Type `WLAN_SECTYPE`

Full name: `NurApiDotNet.NurApi.WLAN_SECTYPE`

WLAN Security types

###### Fields

| Name | Description |
|---|---|
| `OPEN` | Open |
| `WEP` | WEP |
| `WPA` | WPA |
| `WPA2` | WPA2 |
| `WPA_ENT` | WPA Enterprise |

##### Type `WLAN_STATUS`

Full name: `NurApiDotNet.NurApi.WLAN_STATUS`

WLAN status bits

###### Fields

| Name | Description |
|---|---|
| `CONNECTION` | the device is connected to the AP |
| `CONNECTED` | client is connected to device |
| `IP_ACQUIRED` | the device has acquired an IP |
| `IP_LEASED` | the device has leased an IP |
| `CONNECTION_FAILED` | failed to connect to device |

##### Type `WLanProfile`

Full name: `NurApiDotNet.NurApi.WLanProfile`

WLan profile data.

###### Fields

| Name | Description |
|---|---|
| `index` | Index of profile (1-7) |
| `ssid` | SSID of target AP |
| `mac` | MAC of target AP |
| `secType` | Security type: Open,WEP WPA1, WPA2 |
| `secKey` | Security key. Hexadecimal digits - any combination of 0-9 a-f and A-F |
| `extUser` | ExtUser |
| `anonUser` | AnonUser |
| `certIndex` | Cert Index |
| `eapMethod` | EAP Method |
| `priority` | Priority. 0-7 (0=Highest) |

##### Type `WLanSearchEventArgs`

Full name: `NurApiDotNet.NurApi.WLanSearchEventArgs`

WLAN search event arguments class.

###### Constructors

###### Constructor: `WLanSearchEventArgs(uint, WLanSearchEventData)`

WLan search event arguments
NOTE: Not tested as products do not support this functionality

**Parameters**

| Name | Description |
|---|---|
| `timestamp` | milliseconds after NurApi initialized |
| `data` | WLan search item argument as `WLanSearchEventData` |

###### Properties

###### Property: `data`

WLAN search event arguments as `WLanSearchEventData`

##### Type `WLanStatus`

Full name: `NurApiDotNet.NurApi.WLanStatus`

WLAN module status information.

###### Fields

| Name | Description |
|---|---|
| `wlan_status` | Status of WLan module. 0=disable 1=enable 2=disabled initializing when enabled. |
| `role` | Current operation mode.    ROLE_STA = 0,ROLE_AP = 2,ROLE_P2P = 3    ROLE_STA_ERR =  -1, Failure to load MAC/PHY in STA role    ROLE_AP_ERR  =  -ROLE_AP,  Failure to load MAC/PHY in AP role    ROLE_P2P_ERR =  -ROLE_P2P  Failure to load MAC/PHY in P2P role |
| `wlan_connection_status` | Current connection status    bit 0 = STATUS_BIT_CONNECTION the device is connected to the AP    bit 1 = STATUS_BIT_STA_CONNECTED client is connected to device    bit 2 = STATUS_BIT_IP_ACQUIRED the device has acquired an IP    bit 3 = STATUS_BIT_IP_LEASED the device has leased an IP    bit 4 = STATUS_BIT_CONNECTION_FAILED failed to connect to device |
| `profile_count` | Count of profiles currently added. |
| `lasterror` | Last error code. 0=No error. |
| `ChipId` | Chip ID of WLan module. |
| `FwVersion` | FW version |
| `PhyVersion` | PHY version |
| `NwpVersion` | NWP version |
| `HostDrvVer` | Host driver version |
| `RomVersion` | ROM version of WLAn module. |
| `ip` | IP Address |
| `gwip` | GW IP Address |
| `mac` | MAC address of WLA module. |
| `ssid` | SSID. |
| `connection_ssid` | SSID of device where connected to |
| `connection_mac` | MAC address where connected to |
| `scantime` | Time in milliseconds how long network scan enabled. |
| `rssi_mgmnt` | Holds the average management frames RSSI as dBm |
| `rssi_datactrl` | Holds the average data + ctrl frames RSSI as dBm |
| `reserved` | Reserved |

##### Type `XPCSpec`

Full name: `NurApiDotNet.NurApi.XPCSpec`

Holds XPCSpec data.

###### Fields

| Name | Description |
|---|---|
| `xpc_w1` | XPC word 1 if present. |
| `xpc_w2` | XPC word 2 if present. |
| `modifiedEpc` | Modified EPC i.e. the EPC without the XPC word(s). |

#### Type `AccBarcodeResult`

Full name: `NurApiDotNet.AccBarcodeResult`

Barcode event result

##### Constructors

###### Constructor: `AccBarcodeResult()`

Constructor

##### Fields

| Name | Description |
|---|---|
| `status` | Status from the reader. |
| `Barcode` | Interpreted barcode contents if available. |

#### Type `AccessoryConfig`

Full name: `NurApiDotNet.AccessoryConfig`

Reader may have accessories like Barcode reader, imager, beeper, vibrator etc.

##### Methods

###### Method: `deserializeConfigurationReply(byte[])`

Deserializes the accessory extension's configuration reply.

**Parameters**

| Name | Description |
|---|---|
| `reply` | Bytes received from the transport layer / reader module. |

**Returns:** Return the configuration class if the reply is OK.

###### Method: `GetAllowPairingState()`

Get state of 'Allow pairing' flag.

**Returns:** true if pairing is allowed.

###### Method: `getDeviceType()`

Get device name "EXA21", "EXA51" or "EXA31" or "EXA81"

**Returns:** device name as string

###### Method: `GetHidBarCode()`

Get whether the HID-bit is set in the flag set.

**Returns:** true if the barcode HID-bit is set in the current flag set

###### Method: `GetHidMode()`

Get current HID mode

**Returns:** current HID mode

###### Method: `GetHidRFID()`

Get whether the RFID HID-bit is set in the flag set.

**Returns:** true if the RFID HID-bit is set in the current flag set

###### Method: `GetHidUsbState()`

Get state of 'HID-USB' flag

**Returns:** Returns true if HID-USB set

###### Method: `hasImagerScanner()`

Get whether the accessory has 1D/2D imager present.

**Returns:** true if there is a 1D/2D imager present.

###### Method: `hasVibrator()`

Get whether the accessory has built-in vibrator.

**Returns:** true if there is built-in vibrator in the device

###### Method: `hasWirelessCharging()`

Get whether the accessory has wireless charging device.

**Returns:** true if there is wireless charging option available

###### Method: `isDeviceEXA21()`

Get whether the device is configured as EXA21 reader.

**Returns:** true if the reader is EXA21

**See also:** `AccessoryConfig.isDeviceEXA81`, `AccessoryConfig.isDeviceEXA51`, `AccessoryConfig.isDeviceEXA31`

###### Method: `isDeviceEXA31()`

Get whether the device is configured as EXA31 reader.

**Returns:** true if the reader is EXA31

**See also:** `AccessoryConfig.isDeviceEXA81`, `AccessoryConfig.isDeviceEXA51`, `AccessoryConfig.isDeviceEXA21`

###### Method: `isDeviceEXA51()`

Get whether the device is configured as EXA51 reader.

**Returns:** true if the reader is EXA51

**See also:** `AccessoryConfig.isDeviceEXA81`, `AccessoryConfig.isDeviceEXA31`, `AccessoryConfig.isDeviceEXA21`

###### Method: `isDeviceEXA81()`

Get whether the device is configured as EXA51 reader.

**Returns:** true if the reader is EXA81

**See also:** `AccessoryConfig.isDeviceEXA51`, `AccessoryConfig.isDeviceEXA31`, `AccessoryConfig.isDeviceEXA21`

###### Method: `SetAllowPairingState(bool)`

Set the 'Allow pairing' state.

**Parameters**

| Name | Description |
|---|---|
| `setAllowPairing` | set to true if allowing device to pair with the target device |

###### Method: `SetHidBarcode(bool)`

Set the HID flag in the barcode scan.

**Parameters**

| Name | Description |
|---|---|
| `setHID` | set to true to set the behavior to "HID" |

###### Method: `SetHidMode(NurApi.HIDMode)`

Set HID mode flags

**Parameters**

| Name | Description |
|---|---|
| `mode` | `HIDMode` to set |

###### Method: `SetHidRFID(bool)`

Set the RFID HID-flag in the barcode scan.

**Parameters**

| Name | Description |
|---|---|
| `setHID` | set to true to set the behavior to "HID" |

###### Method: `SetHidUsbState(bool)`

Set the 'HID-USB' state.

**Parameters**

| Name | Description |
|---|---|
| `setHidUsb` | set to true if set device to USB-HID mode |

##### Fields

###### Constants `APP_*`

| Name | Description |
|---|---|
| `APP_PERM_SIG` | Constant signature value used by the module and API extension. |
| `APP_PERM_SIG_OLD1` | Constant OLD signature value used by the module and API extension. |
| `APP_CTX_SIZE` | Byte size of the application context. |
| `APP_CTX_SIZE_OLD1` | OLD Byte size of the application context. |
| `APP_FL_HID_BARCODE` | HID-bit for the barcode scan. |
| `APP_FL_HID_RFID` | HID-bit for the RFID scan / inventory. |
| `APP_FL_USE_PEERMGR` | Allow pairing bit |
| `APP_FL_HID_USB` | bit for the EXA21 HID-USB mode |

###### Other fields

| Name | Description |
|---|---|
| `ACC_EXT_GET_CFG` | Get configuration command. |
| `ACC_EXT_SET_CFG` | Set configuration command. |
| `SZ_NAME_FIELD` | Size, in bytes, of the name field in the configuration protocol packet. |
| `MAX_NAME_LENGTH` | Maximum name length in characters. |
| `CONFIG_FLAG_EXA51` | Device is configured as EXA51 reader. |
| `CONFIG_FLAG_EXA31` | Device is configured as EXA31 reader. |
| `DEV_FEATURE_IMAGER` | Device has 1D/2D imager. |
| `DEV_FEATURE_WIRELESS_CHG` | Device has built-in wireless charging device. |
| `DEV_FEATURE_VIBRATOR` | Device has built-in vibrator. |
| `signature` | Signature of config struct. Use value read (NurAccGetConfig) from device. |
| `config` | Device configuration flags. Currently NUR_ACC_CFG_ACD or NUR_ACC_CFG_WEARABLE |
| `flags` | Device operation flags. Currently used to enable HID modes. NUR_ACC_FL_HID_BARCODE and/or NUR_ACC_FL_HID_RFID |
| `hid_barcode_timeout` | HID mode barcode scanner read timeout in milliseconds |
| `hid_rfid_timeout` | HID mode RFID read timeout in milliseconds |
| `hid_rfid_maxtags` | HID mode RFID read max tags. When max tags reached, reading will stop |
| `name` | Name read from the accessory / reader. |

#### Type `AccessorySensorChanged`

Full name: `NurApiDotNet.AccessorySensorChanged`

Nur accessory sensor changed information

##### Fields

| Name | Description |
|---|---|
| `source` | Sensor/GPIO pin number for this sensor |
| `removed` | Sensor added(0) or removed(1) |

#### Type `AccSensorData`

Full name: `NurApiDotNet.AccSensorData`

Abstract base class for sensor values.

##### Fields

| Name | Description |
|---|---|
| `source` | Sensor/GPIO pin number for this sensor |

#### Type `AccSensorRangeData`

Full name: `NurApiDotNet.AccSensorRangeData`

Sensor value from a range sensor

##### Fields

| Name | Description |
|---|---|
| `range` | Range as read by sensor. Unit: mm. |

#### Type `AccSensorToFFrBfaRawData`

Full name: `NurApiDotNet.AccSensorToFFrBfaRawData`

Nur accessory FR BFA ToF raw data.

##### Constructors

###### Constructor: `AccSensorToFFrBfaRawData(byte[], bool)`

Initialize new AccSensorToFFrBfaRawData instance

##### Fields

| Name | Description |
|---|---|
| `items` | Nur accessory FR BFA ToF raw data for ToF sensor array. |

##### Nested types

##### Type `AccSensorToFFrBfaRawDataItem`

Full name: `NurApiDotNet.AccSensorToFFrBfaRawData.AccSensorToFFrBfaRawDataItem`

Nur accessory FR BFA ToF raw data for one ToF sensor.

###### Fields

| Name | Description |
|---|---|
| `distCm` | Range as read by sensor. Unit: cm. |
| `status` | Measurement validity status for this ToF reading. |

**`status` — remarks**

A status of `5` indicates a fully valid reading. Status `6` and `9`
can be considered with a confidence value of approximately 50%; all other
values are below 50% confidence.

| Code | Meaning |
|---|---|
| 0  | Ranging data are not updated |
| 1  | Signal rate too low on SPAD array |
| 2  | Target phase error |
| 3  | Sigma estimator too high |
| 4  | Target consistency failed (Wrap Around fail 1/2) |
| 5  | Range valid |
| 6  | Wrap around not performed (typically the first range) |
| 7  | Rate consistency failed (Wrap Around fail 2/2) |
| 8  | Signal rate too low for the current target |
| 9  | Range valid with large pulse (may be due to a merged target) |
| 10 | Range valid, but no target detected at previous range |
| 11 | (reserved) |
| 12 | Target blurred by another one, due to sharpener |
| 15 | No target detected (only if number of targets detected is enabled) |

#### Type `AddressType`

Full name: `NurApiDotNet.AddressType`

Address type (IP) flags

##### Fields

| Name | Description |
|---|---|
| `DHCP` | IP address via DHCP. |
| `Static` | static IP address. |

#### Type `AntennaId`

Full name: `NurApiDotNet.AntennaId`

Antenna Id's

##### Fields

| Name | Description |
|---|---|
| `AutoSelect` | Auto select |
| `Id1` | Antenna ID 1 |
| `Id2` | Antenna ID 2 |
| `Id3` | Antenna ID 3 |
| `Id4` | Antenna ID 4 |
| `Id5` | Antenna ID 5 |
| `Id6` | Antenna ID 6 |
| `Id7` | Antenna ID 7 |
| `Id8` | Antenna ID 8 |
| `Id9` | Antenna ID 9 |
| `Id10` | Antenna ID 10 |
| `Id11` | Antenna ID 11 |
| `Id12` | Antenna ID 12 |
| `Id13` | Antenna ID 13 |
| `Id14` | Antenna ID 14 |
| `Id15` | Antenna ID 15 |
| `Id16` | Antenna ID 16 |
| `Id17` | Antenna ID 17 |
| `Id18` | Antenna ID 18 |
| `Id19` | Antenna ID 19 |
| `Id20` | Antenna ID 20 |
| `Id21` | Antenna ID 21 |
| `Id22` | Antenna ID 22 |
| `Id23` | Antenna ID 23 |
| `Id24` | Antenna ID 24 |
| `Id25` | Antenna ID 25 |
| `Id26` | Antenna ID 26 |
| `Id27` | Antenna ID 27 |
| `Id28` | Antenna ID 28 |
| `Id29` | Antenna ID 29 |
| `Id30` | Antenna ID 30 |
| `Id31` | Antenna ID 31 |
| `Id32` | Antenna ID 32 |
| `LAST_ANTENNAID` | Last valid antenna ID |

#### Type `AntennaMapping`

Full name: `NurApiDotNet.AntennaMapping`

Reader antenna.  

Holds information about antenna physical name and ID.

##### Constructors

###### Constructor: `AntennaMapping(int, string)`

Contructor of new AntennaMapping item

**Parameters**

| Name | Description |
|---|---|
| `id` | antenna ID |
| `name` | antenna name |

##### Fields

| Name | Description |
|---|---|
| `AntennaId` | ID of antenna (0 - 31) |
| `Name` | Name of antenna |
| `LowerName` | Name of antenna (ToLower) |

#### Type `AntennaMask`

Full name: `NurApiDotNet.AntennaMask`

Antenna mask bits

##### Fields

| Name | Description |
|---|---|
| `None` | No antenna mask set |
| `Mask1` | Mask for antenna ID 1. |
| `Mask2` | Mask for antenna ID 2. |
| `Mask3` | Mask for antenna ID 3. |
| `Mask4` | Mask for antenna ID 4. |
| `Mask5` | Mask for antenna ID 5. |
| `Mask6` | Mask for antenna ID 6. |
| `Mask7` | Mask for antenna ID 7. |
| `Mask8` | Mask for antenna ID 8. |
| `Mask9` | Mask for antenna ID 9. |
| `Mask10` | Mask for antenna ID 10. |
| `Mask11` | Mask for antenna ID 11. |
| `Mask12` | Mask for antenna ID 12. |
| `Mask13` | Mask for antenna ID 13. |
| `Mask14` | Mask for antenna ID 14. |
| `Mask15` | Mask for antenna ID 15. |
| `Mask16` | Mask for antenna ID 16. |
| `Mask17` | Mask for antenna ID 17. |
| `Mask18` | Mask for antenna ID 18. |
| `Mask19` | Mask for antenna ID 19. |
| `Mask20` | Mask for antenna ID 20. |
| `Mask21` | Mask for antenna ID 21. |
| `Mask22` | Mask for antenna ID 22. |
| `Mask23` | Mask for antenna ID 23. |
| `Mask24` | Mask for antenna ID 24. |
| `Mask25` | Mask for antenna ID 25. |
| `Mask26` | Mask for antenna ID 26. |
| `Mask27` | Mask for antenna ID 27. |
| `Mask28` | Mask for antenna ID 28. |
| `Mask29` | Mask for antenna ID 29. |
| `Mask30` | Mask for antenna ID 30. |
| `Mask31` | Mask for antenna ID 31. |
| `Mask32` | Mask for antenna ID 32. |
| `All` | All antenna mask identifiers combined. |

#### Type `AntennaType`

Full name: `NurApiDotNet.AntennaType`

Antenna type flags

##### Fields

| Name | Description |
|---|---|
| `Fast` | Antenna tune type 'fast'. |
| `Medium` | Antenna tune type 'medium'. |
| `Wide` | Antenna tune type 'wide'. |
| `Full` | Antenna tune type 'full'. |

#### Type `AutoPeriod`

Full name: `NurApiDotNet.AutoPeriod`

Auto period flags

##### Fields

| Name | Description |
|---|---|
| `Off` | Autoperiod not in use |
| `AutoPeriod25` | 25% cycle. max 100ms off |
| `AutoPeriod33` | 33% cycle. max 500ms off |
| `AutoPeriod50` | 50/50 cycle. max 1000ms off |
| `AutoPeriodForce1000` | Force 1000ms sleep |
| `AutoPeriodForce500` | Force 500ms sleep |
| `AutoPeriodForce100` | Force 100ms sleep |

#### Type `Bank`

Full name: `NurApiDotNet.Bank`

Memory Banks

##### Fields

| Name | Description |
|---|---|
| `NotSet` | Notset |
| `Password` | Password memory bank. |
| `EPC` | EPC memory bank. |
| `TID` | TID memory bank. |
| `User` | User memory bank. |

#### Type `Baudrate`

Full name: `NurApiDotNet.Baudrate`

Serial baudrate of Nur module

##### Fields

| Name | Description |
|---|---|
| `Br115200` | NUR module baudrate, 115200 bps. |
| `Br230400` | NUR module baudrate, 230400 bps. |
| `Br500000` | NUR module baudrate, 500000 bps. |
| `Br1000000` | NUR module baudrate, 1000000 bps. |
| `Br1500000` | NUR module baudrate, 1500000 bps (use with care). |
| `Br38400` | NUR module baudrate, 38400 bps. |

#### Type `CustomExchangeFlags`

Full name: `NurApiDotNet.CustomExchangeFlags`

Custom exchange flags

##### Fields

| Name | Description |
|---|---|
| `AsWrite` | Custom exchange: operation is "like write". |
| `UseHandle` | Custom exchange: use handle from tag / not. |
| `XORRN16` | Custom exchange: XOR received handle with 2-byte data in "like write" operations. |
| `TxOnly` | Custom exchange: transmit only. |
| `NOTXCRC` | Custom exchange: no transmission CRC. |
| `NORXCRC` | Custom exchange: no reception CRC. |
| `CRC5` | Custom exchange: use CRC-5 in transmission. |
| `NORXLEN` | Custom exchange: do not set RX length before receiving. |
| `STRIPHND` | Custom exchange: assume last two last received bytes as handle and strip from response. |
| `SKIPRESEL` | Custom exchange: skip tag access i.e. no "re-selection" during this command |

#### Type `DiagCfgFlags`

Full name: `NurApiDotNet.DiagCfgFlags`

Diagnostic flags

##### Fields

| Name | Description |
|---|---|
| `NotifyNone` | Never send diagnostics report notification |
| `NotifyPeriodic` | Send diagnostics report notification periodically. `NurApi.DiagSetConfig` |
| `NotifyWarning` | Send diagnostics report notification on warning/error. `NurApi.DiagSetConfig` |
| `FwErrorLog` | Module sends error log messages. |
| `FwDebugLog` | Module sends verbose debug log messages. |

#### Type `DiagReportFlags`

Full name: `NurApiDotNet.DiagReportFlags`

Diagnostic report flags

##### Fields

| Name | Description |
|---|---|
| `Periodic` | Set in `DiagReport.flags` when module sends periodic report. |
| `TempHigh` | Set in `DiagReport.flags` if module temperature is high. Host application SHOULD stop performing RF operations for a while. |
| `TempOver` | Set in `DiagReport.flags` if module temperature is over limits. All RF operations will fail with error `NurApiErrors.NUR_ERROR_OVER_TEMP` in this stage. |
| `LowVolt` | Set in `DiagReport.flags` if low voltage is detected. All RF operations will fail with error `NurApiErrors.NUR_ERROR_LOW_VOLTAGE` in this stage. |

#### Type `FilterAction`

Full name: `NurApiDotNet.FilterAction`

Filter action flags

##### Fields

| Name | Description |
|---|---|
| `Action0` | Matching tags: assert SL or inventoried session flag to A. Non-matching: deassert SL or inventoried session flag to B. |
| `Action1` | Matching tags: assert SL or inventoried session flag to A. Non-matching: do nothing. |
| `Action2` | Matching tags: do nothing. Non-matching: deassert SL or inventoried session to B. |
| `Action3` | Matching tags: negate SL or invert inventoried session flag (A to B, B to A). Non-matching: do nothing. |
| `Action4` | Matching tags: deassert SL or inventoried session flag to B. Non-matching: assert SL or inventoried session flag to A. |
| `Action5` | Matching tags: deassert SL or inventoried session flag to B. Non-matching: do nothing. |
| `Action6` | Matching tags: do nothing. Non-matching: assert SL or inventoried session flag to A. |
| `Action7` | Matching tags: do nothing. Non-matching: negate SL or invert inventoried session flag (A to B, B to A). |

#### Type `Gen2XFlags`

Full name: `NurApiDotNet.Gen2XFlags`

Gen2X flags

##### Fields

| Name | Description |
|---|---|
| `EnableScanId` | Enable ScanId feature |
| `EanbleTagFocus` | Enable TagFocus feature |
| `EnableFastID` | Enable FastID feature |
| `AcceptCrc5AndCrc5Plus` | Enable accepting both CRC5 and CRC5Plus for CR protection |
| `EnablePowerBoost` | Enable gen2v3 power boost feature |
| `EnableProtectedMode` | Enable protected mode feature |
| `Gen2XAllFlags` | All supported flags |

#### Type `GPIOAction`

Full name: `NurApiDotNet.GPIOAction`

GPIO action to perform on GPIO/sensor state change.

##### Fields

| Name | Description |
|---|---|
| `None` | No action. GPIO state can be read manually. |
| `Notify` | Send `NurApi.IOChangeEvent` notification on GPIO/sensor change. |
| `Scantag` | Start single tag scan on GPIO/sensor change. Tag result is received with `NurApi.TriggerReadEvent` notification. |
| `Inventory` | Start inventory on GPIO/sensor change. Result is received with `NurApi.InventoryStreamEvent` notification. |

#### Type `GPIOEdge`

Full name: `NurApiDotNet.GPIOEdge`

GPIO Edge

##### Fields

| Name | Description |
|---|---|
| `Falling` | Trigger IO's configured action on falling edge of IO. |
| `Rising` | Trigger IO's configured action on rising edge of IO. |
| `Both` | Trigger IO's configured action on both edges of IO. |

#### Type `GPIOType`

Full name: `NurApiDotNet.GPIOType`

GPIO types

##### Fields

| Name | Description |
|---|---|
| `Output` | General Purpose IO (GPIO) is configured as output pin. |
| `Input` | General Purpose IO (GPIO) is configured as input pin. |
| `RfIdOn` | General Purpose IO (GPIO) will act as a Sampo S1 RFID on led (high active). |
| `RfIdRead` | General Purpose IO (GPIO) will act as a Sampo S1 RFID read led (high active). |
| `Beeper` | General Purpose IO (GPIO) will act as a beeper (high active). |
| `AntCtl1` | General Purpose IO (GPIO) is configured as antenna control 1 (bit0). |
| `AntCtl2` | General Purpose IO (GPIO) is configured as antenna control 2 (bit1). |

#### Type `HopEventData`

Full name: `NurApiDotNet.HopEventData`

Hop event data for `NurApi.HopEvent` event

##### Fields

| Name | Description |
|---|---|
| `hopTableId` | Current hop table region id |
| `freqIdx` | Index of frequency in hop table |
| `freqKhz` | Frequency in kHz |

#### Type `HostMode`

Full name: `NurApiDotNet.HostMode`

Host mode flags

##### Fields

| Name | Description |
|---|---|
| `Server` | Host mode: Server. |
| `Client` | Host mode: Client. |

#### Type `INurDeviceDiscovery`

Full name: `NurApiDotNet.INurDeviceDiscovery`

Interface for NUR device discovery

##### Methods

###### Method: `PeriodicCheck()`

Check device availability time-to-time

###### Method: `Start()`

Start background discovery

###### Method: `Stop()`

Stop background discovery

##### Properties

###### Property: `IsActive`

Active state of the background discovery

###### Property: `Scheme`

Supported Uri scheme

##### Events

###### Event: `DeviceDiscoveryEvent`

DeviceDiscoveryEvent fires when NUR reader has been found.

#### Type `InventoryReadType`

Full name: `NurApiDotNet.InventoryReadType`

Inventory read type flags

##### Fields

| Name | Description |
|---|---|
| `NotSet` | Notset |
| `EPCData` | Inventory + read type is EPC + data |
| `DataOnly` | Inventory + read type is data only |
| `EpcXTid` | XTID based read result is appended to the EPC. |
| `XTidOnly` | Duplicates are stripped based on XTID read data |
| `EpcXTidAll` | XTID based read result is appended to the EPC + read to include all of the TID data. |
| `XTidOnlyAll` | Duplicates are stripped based on XTID read data + include all of the TID data. |

#### Type `InventorySelectState`

Full name: `NurApiDotNet.InventorySelectState`

Inventory select state flags

##### Fields

| Name | Description |
|---|---|
| `All` | Select all (tags in any state). |
| `NotSL` | Select tags in state "SL not set". |
| `SL` | Select tags in state "SL is set". |

#### Type `InventoryStreamData`

Full name: `NurApiDotNet.InventoryStreamData`

Inventory stream data after `NurApi.InventoryStreamEvent` event

##### Fields

| Name | Description |
|---|---|
| `tagsAdded` | Number of tags added to NurApi internal tag storage. |
| `stopped` | Streaming has stopped. If you need continuous streaming, you need to restart streaming. |
| `roundsDone` | Number of full Q rounds done in this inventory. |
| `collisions` | Number of possible collisions or reception errors in this inventory. |
| `Q` | Q used in this inventory. |

#### Type `InventoryTarget`

Full name: `NurApiDotNet.InventoryTarget`

Inventory target flags

##### Fields

| Name | Description |
|---|---|
| `A` | Query tags with inventoried flag set to A. |
| `B` | Query tags with inventoried flag set to B. |
| `AB` | Query tags with inventoried flag set to A or B. |

#### Type `IOChangeData`

Full name: `NurApiDotNet.IOChangeData`

I/O change data after `NurApi.IOChangeEvent` event

##### Fields

| Name | Description |
|---|---|
| `sensor` | true if notification source is sensor, otherwise FALSE and source is GPIO. |
| `source` | Sensor/GPIO source number. For accessory device buttons this is >=100 |
| `dir` | IO change direction; 1 = Low to high transition (Rising edge), 0 = High to low transition (Falling edge). |

#### Type `LinkFrequency`

Full name: `NurApiDotNet.LinkFrequency`

Enums of Link frequency.   

Values Hz

##### Fields

| Name | Description |
|---|---|
| `None` | Notset |
| `Freq40000` | NUR module link frequency 40000 Hz. |
| `Freq80000` | NUR module link frequency 80000 Hz. |
| `Freq160000` | NUR module link frequency 160000 Hz. |
| `Freq256000` | NUR module link frequency 256000 Hz. |
| `Freq320000` | NUR module link frequency 320000 Hz. |
| `Freq640000` | NUR module link frequency 640000 Hz. |

#### Type `LockAction`

Full name: `NurApiDotNet.LockAction`

Lock action flags

##### Fields

| Name | Description |
|---|---|
| `Open` | Associated memory bank is readable from open/secured states. |
| `PermaWrite` | Associated memory bank is permanently writable from open/secured states and may never be locked. |
| `Secured` | Associated memory bank is writable only from secured state. |
| `PermaLock` | Associated memory bank is not writable from any state. If locked memory is AccessPwd or KillPwd memory is not readable from any state. |

#### Type `LockMemoryMask`

Full name: `NurApiDotNet.LockMemoryMask`

Memory lock mask flags

##### Fields

| Name | Description |
|---|---|
| `UserMem` | User memory bank lock mask. |
| `TID` | TID memory bank lock mask. |
| `EPC` | EPC memory bank lock mask. |
| `AccessPwdMem` | Access password memory lock mask. |
| `KillPwdMem` | Kill password memory lock mask. |

#### Type `LogLevel`

Full name: `NurApiDotNet.LogLevel`

Logging levels

##### Fields

| Name | Description |
|---|---|
| `VERBOSE` | Verbose log |
| `ERROR` | Error log |
| `USER` | User log |
| `DATA` | Data log |

#### Type `NurApiErrors`

Full name: `NurApiDotNet.NurApiErrors`

Class of NurApiErrors

##### Methods

###### Method: `ErrorCodeToString(int)`

Get human readable error message for error code.

**Parameters**

| Name | Description |
|---|---|
| `errorCode` | The error code. |

**Returns:** Human readable error message

##### Fields

###### Constants `NUR_*`

| Name | Description |
|---|---|
| `NUR_SUCCESS` | Call succeeded; Same as NUR_NO_ERROR |
| `NUR_NO_ERROR` | Call succeeded; Same as NUR_SUCCESS |
| `NUR_ERROR_INVALID_COMMAND` | Invalid command sent to module |
| `NUR_ERROR_INVALID_LENGTH` | Invalid packet length sent to module |
| `NUR_ERROR_PARAMETER_OUT_OF_RANGE` | Command parametr(s) out of range |
| `NUR_ERROR_RECEIVE_TIMEOUT` | Data receive timeout |
| `NUR_ERROR_INVALID_PARAMETER` | Invalid command parameter(s); Invalid function parameter(s) |
| `NUR_ERROR_PROGRAM_FAILED` | Programming failure |
| `NUR_ERROR_PARAMETER_MISMATCH` | Parameter mismatch |
| `NUR_ERROR_HW_MISMATCH` | HW mismatch |
| `NUR_ERROR_RESERVED1` | Reserved for future use. |
| `NUR_ERROR_PAGE_PROGRAM` | Page programming failure |
| `NUR_ERROR_CRC_CHECK` | Memory check failed |
| `NUR_ERROR_CRC_MISMATCH` | CRC mismatch in parameter |
| `NUR_ERROR_NOT_READY` | Device not ready or region that is being programmed is not unlocked |
| `NUR_ERROR_APP_NOT_PRESENT` | Module application not present |
| `NUR_ERROR_GENERAL` | Generic = ; non-interpreted / unexpected error |
| `NUR_ERROR_RESEND_PACKET` | Device wants to have last packet again due to the transfer failure. |
| `NUR_ERROR_NO_TAG` | No tag(s) found |
| `NUR_ERROR_RESP_AIR` | Air error |
| `NUR_ERROR_G2_SELECT` | G2 select error |
| `NUR_ERROR_MISSING_SELDATA` | G2 select data missing |
| `NUR_ERROR_G2_ACCESS` | G2 access error |
| `NUR_ERROR_G2_READ` | G2 Read error = ; unspecified |
| `NUR_ERROR_G2_RD_PART` | G2 Partially successful read |
| `NUR_ERROR_G2_WRITE` | G2 Write error = ; unspecified |
| `NUR_ERROR_G2_WR_PART` | G2 Partially successful write |
| `NUR_ERROR_G2_TAG_RESP` | G2 Tag read responded w/ error |
| `NUR_ERROR_G2_SPECIAL` | Special error; Some additional debug data is returned with this error |
| `NUR_ERROR_READER_HW` | HW error |
| `NUR_ERROR_BAD_ANTENNA` | Antenna too bad |
| `NUR_ERROR_LOW_VOLTAGE` | Low voltage |
| `NUR_ERROR_OVER_TEMP` | Over temperature |
| `NUR_ERROR_INVALID_HANDLE` | Invalid handle passed to function |
| `NUR_ERROR_TRANSPORT` | Transport error |
| `NUR_ERROR_TR_NOT_CONNECTED` | Transport not connected |
| `NUR_ERROR_TR_TIMEOUT` | Transport timeout |
| `NUR_ERROR_BUFFER_TOO_SMALL` | Buffer too small |
| `NUR_ERROR_NOT_SUPPORTED` | Functionality not supported |
| `NUR_ERROR_NO_PAYLOAD` | Packet contains no payload |
| `NUR_ERROR_INVALID_PACKET` | Packet is invalid |
| `NUR_ERROR_PACKET_TOO_LONG` | Packet too long |
| `NUR_ERROR_PACKET_CS_ERROR` | Packet Checksum failure |
| `NUR_ERROR_NOT_WORD_BOUNDARY` | Data not in WORD boundary |
| `NUR_ERROR_FILE_NOT_FOUND` | File not found |
| `NUR_ERROR_FILE_INVALID` | File error; not in NUR format |
| `NUR_ERROR_MCU_ARCH` | NUR file and module's MCU architecture mismatch |
| `NUR_ERROR_G2_TAG_MEM_OVERRUN` | The specified memory location does not exists or the EPC length field is not supported by the tag |
| `NUR_ERROR_G2_TAG_MEM_LOCKED` | The specified memory location is locked and/or permalocked and is either not writeable or not readable |
| `NUR_ERROR_G2_TAG_INSUF_POWER` | The tag has insufficient power to perform the memory-write operation |
| `NUR_ERROR_G2_TAG_NON_SPECIFIC` | The tag does not support error-specific codes |
| `NUR_ERROR_TR_SUSPENDED` | Transport suspended error |
| `NUR_ERROR_SERVER` | TCP/IP Server error |
| `NUR_ERROR_QUERY_BUSY` | Device query is busy. |
| `NUR_ERROR_G2_TAG_OTHER_ERROR` | Tag backscattered error code 0x00: "catch all" error. |
| `NUR_ERROR_G2_TAG_NOT_SUPPORTED` | Tag backscattered error code 0x01: not supported parameters or feature. |
| `NUR_ERROR_G2_TAG_INSUF_PRIVILEDGE` | Tag backscattered error code 0x04: insufficient priviledge. |
| `NUR_ERROR_G2_TAG_CRYPTO_SUITE` | Tag backscattered error code 0x05: cryptographic suite error. |
| `NUR_ERROR_G2_TAG_NOT_ENCAPSULATED` | Tag backscattered error code 0x06: command was not encapsulated in AuthComm or SecureComm. |
| `NUR_ERROR_G2_TAG_RESPBUFFER_OVF` | Tag backscattered error code 0x07: ResponseBuffer overflowed. |
| `NUR_ERROR_G2_TAG_SEC_TIMEOUT` | Tag backscattered error code 0x10: failure because of security timeout. |

#### Type `NurApiException`

Full name: `NurApiDotNet.NurApiException`

Implements the NUR API specific exception.

##### Constructors

###### Constructor: `NurApiException(int)`

Generic exception with an error code.

**Parameters**

| Name | Description |
|---|---|
| `error` | Error code from module, client or tag |

###### Constructor: `NurApiException(string, int)`

Exception constructor added with error code.

**Parameters**

| Name | Description |
|---|---|
| `function` | Function name where the exception took place. |
| `error` | Error code from module, client or tag. |

###### Constructor: `NurApiException(string, int, string)`

Exception constructor added with error code.

**Parameters**

| Name | Description |
|---|---|
| `function` | Function name where the exception took place. |
| `error` | Error code from module, client or tag. |
| `message` |  |

###### Constructor: `NurApiException(string, string, string, int)`

Handle NUR exception

**Parameters**

| Name | Description |
|---|---|
| `message` | Free text about the exception |
| `memberName` | Caller method - from constructor, gives always .ctor |
| `fileName` | Full path to file where to exception was made |
| `lineNumber` | Line number from where to exception was made |

##### Methods

###### Method: `StripFilename(string)`

Parse last part of path and filename

**Parameters**

| Name | Description |
|---|---|
| `fileName` | Full path to file where to exception was made |

##### Properties

###### Property: `NurErrorMessage`

Human readable error message

##### Fields

| Name | Description |
|---|---|
| `error` | Publicly visible error code from the module, client or tag. |

#### Type `NurDeviceDiscovery`

Full name: `NurApiDotNet.NurDeviceDiscovery`

Class for discovering NUR devices from Network/BLE/Serial
NOTE: BLE and serial port support depends on platform and must be explicitly added to project

**Example**

Example shows how to start device discovery.

```csharp
// Called by NurDeviceDiscovery when device has appeared or disappeared.
void DeviceDiscoveryCallback(object sender, NurDeviceDiscoveryEventArgs args)
{
    if (args.Visible)
        MyDeviceAppeared(args.Uri);
    else
        MyDeviceDisappeared(args.Uri);
}

void MyStartDeviceSearch()
{
    // Start device search with all supported schemes
    NurDeviceDiscovery.Start(DeviceDiscoveryCallback);
}

void MyStopDeviceSearch()
{
    // Stop device discovery
    NurDeviceDiscovery.Stop(DeviceDiscoveryCallback);
}
```

##### Methods

###### Method: `Start(NurDeviceDiscoveryCallback, string[])`

Start discovery

**Parameters**

| Name | Description |
|---|---|
| `cb` | callback function |
| `schemes` | Schemes to found. null=all |

###### Method: `Stop(NurDeviceDiscoveryCallback)`

Stop discovery

**Parameters**

| Name | Description |
|---|---|
| `cb` | callback function |

##### Events

###### Event: `ErrorEvent`

Error event

###### Event: `ErrorEventEx`

Occurs when an error event is raised, providing exception details.
Use the `Exceptions` namespace to inspect and handle specific exception types.

##### Fields

| Name | Description |
|---|---|
| `DiscoveryInterval` | Discovery interval as milliseconds |

#### Type `NurDeviceDiscoveryEventArgs`

Full name: `NurApiDotNet.NurDeviceDiscoveryEventArgs`

DeviceDiscoveryEvent >arguments

##### Methods

###### Method: `ToString()`

URI + Visible ToString()

**Returns:** URI + Visible ToString()

##### Fields

| Name | Description |
|---|---|
| `Uri` | Uri schecme of device found |
| `Visible` | True if device visible, false otherwise |

#### Type `NurDeviceDiscoveryRefCounted`

Full name: `NurApiDotNet.NurDeviceDiscoveryRefCounted`

#### Type `NurEventProgrammingProgress`

Full name: `NurApiDotNet.NurEventProgrammingProgress`

##### Fields

| Name | Description |
|---|---|
| `error` | &nbsp; |
| `currentPage` | &nbsp; |
| `totalPages` | &nbsp; |

#### Type `NurEventUnknown`

Full name: `NurApiDotNet.NurEventUnknown`

##### Fields

| Name | Description |
|---|---|
| `mEventData` | &nbsp; |

#### Type `NurExtensions`

Full name: `NurApiDotNet.NurExtensions`

##### Methods

###### Method: `GetAddress(Uri)`

Get address only from Uri

**Parameters**

| Name | Description |
|---|---|
| `uri` | this |

**Returns:** Address

###### Method: `GetQueryParam(Uri, string)`

Return value from Uri query string.

**Parameters**

| Name | Description |
|---|---|
| `uri` | this |
| `param` | Key to return |

**Returns:** Value for key

#### Type `NurPacket`

Full name: `NurApiDotNet.NurPacket`

Nur protocol packet class

#### Type `NurPacketHeader`

Full name: `NurApiDotNet.NurPacketHeader`

Nur protocol packet header

#### Type `NurRingBuffer`

Full name: `NurApiDotNet.NurRingBuffer`

General purpose ring buffer

#### Type `NurTransport`

Full name: `NurApiDotNet.NurTransport`

##### Methods

###### Method: `CheckPermissions(Uri)`

Additionally, check permissions on a given uri. This is ran just before connect.

**Parameters**

| Name | Description |
|---|---|
| `uri` |  |

#### Type `NurTransportRegistry`

Full name: `NurApiDotNet.NurTransportRegistry`

Registry of `INurTransport` implementations keyed by URI scheme.

The TCP and mDNS schemes are registered automatically. Add-on transport
packages (USB, BLE, serial, ...) register additional schemes from their
`Support.Init()` entry point. Applications normally do not call this
class directly, but it is the extension point for plugging in custom
transports.

##### Methods

###### Method: `Add(string, Type, object[])`

Register a transport implementation for the given URI scheme.

**Parameters**

| Name | Description |
|---|---|
| `uriScheme` | URI scheme (e.g. `"tcp"`, `"usb"`). |
| `trType` | Type implementing `INurTransport`. |
| `platArgs` | Optional platform-specific arguments forwarded to the transport's `Initialize`. |

**Exceptions**

- `NurApiInvalidParameterException`: Thrown if `trType` does not implement `INurTransport`,             or if the scheme is already registered.

###### Method: `Contains(string)`

Returns `true` if a transport is registered for the given URI scheme.

**Parameters**

| Name | Description |
|---|---|
| `uriScheme` | URI scheme to check. |

###### Method: `Create(NurApi, Uri)`

Create a new transport instance for the given URI. Called by `NurApi.Connect`;
also available for advanced scenarios that manage transports directly.

**Parameters**

| Name | Description |
|---|---|
| `owner` | Owning `NurApi` instance. |
| `uri` | Target URI; its scheme selects the transport implementation. |

**Returns:** An initialized `INurTransport` instance.

**Exceptions**

- `NurApiGeneralException`: Thrown if no transport is registered for the URI scheme.

###### Method: `Remove(string)`

Remove the transport registered for the given URI scheme. No-op if the scheme is not registered.

**Parameters**

| Name | Description |
|---|---|
| `uriScheme` | URI scheme to remove. |

#### Type `NurV2ReadBufferParam`

Full name: `NurApiDotNet.NurV2ReadBufferParam`

##### Fields

| Name | Description |
|---|---|
| `MIN_BITS` | &nbsp; |
| `MAX_BITS` | &nbsp; |
| `MIN_ADDR` | &nbsp; |
| `MAX_ADDR` | &nbsp; |
| `bitAddress` | &nbsp; |
| `bitCount` | &nbsp; |
| `timeout` | &nbsp; |

#### Type `NXPAlarmStreamData`

Full name: `NurApiDotNet.NXPAlarmStreamData`

NXP EAS Alarm stream data after `NurApi.NXPAlarmStreamEvent` event

##### Fields

| Name | Description |
|---|---|
| `stopped` | true if streaming has stopped false otherwise. |
| `armed` | true if EAS Alarm is active. |

#### Type `OperationFlag`

Full name: `NurApiDotNet.OperationFlag`

Operation flags

##### Fields

| Name | Description |
|---|---|
| `HopEvents` | Operation flag, Notification `NurApi.HopEvent` is enabled. |
| `InventoryStreamZeros` | Operation flag, Inventory stream frunction will report zero count inventory rounds also. |
| `TuneEvent` | Operation flag, defines tune event enable / disable. |
| `ExactBLF` | Operation flag, enable / disable exact LF detection. Supported only in NUR L2 modules. |
| `TagPhase` | Operation flag, return tag phase angle in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR2 modules. |
| `NxpBid` | NXP Brand ID in NXP UCODE8 tag is enabled |
| `IrMemOverrun` | Inventory read will report EPC even if there is memory overrun error (f.ex. no user mem bank) |
| `PhaseDiff` | Return tag phase angle difference in units of tenths of degrees in tag meta data timestamp field. Supported only in NUR3 modules. |

#### Type `PermissionRequiredEventArgs`

Full name: `NurApiDotNet.PermissionRequiredEventArgs`

##### Properties

###### Property: `Uri`

The Uri connection string of the device that requires permission.

#### Type `RegionId`

Full name: `NurApiDotNet.RegionId`

Regions

##### Fields

| Name | Description |
|---|---|
| `Current` | Current |
| `EU` | Europe. |
| `FCC` | North-America. |
| `PRC` | People's Republic of China (Upper Band). |
| `Malaysia` | Malaysia. |
| `Brazil` | Brazil. |
| `Australia` | Australia. |
| `NewZealand` | New Zealand. |
| `Japan250mW` | Japan 250mW LBT. |
| `Japan500mW` | Japan 500mW DRM. |
| `KoreaLBT` | Korean LBT |
| `India` | India |
| `Russia` | Russia |
| `Vietnam` | Vietnam |
| `Singapore` | Singapore |
| `Thailand` | Thailand |
| `Philippines` | Philippines |
| `Morocco` | Morocco (NUR Fw 5.0-A or later) |
| `Peru` | Peru (NUR Fw 5.0-A or later) |
| `Israel` | Israel (NUR Fw 5.6-A or later) |
| `HongKong` | Hong Kong (NUR Fw 5.7-A or later) |
| `Last` | Indicates last valid. |
| `Custom` | Region, Custom hop table. |

#### Type `RfProfile`

Full name: `NurApiDotNet.RfProfile`

RF profile flags

##### Fields

| Name | Description |
|---|---|
| `Robust` | Robust RF profile. This profile is recommended to use in noisy RF environments. |
| `Nominal` | Nominal RF profile. This profile works good in most environments. |
| `HighSpeed` | High speed RF profile. This profile provides best throughput, but is prone to RF interference. |
| `HighSpeed2` | High speed 2 RF profile. This profile optimizes for speed by reducing the Tari value for the pulse interval encoded (PIE) data. |
| `Fast` | Fast RF profile. This profile provides a balance between speed and sensitivity. |

#### Type `RxDecoding`

Full name: `NurApiDotNet.RxDecoding`

RX encoding (Miller encoding)

##### Fields

| Name | Description |
|---|---|
| `FM0` | Receiver decoding FM-0 |
| `M2` | Receiver decoding Miller-2 |
| `M4` | Receiver decoding Miller-4 |
| `M8` | Receiver decoding Miller-8 |

#### Type `RxSensitivity`

Full name: `NurApiDotNet.RxSensitivity`

Rx sensitivity flags

##### Fields

| Name | Description |
|---|---|
| `Low` | Receiver sensitivity "low". |
| `Nominal` | Receiver sensitivity "nominal". |
| `High` | Receiver sensitivity "high". |

#### Type `SetupFlags`

Full name: `NurApiDotNet.SetupFlags`

Module setup flags

##### Fields

| Name | Description |
|---|---|
| `LinkFreq` | Link frequency. See also the link frequency property: `LinkFrequency` |
| `RxDec` | RX encoding (Miller encoding) (see`RxDecoding` property) |
| `TxLevel` | Transmission (TX) power level in 1dB steps. See also the `SetupFlags.TxLevel` property)			  Range is 0...19: there are 20 (0...19) steps so minimum output power value for 500mW devices is 8dBm (about 6mW) and 11dBm (about 40W) for the 1W devices.  This value is subtracted from the maxiumum TX level producing the actual level as follows:  | TX Level | Description | |---|---| | 0 | 27 / 500 | | 1 | 26 / 398 | | 2 | 25 / 316 | | 3 | 24 / 251 | | 4 | 23 / 200 | | 5 | 22 / 158 | | 6 | 21 / 126 | | 7 | 20 / 100 | | 8 | 19 / 79 | | 9 | 18 / 63 | | 10 | 17 / 50 | | 11 | 16 / 40 | | 12 | 15 / 32 | | 13 | 14 / 25 | | 14 | 13 / 20 | | 15 | 12 / 16 | | 16 | 11 / 13 | | 17 | 10 / 10 | | 18 | 9 / 8 | | 19 | 8 / 6 | |
| `TxMod` | Tx modulation style. (see `TxModulation` property) |
| `Region` | Region. (see `RegionId`) |
| `InventoryQ` | Default Q used for inventory. (0-15) 0=Automatic |
| `InventorySession` | Default session for inventory. `TargetSession`. |
| `InventoryRounds` | Default rounds for inventory. (0 - 10) 0=Automatic |
| `AntennaMask` | Antenna mask field in `ModuleSetup`. |
| `ScanSingleTimeout` | Scan single trigger timeout field in `ModuleSetup`. |
| `InventoryTimeout` | Inventory trigger timeout field in `ModuleSetup`. |
| `SelectedAntenna` | Selected antenna field in `ModuleSetup`. |
| `OperationFlags` | Operation flags field in `ModuleSetup`. |
| `InventoryTarget` | Inventory target field in `ModuleSetup`. |
| `MinimumSetupMask` | Minimum mask that will work backward compatibly. |
| `InventoryEpcLen` | Inventory EPC length field in `ModuleSetup`. |
| `ReadRssiFilter` | Read RSSI filter field in `ModuleSetup`. |
| `WriteRssiFilter` | Write RSSI filter field in `ModuleSetup`. |
| `InventoryRssiFilter` | Inventory RSSI filter field in `ModuleSetup`. |
| `ReadTimeout` | Read timeout field in `ModuleSetup`. |
| `WriteTimeout` | Write timeout field in `ModuleSetup`. |
| `LockTimeout` | Lock timeout field in `ModuleSetup`. |
| `Killtimeout` | Kill timeout field in `ModuleSetup`. |
| `Autoperiod` | Period setup field in `ModuleSetup`. |
| `PerAntennaPower` | Per antenna power field in `ModuleSetup`. |
| `PerAntennaOffset` | Power offset field in `ModuleSetup`. |
| `AntennaMaskEx` | Extended antenna mask field in `AntennaId`. |
| `Autotune` | Runtime auto-tuning setup in `AutoPeriod`. |
| `PerAntennaPowerEx` | Per antenna power (extended) field in `ModuleSetup`. |
| `RxSensitivity` | Receiver sensitivity field in `ModuleSetup`. |
| `RfProfile` | rfProfile field in `ModuleSetup` |
| `All` | All setup fields are valid. |
| `MaskFor05W` | Mask for 05W field in `ModuleSetup` |

#### Type `StoreFlags`

Full name: `NurApiDotNet.StoreFlags`

Store flags when saving setup in to the module internal non-volatile memory

##### Fields

| Name | Description |
|---|---|
| `RF` | Store RF settings. |
| `GPIO` | Store GPIO/Sensor settings. |
| `BAUDRATE` | Store Baudrate setting. |
| `OPFLAGS` | Store OpFlags setting. |
| `ALL` | Store all settings. |

#### Type `TargetSession`

Full name: `NurApiDotNet.TargetSession`

Target session flags

##### Fields

| Name | Description |
|---|---|
| `S0` | Target session 0 for inventory or inventory filters. |
| `S1` | Target session 1 for inventory or inventory filters. |
| `S2` | Target session 2 for inventory or inventory filters. |
| `S3` | Target session 3 for inventory or inventory filters. |
| `SL` | Target session SL flag for inventory or inventory filters. |

#### Type `TraceTagFlag`

Full name: `NurApiDotNet.TraceTagFlag`

Trace tag flags

##### Fields

| Name | Description |
|---|---|
| `None` | Not set |
| `NoEPC` | Do not transfer EPC back from trace tag function. |
| `StartContinuous` | Start continuous tag tracing. |
| `StopContinuous` | Stop continuous tag tracing. |

#### Type `TriggerReadData`

Full name: `NurApiDotNet.TriggerReadData`

Trigger read data after `NurApi.TriggerReadEvent` event

##### Fields

| Name | Description |
|---|---|
| `sensor` | true if notification source is sensor, otherwise FALSE and source is GPIO. |
| `source` | Sensor/GPIO source number. For accessory device buttons this is >=100 |
| `antennaID` | ID of antenna where tag was read. |
| `rssi` | Tag RSSI, -127 if tag could not be found. |
| `scaledRssi` | Tag RSSI scaled to 0% - 100%. |
| `epcLen` | Number of bytes stored in epc field, zero if tag could not be found. |
| `epc` | Tag EPC data. |

#### Type `TuneEventData`

Full name: `NurApiDotNet.TuneEventData`

Tune event data for `NurApi.TuneEvent` event

##### Fields

| Name | Description |
|---|---|
| `cap1` | Tuning capacitor 1 value. |
| `cap2` | Tuning capacitor 2 value. |
| `reflPower_dBm` | Reflected power in dBm*1000. |
| `antenna` | Antenna ID |
| `freqKhz` | Frequency in kHz |

#### Type `TuneRevertType`

Full name: `NurApiDotNet.TuneRevertType`

Tune revert type flags

##### Fields

| Name | Description |
|---|---|
| `User` | Restore tuning from user memory. |
| `Factory` | Restore tuning from factory defaults to currently used . |
| `Override` | Override currently used and user saved tuning with factory defaults. |

#### Type `TxLevel`

Full name: `NurApiDotNet.TxLevel`

Obsolete TX power level enum for 500 mW modules. Use the `ModuleSetup.txLevel` integer field instead;
the actual number of steps and attenuation depend on module capabilities (see `DeviceCapabilites.txSteps`).

##### Fields

| Name | Description |
|---|---|
| `Level27` | Attenuation step 0 (27 dBm / 500 mW on 500 mW modules). |
| `Level26` | Attenuation step 1 (26 dBm / 398 mW on 500 mW modules). |
| `Level25` | Attenuation step 2 (25 dBm / 316 mW on 500 mW modules). |
| `Level24` | Attenuation step 3 (24 dBm / 251 mW on 500 mW modules). |
| `Level23` | Attenuation step 4 (23 dBm / 200 mW on 500 mW modules). |
| `Level22` | Attenuation step 5 (22 dBm / 158 mW on 500 mW modules). |
| `Level21` | Attenuation step 6 (21 dBm / 126 mW on 500 mW modules). |
| `Level20` | Attenuation step 7 (20 dBm / 100 mW on 500 mW modules). |
| `Level19` | Attenuation step 8 (19 dBm / 79 mW on 500 mW modules). |
| `Level18` | Attenuation step 9 (18 dBm / 63 mW on 500 mW modules). |
| `Level17` | Attenuation step 10 (17 dBm / 50 mW on 500 mW modules). |
| `Level16` | Attenuation step 11 (16 dBm / 40 mW on 500 mW modules). |
| `Level15` | Attenuation step 12 (15 dBm / 32 mW on 500 mW modules). |
| `Level14` | Attenuation step 13 (14 dBm / 25 mW on 500 mW modules). |
| `Level13` | Attenuation step 14 (13 dBm / 20 mW on 500 mW modules). |
| `Level12` | Attenuation step 15 (12 dBm / 16 mW on 500 mW modules). |
| `Level11` | Attenuation step 16 (11 dBm / 13 mW on 500 mW modules). |
| `Level10` | Attenuation step 17 (10 dBm / 10 mW on 500 mW modules). |
| `Level9` | Attenuation step 18 (9 dBm / 8 mW on 500 mW modules). |
| `Level8` | Attenuation step 19 (8 dBm / 6 mW on 500 mW modules). |
| `Max` | Maximum TX power (no attenuation). |
| `Min` | Minimum TX power (maximum attenuation). |

#### Type `TxModulation`

Full name: `NurApiDotNet.TxModulation`

Tx modulation style

##### Fields

| Name | Description |
|---|---|
| `ASK` | Transmit modulation ASK |
| `PRASK` | Transmit modulation PR-ASK |

#### Type `UntraceableParam`

Full name: `NurApiDotNet.UntraceableParam`

Gen2 version 2 Untraceable-command's parameters.

##### Constructors

###### Constructor: `UntraceableParam(UntraceableParam)`

Constructor that copies parameters from another untraceable instance.

**Parameters**

| Name | Description |
|---|---|
| `other` | The untraceable class to copy from. |

##### Fields

| Name | Description |
|---|---|
| `setU` | U-bit value; true for '1', false for '0'. |
| `rxAttn` | RX attenuation for response reception; true causes "write-like" operation thus reduces operation's range. |
| `hideUser` | If true then the EPC is hidden according to other rules. |
| `hideEPC` | New length of the EPC in 16-bit words. Allowed range is 0..31. |
| `epcWordLen` | New length of the EPC in 16-bit words. Allowed range is 0..31. |
| `tidPolicy` | TID hiding policy: `NurApi.TID_HIDE_NONE`, `NurApi.TID_HIDE_SOME` and `NurApi.TID_HIDE_ALL`. |
| `rangePolicy` | User memory hiding policy: true = hide, false = don't hide. |

#### Type `WLanSearchEventData`

Full name: `NurApiDotNet.WLanSearchEventData`

WLan Network scan result entry.
NOTE: Not tested as products do not support this functionality

##### Properties

###### Property: `index`

Index of item. 0=first.

###### Property: `mac`

MAC of device found

###### Property: `reserved`

Reserved

###### Property: `rssi`

RSSI

###### Property: `secType`

Security type: Open,WEP WPA1, WPA2

###### Property: `ssid`

SSID of device found
