HidDeviceReaderLibrary
Introduction
HidDeviceReaderLibrary
is a .NET library for reading data from USB HID devices (not supporting virtual keyboard mode) and parsing JSON data. It is suitable for scenarios where you need to communicate with HID devices and process their data.
Features
- Supports finding and connecting HID devices by VendorID and ProductID
- Real-time reading of HID device data streams
- Automatically filters ASCII data and extracts JSON strings
- Supports parsing JSON and retrieving specific field values
- Asynchronous data retrieval via event callbacks
- Supports custom cancellation of reading (CancellationToken)
Supported Platforms
- .NET Core 2.0 and above
- .NET 6/8/9
- Windows, Linux, macOS (platforms supported by HidSharp)
Installation
dotnet add package HidDeviceReaderLibrary
Quick Start Example
using System;
using System.Threading;
using HidDeviceReaderLibrary;
class Program {
static async void Main()
{
// your HID device VendorID 和 ProductID
var reader = new HidDeviceReaderV1(0x2F50, 0x0300);
reader.OnDataReceived += data =>
{
Console.WriteLine($"Received data: {data}");
};
using (var cts = new CancellationTokenSource())
{
// press Ctrl+C cancels
Console.CancelKeyPress += (s, e) => {
e.Cancel = true;
cts.Cancel();
};
await reader.StartReadingAsync(cts.Token);
Console.ReadKey();
}
}
}
// DI version supports
using HidDeviceReaderLibrary;
namespace WebApplicationHIDTests
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddLogging();
builder.Services.AddHidDeviceReader(vendorId: 1234, productId: 5678);
builder.Services.AddHostedService<HIDService>();
var app = builder.Build();
app.Run();
}
}
}
// Later, resolve IHidDeviceReader:
//Method 1:
var reader = serviceProvider.GetRequiredService<IHidDeviceReader>();
using (var cts = new CancellationTokenSource())
await reader.StartReadingAsync(cts.Token);
//Method 2:
using HidDeviceReaderLibrary;
using HidSharp;
namespace WebApplicationHIDTests
{
public class HIDService(IHidDeviceReader hidDevice, ILogger<HidDevice> logger) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
logger.LogDebug($"Testing start...");
// Subscribe to the OnDataReceived event correctly
hidDevice.OnDataReceived += data => logger.LogDebug(data);
await hidDevice.StartReadingAsync(stoppingToken);
while (!stoppingToken.IsCancellationRequested)
await Task.Delay(1000, stoppingToken);
}
}
}
Dependencies
License
MIT