00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #if !defined(_FEDM_NO_TAG_HANDLER_EPC_C1_G2)
00036
00037 #include "FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A.h"
00038 #include "../FEDM_ISCReader.h"
00039 #include "../FEDM_ISOTabItem.h"
00040 #include "../FEDM_ISCReaderID.h"
00041 #include "../FEDM_ISC.h"
00042 #include "../../FEDM_Functions.h"
00043
00044
00045 #if _MSC_VER >= 1400
00046 #pragma warning(disable : 4996)
00047 #endif
00048
00049
00050 #if _MSC_VER <= 1200 // for Visual Studio 6
00051
00052 static const unsigned char PW_LEVEL_SYSTEM = 0x01;
00053 static const unsigned char PW_LEVEL_USER = 0x02;
00054 static const unsigned char PW_LEVEL_MEASUREMENT = 0x03;
00055
00056 static const unsigned char LOG_MODE_DENSE = 0x00;
00057 static const unsigned char LOG_MODE_ALL_VALUES_OUT_OF_LIMITS = 0x01;
00058 static const unsigned char LOG_MODE_LIMITS_CROSSING = 0x03;
00059 static const unsigned char LOG_MODE_IRQ_EXT1 = 0x05;
00060 static const unsigned char LOG_MODE_IRQ_EXT2 = 0x06;
00061 static const unsigned char LOG_MODE_IRQ_EXT1_EXT2 = 0x07;
00062
00063 static const unsigned char SUB_CMD_READ_FIFO = 0x04;
00064 static const unsigned char SUB_CMD_WRITE_FIFO = 0x05;
00065 static const unsigned char SUB_CMD_READ_STATUS = 0x06;
00066 #endif
00067
00068
00069
00070
00071
00072
00073
00074 FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A(
00075 FEDM_ISCReader* pReader,
00076 FEDM_ISOTabItem* pTabItem )
00077 : FedmIscTagHandler_EPC_Class1_Gen2(pReader, FedmIscTagHandler::TYPE_EPC_CLASS1_GEN2_IDS_SL900A, pTabItem)
00078 {
00079 m_sTagName = "EPC_Class1_Gen2 : IDS SL900A";
00080 Init();
00081 }
00082
00083 FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A(
00084 FEDM_ISCReader* pReader,
00085 unsigned int uiTagHandlerType,
00086 FEDM_ISOTabItem* pTabItem )
00087 : FedmIscTagHandler_EPC_Class1_Gen2(pReader, uiTagHandlerType, pTabItem)
00088 {
00089 m_sTagName = "EPC_Class1_Gen2 : IDS SL900A";
00090 Init();
00091 }
00092
00093 FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::~FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A()
00094 {
00095 }
00096
00097
00098 void FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::Init()
00099 {
00100 FedmIscTagHandler_EPC_Class1_Gen2::Init();
00101
00102 m_ucTagError = 0;
00103 }
00104
00105 unsigned char FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetTagError()
00106 {
00107 return m_ucTagError;
00108 }
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetPassword(
00126 string sAccessPassword,
00127 unsigned char ucPasswordLevel,
00128 string sPassword )
00129 {
00130 int iBack = 0;
00131 int iErr = 0;
00132
00133 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA0));
00134 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00135
00136 if(m_bNonAddressedMode)
00137 {
00138 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00139 }
00140 else if(m_pTabItem->m_bIsSelected)
00141 {
00142 return FEDM_ERROR_UNSUPPORTED;
00143 }
00144 else
00145 {
00146 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00147 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00148 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00149 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00150 }
00151
00152 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00153 if(sAccessPassword.length() > 0)
00154 {
00155 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00156 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00157 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00158 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00159 }
00160 else
00161 {
00162 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00163 }
00164
00165 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_PASSWORD_LEVEL, ucPasswordLevel));
00166 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_PASSWORD, sPassword));
00167
00168 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00169
00170
00171 iBack = m_pReader->SendProtocol(0xB4);
00172 if(iBack == 0x95)
00173 {
00174 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00175 }
00176
00177 return iBack;
00178 }
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetLogMode(
00197 string sAccessPassword,
00198 LOG_MODE* pLogMode,
00199 LOG_INTERVAL* pLogInterval )
00200 {
00201 int iBack = 0;
00202 int iErr = 0;
00203 unsigned int uiLogMode = 0;
00204
00205 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA1));
00206 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00207
00208 if(m_bNonAddressedMode)
00209 {
00210 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00211 }
00212 else if(m_pTabItem->m_bIsSelected)
00213 {
00214 return FEDM_ERROR_UNSUPPORTED;
00215 }
00216 else
00217 {
00218 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00219 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00220 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00221 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00222 }
00223
00224 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00225 if(sAccessPassword.length() > 0)
00226 {
00227 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00228 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00229 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00230 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00231 }
00232 else
00233 {
00234 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00235 }
00236
00237
00238 uiLogMode = ((pLogInterval->uiLogInterval & 0x00007FFF) << 1);
00239 if(pLogMode->bBatteryCheck)
00240 uiLogMode |= 0x00010000;
00241 if(pLogMode->bTemperatureSensor)
00242 uiLogMode |= 0x00020000;
00243 if(pLogMode->bExternalSensor1)
00244 uiLogMode |= 0x00040000;
00245 if(pLogMode->bExternalSensor2)
00246 uiLogMode |= 0x00080000;
00247 if(pLogMode->bStorageRule)
00248 uiLogMode |= 0x00100000;
00249 uiLogMode |= (((unsigned int)(pLogMode->ucLogginForm & 0x07)) << 21);
00250
00251 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_LOG_MODE, uiLogMode));
00252
00253 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00254
00255
00256 iBack = m_pReader->SendProtocol(0xB4);
00257 if(iBack == 0x95)
00258 {
00259 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00260 }
00261
00262 return iBack;
00263 }
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetLogLimits(
00281 string sAccessPassword,
00282 LIMITS* pLogLimits )
00283 {
00284 int iBack = 0;
00285 int iErr = 0;
00286 unsigned char ucLogLimits[5];
00287
00288 memset(ucLogLimits, 0, 5);
00289
00290 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA2));
00291 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00292
00293 if(m_bNonAddressedMode)
00294 {
00295 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00296 }
00297 else if(m_pTabItem->m_bIsSelected)
00298 {
00299 return FEDM_ERROR_UNSUPPORTED;
00300 }
00301 else
00302 {
00303 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00304 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00305 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00306 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00307 }
00308
00309 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00310 if(sAccessPassword.length() > 0)
00311 {
00312 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00313 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00314 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00315 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00316 }
00317 else
00318 {
00319 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00320 }
00321
00322
00323 ucLogLimits[4] = (unsigned char) (pLogLimits->uiExtremeUpperLimit & 0x00FF);
00324 ucLogLimits[3] = (unsigned char)((pLogLimits->uiExtremeUpperLimit & 0x0300)>>8);
00325 ucLogLimits[3] |= (unsigned char)((pLogLimits->uiUpperLimit & 0x003F)<<2);
00326 ucLogLimits[2] = (unsigned char)((pLogLimits->uiUpperLimit & 0x03C0)>>6);
00327 ucLogLimits[2] |= (unsigned char)((pLogLimits->uiLowerLimit & 0x000F)<<4);
00328 ucLogLimits[1] = (unsigned char)((pLogLimits->uiLowerLimit & 0x03F0)>>4);
00329 ucLogLimits[1] |= (unsigned char)((pLogLimits->uiExtremeLowerLimit & 0x0003)<<6);
00330 ucLogLimits[0] = (unsigned char)((pLogLimits->uiExtremeLowerLimit & 0x03FC)>>2);
00331
00332 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_LOG_LIMITS, ucLogLimits, 5));
00333
00334 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00335
00336
00337 iBack = m_pReader->SendProtocol(0xB4);
00338 if(iBack == 0x95)
00339 {
00340 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00341 }
00342
00343 return iBack;
00344 }
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetMeasurementSetup(
00367 string sAccessPassword,
00368 START_TIME* pStartTime,
00369 LIMITS* pLogLimits,
00370 LOG_MODE* pLogMode,
00371 LOG_INTERVAL* pLogInterval,
00372 DELAY_TIME* pDelayTime,
00373 APP_DATA* pAppData )
00374 {
00375 int iBack = 0;
00376 int iErr = 0;
00377 unsigned int uiStartTime = 0;
00378 unsigned char ucLogLimits[5];
00379 unsigned char ucLogMode = 0;
00380 unsigned int uiLogInterval = 0;
00381 unsigned int uiDelayTime = 0;
00382 unsigned int uiAppData = 0;
00383
00384 memset(ucLogLimits, 0, 5);
00385
00386 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA3));
00387 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00388
00389 if(m_bNonAddressedMode)
00390 {
00391 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00392 }
00393 else if(m_pTabItem->m_bIsSelected)
00394 {
00395 return FEDM_ERROR_UNSUPPORTED;
00396 }
00397 else
00398 {
00399 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00400 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00401 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00402 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00403 }
00404
00405 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00406 if(sAccessPassword.length() > 0)
00407 {
00408 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00409 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00410 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00411 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00412 }
00413 else
00414 {
00415 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00416 }
00417
00418 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00419
00420
00421 iBack = m_pReader->SendProtocol(0xB4);
00422 if(iBack == 0)
00423 {
00424
00425 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_START_TIME, &uiStartTime));
00426 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_LOG_LIMITS, ucLogLimits, 5));
00427 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_LOG_MODE, &ucLogMode));
00428 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_LOG_INTERVAL, &uiLogInterval));
00429 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_DELAY_TIME, &uiDelayTime));
00430 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_APP_DATA, &uiAppData));
00431
00432 pStartTime->ucSecond = (unsigned char) (uiStartTime & 0x0000003F);
00433 pStartTime->ucMinute = (unsigned char)((uiStartTime >> 6) & 0x0000003F);
00434 pStartTime->ucHour = (unsigned char)((uiStartTime >> 12) & 0x0000001F);
00435 pStartTime->ucDay = (unsigned char)((uiStartTime >> 17) & 0x0000001F);
00436 pStartTime->ucMonth = (unsigned char)((uiStartTime >> 22) & 0x0000000F);
00437 pStartTime->ucYear = (unsigned char)((uiStartTime >> 26) & 0x0000003F);
00438
00439 pLogLimits->uiExtremeUpperLimit = (unsigned int) ucLogLimits[4];
00440 pLogLimits->uiExtremeUpperLimit |= (((unsigned int)(ucLogLimits[3] & 0x03)) << 8);
00441 pLogLimits->uiUpperLimit = (((unsigned int)(ucLogLimits[3] & 0xFC)) >> 2);
00442 pLogLimits->uiUpperLimit |= (((unsigned int)(ucLogLimits[2] & 0x0F)) << 6);
00443 pLogLimits->uiLowerLimit = (((unsigned int)(ucLogLimits[2] & 0xF0)) >> 4);
00444 pLogLimits->uiLowerLimit |= (((unsigned int)(ucLogLimits[1] & 0x3F)) << 4);
00445 pLogLimits->uiExtremeLowerLimit = (((unsigned int)(ucLogLimits[1] & 0xC0)) >> 6);
00446 pLogLimits->uiExtremeLowerLimit |= (((unsigned int)ucLogLimits[0]) << 2);
00447
00448 if(ucLogMode & 0x01)
00449 pLogMode->bBatteryCheck = true;
00450 else
00451 pLogMode->bBatteryCheck = false;
00452
00453 if(ucLogMode & 0x02)
00454 pLogMode->bTemperatureSensor = true;
00455 else
00456 pLogMode->bTemperatureSensor = false;
00457
00458 if(ucLogMode & 0x04)
00459 pLogMode->bExternalSensor1 = true;
00460 else
00461 pLogMode->bExternalSensor1 = false;
00462
00463 if(ucLogMode & 0x08)
00464 pLogMode->bExternalSensor2 = true;
00465 else
00466 pLogMode->bExternalSensor2 = false;
00467
00468 if(ucLogMode & 0x10)
00469 pLogMode->bStorageRule = true;
00470 else
00471 pLogMode->bStorageRule = false;
00472
00473 pLogMode->ucLogginForm = ((ucLogMode & 0xE0) >> 5);
00474
00475 pLogInterval->uiLogInterval = ((uiLogInterval & 0x0000FFFE) >> 1);
00476
00477 if(uiDelayTime & 0x00000001)
00478 pDelayTime->bTimer = true;
00479 else
00480 pDelayTime->bTimer = false;
00481
00482 if(uiDelayTime & 0x00000002)
00483 pDelayTime->bDelayMode_External = true;
00484 else
00485 pDelayTime->bDelayMode_External = false;
00486
00487 pDelayTime->uiDelayTime = ((uiDelayTime & 0x0000FFF0) >> 4);
00488
00489 pAppData->ucBrokenWordPointer = (uiAppData & 0x00000007);
00490 pAppData->uiNoOfWordsForAppData = ((uiAppData & 0x0000FF80) >> 7);
00491 }
00492 else if(iBack == 0x95)
00493 {
00494 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00495 }
00496
00497 return iBack;
00498 }
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetSFEData(
00516 string sAccessPassword,
00517 SFE_PARAMETERS* pSfeData )
00518 {
00519 int iBack = 0;
00520 int iErr = 0;
00521 unsigned int uiSfeData = 0;
00522
00523 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA4));
00524 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00525
00526 if(m_bNonAddressedMode)
00527 {
00528 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00529 }
00530 else if(m_pTabItem->m_bIsSelected)
00531 {
00532 return FEDM_ERROR_UNSUPPORTED;
00533 }
00534 else
00535 {
00536 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00537 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00538 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00539 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00540 }
00541
00542 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00543 if(sAccessPassword.length() > 0)
00544 {
00545 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00546 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00547 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00548 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00549 }
00550 else
00551 {
00552 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00553 }
00554
00555 uiSfeData = (unsigned int)(pSfeData->ucVerifySensorID & 0x03);
00556 if(pSfeData->bAutoRangePreset)
00557 uiSfeData |= 0x00000004;
00558
00559 uiSfeData |= (((unsigned int)(pSfeData->ucSext2 & 0x01)) << 3);
00560 uiSfeData |= (((unsigned int)(pSfeData->ucSext1 & 0x03)) << 4);
00561 uiSfeData |= (((unsigned int)(pSfeData->ucSeti & 0x1F)) << 6);
00562 uiSfeData |= (((unsigned int)(pSfeData->ucRang & 0x1F)) << 11);
00563
00564 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_SFE_PARA, uiSfeData));
00565
00566 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00567
00568
00569 iBack = m_pReader->SendProtocol(0xB4);
00570 if(iBack == 0x95)
00571 {
00572 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00573 }
00574
00575 return iBack;
00576 }
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetCalibrationData(
00594 string sAccessPassword,
00595 CALIBRATION* pCalData )
00596 {
00597 int iBack = 0;
00598 int iErr = 0;
00599 __int64 i64CalibrationData = 0;
00600
00601 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA5));
00602 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00603
00604 if(m_bNonAddressedMode)
00605 {
00606 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00607 }
00608 else if(m_pTabItem->m_bIsSelected)
00609 {
00610 return FEDM_ERROR_UNSUPPORTED;
00611 }
00612 else
00613 {
00614 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00615 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00616 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00617 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00618 }
00619
00620 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00621 if(sAccessPassword.length() > 0)
00622 {
00623 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00624 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00625 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00626 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00627 }
00628 else
00629 {
00630 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00631 }
00632
00633 i64CalibrationData = (__int64)(pCalData->ucRefTc & 0x0F);
00634 i64CalibrationData |= (((__int64)(pCalData->ucOffInt & 0x7F)) << 7);
00635 i64CalibrationData |= (((__int64)(pCalData->ucRingCall & 0x1F)) << 14);
00636 i64CalibrationData |= (((__int64)(pCalData->ucIRLev & 0x03)) << 19);
00637 i64CalibrationData |= (((__int64)(pCalData->ucSelp22 & 0x03)) << 21);
00638 if(pCalData->bSwExtEn)
00639 i64CalibrationData |= (((__int64)1) << 23);
00640 i64CalibrationData |= (((__int64)pCalData->ucDf) << 24);
00641 i64CalibrationData |= (((__int64)(pCalData->ucAdf & 0x1F)) << 32);
00642 i64CalibrationData |= (((__int64)(pCalData->ucSelp12 & 0x03)) << 37);
00643 if(pCalData->bGndSwitch)
00644 i64CalibrationData |= (((__int64)1) << 39);
00645 i64CalibrationData |= (((__int64)(pCalData->ucCoars2 & 0x07)) << 40);
00646 i64CalibrationData |= (((__int64)(pCalData->ucAd2 & 0x1F)) << 43);
00647 i64CalibrationData |= (((__int64)(pCalData->ucCoars1 & 0x07)) << 48);
00648 i64CalibrationData |= (((__int64)(pCalData->ucAd1 & 0x1F)) << 51);
00649
00650 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_CAL_DATA, i64CalibrationData));
00651
00652 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00653
00654
00655 iBack = m_pReader->SendProtocol(0xB4);
00656 if(iBack == 0x95)
00657 {
00658 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00659 }
00660
00661 return iBack;
00662 }
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::EndLog(
00679 string sAccessPassword)
00680 {
00681 int iBack = 0;
00682 int iErr = 0;
00683
00684 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA6));
00685 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00686
00687 if(m_bNonAddressedMode)
00688 {
00689 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00690 }
00691 else if(m_pTabItem->m_bIsSelected)
00692 {
00693 return FEDM_ERROR_UNSUPPORTED;
00694 }
00695 else
00696 {
00697 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00698 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00699 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00700 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00701 }
00702
00703 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00704 if(sAccessPassword.length() > 0)
00705 {
00706 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00707 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00708 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00709 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00710 }
00711 else
00712 {
00713 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00714 }
00715
00716 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00717
00718
00719 iBack = m_pReader->SendProtocol(0xB4);
00720 if(iBack == 0x95)
00721 {
00722 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00723 }
00724
00725 return iBack;
00726 }
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::StartLog(
00744 string sAccessPassword,
00745 START_TIME* pStartTime )
00746 {
00747 int iBack = 0;
00748 int iErr = 0;
00749 unsigned int uiStartTime = 0;
00750
00751 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA7));
00752 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00753
00754 if(m_bNonAddressedMode)
00755 {
00756 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00757 }
00758 else if(m_pTabItem->m_bIsSelected)
00759 {
00760 return FEDM_ERROR_UNSUPPORTED;
00761 }
00762 else
00763 {
00764 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00765 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00766 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00767 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00768 }
00769
00770 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00771 if(sAccessPassword.length() > 0)
00772 {
00773 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00774 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00775 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00776 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00777 }
00778 else
00779 {
00780 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00781 }
00782
00783
00784 uiStartTime = (pStartTime->ucSecond & 0x3F);
00785 uiStartTime |= (((unsigned int)(pStartTime->ucMinute & 0x3F)) << 6);
00786 uiStartTime |= (((unsigned int)(pStartTime->ucHour & 0x1F)) << 12);
00787 uiStartTime |= (((unsigned int)(pStartTime->ucDay & 0x1F)) << 17);
00788 uiStartTime |= (((unsigned int)(pStartTime->ucMonth & 0x0F)) << 22);
00789 uiStartTime |= (((unsigned int)(pStartTime->ucYear & 0x3F)) << 26);
00790
00791 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_START_TIME, uiStartTime));
00792
00793 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00794
00795
00796 iBack = m_pReader->SendProtocol(0xB4);
00797 if(iBack == 0x95)
00798 {
00799 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00800 }
00801
00802 return iBack;
00803 }
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetLogState(
00826 string sAccessPassword,
00827 LIMITS_COUNTER* pLimitsCounter,
00828 SYSTEM_STATUS* pSystemStatus,
00829 SHELF_LIFE_0* pSF0,
00830 SHELF_LIFE_1* pSF1,
00831 unsigned int& uiCurrentShelfLife,
00832 unsigned char& ucStatusFlags )
00833 {
00834 int iBack = 0;
00835 int iErr = 0;
00836 unsigned int uiSystemStatus = 0;
00837 unsigned int uiLimitsCounter = 0;
00838 unsigned int uiSF0 = 0;
00839 unsigned int uiSF1 = 0;
00840
00841 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA8));
00842 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00843
00844 if(m_bNonAddressedMode)
00845 {
00846 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00847 }
00848 else if(m_pTabItem->m_bIsSelected)
00849 {
00850 return FEDM_ERROR_UNSUPPORTED;
00851 }
00852 else
00853 {
00854 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00855 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00856 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00857 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00858 }
00859
00860 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00861 if(sAccessPassword.length() > 0)
00862 {
00863 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00864 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00865 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00866 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00867 }
00868 else
00869 {
00870 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00871 }
00872
00873 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00874
00875
00876 iBack = m_pReader->SendProtocol(0xB4);
00877 if(iBack == 0)
00878 {
00879
00880 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_LIMITS_COUNTER, &uiLimitsCounter));
00881 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_SYSTEM_STATUS, &uiSystemStatus));
00882 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_SL_BLOCK_0, &uiSF0));
00883 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_SL_BLOCK_1, &uiSF1));
00884 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_CURRENT_SHELF_LIFE, &uiCurrentShelfLife));
00885 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_STATUS_FLAG, &ucStatusFlags));
00886
00887 pLimitsCounter->ucExtremeUpperLimitsCounter = (unsigned char) (uiLimitsCounter & 0x000000FF);
00888 pLimitsCounter->ucUpperLimitsCounter = (unsigned char)((uiLimitsCounter & 0x0000FF00) >> 8);
00889 pLimitsCounter->ucLowerLimitsCounter = (unsigned char)((uiLimitsCounter & 0x00FF0000) >> 16);
00890 pLimitsCounter->ucExtremeLowerLimitsCounter = (unsigned char)((uiLimitsCounter & 0xFF000000) >> 24);
00891
00892 if(uiSystemStatus & 0x00000001)
00893 pSystemStatus->bActive = true;
00894 else
00895 pSystemStatus->bActive = false;
00896
00897 pSystemStatus->uiNoOfMeasurements = ((uiSystemStatus & 0x0000FFFE) >> 1);
00898 pSystemStatus->ucNoOfMemoryReplacements = (unsigned char)((uiSystemStatus & 0x003F0000) >> 16);
00899 pSystemStatus->uiMeasurementAddressPointer = ((uiSystemStatus & 0xFFC0000) >> 22);
00900
00901 pSF1->ucSkipLog = (unsigned char)(uiSF1 & 0x00000003);
00902 if(uiSF1 & 0x00000004)
00903 pSF1->bEnableAlgorithm = true;
00904 else
00905 pSF1->bEnableAlgorithm = false;
00906
00907 if(uiSF1 & 0x00000008)
00908 pSF1->bEnableNegativeShelfLife = true;
00909 else
00910 pSF1->bEnableNegativeShelfLife = false;
00911
00912 pSF1->ucSensorID = (unsigned char)((uiSF1 & 0x00000030) >> 4);
00913 pSF1->uiTinit = (unsigned int)((uiSF1 & 0x0000FFC0) >> 6);
00914 pSF1->uiSLinit = (unsigned int)((uiSF1 & 0xFFFF0000) >> 16);
00915 pSF0->ucActivationEnergy = (unsigned char) (uiSF0 & 0x000000FF);
00916 pSF0->ucNormalTemperature = (unsigned char)((uiSF0 & 0x0000FF00) >> 8);
00917 pSF0->ucMinimalTemperature = (unsigned char)((uiSF0 & 0x00FF0000) >> 16);
00918 pSF0->ucMaximalTemperature = (unsigned char)((uiSF0 & 0xFF000000) >> 24);
00919 }
00920 else if(iBack == 0x95)
00921 {
00922 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
00923 }
00924
00925 return iBack;
00926 }
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetCalibrationData(
00946 string sAccessPassword,
00947 CALIBRATION* pCalData,
00948 SFE_PARAMETERS* pSfeData )
00949 {
00950 int iBack = 0;
00951 int iErr = 0;
00952 unsigned int uiSfeData = 0;
00953 __int64 i64CalibrationData = 0;
00954
00955 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xA9));
00956 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
00957
00958 if(m_bNonAddressedMode)
00959 {
00960 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00961 }
00962 else if(m_pTabItem->m_bIsSelected)
00963 {
00964 return FEDM_ERROR_UNSUPPORTED;
00965 }
00966 else
00967 {
00968 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00969 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
00970 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
00971 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00972 }
00973
00974 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
00975 if(sAccessPassword.length() > 0)
00976 {
00977 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
00978 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
00979 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
00980 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
00981 }
00982 else
00983 {
00984 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
00985 }
00986
00987 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00988
00989
00990 iBack = m_pReader->SendProtocol(0xB4);
00991 if(iBack == 0)
00992 {
00993
00994 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_CAL_DATA, &i64CalibrationData));
00995 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_SFE_PARA, &uiSfeData));
00996
00997 #ifdef _FEDM_WINDOWS
00998 #if _MSC_VER <= 1200
00999 pCalData->ucRefTc = (unsigned char)((i64CalibrationData & 0x0000000000000078) >> 3);
01000 pCalData->ucOffInt = (unsigned char)((i64CalibrationData & 0x0000000000003F80) >> 7);
01001 pCalData->ucRingCall = (unsigned char)((i64CalibrationData & 0x000000000007C000) >> 14);
01002 pCalData->ucIRLev = (unsigned char)((i64CalibrationData & 0x0000000000180000) >> 19);
01003 pCalData->ucSelp22 = (unsigned char)((i64CalibrationData & 0x0000000000600000) >> 21);
01004
01005 if(i64CalibrationData & 0x0000000000800000)
01006 pCalData->bSwExtEn = true;
01007 else
01008 pCalData->bSwExtEn = false;
01009
01010 pCalData->ucDf = (unsigned char)((i64CalibrationData & 0x00000000FF000000) >> 24);
01011 pCalData->ucAdf = (unsigned char)((i64CalibrationData & 0x0000001F00000000) >> 32);
01012 pCalData->ucSelp12 = (unsigned char)((i64CalibrationData & 0x0000006000000000) >> 37);
01013
01014 if(i64CalibrationData & 0x0000008000000000)
01015 pCalData->bGndSwitch = true;
01016 else
01017 pCalData->bGndSwitch = false;
01018
01019 pCalData->ucCoars2 = (unsigned char)((i64CalibrationData & 0x0000070000000000) >> 40);
01020 pCalData->ucAd2 = (unsigned char)((i64CalibrationData & 0x0000F80000000000) >> 43);
01021 pCalData->ucCoars1 = (unsigned char)((i64CalibrationData & 0x0007000000000000) >> 48);
01022 pCalData->ucAd1 = (unsigned char)((i64CalibrationData & 0x00F8000000000000) >> 51);
01023 #else
01024 pCalData->ucRefTc = (unsigned char)((i64CalibrationData & 0x0000000000000078LL) >> 3);
01025 pCalData->ucOffInt = (unsigned char)((i64CalibrationData & 0x0000000000003F80LL) >> 7);
01026 pCalData->ucRingCall = (unsigned char)((i64CalibrationData & 0x000000000007C000LL) >> 14);
01027 pCalData->ucIRLev = (unsigned char)((i64CalibrationData & 0x0000000000180000LL) >> 19);
01028 pCalData->ucSelp22 = (unsigned char)((i64CalibrationData & 0x0000000000600000LL) >> 21);
01029
01030 if(i64CalibrationData & 0x0000000000800000LL)
01031 pCalData->bSwExtEn = true;
01032 else
01033 pCalData->bSwExtEn = false;
01034
01035 pCalData->ucDf = (unsigned char)((i64CalibrationData & 0x00000000FF000000LL) >> 24);
01036 pCalData->ucAdf = (unsigned char)((i64CalibrationData & 0x0000001F00000000LL) >> 32);
01037 pCalData->ucSelp12 = (unsigned char)((i64CalibrationData & 0x0000006000000000LL) >> 37);
01038
01039 if(i64CalibrationData & 0x0000008000000000LL)
01040 pCalData->bGndSwitch = true;
01041 else
01042 pCalData->bGndSwitch = false;
01043
01044 pCalData->ucCoars2 = (unsigned char)((i64CalibrationData & 0x0000070000000000LL) >> 40);
01045 pCalData->ucAd2 = (unsigned char)((i64CalibrationData & 0x0000F80000000000LL) >> 43);
01046 pCalData->ucCoars1 = (unsigned char)((i64CalibrationData & 0x0007000000000000LL) >> 48);
01047 pCalData->ucAd1 = (unsigned char)((i64CalibrationData & 0x00F8000000000000LL) >> 51);
01048 #endif
01049 #endif
01050 #ifdef _FEDM_LINUX
01051 pCalData->ucRefTc = (unsigned char)((i64CalibrationData & 0x0000000000000078LL) >> 3);
01052 pCalData->ucOffInt = (unsigned char)((i64CalibrationData & 0x0000000000003F80LL) >> 7);
01053 pCalData->ucRingCall = (unsigned char)((i64CalibrationData & 0x000000000007C000LL) >> 14);
01054 pCalData->ucIRLev = (unsigned char)((i64CalibrationData & 0x0000000000180000LL) >> 19);
01055 pCalData->ucSelp22 = (unsigned char)((i64CalibrationData & 0x0000000000600000LL) >> 21);
01056
01057 if(i64CalibrationData & 0x0000000000800000LL)
01058 pCalData->bSwExtEn = true;
01059 else
01060 pCalData->bSwExtEn = false;
01061
01062 pCalData->ucDf = (unsigned char)((i64CalibrationData & 0x00000000FF000000LL) >> 24);
01063 pCalData->ucAdf = (unsigned char)((i64CalibrationData & 0x0000001F00000000LL) >> 32);
01064 pCalData->ucSelp12 = (unsigned char)((i64CalibrationData & 0x0000006000000000LL) >> 37);
01065
01066 if(i64CalibrationData & 0x0000008000000000LL)
01067 pCalData->bGndSwitch = true;
01068 else
01069 pCalData->bGndSwitch = false;
01070
01071 pCalData->ucCoars2 = (unsigned char)((i64CalibrationData & 0x0000070000000000LL) >> 40);
01072 pCalData->ucAd2 = (unsigned char)((i64CalibrationData & 0x0000F80000000000LL) >> 43);
01073 pCalData->ucCoars1 = (unsigned char)((i64CalibrationData & 0x0007000000000000LL) >> 48);
01074 pCalData->ucAd1 = (unsigned char)((i64CalibrationData & 0x00F8000000000000LL) >> 51);
01075 #endif
01076
01077 pSfeData->ucVerifySensorID = (unsigned char)(uiSfeData & 0x00000003);
01078
01079 if(uiSfeData & 0x00000004)
01080 pSfeData->bAutoRangePreset = true;
01081 else
01082 pSfeData->bAutoRangePreset = false;
01083
01084 pSfeData->ucSext2 = (unsigned char)((uiSfeData & 0x00000008) >> 3);
01085 pSfeData->ucSext1 = (unsigned char)((uiSfeData & 0x00000030) >> 4);
01086 pSfeData->ucSeti = (unsigned char)((uiSfeData & 0x000007C0) >> 6);
01087 pSfeData->ucRang = (unsigned char)((uiSfeData & 0x0000F800) >> 11);
01088 }
01089 else if(iBack == 0x95)
01090 {
01091 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01092 }
01093
01094 return iBack;
01095 }
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetBatteryLevel(
01115 string sAccessPassword,
01116 unsigned char ucBatteryRetrigger,
01117 bool& bError,
01118 unsigned char& ucBatteryType,
01119 unsigned int& uiBatteryLevel )
01120 {
01121 int iBack = 0;
01122 int iErr = 0;
01123 unsigned int uiData = 0;
01124
01125 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAA));
01126 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01127
01128 if(m_bNonAddressedMode)
01129 {
01130 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01131 }
01132 else if(m_pTabItem->m_bIsSelected)
01133 {
01134 return FEDM_ERROR_UNSUPPORTED;
01135 }
01136 else
01137 {
01138 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01139 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01140 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01141 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01142 }
01143
01144 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01145 if(sAccessPassword.length() > 0)
01146 {
01147 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01148 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01149 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01150 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01151 }
01152 else
01153 {
01154 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01155 }
01156
01157 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_BATTERY_RETRIGGER, ucBatteryRetrigger));
01158
01159 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01160
01161
01162 iBack = m_pReader->SendProtocol(0xB4);
01163 if(iBack == 0)
01164 {
01165
01166 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_BATTERY_LEVEL, &uiData));
01167
01168 if(uiData & 0x00008000)
01169 bError = true;
01170 else
01171 bError = false;
01172
01173 ucBatteryType = (unsigned char)((uiData & 0x00004000) >> 14);
01174 uiBatteryLevel = (uiData & 0x000003FF);
01175 }
01176 else if(iBack == 0x95)
01177 {
01178 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01179 }
01180
01181 return iBack;
01182 }
01183
01184
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::SetShelfLife(
01201 string sAccessPassword,
01202 SHELF_LIFE_0* pSF0,
01203 SHELF_LIFE_1* pSF1 )
01204 {
01205 int iBack = 0;
01206 int iErr = 0;
01207 unsigned int uiSF0 = 0;
01208 unsigned int uiSF1 = 0;
01209
01210 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAB));
01211 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01212
01213 if(m_bNonAddressedMode)
01214 {
01215 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01216 }
01217 else if(m_pTabItem->m_bIsSelected)
01218 {
01219 return FEDM_ERROR_UNSUPPORTED;
01220 }
01221 else
01222 {
01223 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01224 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01225 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01226 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01227 }
01228
01229 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01230 if(sAccessPassword.length() > 0)
01231 {
01232 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01233 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01234 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01235 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01236 }
01237 else
01238 {
01239 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01240 }
01241
01242 uiSF0 = (unsigned int)pSF0->ucActivationEnergy;
01243 uiSF0 |= (((unsigned int)pSF0->ucNormalTemperature) << 8);
01244 uiSF0 |= (((unsigned int)pSF0->ucMinimalTemperature) << 16);
01245 uiSF0 |= (((unsigned int)pSF0->ucMaximalTemperature) << 24);
01246
01247 uiSF1 = (unsigned int)(pSF1->ucSkipLog & 0x03);
01248 if(pSF1->bEnableAlgorithm)
01249 uiSF1 |= 0x00000004;
01250
01251 if(pSF1->bEnableNegativeShelfLife)
01252 uiSF1 |= 0x00000008;
01253
01254 uiSF1 |= (((unsigned int)(pSF1->ucSensorID & 0x03)) << 4);
01255 uiSF1 |= (((unsigned int)(pSF1->uiTinit & 0x000003FF)) << 6);
01256 uiSF1 |= (((unsigned int)(pSF1->uiSLinit & 0x0000FFFF)) << 16);
01257
01258 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_SL_BLOCK_0, uiSF0));
01259 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_SL_BLOCK_1, uiSF1));
01260
01261 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01262
01263
01264 iBack = m_pReader->SendProtocol(0xB4);
01265 if(iBack == 0x95)
01266 {
01267 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01268 }
01269
01270 return iBack;
01271 }
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::Initialize(
01290 string sAccessPassword,
01291 DELAY_TIME* pDelayTime,
01292 APP_DATA* pAppData )
01293 {
01294 int iBack = 0;
01295 int iErr = 0;
01296 unsigned int uiDelayTime = 0;
01297 unsigned int uiAppData = 0;
01298
01299 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAC));
01300 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01301
01302 if(m_bNonAddressedMode)
01303 {
01304 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01305 }
01306 else if(m_pTabItem->m_bIsSelected)
01307 {
01308 return FEDM_ERROR_UNSUPPORTED;
01309 }
01310 else
01311 {
01312 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01313 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01314 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01315 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01316 }
01317
01318 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01319 if(sAccessPassword.length() > 0)
01320 {
01321 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01322 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01323 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01324 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01325 }
01326 else
01327 {
01328 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01329 }
01330
01331
01332 if(pDelayTime->bTimer)
01333 uiDelayTime |= 0x00000001;
01334
01335 if(pDelayTime->bDelayMode_External)
01336 uiDelayTime |= 0x00000002;
01337
01338 uiDelayTime |= ((pDelayTime->uiDelayTime & 0x00000FFF) << 4);
01339
01340
01341 uiAppData = (unsigned int)(pAppData->ucBrokenWordPointer & 0x07);
01342 uiAppData |= ((pAppData->uiNoOfWordsForAppData & 0x000001FF) << 7);
01343
01344 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_DELAY_TIME, uiDelayTime));
01345 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_APP_DATA, uiAppData));
01346
01347 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01348
01349
01350 iBack = m_pReader->SendProtocol(0xB4);
01351 if(iBack == 0x95)
01352 {
01353 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01354 }
01355
01356 return iBack;
01357 }
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376
01377 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::GetSensorValue(
01378 string sAccessPassword,
01379 unsigned char ucSensorType,
01380 bool& bError,
01381 unsigned char& ucRangeOrLimit,
01382 unsigned int& uiSensorValue )
01383 {
01384 int iBack = 0;
01385 int iErr = 0;
01386 unsigned int uiSensorInfo = 0;
01387
01388 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAD));
01389 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01390
01391 if(m_bNonAddressedMode)
01392 {
01393 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01394 }
01395 else if(m_pTabItem->m_bIsSelected)
01396 {
01397 return FEDM_ERROR_UNSUPPORTED;
01398 }
01399 else
01400 {
01401 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01402 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01403 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01404 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01405 }
01406
01407 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01408 if(sAccessPassword.length() > 0)
01409 {
01410 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01411 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01412 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01413 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01414 }
01415 else
01416 {
01417 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01418 }
01419
01420 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_SENSOR_VALUE, (unsigned char)(ucSensorType & 0x03)));
01421
01422 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01423
01424
01425 iBack = m_pReader->SendProtocol(0xB4);
01426 if(iBack == 0)
01427 {
01428
01429 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_SENSOR_INFO, &uiSensorInfo));
01430
01431 if(uiSensorInfo & 0x00008000)
01432 bError = true;
01433 else
01434 bError = false;
01435
01436 ucRangeOrLimit = (unsigned char)((uiSensorInfo & 0x00007C00) >> 10);
01437 uiSensorValue = (uiSensorInfo & 0x000003FF);
01438 }
01439 else if(iBack == 0x95)
01440 {
01441 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01442 }
01443
01444 return iBack;
01445 }
01446
01447
01448
01449
01450
01451
01452
01453
01454
01455
01456
01457
01458
01459
01460
01461
01462 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::OpenArea(
01463 string sAccessPassword,
01464 unsigned char ucPasswordLevel,
01465 string sPassword )
01466 {
01467 int iBack = 0;
01468 int iErr = 0;
01469
01470 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAE));
01471 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01472
01473 if(m_bNonAddressedMode)
01474 {
01475 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01476 }
01477 else if(m_pTabItem->m_bIsSelected)
01478 {
01479 return FEDM_ERROR_UNSUPPORTED;
01480 }
01481 else
01482 {
01483 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01484 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01485 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01486 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01487 }
01488
01489 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01490 if(sAccessPassword.length() > 0)
01491 {
01492 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01493 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01494 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01495 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01496 }
01497 else
01498 {
01499 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01500 }
01501
01502 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_PASSWORD_LEVEL, ucPasswordLevel));
01503 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_PASSWORD, sPassword));
01504
01505 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01506
01507
01508 iBack = m_pReader->SendProtocol(0xB4);
01509 if(iBack == 0x95)
01510 {
01511 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01512 }
01513
01514 return iBack;
01515 }
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527
01528
01529
01530
01531
01532
01533
01534 int FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A::AccessFIFO(
01535 string sAccessPassword,
01536 unsigned char ucSubCommand,
01537 unsigned char ucNoOfBytes,
01538 unsigned char* pucBuffer )
01539 {
01540 FEDM_CHK3(pucBuffer);
01541
01542 if(ucSubCommand == 0x04 || ucSubCommand == 0x05)
01543 {
01544 if(ucNoOfBytes > 8)
01545 return FEDM_ERROR_BUFFER_LENGTH;
01546 }
01547
01548 int iBack = 0;
01549 int iErr = 0;
01550 unsigned char ucReqData = 0;
01551 unsigned char ucPayload[8];
01552
01553 memset(ucPayload, 0, 8);
01554
01555 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_CMD, (unsigned char)0xAF));
01556 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE, (unsigned char)0));
01557
01558 if(m_bNonAddressedMode)
01559 {
01560 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01561 }
01562 else if(m_pTabItem->m_bIsSelected)
01563 {
01564 return FEDM_ERROR_UNSUPPORTED;
01565 }
01566 else
01567 {
01568 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01569 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EPC_LF, (bool)true));
01570 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC_LEN, m_pTabItem->m_ucSnrLen));
01571 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_EPC, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01572 }
01573
01574 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK, (unsigned char)0));
01575 if(sAccessPassword.length() > 0)
01576 {
01577 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, true));
01578 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_REQ_BANK_ACCESS_FLAG, true));
01579 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW_LENGTH, (unsigned char)(sAccessPassword.length()/2)));
01580 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_ACCESS_PW, sAccessPassword));
01581 }
01582 else
01583 {
01584 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MODE_EXT_ADR, false));
01585 }
01586
01587 ucReqData |= ((ucSubCommand & 0x07) << 5);
01588 if(ucSubCommand == 0x04 || ucSubCommand == 0x05)
01589 ucReqData |= (ucNoOfBytes & 0x0F);
01590
01591 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_SUB_COMMAND, ucReqData));
01592 if(ucSubCommand == 0x05)
01593 {
01594 memcpy(ucPayload, pucBuffer, (size_t)ucNoOfBytes);
01595 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB4_REQ_IDS_PAYLOAD, ucPayload, ucNoOfBytes));
01596 }
01597
01598
01599 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B4_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01600
01601
01602 iBack = m_pReader->SendProtocol(0xB4);
01603 if(iBack == 0)
01604 {
01605 if(ucSubCommand == 0x04)
01606 {
01607 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_PAYLOAD, ucPayload, ucNoOfBytes));
01608 memcpy(pucBuffer, ucPayload, (size_t)ucNoOfBytes);
01609 }
01610 else if(ucSubCommand == 0x06)
01611 {
01612 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB4_RSP_IDS_PAYLOAD, ucPayload, 1));
01613 pucBuffer[0] = ucPayload[0];
01614 }
01615 }
01616 else if(iBack == 0x95)
01617 {
01618 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B4_ISO_ERROR, &m_ucTagError));
01619 }
01620
01621 return iBack;
01622 }
01623
01624 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_EPC_C1_G2)