2017-03-13 62 views
1

看我剛買了一個USB RFID讀寫器,現在我想讀,寫,檢查是否有卡在此刻與否讀者。 所以我在這裏搜索並找到下面的代碼。 它的描述是幾乎所有我需要什麼:如何從USB RFID讀寫器與C#

  • 由供應商和產品ID打開一個USB設備。

  • 打開一個UsbEndpointReader類閱讀。

  • 讀取並直到接收到5秒鐘無數據顯示從EP01 USB輸出設備。

但我不明白「USBDevice」,「USBDeviceFinder」等來自哪裏? 這是用戶發佈的唯一代碼。 我將它複製到我的Visual Studio中,如預期的那樣,例如 「名稱'USBDevice'在當前上下文中不存在'

有人可以幫助解決這個問題嗎?

順便說一句。這是原來的問題和答案: 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程序包管理器>管理解決方案的NuGet程序包...,請瀏覽並將其粘貼到搜索欄中。將它添加到您的項目中,現在應該很好。