All Projects → MelbourneDeveloper → Device.net

MelbourneDeveloper / Device.net

Licence: mit
A C# cross platform connected device framework

Projects that are alternatives of or similar to Device.net

Hidguardian
Windows kernel-mode driver for controlling access to various input devices.
Stars: ✭ 138 (-60.23%)
Mutual labels:  usb, hid, device
Hidviz
A tool for in-depth analysis of USB HID devices communication
Stars: ✭ 505 (+45.53%)
Mutual labels:  usb, hid, libusb
ES-Timer
A USB timer powered by Digispark ATtiny85 according to 🍅 pomodoro time management technique
Stars: ✭ 45 (-87.03%)
Mutual labels:  usb, hid
pi400kb
Raw HID keyboard forwarder to turn the Pi 400 into a USB keyboard
Stars: ✭ 182 (-47.55%)
Mutual labels:  usb, hid
ESP32-USB-Soft-Host
An Arduino wrapper to @sdima1357's usb_soft_host esp-idf example
Stars: ✭ 119 (-65.71%)
Mutual labels:  usb, hid
EspTinyUSB
ESP32S2 native USB library. Implemented few common classes, like MIDI, CDC, HID or DFU (update).
Stars: ✭ 375 (+8.07%)
Mutual labels:  usb, hid
libusb
Go bindings for the C libusb library.
Stars: ✭ 74 (-78.67%)
Mutual labels:  usb, libusb
Trezor.Net
Cross platform C# library for talking to the Trezor hardwarewallet
Stars: ✭ 38 (-89.05%)
Mutual labels:  hid, uwp
Authorizer
Authorizer is a Password Manager for Android. It emulates an HID keyboard over USB and enters your credentials on your target device. Additionally it supports OTP 🔑📴
Stars: ✭ 172 (-50.43%)
Mutual labels:  usb, hid
android-usb-script
An Android app that allows you to script USB gadgets (work-in-progress).
Stars: ✭ 15 (-95.68%)
Mutual labels:  usb, hid
RaspberryPi-Joystick
A virtual HID USB joystick created using Raspberry Pi
Stars: ✭ 73 (-78.96%)
Mutual labels:  usb, hid
usb stack
Tiny and portable USB device/host stack for embedded system with USB IP
Stars: ✭ 175 (-49.57%)
Mutual labels:  usb, hid
Qtusb
A cross-platform USB Module for Qt.
Stars: ✭ 245 (-29.39%)
Mutual labels:  usb, libusb
Usb4java
USB library for Java based on libusb
Stars: ✭ 240 (-30.84%)
Mutual labels:  usb, libusb
python-hid-parser
Typed pure Python library to parse HID report descriptors
Stars: ✭ 31 (-91.07%)
Mutual labels:  usb, hid
Usbdk
Usb Drivers Development Kit for Windows
Stars: ✭ 181 (-47.84%)
Mutual labels:  usb, libusb
libusb-win32
libusb-win32 project official github repo
Stars: ✭ 44 (-87.32%)
Mutual labels:  usb, libusb
Teenyusb
Lightweight USB device and host stack for STM32 and other MCUs.
Stars: ✭ 287 (-17.29%)
Mutual labels:  usb, hid
Usbdevice
Highly flexible Composite USB Device Library
Stars: ✭ 144 (-58.5%)
Mutual labels:  usb, hid
Port-Able-Suite
🌐 Manager for portable applications
Stars: ✭ 35 (-89.91%)
Mutual labels:  device, usb

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

diagram

Cross-platform .NET framework for talking to connected devices such as USB, Serial Port and Hid devices

Version 4 is live on Nuget.org! Take a look at the 4.0 project to see new features and fixes. Version 4 has public interface changes. You will need to read through the documentation to upgrade from version 3 to version 4.

This framework provides a common Task async programming interface across platforms and device types. This allows for dependency injection to use different types of devices on any platform with the same code. The supported device types are Hid, Serial Port, and USB.

Contribute

This project needs funding. Please sponsor me here so that I can contribute more time to improving this framework.

Coin Address
Bitcoin 33LrG1p81kdzNUHoCnsYGj6EHRprTKWu3U
Ethereum 0x7ba0ea9975ac0efb5319886a287dcf5eecd3038e
Litecoin MVAbLaNPq7meGXvZMU4TwypUsDEuU6stpY

This project also needs unit tests, bug fixes and work towards more platforms. Please read this.

Licensing

This framework uses the MIT license. I won't sue you, or your business if you use this for free. If you are developing software for free, I don't expect you to sponsor me. However, if your business makes more than USD 100,000 per year and your software depends on Device.Net, I expect your business to make a serious contribution via sponsorship.

Why Device.Net?

Device communication is fragmented across platforms and device types. If you need to use three different device types across Android, UWP and .NET, you would otherwise need nine different APIs. Device.Net puts a standard layer across all these so that you can share code across all platforms and device types. You don't need to use Windows APIs or learn about Android's API directly. If the device manufacturer decides to switch from USB to Hid, the code remains the same. Write once; run everywhere.

Get Help

Currently supports:

Platform Hid USB Serial Port Bluetooth
.NET Framework Yes Yes Yes No
.NET Core Yes Yes Yes No
Android Yes Yes No No
UWP Yes Yes No No
Linux, MacOS* No (Via LibUsbDotNet) No No
WebAssembly No No No No

Note: Bluetooth, Linux, and macOS, WebAssembly (via WebUsb) support are on the radar. If you can sponsor this project, you might be able to help get there faster.

SerialPort.Net and Device.Net.LibUsb are still in alpha mode. You must use the prerelease version

Example Code

using Device.Net;
using Hid.Net.Windows;
using Microsoft.Extensions.Logging;
using System.Linq;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Usb.Net.Windows;

namespace Usb.Net.WindowsSample
{
    internal class Program
    {
        private static async Task Main()
        {
            //Create logger factory that will pick up all logs and output them in the debug output window
            var loggerFactory = LoggerFactory.Create((builder) =>
            {
                _ = builder.AddDebug().SetMinimumLevel(LogLevel.Trace);
            });

            //----------------------

            // This is Windows specific code. You can replace this with your platform of choice or put this part in the composition root of your app

            //Register the factory for creating Hid devices. 
            var hidFactory =
                new FilterDeviceDefinition(vendorId: 0x534C, productId: 0x0001, label: "Trezor One Firmware 1.6.x", usagePage: 65280)
                .CreateWindowsHidDeviceFactory(loggerFactory);

            //Register the factory for creating Usb devices.
            var usbFactory =
                new FilterDeviceDefinition(vendorId: 0x1209, productId: 0x53C1, label: "Trezor One Firmware 1.7.x")
                .CreateWindowsUsbDeviceFactory(loggerFactory);

            //----------------------

            //Join the factories together so that it picks up either the Hid or USB device
            var factories = hidFactory.Aggregate(usbFactory);

            //Get connected device definitions
            var deviceDefinitions = (await factories.GetConnectedDeviceDefinitionsAsync().ConfigureAwait(false)).ToList();

            if (deviceDefinitions.Count == 0)
            {
                //No devices were found
                return;
            }

            //Get the device from its definition
            var trezorDevice = await hidFactory.GetDeviceAsync(deviceDefinitions.First()).ConfigureAwait(false);

            //Initialize the device
            await trezorDevice.InitializeAsync().ConfigureAwait(false);

            //Create the request buffer
            var buffer = new byte[65];
            buffer[0] = 0x00;
            buffer[1] = 0x3f;
            buffer[2] = 0x23;
            buffer[3] = 0x23;

            //Write and read the data to the device
            var readBuffer = await trezorDevice.WriteAndReadAsync(buffer).ConfigureAwait(false);
        }
    }
}

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].