Lab 5 – RFID Reader

In Lab 5, my group was given an RFID reader to get it working by programming it. The point of the RFID reader is when you put a smart label tag in the RFID, the computer is suppose to receive data indicating that the RFID recognized the tag. The RFID has an antenna in the reader which is how it’s able to pick up the data from the tags that you place in the reader. When connected to the computer, it’ll pick up the data. When you disconnect the reader from the computer and plug it back in, the reader gets some sort of bug since it doesn’t work when you plug it back in. It’ll work when you rerun the program and again.

CODE:

// – RFID simple –

// This program simply displays the data that is generated by an RFID phidget in a very simple case and outputs it to the console.
// This simple example covers the basics of connecting and using an RFID phidget.
//
// Copyright 2008 Phidgets Inc.  All rights reserved.
// This work is licensed under the Creative Commons Attribution 2.5 Canada License.
// view a copy of this license, visit http://creativecommons.org/licenses/by/2.5/ca/

#include <stdio.h>
#include <phidget21.h>

int CCONV AttachHandler(CPhidgetHandle RFID, void *userptr)
{
int serialNo;
const char *name;

CPhidget_getDeviceName (RFID, &name);
CPhidget_getSerialNumber(RFID, &serialNo);
printf(“%s %10d attached!\n”, name, serialNo);

return 0;
}

int CCONV DetachHandler(CPhidgetHandle RFID, void *userptr)
{
int serialNo;
const char *name;

CPhidget_getDeviceName (RFID, &name);
CPhidget_getSerialNumber(RFID, &serialNo);
printf(“%s %10d detached!\n”, name, serialNo);

return 0;
}

int CCONV ErrorHandler(CPhidgetHandle RFID, void *userptr, int ErrorCode, const char *unknown)
{
printf(“Error handled. %d – %s\n”, ErrorCode, unknown);
return 0;
}

int CCONV OutputChangeHandler(CPhidgetRFIDHandle RFID, void *usrptr, int Index, int State)
{
if(Index == 0 || Index == 1)
{
printf(“Output: %d > State: %d\n”, Index, State);
}
return 0;
}
//needed for read…?
int CCONV TagHandler(CPhidgetRFIDHandle RFID, void *usrptr, char *TagVal, CPhidgetRFID_Protocol proto)
{
//turn on the Onboard LED
CPhidgetRFID_setLEDOn(RFID, 1);

printf(“Tag Read: %s\n”, TagVal);
return 0;
}
//needed for read…?
int CCONV TagLostHandler(CPhidgetRFIDHandle RFID, void *usrptr, char *TagVal, CPhidgetRFID_Protocol proto)
{
//turn off the Onboard LED

CPhidgetRFID_setLEDOn(RFID, 0);

printf(“Tag Lost: %s\n”, TagVal);
return 0;
}

int rfid_simple()
{
int result;
const char *err;

//Declare an RFID handle
CPhidgetRFIDHandle rfid = 0;

//create the RFID object
CPhidgetRFID_create(&rfid);

//Set the handlers to be run when the device is plugged in or opened from software, unplugged or closed from software, or generates an error.
CPhidget_set_OnAttach_Handler((CPhidgetHandle)rfid, AttachHandler, NULL);
CPhidget_set_OnDetach_Handler((CPhidgetHandle)rfid, DetachHandler, NULL);
CPhidget_set_OnError_Handler((CPhidgetHandle)rfid, ErrorHandler, NULL);

//Registers a callback that will run if an output changes.
//Requires the handle for the Phidget, the function that will be called, and an arbitrary pointer that will be supplied to the callback function (may be NULL).
CPhidgetRFID_set_OnOutputChange_Handler(rfid, OutputChangeHandler, NULL);

//Registers a callback that will run when a Tag is read.
//Requires the handle for the PhidgetRFID, the function that will be called, and an arbitrary pointer that will be supplied to the callback function (may be NULL).
CPhidgetRFID_set_OnTag2_Handler(rfid, TagHandler, NULL);

//Registers a callback that will run when a Tag is lost (removed from antenna read range).
//Requires the handle for the PhidgetRFID, the function that will be called, and an arbitrary pointer that will be supplied to the callback function (may be NULL).
CPhidgetRFID_set_OnTagLost2_Handler(rfid, TagLostHandler, NULL);

//open the RFID for device connections
CPhidget_open((CPhidgetHandle)rfid, -1);

//get the program to wait for an RFID device to be attached
printf(“Waiting for RFID to be attached….”);
if((result = CPhidget_waitForAttachment((CPhidgetHandle)rfid, 10000)))
{
CPhidget_getErrorDescription(result, &err);
printf(“Problem waiting for attachment: %s\n”, err);
return 0;
}

CPhidgetRFID_setAntennaOn(rfid, 1);

//read RFID event data
printf(“Reading…..\n”);

//keep displaying RFID event data until user input is read
printf(“Press any key to continue\n”);
getchar();

printf(“Press any key to end\n”);
getchar();

//since user input has been read, this is a signal to terminate the program so we will close the phidget and delete the object we created
printf(“Closing…\n”);
CPhidget_close((CPhidgetHandle)rfid);
CPhidget_delete((CPhidgetHandle)rfid);

//all done, exit
return 0;
}

int main(int argc, char* argv[])
{
rfid_simple();
return 0;
}

SCREENSHOTS:

Displaying RFID_cantread_after_detach_then_atach.png

The screenshot to the right shows when the you connect and disconnect the reader where the slight bug occurs.

Displaying RFID_Read_then_exit.png

Welcome!

This is the first post on your Learning Blog. Edit or delete it, then start blogging!

The ePortfolio is both a Learning Blog and an Academic Career Portfolio. Use the Learning Blog to document your learning experiences and class assignments each semester. As time goes by, add content to the Academics and Career sections to show your department, graduate institutions, or future employers how well prepared you are for your chosen career.

NOTE: Remember to add appropriate Categories and Tags to your posts. This will help your professors and other visitors find the content they are looking for. The Categories “Coursework” and “Field Trips” and the Tags “OpenLab” and “City Tech” have already been applied to this post. Feel free to make changes!