Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __CTRFID_driver_H__
00013 #define __CTRFID_driver_H__
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #pragma systemFile
00044
00045 #ifndef __COMMON_H__
00046 #include "drivers/common.h"
00047 #endif
00048
00049
00050 #define CTRFID_I2C_ADDR 0x04
00051
00052
00053 #define CTRFID_FIRM_VER 0x00
00054 #define CTRFID_MAN_NAME 0x08
00055 #define CTRFID_SENS_TYP 0x10
00056 #define CTRFID_STATUS 0x32
00057 #define CTRFID_OFFSET 0x41
00058 #define CTRFID_CMD 0x00
00059 #define CTRFID_BYTE1 0x01
00060 #define CTRFID_BYTE2 0x02
00061 #define CTRFID_BYTE3 0x03
00062 #define CTRFID_BYTE4 0x04
00063 #define CTRFID_BYTE5 0x05
00064 #define CTRFID_SERIAL 0xA0
00065
00066
00067 #define CTRFID_CMD_STOP 0x00
00068
00069 #define CTRFID_CMD_SINGLESHOT 0x01
00070
00071
00072
00073
00074
00075
00076 #define CTRFID_CMD_CONTINUOUS 0x02
00077
00078
00079
00080 #define CTRFID_CMD_BOOTLOADER 0x81
00081 #define CTRFID_CMD_STARTAPPFIRM 0x83
00082
00083
00084
00085
00086 bool CTRFIDinit(tSensors link);
00087 bool CTRFIDsetContinuous(tSensors link);
00088 bool CTRFIDsetSingleShot(tSensors link);
00089 bool CTRFIDreadTransponder (tSensors link, string &transponderID);
00090
00091
00092 bool _CTRFIDsendCommand(tSensors link, ubyte command);
00093 bool _CTRFIDsendDummy(tSensors link);
00094 bool _CTRFIDreadStatus(tSensors link, ubyte &_status);
00095
00096
00097
00098 tByteArray CTRFID_I2CRequest;
00099 tByteArray CTRFID_I2CReply;
00100
00101 bool CTRFIDreadContinuous[4] = {false, false, false, false};
00102 bool CTRFIDinitialised[4] = {false, false, false, false};
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 bool _CTRFIDsendCommand(tSensors link, ubyte command) {
00114 memset(CTRFID_I2CRequest, 0, sizeof(tByteArray));
00115
00116 if (!CTRFIDinitialised[link] && (command != CTRFID_CMD_STARTAPPFIRM))
00117 CTRFIDinit(link);
00118
00119 CTRFID_I2CRequest[0] = 3;
00120 CTRFID_I2CRequest[1] = CTRFID_I2C_ADDR;
00121 CTRFID_I2CRequest[2] = CTRFID_OFFSET + CTRFID_CMD;
00122 CTRFID_I2CRequest[3] = command;
00123
00124 return writeI2C(link, CTRFID_I2CRequest, 0);
00125 }
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 bool _CTRFIDsendDummy(tSensors link) {
00136 memset(CTRFID_I2CRequest, 0, sizeof(tByteArray));
00137
00138 CTRFID_I2CRequest[0] = 1;
00139 CTRFID_I2CRequest[1] = CTRFID_I2C_ADDR;
00140
00141 return writeI2C(link, CTRFID_I2CRequest, 0);
00142 memset(CTRFID_I2CRequest, 0, sizeof(tByteArray));
00143 }
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 bool _CTRFIDreadStatus(tSensors link, ubyte &_status) {
00154 memset(CTRFID_I2CRequest, 0, sizeof(tByteArray));
00155
00156 if(!_CTRFIDsendDummy(link))
00157 return false;
00158
00159 if (!CTRFIDinitialised[link])
00160 CTRFIDinit(link);
00161
00162 if (CTRFIDreadContinuous[link])
00163 return true;
00164
00165 CTRFID_I2CRequest[0] = 2;
00166 CTRFID_I2CRequest[1] = CTRFID_I2C_ADDR;
00167 CTRFID_I2CRequest[2] = CTRFID_STATUS;
00168
00169 if (!writeI2C(link, CTRFID_I2CRequest, 1))
00170 return false;
00171
00172 if (!readI2C(link, CTRFID_I2CReply, 1))
00173 return false;
00174
00175 _status = CTRFID_I2CReply[0];
00176
00177 return true;
00178 }
00179
00180
00181
00182
00183
00184
00185
00186 bool CTRFIDinit(tSensors link) {
00187 if (_CTRFIDsendCommand(link, CTRFID_CMD_STARTAPPFIRM)) {
00188 CTRFIDinitialised[link] = true;
00189 return true;
00190 } else {
00191 return false;
00192 }
00193 }
00194
00195
00196
00197
00198
00199
00200
00201
00202 bool CTRFIDsetContinuous(tSensors link) {
00203 if(!_CTRFIDsendDummy(link))
00204 return false;
00205
00206 if (_CTRFIDsendCommand(link, CTRFID_CMD_CONTINUOUS)) {
00207 CTRFIDreadContinuous[link] = true;
00208 return true;
00209 } else {
00210 return false;
00211 }
00212 }
00213
00214
00215
00216
00217
00218
00219
00220 bool CTRFIDsetSingleShot(tSensors link) {
00221 if(!_CTRFIDsendDummy(link))
00222 return false;
00223
00224 if (_CTRFIDsendCommand(link, CTRFID_CMD_SINGLESHOT)) {
00225 CTRFIDreadContinuous[link] = false;
00226 return true;
00227 } else {
00228 return false;
00229 }
00230 }
00231
00232
00233
00234
00235
00236
00237
00238
00239 bool CTRFIDreadTransponder(tSensors link, string &transponderID) {
00240 ubyte _status;
00241
00242
00243 if(!_CTRFIDsendDummy(link)) {
00244 return false;
00245 }
00246
00247 if (!CTRFIDinitialised[link]) {
00248 CTRFIDinit(link);
00249
00250 wait1Msec(100);
00251 }
00252
00253 if(CTRFIDreadContinuous[link] == false) {
00254
00255 CTRFIDsetSingleShot(link);
00256
00257
00258 wait1Msec(250);
00259 } else {
00260 _CTRFIDreadStatus(link, _status);
00261 if (_status == 0) {
00262 CTRFIDsetContinuous(link);
00263
00264 wait1Msec(250);
00265 }
00266 }
00267
00268
00269 memset(CTRFID_I2CRequest, 0, sizeof(tByteArray));
00270 CTRFID_I2CRequest[0] = 2;
00271 CTRFID_I2CRequest[1] = CTRFID_I2C_ADDR;
00272 CTRFID_I2CRequest[2] = CTRFID_OFFSET + CTRFID_BYTE1;
00273 if (!writeI2C(link, CTRFID_I2CRequest, 5))
00274 return false;
00275
00276 if (!readI2C(link, CTRFID_I2CReply, 5))
00277 return false;
00278
00279
00280
00281
00282 strcpy(transponderID, "");
00283 for (int i=0;i<5;i++) {
00284
00285 StringFormat(transponderID, "%s%02x", transponderID, CTRFID_I2CReply[i]);
00286 }
00287 return true;
00288 }
00289
00290 #endif // __CODATEX_RFID_driver_H__
00291
00292
00293
00294
00295
00296