Provides a unified and abstracted API for interacting with USB HID devices, specifically focusing on HID report I/O operations.
This library provides a unified interface for interacting with USB HID devices in .NET. It defines core abstractions including IUsbHidService, IUsbHidDevice, and IUsbHidEndPoint to represent device discovery and report I/O operations.
The design decouples application logic from specific hardware access libraries through a dependency injection-friendly structure using UsbHidServiceBuilder. Extension methods are included to simplify common tasks such as finding specific devices by VID/PID and opening endpoints. It serves as the common foundation for the Smdn.IO.UsbHid.* libraries, ensuring a consistent API regardless of the chosen backend.
A backend provider for Smdn.IO.UsbHid.* that utilizes the HIDSharp library for hardware communication.
It maps the common interfaces to HIDSharp's HidDevice and HidStream, and it supports standard DI registration via the AddHidSharpUsbHid extension methods. The implementation allows for the integration of Polly resilience pipelines for the endpoint opening process through the HidSharpUsbHidServiceBuilder. While adhering to the unified API, the underlying HidDevice instance remains accessible via the IUsbHidDevice.UnderlyingDevice property for library-specific operations.
A backend provider for Smdn.IO.UsbHid.* that utilizes the LibUsbDotNet library for hardware communication.
It offers specific configuration through LibUsbDotNetOptions, allowing users to define timeouts and buffer sizes for HID report transfers. The library maps IUsbHidDevice to UsbDevice and handles HID reports using LibUsbDotNet's endpoint reader and writer classes. Similar to other providers, it supports DI-based service registration and the configuration of Polly resilience pipelines for device access.
A backend provider for Smdn.IO.UsbHid.* that utilizes the LibUsbDotNet version 3 (alpha) library.
Smdn.IO.UsbHid.Providers.LibUsbDotNet uses the stable release of LibUsbDotNet, version 2, while Smdn.IO.UsbHid.Providers.LibUsbDotNetV3 uses the presently alpha release of LibUsbDotNet, version 3. The implementation of this library itself is mostly stable, but since LibUsbDotNet v3 is still in alpha, it is released as a pre-release version.
More examples can be found in following examples directory.
- Smdn.IO.UsbHid.Providers.HidSharp examples
- Smdn.IO.UsbHid.Providers.LibUsbDotNet examples
- Smdn.IO.UsbHid.Providers.LibUsbDotNetV3 examples
LibUsbDotNet do DllImport-ing a shared library with the filename libusb-1.0.so.0.
If the libusb's .so filename installed on your system is different from that, use the NativeLibrary.SetDllImportResolver() to load installed .so file like below.
$ find /lib/ -name "libusb-*.so*"
/lib/x86_64-linux-gnu/libusb-1.0.so.x.y.z
/lib/i386-linux-gnu/libusb-1.0.so.x.y.zusing System.Runtime.InteropServices;
static void Main() {
// libusb.so filename which is installed on your system
const string fileNameLibUsb = "libusb-1.0.so.x.y.z";
NativeLibrary.SetDllImportResolver(
typeof(global::LibUsbDotNet.LibUsb.UsbDevice).Assembly,
(libraryName, assembly, searchPath) => {
if (string.Equals(libraryName, "libusb-1.0.so.0", StringComparison.OrdinalIgnoreCase)) {
if (NativeLibrary.TryLoad(fileNameLibUsb, out var handleOfLibUsb))
return handleOfLibUsb;
}
return IntPtr.Zero;
}
);
// your codes here
︙
︙
}Contributions are appreciated!
If there's a feature you would like to add or a bug you would like to fix, please read Contribution guidelines and create an Issue or Pull Request.
IssueやPull Requestを送る際は、Contribution guidelinesをご覧頂ください。 可能なら英語が望ましいですが、日本語で構いません。
This project is licensed under the terms of the MIT License.
This project uses the following components. See ThirdPartyNotices.md for detail.