Beetech.Adv.Abstractions 1.0.3

dotnet add package Beetech.Adv.Abstractions --version 1.0.3
                    
NuGet\Install-Package Beetech.Adv.Abstractions -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Beetech.Adv.Abstractions" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Beetech.Adv.Abstractions" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="Beetech.Adv.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Beetech.Adv.Abstractions --version 1.0.3
                    
#r "nuget: Beetech.Adv.Abstractions, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Beetech.Adv.Abstractions@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Beetech.Adv.Abstractions&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=Beetech.Adv.Abstractions&version=1.0.3
                    
Install as a Cake Tool

Beetech.Adv.Abstractions

Open, zero-dependency hardware driver abstractions, pipeline middleware contracts, and CloudEvents specifications for the Beetech Universal Auto-ID Platform.

NuGet Version Target Framework AOT Compatible GitHub Repo Web Docs Instant Trial


๐ŸŽฏ Overview

Beetech.Adv.Abstractions defines the open interface contracts enabling 3rd-party hardware manufacturers, system integrators, and software vendors to integrate custom RFID readers, barcode scanners, PLCs, and middleware into the Beetech Auto-ID ecosystem without access to proprietary SDK sources.

Key Capabilities

  • IRfidReaderDriver: Standard interface for fixed, handheld, desktop, and portal RFID readers.
  • IBarcodeScannerDriver: Standard interface for 1D/2D imaging scanners and barcode sleds.
  • IPlcDriver: Industrial automation discrete I/O and register memory access.
  • ITagPipelineMiddleware: ASP.NET Core-style pipeline middleware for edge filtering, deduplication, and CEP rule evaluation.
  • DriverMetadataAttribute: Declarative plugin auto-discovery metadata.
  • DriverCertificationSuite: Automated conformance testing kit validating custom driver reliability and compliance.

๐Ÿš€ Quickstart: Building a Custom RFID Reader Driver

1. Implement IRfidReaderDriver

using System;
using System.Threading;
using System.Threading.Tasks;
using Beetech.Adv.Abstractions;

namespace MyCompany.AutoId.Drivers
{
    [DriverMetadata(
        driverId: "acme-portal-9000",
        displayName: "Acme Industrial RFID Portal 9000",
        manufacturer: "Acme Auto-ID Corp",
        driverVersion: "1.2.0",
        Category = "Fixed",
        SupportedProtocols = new[] { "LLRP", "TCP/IP" }
    )]
    public class AcmePortalDriver : IRfidReaderDriver
    {
        public string DriverId => "acme-portal-9000";
        public string ModelDisplayName => "Acme Industrial RFID Portal 9000";
        public ReaderOperationalStatus Status { get; private set; } = ReaderOperationalStatus.Disconnected;
        public bool IsConnected => Status == ReaderOperationalStatus.Connected || Status == ReaderOperationalStatus.Inventory;
        public bool IsInventoryRunning => Status == ReaderOperationalStatus.Inventory;

        public ReaderCapabilities Capabilities => new()
        {
            MaxAntennaPorts = 4,
            MinPowerDbm = 10.0,
            MaxPowerDbm = 31.5,
            SupportsUhfRfid = true,
            SupportsGpio = true,
            SupportsAutonomousInventory = true
        };

        public event EventHandler<RfidTagReadEventArgs>? TagRead;
        public event EventHandler<BatchTagReadEventArgs>? BatchTagRead;
        public event EventHandler<ReaderStatusEventArgs>? StatusChanged;

        public Task<bool> ConnectAsync(string connectionString, CancellationToken cancellationToken = default)
        {
            // Connect to reader socket
            Status = ReaderOperationalStatus.Connected;
            return Task.FromResult(true);
        }

        public Task StartInventoryAsync(RfidInventoryParams? parameters = null, CancellationToken cancellationToken = default)
        {
            Status = ReaderOperationalStatus.Inventory;
            // Begin tag polling loop
            return Task.CompletedTask;
        }

        public Task StopInventoryAsync(CancellationToken cancellationToken = default)
        {
            Status = ReaderOperationalStatus.Connected;
            return Task.CompletedTask;
        }

        public Task DisconnectAsync(CancellationToken cancellationToken = default)
        {
            Status = ReaderOperationalStatus.Disconnected;
            return Task.CompletedTask;
        }

        public Task SetRfPowerAsync(double powerDbm, CancellationToken cancellationToken = default) => Task.CompletedTask;
        public Task SetSensitivityAsync(double sensitivityDbm, CancellationToken cancellationToken = default) => Task.CompletedTask;
        public Task ConfigureAntennaPortsAsync(IEnumerable<AntennaPortConfiguration> ports, CancellationToken cancellationToken = default) => Task.CompletedTask;
        public Task<bool> WriteTagEpcAsync(string currentEpc, string newEpc, string? accessPassword = null, CancellationToken cancellationToken = default) => Task.FromResult(true);
        public Task<string?> ReadTagMemoryAsync(string epc, MemoryBank bank, ushort wordAddress, ushort wordCount, string? accessPassword = null, CancellationToken cancellationToken = default) => Task.FromResult<string?>("A1B2C3D4");

        public void Dispose() => DisconnectAsync().GetAwaiter().GetResult();
    }
}

๐Ÿงช Validating Driver with Conformance Certification

Run the automated certification suite before submitting your driver to the Beetech Hardware Catalog:

using Xunit;
using Beetech.Adv.Abstractions;

public class DriverConformanceTests
{
    [Fact]
    public async Task ValidateAcmeDriver()
    {
        using var driver = new AcmePortalDriver();
        var report = await DriverCertificationSuite.CertifyDriverAsync(driver, "192.168.1.100");

        Assert.True(report.IsFullyCompliant, $"Certification failed: {string.Join(", ", report.Results)}");
        Assert.Equal(0, report.FailedAssertions);
    }
}

๐Ÿ“ฆ Building Custom Tag Pipeline Middleware

using System.Threading.Tasks;
using Beetech.Adv.Abstractions;

public class CustomPartLookupMiddleware : ITagPipelineMiddleware
{
    public async ValueTask InvokeAsync(TagProcessingContext context, TagPipelineDelegate next)
    {
        // Enriched ERP metadata
        if (context.Tag.Epc.StartsWith("3034"))
        {
            context.Items["partNumber"] = "PART-99482";
            context.Items["department"] = "AssemblyLine-02";
        }

        // Pass to next middleware downstream
        await next(context);
    }
}

๐Ÿ“„ License

Licensed under the MIT License. Copyright (c) 2026 Beetech Auto-ID Platform. All rights reserved.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Beetech.Adv.Abstractions:

Package Downloads
Beetech.Adv.Common

Beetech Advanced Common Core Library - Node-locked hardware licensing, asymmetric crypto verification, and RFID utility primitives.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.3 87 9/29/2026
1.0.0 125 9/27/2026