Skip to content

A C# cross platform connected device framework

License

Notifications You must be signed in to change notification settings

sdiaman1/Device.Net

 
 

Repository files navigation

Hid.Net, Usb.Net, SerialPort.Net (Device.Net)

diagram

Cross platform C# framework for talking to connected devices such as Usb, Serial Port and Hid devices.

SerialPort.Net is an implementation for Serial Port devices. Currently, Windows is supported, but UWP and others will be on their way. The current version of SerialPort.Net is only in its early stages and may have issues

This framework provides a common Task based Async interface across platforms and device types. This allows for dependency injection so that different types of devices can be used on any platform with the same code. The supported device types are Hid, Serial Port, and USB. Other device types such as Bluetooth and so on may be added in future. Hid.Net is specifically for Hid devices that may be Usb devices. Usb.Net is specifically for Usb devices that don't have a Hid interface. Please visit the documentation page. Would you you like to contribute?

Currently supports:

Platform Device Types
.NET Framework Hid, USB, Serial Port
.NET Core Hid, USB, Serial Port
Android USB
UWP Hid, USB
Linux, MacOS* USB (Via LibUsbDotNet)

Important! Before trying this code, see the above Quick Start

Example Code:

public async Task InitializeTrezorAsync()
{
    //Register the factories for creating Usb devices. This only needs to be done once.
    WindowsUsbDeviceFactory.Register(Logger, Tracer);
    WindowsHidDeviceFactory.Register(Logger, Tracer);

    //Define the types of devices to search for. This particular device can be connected to via USB, or Hid
    var deviceDefinitions = new List<FilterDeviceDefinition>
    {
        new FilterDeviceDefinition{ DeviceType= DeviceType.Hid, VendorId= 0x534C, ProductId=0x0001, Label="Trezor One Firmware 1.6.x" },
        new FilterDeviceDefinition{ DeviceType= DeviceType.Usb, VendorId= 0x1209, ProductId=0x53C1, Label="Trezor One Firmware 1.7.x" },
        new FilterDeviceDefinition{ DeviceType= DeviceType.Usb, VendorId= 0x1209, ProductId=0x53C0, Label="Model T" }
    };

    //Get the first available device and connect to it
    var devices = await DeviceManager.Current.GetDevicesAsync(deviceDefinitions);
    var trezorDevice = devices.FirstOrDefault();
    await trezorDevice.InitializeAsync();

    //Create a buffer with 3 bytes (initialize)
    var buffer = new byte[64];
    buffer[0] = 0x3f;
    buffer[1] = 0x23;
    buffer[2] = 0x23;

    //Write the data to the device and wait for the response
    var readBuffer = await trezorDevice.WriteAndReadAsync(buffer);
}

Donate

All my libraries are open source and free. Your donations will contribute to making sure that these libraries keep up with the latest firmware, functions are implemented, and the quality is maintained.

Coin Address
Bitcoin 33LrG1p81kdzNUHoCnsYGj6EHRprTKWu3U
Ethereum 0x7ba0ea9975ac0efb5319886a287dcf5eecd3038e
Litecoin MVAbLaNPq7meGXvZMU4TwypUsDEuU6stpY

Google Play

Windows Store

Contact

Store App Production Usage

Hardfolio - Cryptocurrency portfolio app for hardwarewallets. Hid.Net started its life as a project inside the Hardfolio app codebase. The original aim of this app was to support multiple hardwarewallets across multiple platforms. It turned out that Hid.Net and Usb.Net were warranted as libraries in their own right because there really is not other library on the internet that supports all the platforms that were needed for Hardfolio.

See Also

Human Interface Device Wikipedia Page - Good for understanding the difference between the meaning of the two terms: USB and Hid.

USB human interface device class Wikipedia Page - as above

USB Wikipedia Page - as above

Jax Axelson's USB Page - General C# USB Programming

About

A C# cross platform connected device framework

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 96.4%
  • PowerShell 3.6%