00001 #ifndef __CPHIDGETRFID
00002 #define __CPHIDGETRFID
00003 #include "cphidget.h"
00004
00011 DPHANDLE(RFID)
00012 CHDRSTANDARD(RFID)
00013
00014 #ifdef DEBUG
00015 #define RFID_HITAGS_SUPPORT
00016 #define RFID_RAWDATA_API_SUPPORT
00017 #endif
00018
00022 typedef enum {
00023 PHIDGET_RFID_PROTOCOL_EM4100 = 1,
00024 PHIDGET_RFID_PROTOCOL_ISO11785_FDX_B,
00025 PHIDGET_RFID_PROTOCOL_PHIDGETS,
00026 #ifdef RFID_HITAGS_SUPPORT
00027 PHIDGET_RFID_PROTOCOL_HITAGS_UID
00028 #endif
00029 } CPhidgetRFID_Protocol;
00030
00036 CHDRGET(RFID,OutputCount,int *count)
00043 CHDRGETINDEX(RFID,OutputState,int *outputState)
00050 CHDRSETINDEX(RFID,OutputState,int outputState)
00057 CHDREVENTINDEX(RFID,OutputChange,int outputState)
00058
00059
00064 CHDRGET(RFID,AntennaOn,int *antennaState)
00070 CHDRSET(RFID,AntennaOn,int antennaState)
00076 CHDRGET(RFID,LEDOn,int *LEDState)
00082 CHDRSET(RFID,LEDOn,int LEDState)
00083
00084
00090 CHDRGET(RFID,LastTag2,char **tagString, CPhidgetRFID_Protocol *protocol)
00096 CHDRGET(RFID,TagStatus,int *status)
00097
00098
00108 PHIDGET21_API int CCONV CPhidgetRFID_write(CPhidgetRFIDHandle phid, char *tagString, CPhidgetRFID_Protocol protocol, int lock);
00109
00116 CHDREVENT(RFID, Tag2, char *tagString, CPhidgetRFID_Protocol protocol)
00123 CHDREVENT(RFID, TagLost2, char *tagString, CPhidgetRFID_Protocol protocol)
00124
00125 #ifndef REMOVE_DEPRECATED
00126 DEP_CHDRGET("Deprecated - use CPhidgetRFID_getOutputCount",RFID,NumOutputs,int *)
00127 DEP_CHDRGET("Deprecated - use CPhidgetRFID_getLastTag2",RFID,LastTag,unsigned char *tag)
00128 DEP_CHDREVENT("Deprecated - use CPhidgetRFID_set_OnTag2_Handler",RFID,Tag,unsigned char *tag)
00129 DEP_CHDREVENT("Deprecated - use CPhidgetRFID_set_OnTagLost2_Handler",RFID,TagLost,unsigned char *tag)
00130 #endif
00131
00132
00133 #if !defined(EXTERNALPROTO) || defined(RFID_HITAGS_SUPPORT)
00134
00135 CHDRSET(RFID,PollingOn,int pollingState)
00136 #endif
00137 #if !defined(EXTERNALPROTO) || defined(RFID_RAWDATA_API_SUPPORT)
00138
00139 PHIDGET21_API int CCONV CPhidgetRFID_writeRaw(CPhidgetRFIDHandle phid, unsigned char *data, int bitlength, int pregap, int space, int postgap, int zero, int one, int prepulse, int eof, int listenDuringEOF);
00140
00141 PHIDGET21_API int CCONV CPhidgetRFID_getRawData(CPhidgetRFIDHandle phid, int *data, int *dataLength);
00142
00143 CHDREVENT(RFID, RawData, int *data, int dataLength)
00144
00145 CHDREVENT(RFID, ManchesterData, unsigned char *data, int dataLength)
00146 #endif
00147
00148 #ifndef EXTERNALPROTO
00149
00150 #define RFID_PACKET_TAG 0
00151 #define RFID_PACKET_OUTPUT_ECHO 1
00152
00153 #define RFID_LED_FLAG 0x04
00154 #define RFID_ANTENNA_FLAG 0x08
00155 #define RFID_LISTEN_DURING_EOF_FLAG 0x10
00156
00157 #define RFID_WRITE_DATA_OUT_PACKET 0x00
00158 #define RFID_CONTROL_OUT_PACKET 0x40
00159
00160 #define RFID_READ_DATA_IN_PACKET 0x00
00161 #define RFID_ECHO_IN_PACKET 0x40
00162
00163 #define RFID_MAX_DATA_PER_PACKET 63
00164
00165 #define RFID_DATA_ARRAY_SIZE 1024
00166 #define RFID_DATA_ARRAY_MASK 0x3ff
00167
00168 #define RFID_MAXOUTPUTS 2
00169
00170
00171
00172 #define RFID_4097_AmpDemod 0x00 //Amplitude demodulation
00173 #define RFID_4097_PhaseDemod 0x01 //Phase demodulation
00174
00175 #define RFID_4097_PowerDown 0x00
00176 #define RFID_4097_Active 0x02
00177
00178 #define RFID_4097_DataOut 0x00 //DATA_OUT is data from the rfid card
00179 #define RFID_4097_ClkOut 0x04 //DATA_OUT is the internal clock/32
00180
00181 #define RFID_4097_IntPLL 0x00
00182 #define RFID_4097_ExtClk 0x08
00183
00184 #define RFID_4097_FastStart 0x10
00185
00186 #define RFID_4097_Gain960 0x40
00187 #define RFID_4097_Gain480 0x00
00188 #define RFID_4097_Gain240 0x60
00189 #define RFID_4097_Gain120 0x20
00190
00191 #define RFID_4097_TestMode 0x80
00192
00193 #define RFID_4097_DefaultON (RFID_4097_AmpDemod | RFID_4097_Active | RFID_4097_DataOut | RFID_4097_IntPLL | RFID_4097_FastStart | RFID_4097_Gain960)
00194
00195
00196
00197 #define RFID_T5577_StartGap 30
00198 #define RFID_T5577_WriteGap 15
00199 #define RFID_T5577_EndGap 15
00200 #define RFID_T5577_Zero 24
00201 #define RFID_T5577_One 56
00202 #define RFID_T5577_EOF 100
00203 #define RFID_T5577_PrePulse (136 + RFID_T5577_Zero)
00204
00205 #ifdef RFID_HITAGS_SUPPORT
00206 typedef enum {
00207 PHIDGET_RFID_TAG_READONLY = 1,
00208 PHIDGET_RFID_TAG_HITAGS
00209 } CPhidgetRFID_TagType;
00210 #endif
00211
00212 typedef enum {
00213 PHIDGET_RFID_ENCODING_MANCHESTER = 1,
00214 PHIDGET_RFID_ENCODING_BIPHASE,
00215 #ifdef RFID_HITAGS_SUPPORT
00216 PHIDGET_RFID_ENCODING_AC
00217 #endif
00218 } CPhidgetRFID_Encoding;
00219
00220 #define RFID_MAX_TAG_STRING_LEN 25
00221 typedef struct _CPhidgetRFID_Tag
00222 {
00223 CPhidgetRFID_Protocol protocol;
00224 char tagString[RFID_MAX_TAG_STRING_LEN];
00225 unsigned char tagData[10];
00226 #ifdef RFID_HITAGS_SUPPORT
00227 CPhidgetRFID_TagType tagType;
00228 #endif
00229 } CPhidgetRFID_Tag, *CPhidgetRFID_TagHandle;
00230
00231 struct _CPhidgetRFID {
00232 CPhidget phid;
00233
00234 int (CCONV *fptrOutputChange)(CPhidgetRFIDHandle, void *, int, int);
00235 int (CCONV *fptrTag)(CPhidgetRFIDHandle, void *, unsigned char *);
00236 int (CCONV *fptrTagLost)(CPhidgetRFIDHandle, void *, unsigned char *);
00237 int (CCONV *fptrTag2)(CPhidgetRFIDHandle, void *, char *, CPhidgetRFID_Protocol);
00238 int (CCONV *fptrTagLost2)(CPhidgetRFIDHandle, void *, char *, CPhidgetRFID_Protocol);
00239
00240 void *fptrOutputChangeptr;
00241 void *fptrTagptr;
00242 void *fptrTagLostptr;
00243 void *fptrTag2ptr;
00244 void *fptrTagLost2ptr;
00245
00246 #ifdef RFID_RAWDATA_API_SUPPORT
00247 int (CCONV *fptrRawData)(CPhidgetRFIDHandle, void *, int *, int);
00248 int (CCONV *fptrManchesterData)(CPhidgetRFIDHandle, void *, unsigned char *, int);
00249 void *fptrRawDataptr;
00250 void *fptrManchesterDataptr;
00251 #endif
00252
00253
00254 unsigned char outputEchoState[RFID_MAXOUTPUTS];
00255 unsigned char antennaEchoState;
00256 unsigned char ledEchoState;
00257 int spaceClocks, pregapClocks, postgapClocks, oneClocks, zeroClocks, prepulseClocks, eofpulseClocks;
00258 unsigned char listenDuringEOF;
00259 int _4097Conf;
00260
00261
00262 unsigned char outputState[RFID_MAXOUTPUTS];
00263 unsigned char antennaState;
00264 unsigned char ledState;
00265 int spaceClocksEcho, pregapClocksEcho, postgapClocksEcho, oneClocksEcho, zeroClocksEcho, prepulseClocksEcho, eofpulseClocksEcho;
00266 unsigned char listenDuringEOFEcho;
00267 int _4097ConfEcho;
00268
00269 unsigned char fullStateEcho;
00270
00271 CThread tagTimerThread;
00272 CThread_mutex_t tagthreadlock;
00273 EVENT tagAvailableEvent;
00274
00275
00276 CPhidgetRFID_Tag lastTag;
00277 unsigned char lastTagValid;
00278 TIME lastTagTime;
00279 unsigned char tagPresent;
00280 CPhidgetRFID_Tag pendingTag;
00281 unsigned char tagEventPending;
00282
00283
00284 int dataBuffer[RFID_DATA_ARRAY_SIZE];
00285 unsigned int dataReadPtr, dataWritePtr;
00286
00287 int shortClocks, longClocks;
00288
00289
00290 unsigned char manBuffer[RFID_DATA_ARRAY_SIZE];
00291 int manReadPtr, manWritePtr;
00292 unsigned char manLockedIn;
00293 unsigned char manShortChange;
00294
00295
00296 unsigned char biphaseBuffer[RFID_DATA_ARRAY_SIZE];
00297 int biphaseReadPtr, biphaseWritePtr;
00298 unsigned char biphaseLockedIn;
00299 unsigned char biphaseShortChange;
00300
00301 #ifdef RFID_HITAGS_SUPPORT
00302 TIME lastDataTime;
00303 unsigned int dataReadACPtr;
00304 TIME hitagReqTime;
00305 unsigned char polling;
00306 unsigned char ACCodingOK;
00307 #endif
00308 #ifdef RFID_RAWDATA_API_SUPPORT
00309 unsigned int userReadPtr;
00310 int manEventReadPtr;
00311 unsigned char lastManEventLong;
00312 #endif
00313
00314
00315 char *remoteWrite;
00316
00317 unsigned char outputPacket[MAX_OUT_PACKET_SIZE];
00318 unsigned int outputPacketLen;
00319
00320 } typedef CPhidgetRFIDInfo;
00321 #endif
00322
00325 #endif