FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A.cpp |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2011-2013   FEIG ELECTRONIC GmbH, All Rights Reserved.
00008                                                 Lange Strasse 4
00009                                                 D-35781 Weilburg
00010                                                 Federal Republic of Germany
00011                                                 phone    : +49 6471 31090
00012                                                 fax      : +49 6471 310999
00013                                                 e-mail   : obid-support@feig.de
00014                                                 Internet : http://www.feig.de
00015                                         
00016 Author                  :       Markus Hultsch
00017 Begin                   :       03.03.01 / 06.04.2011
00018 
00019 Version                 :       04.05.03 / 23.08.2013 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for UHF transponder EPC Class 1 Generation 2 of manufacturer IDS Microchip 
00024                                                 specialized tag handler on top with custom specific commands
00025 
00026 NOTE                            :       this class supports only non-addressed or addressed mode in Host-Mode
00027 
00028 
00029 Trademarks:
00030 -----------
00031 OBID®, OBID i-scan® and OBID myAXXESS® are registered Trademarks of FEIG ELECTRONIC GmbH
00032 Other Trademarks: see FEDM.h
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         // constants for [0xA0] Set Password and [0xAE] Open Area
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         // constants for [0xA1] Set Log Mode
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         // constants for [0xAF] Access FIFO
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 // class FedmIscTagHandler_EPC_Class1_Gen2_IDS_SL900A
00071 // >> supports only ISO Host Commands <<
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 // set all data members to 0
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   Begin                 :       06.04.2011 / M. Hultsch
00112 
00113   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00114 
00115   Function                      :       [0xB4][0xA0] SetPassword
00116 
00117   Parameters            :       string sAccessPassword                  - [in] optional authent password
00118                                                 unsigned char ucPasswordLevel
00119                                                 string sPassword
00120 
00121   Return value          :       0                               - if tramsmission was successful
00122                                                 status byte (>1)- if the reader signals a problem
00123                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00182 
00183   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00184 
00185   Function                      :       [0xB4][0xA1] Set Log Mode
00186                                                 writes parameters to System Area Blocks 0x026..0x028
00187 
00188   Parameters            :       string sAccessPassword                  - [in] optional authent password
00189                                                 LOG_MODE* pLogMode
00190                                                 LOG_INTERVAL* pLogInterval
00191 
00192   Return value          :       0                               - if tramsmission was successful
00193                                                 status byte (>1)- if the reader signals a problem
00194                                                 error code (<0) - if something goes wrong
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         // compose log mode parameter
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00267 
00268   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00269 
00270   Function                      :       [0xB4][0xA2] Set Log Limits
00271                                                 writes parameters to System Area Blocks 0x019..0x01D
00272 
00273   Parameters            :       string sAccessPassword                  - [in] optional authent password
00274                                                 LIMITS* pLogLimits
00275 
00276   Return value          :       0                               - if tramsmission was successful
00277                                                 status byte (>1)- if the reader signals a problem
00278                                                 error code (<0) - if something goes wrong
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         // compose log limits
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00348 
00349   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00350 
00351   Function                      :       [0xB4][0xA3] Get Measurement Setup
00352                                                 reads parameters from System Area Blocks 0x019..0x01D, 0x026..0x02C
00353 
00354   Parameters            :       string sAccessPassword                  - [in] optional authent password
00355                                                 START_TIME* pStartTime
00356                                                 LIMITS* pLogLimits
00357                                                 LOG_MODE* pLogMode
00358                                                 LOG_INTERVAL* pLogInterval
00359                                                 DELAY_TIME* pDelayTime
00360                                                 USER_DATA* pUserData
00361 
00362   Return value          :       0                               - if tramsmission was successful
00363                                                 status byte (>1)- if the reader signals a problem
00364                                                 error code (<0) - if something goes wrong
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         // ... and execute
00421         iBack = m_pReader->SendProtocol(0xB4);
00422         if(iBack == 0)
00423         {
00424                 // get measurement setup data
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   Begin                 :       06.04.2011 / M. Hultsch
00502 
00503   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00504 
00505   Function                      :       [0xB4][0xA4] Set Sensor Front End parameters
00506                                                 writes data to System Area Blocks 0x017..0x018
00507 
00508   Parameters            :       string sAccessPassword                  - [in] optional authent password
00509                                                 SFE_PARAMETERS* pSfeData
00510 
00511   Return value          :       0                               - if tramsmission was successful
00512                                                 status byte (>1)- if the reader signals a problem
00513                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00580 
00581   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00582 
00583   Function                      :       [0xB4][0xA5] Set Calibration Data
00584                                                 writes sensor calibration data to System Area Blocks 0x010..0x016
00585 
00586   Parameters            :       string sAccessPassword                  - [in] optional authent password
00587                                                 CALIBRATION* pCalData
00588 
00589   Return value          :       0                               - if tramsmission was successful
00590                                                 status byte (>1)- if the reader signals a problem
00591                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00666 
00667   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00668 
00669   Function                      :       [0xB4][0xA6] EndLog
00670                                                 stops logging process, stops timer and sets tag in standby mode
00671 
00672   Parameters            :       string sAccessPassword                  - [in] optional authent password
00673 
00674   Return value          :       0                               - if tramsmission was successful
00675                                                 status byte (>1)- if the reader signals a problem
00676                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00730 
00731   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00732 
00733   Function                      :       [0xB4][0xA7] Start Logging
00734                                                 start logging process and sets the start time in UTC format
00735 
00736   Parameters            :       string sAccessPassword                  - [in] optional authent password
00737                                                 START_TIME* pStartTime
00738 
00739   Return value          :       0                               - if tramsmission was successful
00740                                                 status byte (>1)- if the reader signals a problem
00741                                                 error code (<0) - if something goes wrong
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         // compose start time
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
00807 
00808   Version               :       03.03.01 / 07.04.2011 / M. Hultsch
00809 
00810   Function                      :       [0xB4][0xA8] Get Log State
00811                                                 returns the logging state
00812 
00813   Parameters            :       string sAccessPassword                  - [in] optional authent password
00814                                                 LIMITS_COUNTER* pLimitsCounter
00815                                                 SYSTEM_STATUS* pSystemStatus
00816                                                 SHELF_LIFE_0* pSF0
00817                                                 SHELF_LIFE_1* pSF1
00818                                                 unsigned int& uiCurrentShelfLife
00819                                                 unsigned char& ucStatusFlags
00820 
00821   Return value          :       0                               - if tramsmission was successful
00822                                                 status byte (>1)- if the reader signals a problem
00823                                                 error code (<0) - if something goes wrong
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         // ... and execute
00876         iBack = m_pReader->SendProtocol(0xB4);
00877         if(iBack == 0)
00878         {
00879                 // get measurement setup data
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   Begin                 :       06.04.2011 / M. Hultsch
00930 
00931   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
00932 
00933   Function                      :       [0xB4][0xA9] Get Calibration Data
00934                                                 reads internal and external calibration data from System Area Blocks 0x010..0x016, 0x030..0x037
00935 
00936   Parameters            :       string sAccessPassword                  - [in] optional authent password
00937                                                 CALIBRATION* pCalData
00938                                                 SFE_PARAMETERS* pSfeData
00939 
00940 
00941   Return value          :       0                               - if tramsmission was successful
00942                                                 status byte (>1)- if the reader signals a problem
00943                                                 error code (<0) - if something goes wrong
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         // ... and execute
00990         iBack = m_pReader->SendProtocol(0xB4);
00991         if(iBack == 0)
00992         {
00993                 // get calibration data
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   Begin                 :       06.04.2011 / M. Hultsch
01099 
01100   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01101 
01102   Function                      :       [0xB4][0xAA] Get Battery Level
01103                                                 returns the actual battery level
01104 
01105   Parameters            :       string sAccessPassword                  - [in] optional authent password
01106                                                 unsigned char ucBatteryRetrigger
01107                                                 unsigned char& ucBatteryType
01108                                                 unsigned int& ucBatteryLevel
01109 
01110   Return value          :       0                               - if tramsmission was successful
01111                                                 status byte (>1)- if the reader signals a problem
01112                                                 error code (<0) - if something goes wrong
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         // ... and execute
01162         iBack = m_pReader->SendProtocol(0xB4);
01163         if(iBack == 0)
01164         {
01165                 // get measurement setup data
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   Begin                 :       06.04.2011 / M. Hultsch
01186 
01187   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01188 
01189   Function                      :       [0xB4][0xAB] Set Shelf-Life
01190                                                 set shelf-life parameters for the dynamic shelf-life algorithm
01191 
01192   Parameters            :       string sAccessPassword                  - [in] optional authent password
01193                                                 SHELF_LIFE_0* pSF0
01194                                                 SHELF_LIFE_1* pSF1
01195 
01196   Return value          :       0                               - if tramsmission was successful
01197                                                 status byte (>1)- if the reader signals a problem
01198                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
01275 
01276   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01277 
01278   Function                      :       [0xB4][0xAC] Initialize
01279                                                 writes parameters to System Area Blocks 0x029..0x02C
01280 
01281   Parameters            :       string sAccessPassword                  - [in] optional authent password
01282                                                 DELAY_TIME* pDelayTime
01283                                                 USER_DATA* pUserData
01284 
01285   Return value          :       0                               - if tramsmission was successful
01286                                                 status byte (>1)- if the reader signals a problem
01287                                                 error code (<0) - if something goes wrong
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         // compose start time
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         // compose initialization data
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         // ... and execute
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   Begin                 :       06.04.2011 / M. Hultsch
01361 
01362   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01363 
01364   Function                      :       [0xB4][0xAD] Get Sensor Value
01365                                                 starts the AD conversion on the specified sensor and returns the measured value
01366 
01367   Parameters            :       string sAccessPassword
01368                                                 unsigned char ucSensorType
01369                                                 bool& bError
01370                                                 unsigned char& ucRangeOrLimit
01371                                                 unsigned int& uiSensorValue
01372 
01373   Return value          :       0                               - if tramsmission was successful
01374                                                 status byte (>1)- if the reader signals a problem
01375                                                 error code (<0) - if something goes wrong
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         // ... and execute
01425         iBack = m_pReader->SendProtocol(0xB4);
01426         if(iBack == 0)
01427         {
01428                 // get measurement setup data
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   Begin                 :       06.04.2011 / M. Hultsch
01449 
01450   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01451 
01452   Function                      :       [0xB4][0xAE] Open Area
01453 
01454   Parameters            :       string sAccessPassword                  - [in] optional authent password
01455                                                 unsigned char ucPasswordLevel
01456                                                 string sPassword
01457 
01458   Return value          :       0                               - if tramsmission was successful
01459                                                 status byte (>1)- if the reader signals a problem
01460                                                 error code (<0) - if something goes wrong
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         // ... and execute
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   Begin                 :       08.04.2011 / M. Hultsch
01519 
01520   Version               :       03.03.01 / 08.04.2011 / M. Hultsch
01521 
01522   Function                      :       [0xB4][0xAF] Access FIFO
01523                                                 can read and write data from the FIFO and can also read the FIFO status register.
01524 
01525   Parameters            :       string sAccessPassword                  - [in] optional authent password
01526                                                 unsigned char ucSubCommand
01527                                                 unsigned char ucNoOfBytes
01528                                                 unsigned char* pucBuffer
01529 
01530   Return value          :       0                               - if tramsmission was successful
01531                                                 status byte (>1)- if the reader signals a problem
01532                                                 error code (<0) - if something goes wrong
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) // read/write from/to FIFO
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) // write to FIFO
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         // ... and execute
01602         iBack = m_pReader->SendProtocol(0xB4);
01603         if(iBack == 0)
01604         {
01605                 if(ucSubCommand == 0x04) // read from FIFO
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) // read status register
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)


maggie_rfid_drivers
Author(s): Raul Perula-Martinez
autogenerated on Mon Sep 14 2015 03:05:30