使用C#从USB读取数据?

8

我不想读取串口或其他可能的简易快捷方式。我想知道如何使用C#在我的笔记本电脑上读取USB端口。 无论您能否建议一个网站或解释流程,我都非常感激您的帮助。


2
从你的USB读取什么?有什么插入的吗?如果连接了RS232设备,我知道一些简单的快捷方式。哦,等等... - H H
你想从原始设备(如驱动程序)读取还是想从特定设备类型读取?第一个可能只能通过大量的P/Invoke实现(不值得麻烦)。后者将取决于设备。 - EricSchaefer
从哪里读取数据?是来自设备,例如打印机吗?USB只是一个标准介质。数据的来源是什么? - Vivek Bernard
2个回答

4
如果你想进行USB开发,Jan Axelson(《USB Complete》的作者)的网站通常是一个很好的起点。
编辑:假设你要与HID进行通信,这篇文章可能会有用,并包含C#示例。

@developerwjk 谢谢,现在已经修复了。 - Hans Olsson

1
假设您想在Windows上读取数据。以下是代码示例:
    public override async Task<byte[]> ReadAsync()
    {
        return await Task.Run(() =>
        {
            var bytes = new byte[ReadBufferSize];
            //TODO: Allow for different interfaces and pipes...
            var isSuccess = WinUsbApiCalls.WinUsb_ReadPipe(_DefaultUsbInterface.Handle, _DefaultUsbInterface.ReadPipe.WINUSB_PIPE_INFORMATION.PipeId, bytes, ReadBufferSize, out var bytesRead, IntPtr.Zero);
            HandleError(isSuccess, "Couldn't read data");
            Tracer?.Trace(false, bytes);
            return bytes;
        });
    }

    [DllImport("winusb.dll", SetLastError = true)]
    public static extern bool WinUsb_ReadPipe(SafeFileHandle InterfaceHandle, byte PipeID, byte[] Buffer, uint BufferLength, out uint LengthTransferred, IntPtr Overlapped);

所有的代码和示例(包括其他平台)都可以在这里找到:https://github.com/MelbourneDeveloper/Device.Net


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接