2017-03-13 125 views
1

今はUSB RFIDリーダーを購入しましたが、今は読んで、書き込みし、リーダーにカードがあるかどうかをチェックしたいと思います。 そこで私はここで検索し、以下のコードを見つけました。 それについての説明は、私は必要なものほとんどすべてです:C#でUSB RFIDリーダーから読み取る方法

  • は、ベンダーと製品IDによりUSBデバイスを開きます。

  • 読み取りのためにUsbEndpointReaderクラスを開きます。

  • Ep01からのUSBデバイス出力を読み取り、5秒間データが受信されなくなるまで表示します。

しかし、私は "USBDevice"、 "USBDeviceFinder" などがどこから来ている理解していけませんか? ユーザーが投稿したコードはこれだけです。 私のVisual Studioにコピーしました。予期した通りです。 "名前 'USBDevice'は現在のコンテキストに存在しません"

誰かがこれを修正する方法を手助けできますか?

Btw。 Link to the Original Post

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

namespace Examples 
{ 
internal class ReadPolling 
{ 
    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 
    { 
     // 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 
      wholeUsbDevice.SetConfiguration(1); 

      // Claim interface #0. 
      wholeUsbDevice.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. 
      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)); 
     } 

     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.ReleaseInterface(0); 
       } 

       MyUsbDevice.Close(); 
      } 
      MyUsbDevice = null; 

      // Free usb resources 
      UsbDevice.Exit(); 

     } 

     // Wait for user input.. 
     Console.ReadKey(); 
     } 
    } 
    } 
} 

答えて

1

それはパッケージLibUsbDotNetの中で最も可能性があります:これは元の質問と回答です。 Visual Studioを使用している場合は、[ツール]> [NuGet Package Manager]> [ソリューション用NuGetパッケージを管理...]を開いて、[参照]に移動して検索バーに貼り付けます。それをあなたのプロジェクトに追加して、今はそれが良いと思うはずです。

関連する問題