1. ホーム
  2. シーピー

C#でUSBデバイスを操作する方法

2022-02-09 13:21:37

LibUSBを知らない人はいないと思いますが、そうです、非常に有名なオープンソースのUSBドライバで、LinuxやWINでUSBデバイスを簡単に操作できるAPIを提供しています、非常に便利です! しかし、libusbはc言語に基づいているので、C#でlibusbを使用することはできないのでしょうか?もちろん、あなたが完全に独自のC#ライブラリにlibusbによって提供されるDLをパッケージ化することができますが、作業負荷は非常に大きく、デバッグプロセスは確かにいくつかの予期しないことが起こるので、C#でlibusbを使用する方法、シーン上の強力なオープンソースUSBクラスライブラリ下にC#の次の導入です。LibUSBDotNetは、その通りです。また、オープンソースプロジェクトである.NETのlibusbは、完全なクラスライブラリにlibusbをラップしている、次のリンクからダウンロードすることができます。

http://download.csdn.net/detail/cumtwys/7713473 (CSDNはスコアなし)

または

http://sourceforge.net/projects/libusbdotnet/ (公式)

<スパン sourceforgeのオープンソースプロジェクトで、WINでEXEをダウンロードしてインストールするだけで、たくさんのサンプルとドキュメント(CHM形式、超便利)が含まれています。

<スパン LibUSBDotNetの使い方を簡単に説明します。

1. まずC#のアプリケーションを作成します(コンソール、フォームでも可)。

2、LibUsbDotNetインストールディレクトリのsrcディレクトリから、LibWinUsbをプロジェクトのルートにコピーします。

3. そのまま、ソリューションを右クリックして、既存のプロジェクトを追加し、そのプロジェクトを LibWinUsb ディレクトリにインクルードします。

4. 以下のように、プロジェクト上で右クリックし、参照を追加して、LibUSBDotNetプロジェクトを選択します。

<スパン 5 CSファイルの冒頭に、以下の参照を追加します。

using LibUsbDotNet;
Main; using LibUsbDotNet;
Info; using LibUsbDotNet;
Descriptors; using LibUsbDotNet;
LibUsbDotNet; using LibUsbDotNet;
WinUsb; using LibUsbDotNet;

<スパン 6. 以下は、データを読み込む例です(CHMのドキュメントから引用)。

using System;
Text;
Text; using LibUsbDotNet;
Main. using LibUsbDotNet;

namespace Examples
internal
    internal class ReadPolling
    internal class
        public static UsbDevice MyUsbDevice;

        #region SET YOUR USB Vendor and Product ID!

        public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(1234, 1);

        #endregion

        public static void Main(string[] args)
        {
            ErrorCode ec = ErrorCode.None;

            Try
            Try
                // Find and open the usb device.
                MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);

                // If the device is open and ready
                if (MyUsbDevice == null) throw new Exception("Device Not Found.");

                // If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
                // it exposes an IUsbDevice interface. If not (WinUSB) the 
                // 'wholeUsbDevice' variable will be null indicating this is 
                // an interface of a device; it does not require or support 
                // configuration and interface selection.
                IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                if (!ReferenceEquals(wholeUsbDevice, null))
                {
                    // This is a "whole" USB device. before it can be used, 
                    // the desired configuration and interface must be selected.

                    // Select config #1
                    SetConfiguration(1);

                    // Claim interface #0.
                    ClaimInterface(0);
                }

                // open read endpoint 1.
                UsbEndpointReader reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);


                byte[] readBuffer = new byte[1024];
                while (ec == ErrorCode.None)
                {
                    int bytesRead;

                    // If the device hasn't sent data in the last 5 seconds,
                    // a timeout error (ec = IoTimedOut) will occur. 
                    Read(readBuffer, 5000, out bytesRead). ec = reader;

                    Read(readBuffer, 5000, out bytesRead); if (bytesRead == 0) throw new Exception(string.Format("{0}:No more bytes!", ec));
                    Console.WriteLine("{0} bytes read", bytesRead);

                    // Write that output to the console.
                    Console.Write(Encoding.Default.GetString(readBuffer, 0, bytesRead));
                GetString(readBuffer, 0, bytesRead)); }

                Console.WriteLine("\r\nDone!\r\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine();
                Console.WriteLine((ec ! = ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
            }
            finally
            {
                if (MyUsbDevice ! = null)
                {
                    if (MyUsbDevice.IsOpen)
                    {
                        // If this is a "whole" usb device (libusb-win32, linux libusb-1.0)
                        // it exposes an IUsbDevice interface. if not (WinUSB) the 
                        // 'wholeUsbDevice' variable will be null indicating this is 
                        // an interface of a device; it does not require or support 
                        // configuration and interface selection.
                        IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
                        if (!ReferenceEquals(wholeUsbDevice, null))
                        {
                            // Release interface #0.
                            wholeUsbDevice

<スパン 7、どのようにシンプルで、便利なそれを、インストールディレクトリは、ドライバファイルの自動生成を持っている、非常に良いドライバ生成ウィザードであるInfWizard.exe、独自のUSBデバイスの開発のために、あなたは完全にドライバを行うためにLIBUSBを使って検討できるときにWINドライバを記述する必要があります、その後このツールを使用して、ワークロードが1分以内に行われるでしょう。あまりにも強力な......