From 0b624384cd52be20e61284551d832b499d7b7707 Mon Sep 17 00:00:00 2001 From: Jonathan McCrohan Date: Sat, 14 Apr 2012 12:56:48 +0100 Subject: Imported Upstream version 2.1.8.20120216 --- cphidgetrfid.h | 331 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 cphidgetrfid.h (limited to 'cphidgetrfid.h') diff --git a/cphidgetrfid.h b/cphidgetrfid.h new file mode 100644 index 0000000..f056dd3 --- /dev/null +++ b/cphidgetrfid.h @@ -0,0 +1,331 @@ +#ifndef __CPHIDGETRFID +#define __CPHIDGETRFID +#include "cphidget.h" + +/** \defgroup phidrfid Phidget RFID + * \ingroup phidgets + * Calls specific to the Phidget RFID. See the product manual for more specific API details, supported functionality, units, etc. + * @{ + */ + +DPHANDLE(RFID) +CHDRSTANDARD(RFID) + +/** + * Gets the number of outputs supported by this board. + * @param phid An attached phidget rfid handle. + * @param count The output count. + */ +CHDRGET(RFID,OutputCount,int *count) +/** + * Gets the state of an output. + * @param phid An attached phidget rfid handle. + * @param index The output index. + * @param outputState The output state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGETINDEX(RFID,OutputState,int *outputState) +/** + * Sets the state of an output. + * @param phid An attached phidget rfid handle. + * @param index The output index. + * @param outputState The output state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRSETINDEX(RFID,OutputState,int outputState) +/** + * Set an output change handler. This is called when an output changes. + * @param phid An attached phidget rfid handle. + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENTINDEX(RFID,OutputChange,int outputState) + +/** + * Gets the state of the antenna. + * @param phid An attached phidget rfid handle. + * @param antennaState The antenna state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGET(RFID,AntennaOn,int *antennaState) +/** + * Sets the state of the antenna. Note that the antenna must be enabled before tags will be read. + * @param phid An attached phidget rfid handle. + * @param antennaState The antenna state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRSET(RFID,AntennaOn,int antennaState) +/** + * Gets the state of the onboard LED. + * @param phid An attached phidget rfid handle. + * @param LEDState The LED state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGET(RFID,LEDOn,int *LEDState) +/** + * Sets the state of the onboard LED. + * @param phid An attached phidget rfid handle. + * @param LEDState The LED state. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRSET(RFID,LEDOn,int LEDState) + +/** + * Gets the last tag read by the reader. This tag may or may not still be on the reader. + * @param phid An attached phidget rfid handle. + * @param tag The tag. This must be an unsigned char array of size 5. + */ +CHDRGET(RFID,LastTag,unsigned char *tag) +/** + * Gets the tag present status. This is whether or not a tag is being read by the reader. + * @param phid An attached phidget rfid handle. + * @param status The tag status. Possible values are \ref PTRUE and \ref PFALSE. + */ +CHDRGET(RFID,TagStatus,int *status) +/** + * Set a tag handler. This is called when a tag is first detected by the reader. + * @param phid An attached phidget rfid handle. + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENT(RFID,Tag,unsigned char *tag) +/** + * Set a tag lost handler. This is called when a tag is no longer detected by the reader. + * @param phid An attached phidget rfid handle. + * @param fptr Callback function pointer. + * @param userPtr A pointer for use by the user - this value is passed back into the callback function. + */ +CHDREVENT(RFID,TagLost,unsigned char *tag) + +#ifndef REMOVE_DEPRECATED +DEP_CHDRGET("Deprecated - use CPhidgetRFID_getOutputCount",RFID,NumOutputs,int *) +#endif + +//These are for a prototype device - hide until it's released +#if !defined(EXTERNALPROTO) || defined(DEBUG) + +typedef enum { + PHIDGET_RFID_ENCODING_MANCHESTER = 1, + PHIDGET_RFID_ENCODING_BIPHASE, + PHIDGET_RFID_ENCODING_AC +} CPhidgetRFID_Encoding; + +typedef enum { + PHIDGET_RFID_TAG_ISO11784 = 1, + PHIDGET_RFID_TAG_EM4102, + PHIDGET_RFID_TAG_HITAGS +} CPhidgetRFID_TagType; + +typedef struct _CPhidgetRFID_TagInfo +{ + int bitRate; + CPhidgetRFID_TagType tagType; + CPhidgetRFID_Encoding encoding; +} CPhidgetRFID_TagInfo, *CPhidgetRFID_TagInfoHandle; + +typedef struct _CPhidgetRFID_TagOptions +{ + unsigned char writable; + unsigned char encrypted; + int memSize; +} CPhidgetRFID_TagOptions, *CPhidgetRFID_TagOptionsHandle; + + +CHDRSET(RFID,PollingOn,int pollingState) + +PHIDGET21_API int CCONV CPhidgetRFID_writeRaw(CPhidgetRFIDHandle phid, unsigned char *data, int bitlength, int pregap, int space, int postgap, int zero, int one); +PHIDGET21_API int CCONV CPhidgetRFID_getRawData(CPhidgetRFIDHandle phid, int *data, int *dataLength); + +PHIDGET21_API int CCONV CPhidgetRFID_getTagOptions(CPhidgetRFIDHandle phid, char *tagString, CPhidgetRFID_TagOptionsHandle options); +PHIDGET21_API int CCONV CPhidgetRFID_read(CPhidgetRFIDHandle phid, char *tagString, unsigned char *data, int *dataLength, char *password); +PHIDGET21_API int CCONV CPhidgetRFID_write(CPhidgetRFIDHandle phid, char *tagString, unsigned char *data, int dataLength, int offset, char *password); + +CHDREVENT(RFID, RawData, int *data, int dataLength) +CHDREVENT(RFID, ManchesterData, unsigned char *data, int dataLength) +CHDREVENT(RFID, TagAdvanced, char *tagString, CPhidgetRFID_TagInfoHandle tagInfo) +CHDREVENT(RFID, TagLostAdvanced, char *tagString, CPhidgetRFID_TagInfoHandle tagInfo) + +#endif + +#ifndef EXTERNALPROTO + +#define RFID_PACKET_TAG 0 +#define RFID_PACKET_OUTPUT_ECHO 1 + +#define RFID_LED_FLAG 0x04 +#define RFID_ANTENNA_FLAG 0x08 + +//RFID Advanced Constants +#define RFID_WRITE_DATA_OUT_PACKET 0x00 +#define RFID_CONTROL_OUT_PACKET 0x80 + +#define RFID_READ_DATA_IN_PACKET 0x00 +#define RFID_ECHO_IN_PACKET 0x80 + +//4097 constants +#define RFID_4097_AmpDemod 0x00 //Amplitude demodulation +#define RFID_4097_PhaseDemod 0x01 //Phase demodulation + +#define RFID_4097_PowerDown 0x00 +#define RFID_4097_Active 0x02 + +#define RFID_4097_DataOut 0x00 //DATA_OUT is data from the rfid card +#define RFID_4097_ClkOut 0x04 //DATA_OUT is the internal clock/32 + +#define RFID_4097_IntPLL 0x00 +#define RFID_4097_ExtClk 0x08 + +#define RFID_4097_FastStart 0x10 + +#define RFID_4097_Gain960 0x40 +#define RFID_4097_Gain480 0x00 +#define RFID_4097_Gain240 0x60 +#define RFID_4097_Gain120 0x20 + +#define RFID_4097_TestMode 0x80 + +#define RFID_MAX_DATA_PER_PACKET 62 + +#define RFID_DATA_ARRAY_SIZE 2048 +#define RFID_DATA_ARRAY_MASK 0x7ff + +#define RFID_MAXOUTPUTS 2 + +typedef enum _CPhidgetRFID_Hitag_State +{ + RFID_HITAG_STATE_NONE = 0, + RFID_HITAG_STATE_UID_REQUEST, + RFID_HITAG_STATE_AC_SEQUENCE, + RFID_HITAG_STATE_SELECT, + RFID_HITAG_STATE_READ, + RFID_HITAG_STATE_WRITE + +} CPhidgetRFID_Hitag_State; + +typedef struct _CPhidgetRFID_Tag +{ + char tagString[256]; + CPhidgetRFID_TagInfo tagInfo; + TIME lastTagTime; + unsigned char tagEventPending; + unsigned char tagOptionsValid; + CPhidgetRFID_TagOptions tagOptions; + unsigned char tagDataValid; + unsigned char tagData[256]; +} CPhidgetRFID_Tag, *CPhidgetRFID_TagHandle; + +typedef struct _CPhidgetRFID_TagList +{ + struct _CPhidgetRFID_TagList *next; + CPhidgetRFID_TagHandle tag; +} CPhidgetRFID_TagList, *CPhidgetRFID_TagListHandle; + +typedef struct _CPhidgetRFID_HitagAC +{ + unsigned char uid[4]; + int colPos; +} CPhidgetRFID_HitagAC, *CPhidgetRFID_HitagACHandle; + +typedef struct _CPhidgetRFID_HitagACList +{ + struct _CPhidgetRFID_HitagACList *next; + CPhidgetRFID_HitagACHandle hitagAC; +} CPhidgetRFID_HitagACList, *CPhidgetRFID_HitagACListHandle; + +struct _CPhidgetRFID { + CPhidget phid; + + int (CCONV *fptrOutputChange)(CPhidgetRFIDHandle, void *, int, int); + int (CCONV *fptrTag)(CPhidgetRFIDHandle, void *, unsigned char *); + int (CCONV *fptrTagLost)(CPhidgetRFIDHandle, void *, unsigned char *); + int (CCONV *fptrRawData)(CPhidgetRFIDHandle, void *, int *, int); + int (CCONV *fptrManchesterData)(CPhidgetRFIDHandle, void *, unsigned char *, int); + int (CCONV *fptrTagAdvanced)(CPhidgetRFIDHandle, void *, char *, CPhidgetRFID_TagInfoHandle); + int (CCONV *fptrTagLostAdvanced)(CPhidgetRFIDHandle, void *, char *, CPhidgetRFID_TagInfoHandle); + + void *fptrOutputChangeptr; + void *fptrTagptr; + void *fptrTagLostptr; + void *fptrRawDataptr; + void *fptrManchesterDataptr; + void *fptrTagAdvancedptr; + void *fptrTagLostAdvancedptr; + + // Values returned from the device + unsigned char outputEchoState[RFID_MAXOUTPUTS]; + unsigned char antennaEchoState; + unsigned char ledEchoState; + + unsigned char outputState[RFID_MAXOUTPUTS]; + unsigned char antennaState; + unsigned char ledState; + + unsigned char lastTag[5]; + unsigned char lastTagValid; + TIME lastTagTime; + unsigned char tagPresent; + //unsigned char tagEvent; + unsigned char pendingTag[5]; + unsigned char tagEventPending; + + EVENT tagAvailableEvent; + + void *respData; + int respStatus; + EVENT respEvent; + EVENT respEvent2; + + //Advanced Tag Events + int tagAdvancedCount; + CThread_mutex_t tagthreadlock; /* protects tag thread access to things */ + CPhidgetRFID_TagListHandle tagAdvancedList; + CPhidgetRFID_Tag lastTagAdvanced; + TIME lastDataTime; + TIME hitagReqTime; + + unsigned char ACCodingOK; + + unsigned char fullStateEcho; + + CThread tagTimerThread; + + //RFID Advanced stuff + int spaceClocks, pregapClocks, postgapClocks, oneClocks, zeroClocks; + int spaceClocksEcho, pregapClocksEcho, postgapClocksEcho, oneClocksEcho, zeroClocksEcho; + int _4097Conf, _4097ConfEcho; + int frequencyEcho; + + int dataBuffer[RFID_DATA_ARRAY_SIZE]; + int dataBufferNormalized[RFID_DATA_ARRAY_SIZE]; + unsigned int dataReadPtr, dataWritePtr, dataReadACPtr; + unsigned int userReadPtr; //for the getRawData function + + unsigned char manBuffer[RFID_DATA_ARRAY_SIZE]; + int manReadPtr, manWritePtr; + + unsigned char biphaseBuffer[RFID_DATA_ARRAY_SIZE]; + int biphaseReadPtr, biphaseWritePtr; + + unsigned char manLockedIn; + unsigned char manShortChange; + + unsigned char biphaseLockedIn; + unsigned char biphaseShortChange; + + int one, two; + int oneCount, twoCount; + + CPhidgetRFID_Hitag_State hitagState; + int hitagOffset; + + //Hitag AC queue + CPhidgetRFID_HitagACListHandle hitagACList; + CPhidgetRFID_HitagAC lastHitagAC; + + unsigned char atGap, polling; + + unsigned char outputPacket[8]; + unsigned int outputPacketLen; + + int manEventReadPtr; + +} typedef CPhidgetRFIDInfo; +#endif + +/** @} */ + +#endif -- cgit v1.2.3