How to read from a usb rfid reader?
Asked Answered
I

3

10

I have bought a usb rfid reader. How can I read data when user puts an rfid tag in front of the device?

my computer identifies the device as an Human Interface Device. If it identified it as an com device it was much easier to read from the device with serialPort object but I dont know how to read from a usb device.

Any help?

Incendiary answered 19/3, 2014 at 19:58 Comment(6)
I have a need for this as well, I just don't currently have a device. I was looking for a reader that might have something that can be hooked into easily.Drollery
I already know the answer. just looking for possible better waysIncendiary
I post this answer after a year fortunately I found this website and it completely solved my problem. LibUsbDotNet is a .NET C# USB libraryIncendiary
Where do you get "YOUR USB Vendor and Product ID"? (from the accepted answer)Lithea
From device manager in my computerIncendiary
Use libusbdotnet it really worksIncendiary
I
7

This is what I did when I had the same problem.

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

Opens a USB device by vendor and product id.

Opens a UsbEndpointReader class for reading.

Reads and displays usb device output from Ep01 until no data is received for 5 seconds.

Innings answered 24/2, 2016 at 17:4 Comment(3)
but really work ? i try with mac and linux to install LibUsbDotNet but its hard to install this library...why ?Kiddy
This works, but how do you get the actual card number? The one that's printed at the back of the card?Arica
I was unable to get this to work. Since my reader comes up as a HID keyboard, it seems that LibUsbDotNet is unable to access it: github.com/libusb/libusb/wiki/…. Unless someone else has found a way to make this work?Unhand
C
1

Please see: How do I read input from a USB HID device?

The device might enumerate as generic HID but might behave like a keyboard. If so, it should just type out the characters it reads. If not, you'll have to poll it from the driver. That link should help.

Cornhusk answered 19/3, 2014 at 20:3 Comment(0)
S
1

If they have given you a SDK with your reader then use it. otherwise you will have to know the hex commands of your reader.Send commands to reader and get response

Satirize answered 2/8, 2014 at 11:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.