2017-03-13 37 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 패키지 관리자> 솔루션 용 NuGet 패키지 관리 ...를 열고 찾아보기로 이동하여 검색 창에 붙여 넣으십시오. 그것을 당신의 프로젝트에 추가하십시오. 그러면 이제는 잘되어야합니다.