HidLibrary - .NET HID设备通信库详解

HidLibrary - .NET HID设备通信库详解

【免费下载链接】HidLibrary This library enables you to enumerate and communicate with Hid compatible USB devices in .NET. 【免费下载链接】HidLibrary 项目地址: https://gitcode.com/gh_mirrors/hi/HidLibrary

HidLibrary 是一个强大的开源 C# 库,专门用于在 .NET 应用程序中枚举和与 HID(人机接口设备)兼容的 USB 设备进行通信。该库提供了同步和异步读写功能,以及设备插入和移除的通知机制。

核心特性

  • 跨平台支持:支持 x86 和 x64 架构
  • 同步/异步操作:同时提供同步和异步读写方法
  • 设备监控:实时监测设备的插入和移除事件
  • 完整API:提供丰富的设备信息查询和操作接口

安装方式

通过 NuGet 包管理器安装:

Install-Package hidlibrary

核心类介绍

HidDevice 类

HidDevice 是与 HID 设备交互的核心类,提供了以下主要功能:

// 打开设备
device.OpenDevice();
device.OpenDevice(DeviceMode readMode, DeviceMode writeMode, ShareMode shareMode);

// 读取数据
HidDeviceData data = device.Read();
HidDeviceData data = device.Read(int timeout);
HidReport report = device.ReadReport();

// 写入数据
bool success = device.Write(byte[] data);
bool success = device.WriteReport(HidReport report);

// 异步操作
Task<HidDeviceData> ReadAsync(int timeout = 0);
Task<bool> WriteAsync(byte[] data, int timeout = 0);

HidDevices 类

用于枚举系统中所有可用的 HID 设备:

// 获取所有设备
IEnumerable<HidDevice> allDevices = HidDevices.Enumerate();

// 按VID/PID查找设备
HidDevice device = HidDevices.GetDevice(vendorId, productId);

HidReport 类

封装了 HID 报告数据,提供结构化的数据访问方式:

HidReport report = device.CreateReport();
report.ReportId = 0x01;
report.Data[0] = 0xFF;
bool success = device.WriteReport(report);

使用示例

基本设备枚举和读取

using HidLibrary;

// 枚举所有HID设备
foreach (HidDevice device in HidDevices.Enumerate())
{
    Console.WriteLine($"设备: {device.Description}");
    Console.WriteLine($"厂商ID: {device.Attributes.VendorHexId}");
    Console.WriteLine($"产品ID: {device.Attributes.ProductHexId}");
}

// 按VID/PID查找特定设备
HidDevice targetDevice = HidDevices.GetDevice(0x1234, 0x5678);
if (targetDevice != null)
{
    targetDevice.OpenDevice();
    
    // 持续读取数据
    while (true)
    {
        HidDeviceData data = targetDevice.Read();
        if (data.Status == HidDeviceData.ReadStatus.Success)
        {
            Console.WriteLine($"收到数据: {BitConverter.ToString(data.Data)}");
        }
    }
}

异步操作示例

// 异步读取
async Task ReadDataAsync(HidDevice device)
{
    while (true)
    {
        HidDeviceData data = await device.ReadAsync(1000);
        if (data.Status == HidDeviceData.ReadStatus.Success)
        {
            // 处理数据
        }
        await Task.Delay(100);
    }
}

// 异步写入
async Task WriteDataAsync(HidDevice device, byte[] data)
{
    bool success = await device.WriteAsync(data, 1000);
    Console.WriteLine($"写入结果: {success}");
}

设备事件监控

// 监控设备插入和移除事件
HidDevice device = HidDevices.GetDevice(0x1234, 0x5678);
if (device != null)
{
    device.Inserted += () => Console.WriteLine("设备已插入");
    device.Removed += () => Console.WriteLine("设备已移除");
    device.MonitorDeviceEvents = true;
}

高级功能

特征报告操作

// 读取特征报告
byte[] featureData;
bool success = device.ReadFeatureData(out featureData, reportId: 0x01);

// 写入特征报告
byte[] dataToWrite = new byte[] { 0x01, 0x02, 0x03 };
bool writeSuccess = device.WriteFeatureData(dataToWrite);

设备信息查询

// 获取制造商字符串
byte[] manufacturerData;
device.ReadManufacturer(out manufacturerData);
string manufacturer = Encoding.Unicode.GetString(manufacturerData);

// 获取产品字符串
byte[] productData;
device.ReadProduct(out productData);
string product = Encoding.Unicode.GetString(productData);

// 获取序列号
byte[] serialData;
device.ReadSerialNumber(out serialData);
string serialNumber = Encoding.Unicode.GetString(serialData);

项目结构

HidLibrary项目结构

HidLibrary 项目包含以下主要组件:

  • src/HidLibrary/ - 核心库源代码
  • examples/ - 各种设备的使用示例
  • experimental/ - 实验性功能和设备支持
  • misc/ - 相关文档和资源

支持的设备类型

该库支持多种 HID 设备,包括但不限于:

  • 游戏手柄和控制器
  • 条码扫描器
  • 读卡器
  • 工业控制设备
  • 自定义 HID 设备

注意事项

  • 在使用库之前,请确保设备已正确连接到计算机
  • 某些设备可能需要管理员权限才能访问
  • 异步操作提供了更好的性能,但需要正确处理线程同步
  • 设备事件监控需要显式启用 MonitorDeviceEvents 属性

HidLibrary 为 .NET 开发者提供了强大而灵活的 HID 设备访问能力,无论是开发商业应用还是个人项目,都是一个值得信赖的选择。

【免费下载链接】HidLibrary This library enables you to enumerate and communicate with Hid compatible USB devices in .NET. 【免费下载链接】HidLibrary 项目地址: https://gitcode.com/gh_mirrors/hi/HidLibrary

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值