FedmIscTagHandler_ISO15693_IDS_SL13A.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO15693_IDS_SL13A.cpp         |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2011                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 / 28.03.2011
00018 
00019 Version                 :       03.03.01 / 05.04.2011 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID i-scan® HF transponder ISO15693 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 
00036 #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00037 
00038 #include "FedmIscTagHandler_ISO15693_IDS_SL13A.h"
00039 #include "../FEDM_ISCReader.h"
00040 #include "../FEDM_ISOTabItem.h"
00041 #include "../FEDM_ISCReaderID.h"
00042 #include "../FEDM_ISC.h"
00043 #include "../../FEDM_Functions.h"
00044 
00045 
00046 #if _MSC_VER >= 1400
00047         #pragma warning(disable : 4996)
00048 #endif
00049 
00050 
00051 #if _MSC_VER <= 1200 // for Visual Studio 6
00052         // constants for [0xA0] Set Password
00053         static const unsigned char PW_LEVEL_SYSTEM                      = 0x01;
00054         static const unsigned char PW_LEVEL_USER                        = 0x02;
00055         static const unsigned char PW_LEVEL_MEASUREMENT         = 0x03;
00056         static const unsigned char PW_LEVEL_STORAGE_EEPROM      = 0x80;
00057         // constants for [0xA1] Set Log Mode
00058         static const unsigned char LOG_MODE_DENSE                                               = 0x00;
00059         static const unsigned char LOG_MODE_ALL_VALUES_OUT_OF_LIMITS    = 0x01;
00060         static const unsigned char LOG_MODE_LIMITS_CROSSING                             = 0x03;
00061 #endif
00062 
00063 
00064 //####################################################################
00065 // class FedmIscTagHandler_ISO15693_IDS_SL13A
00066 // >> supports only ISO Host Commands <<
00067 //####################################################################
00068 
00069 FedmIscTagHandler_ISO15693_IDS_SL13A::FedmIscTagHandler_ISO15693_IDS_SL13A(
00070         FEDM_ISCReader* pReader,
00071         FEDM_ISOTabItem* pTabItem )
00072         : FedmIscTagHandler_ISO15693(pReader, FedmIscTagHandler::TYPE_ISO15693_KSW, pTabItem)
00073 {
00074         m_sTagName = "ISO 15693 : ";
00075         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_IDS);
00076         m_sTagName += " SL13A";
00077         Init();
00078 }
00079 
00080 FedmIscTagHandler_ISO15693_IDS_SL13A::FedmIscTagHandler_ISO15693_IDS_SL13A(
00081         FEDM_ISCReader* pReader,
00082         unsigned int uiTagHandlerType,
00083         FEDM_ISOTabItem* pTabItem )
00084         : FedmIscTagHandler_ISO15693(pReader, uiTagHandlerType, pTabItem)
00085 {
00086         m_sTagName = "ISO 15693 : ";
00087         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_IDS);
00088         m_sTagName += " SL13A";
00089         Init();
00090 }
00091 
00092 FedmIscTagHandler_ISO15693_IDS_SL13A::~FedmIscTagHandler_ISO15693_IDS_SL13A()
00093 {
00094 }
00095 
00096 // set all data members to 0
00097 void FedmIscTagHandler_ISO15693_IDS_SL13A::Init()
00098 {
00099         FedmIscTagHandler_ISO15693::Init();
00100         
00101         m_ucTagError = 0;
00102 }
00103 
00104 unsigned char FedmIscTagHandler_ISO15693_IDS_SL13A::GetTagError()
00105 {
00106         return m_ucTagError;
00107 }
00108 
00109 /***************************************************************************
00110   Begin                 :       30.03.2011 / M. Hultsch
00111 
00112   Version               :       03.03.01 / 30.03.2011 / M. Hultsch
00113 
00114   Function                      :       [0xB1][0xA0] SetPassword
00115 
00116   Parameters            :       unsigned char ucPasswordLevel
00117                                                 string sPassword
00118 
00119   Return value          :       0                               - if tramsmission was successful
00120                                                 status byte (>1)- if the reader signals a problem
00121                                                 error code (<0) - if something goes wrong
00122 ***************************************************************************/
00123 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetPassword(
00124         unsigned char ucPasswordLevel,
00125         string sPassword )
00126 {
00127         int iBack = 0;
00128         int iErr = 0;
00129         
00130         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA0));
00131         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00132 
00133         if(m_bNonAddressedMode)
00134         {
00135                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00136         }
00137         else if(m_pTabItem->m_bIsSelected)
00138         {
00139                 return FEDM_ERROR_UNSUPPORTED;
00140         }
00141         else
00142         {
00143                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00144                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00145         }
00146 
00147         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_PASSWORD_LEVEL, ucPasswordLevel));
00148         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_PASSWORD, sPassword));
00149 
00150         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00151         
00152         // ... and execute
00153         iBack = m_pReader->SendProtocol(0xB1);
00154         if(iBack == 0x95)
00155         {
00156                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00157         }
00158 
00159         return iBack;
00160 }
00161 
00162 /***************************************************************************
00163   Begin                 :       30.03.2011 / M. Hultsch
00164 
00165   Version               :       03.03.01 / 30.03.2011 / M. Hultsch
00166 
00167   Function                      :       [0xB1][0xA1] Set Log Mode
00168                                                 writes parameters to System Area Block 0x0A
00169                                                 - with composed parameters
00170 
00171   Parameters            :       unsigned int uiLogMode
00172 
00173   Return value          :       0                               - if tramsmission was successful
00174                                                 status byte (>1)- if the reader signals a problem
00175                                                 error code (<0) - if something goes wrong
00176 ***************************************************************************/
00177 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetLogMode(
00178         unsigned int uiLogMode )
00179 {
00180         int iBack = 0;
00181         int iErr = 0;
00182         
00183         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA1));
00184         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00185 
00186         if(m_bNonAddressedMode)
00187         {
00188                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00189         }
00190         else if(m_pTabItem->m_bIsSelected)
00191         {
00192                 return FEDM_ERROR_UNSUPPORTED;
00193         }
00194         else
00195         {
00196                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00197                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00198         }
00199 
00200         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_LOG_MODE, uiLogMode));
00201 
00202         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00203         
00204         // ... and execute
00205         iBack = m_pReader->SendProtocol(0xB1);
00206         if(iBack == 0x95)
00207         {
00208                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00209         }
00210 
00211         return iBack;
00212 }
00213 
00214 /***************************************************************************
00215   Begin                 :       30.03.2011 / M. Hultsch
00216 
00217   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00218 
00219   Function                      :       [0xB1][0xA1] Set Log Mode
00220                                                 writes parameters to System Area Block 0x0A
00221                                                 - with single parameters (composed internal)
00222 
00223   Parameters            :       bool bExternalSensor
00224                                                 unsigned char ucLogFormat
00225                                                 bool bBatteryCheck
00226                                                 bool bStorageRule
00227                                                 unsigned char ucLogInterval
00228                                                 unsigned int uiExtremeUpperLimit
00229 
00230   Return value          :       0                               - if tramsmission was successful
00231                                                 status byte (>1)- if the reader signals a problem
00232                                                 error code (<0) - if something goes wrong
00233 ***************************************************************************/
00234 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetLogMode(
00235         bool bExternalSensor,
00236         unsigned char ucLogFormat,
00237         bool bBatteryCheck,
00238         bool bStorageRule,
00239         unsigned int uiLogInterval,
00240         unsigned int uiExtremeUpperLimit )
00241 {
00242         int iBack = 0;
00243         int iErr = 0;
00244         unsigned int uiLogMode = 0;
00245         
00246         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA1));
00247         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00248 
00249         if(m_bNonAddressedMode)
00250         {
00251                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00252         }
00253         else if(m_pTabItem->m_bIsSelected)
00254         {
00255                 return FEDM_ERROR_UNSUPPORTED;
00256         }
00257         else
00258         {
00259                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00260                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00261         }
00262 
00263         // compose log mode parameter
00264         uiLogMode  =  (uiExtremeUpperLimit & 0x000003FF);
00265         uiLogMode |= ((uiLogInterval & 0x00007FFF) << 10);
00266         if(bStorageRule)
00267                 uiLogMode |= 0x08000000;
00268         if(bBatteryCheck)
00269                 uiLogMode |= 0x10000000;
00270         uiLogMode |= (((unsigned int)(ucLogFormat & 0x03)) << 29);
00271         if(bExternalSensor)
00272                 uiLogMode |= 0x80000000;
00273 
00274         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_LOG_MODE, uiLogMode));
00275 
00276         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00277         
00278         // ... and execute
00279         iBack = m_pReader->SendProtocol(0xB1);
00280         if(iBack == 0x95)
00281         {
00282                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00283         }
00284 
00285         return iBack;
00286 }
00287 
00288 /***************************************************************************
00289   Begin                 :       31.03.2011 / M. Hultsch
00290 
00291   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00292 
00293   Function                      :       [0xB1][0xA2] Set Log Limits
00294                                                 writes parameters to System Area Block 0x09
00295 
00296   Parameters            :       unsigned int uiExtremeLowerLimit
00297                                                 unsigned int uiLowerLimit
00298                                                 unsigned int uiUppererLimit
00299 
00300   Return value          :       0                               - if tramsmission was successful
00301                                                 status byte (>1)- if the reader signals a problem
00302                                                 error code (<0) - if something goes wrong
00303 ***************************************************************************/
00304 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetLogLimits( 
00305         unsigned int uiExtremeLowerLimit,
00306         unsigned int uiLowerLimit,
00307         unsigned int uiUpperLimit )
00308 {
00309         int iBack = 0;
00310         int iErr = 0;
00311         unsigned int uiLogLimits = 0;
00312         
00313         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA2));
00314         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00315 
00316         if(m_bNonAddressedMode)
00317         {
00318                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00319         }
00320         else if(m_pTabItem->m_bIsSelected)
00321         {
00322                 return FEDM_ERROR_UNSUPPORTED;
00323         }
00324         else
00325         {
00326                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00327                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00328         }
00329 
00330         // compose log limits
00331         uiLogLimits  =  (uiExtremeLowerLimit & 0x000003FF);
00332         uiLogLimits |= ((uiLowerLimit & 0x000003FF) << 10);
00333         uiLogLimits |= ((uiUpperLimit & 0x000003FF) << 20);
00334 
00335         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_LOG_LIMITS, uiLogLimits));
00336 
00337         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00338         
00339         // ... and execute
00340         iBack = m_pReader->SendProtocol(0xB1);
00341         if(iBack == 0x95)
00342         {
00343                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00344         }
00345 
00346         return iBack;
00347 }
00348 
00349 /***************************************************************************
00350   Begin                 :       31.03.2011 / M. Hultsch
00351 
00352   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00353 
00354   Function                      :       [0xB1][0xA3] Get Measurement Setup
00355                                                 reads parameters from System Area Blocks 0x08..0x0B
00356 
00357   Parameters            :       unsigned int& uiStartTime,
00358                                                 unsigned int& uiLogLimits
00359                                                 unsigned int& uiLogMode
00360                                                 unsigned int& uiDelayTime
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_ISO15693_IDS_SL13A::GetMeasurementSetup(  
00367         unsigned int& uiStartTime,
00368         unsigned int& uiLogLimits,
00369         unsigned int& uiLogMode,
00370         unsigned int& uiDelayTime )
00371 {
00372         int iBack = 0;
00373         int iErr = 0;
00374         unsigned int uiLogLimit = 0;
00375         
00376         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA3));
00377         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00378 
00379         if(m_bNonAddressedMode)
00380         {
00381                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00382         }
00383         else if(m_pTabItem->m_bIsSelected)
00384         {
00385                 return FEDM_ERROR_UNSUPPORTED;
00386         }
00387         else
00388         {
00389                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00390                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00391         }
00392 
00393         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00394         
00395         // ... and execute
00396         iBack = m_pReader->SendProtocol(0xB1);
00397         if(iBack == 0)
00398         {
00399                 // get measurement setup data
00400                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_START_TIME, &uiStartTime));
00401                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_LOG_LIMITS, &uiLogLimits));
00402                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_LOG_MODE, &uiLogMode));
00403                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_DELAY_TIME, &uiDelayTime));
00404         }
00405         else if(iBack == 0x95)
00406         {
00407                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00408         }
00409 
00410         return iBack;
00411 }
00412 
00413 /***************************************************************************
00414   Begin                 :       31.03.2011 / M. Hultsch
00415 
00416   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00417 
00418   Function                      :       [0xB1][0xA4] Set External Calibration Data
00419                                                 writes external calibration data to System Area Block 0x06
00420 
00421   Parameters            :       unsigned int uiCalibrationData
00422 
00423   Return value          :       0                               - if tramsmission was successful
00424                                                 status byte (>1)- if the reader signals a problem
00425                                                 error code (<0) - if something goes wrong
00426 ***************************************************************************/
00427 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetExternalCalibrationData(   
00428         unsigned int uiCalibrationData )
00429 {
00430         int iBack = 0;
00431         int iErr = 0;
00432         
00433         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA4));
00434         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00435 
00436         if(m_bNonAddressedMode)
00437         {
00438                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00439         }
00440         else if(m_pTabItem->m_bIsSelected)
00441         {
00442                 return FEDM_ERROR_UNSUPPORTED;
00443         }
00444         else
00445         {
00446                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00447                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00448         }
00449 
00450         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_EXT_CAL_DATA, uiCalibrationData));
00451 
00452         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00453         
00454         // ... and execute
00455         iBack = m_pReader->SendProtocol(0xB1);
00456         if(iBack == 0x95)
00457         {
00458                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00459         }
00460 
00461         return iBack;
00462 }
00463 
00464 /***************************************************************************
00465   Begin                 :       31.03.2011 / M. Hultsch
00466 
00467   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00468 
00469   Function                      :       [0xB1][0xA5] Set Internal Calibration Data
00470                                                 writes external calibration data to System Area Block 0x05
00471 
00472   Parameters            :       unsigned int uiCalibrationData
00473 
00474   Return value          :       0                               - if tramsmission was successful
00475                                                 status byte (>1)- if the reader signals a problem
00476                                                 error code (<0) - if something goes wrong
00477 ***************************************************************************/
00478 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetInternalCalibrationData(   
00479         unsigned int uiCalibrationData )
00480 {
00481         int iBack = 0;
00482         int iErr = 0;
00483         
00484         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA5));
00485         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00486 
00487         if(m_bNonAddressedMode)
00488         {
00489                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00490         }
00491         else if(m_pTabItem->m_bIsSelected)
00492         {
00493                 return FEDM_ERROR_UNSUPPORTED;
00494         }
00495         else
00496         {
00497                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00498                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00499         }
00500 
00501         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_INT_CAL_DATA, uiCalibrationData));
00502 
00503         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00504         
00505         // ... and execute
00506         iBack = m_pReader->SendProtocol(0xB1);
00507         if(iBack == 0x95)
00508         {
00509                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00510         }
00511 
00512         return iBack;
00513 }
00514 
00515 /***************************************************************************
00516   Begin                 :       30.03.2011 / M. Hultsch
00517 
00518   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00519 
00520   Function                      :       [0xB1][0xA6] Set Passive
00521                                                 stops logging process, stops timer and sets tag in standby mode
00522 
00523   Parameters            :       -
00524 
00525   Return value          :       0                               - if tramsmission was successful
00526                                                 status byte (>1)- if the reader signals a problem
00527                                                 error code (<0) - if something goes wrong
00528 ***************************************************************************/
00529 int FedmIscTagHandler_ISO15693_IDS_SL13A::SetPassive()
00530 {
00531         int iBack = 0;
00532         int iErr = 0;
00533         
00534         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA6));
00535         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00536 
00537         if(m_bNonAddressedMode)
00538         {
00539                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00540         }
00541         else if(m_pTabItem->m_bIsSelected)
00542         {
00543                 return FEDM_ERROR_UNSUPPORTED;
00544         }
00545         else
00546         {
00547                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00548                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00549         }
00550 
00551         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00552         
00553         // ... and execute
00554         iBack = m_pReader->SendProtocol(0xB1);
00555         if(iBack == 0x95)
00556         {
00557                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00558         }
00559 
00560         return iBack;
00561 }
00562 
00563 /***************************************************************************
00564   Begin                 :       31.03.2011 / M. Hultsch
00565 
00566   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00567 
00568   Function                      :       [0xB1][0xA7] Start Logging
00569                                                 start logging process and sets the start time in UTC format
00570                                                 - with composed parameters
00571 
00572   Parameters            :       unsigned int uiStartTime
00573 
00574   Return value          :       0                               - if tramsmission was successful
00575                                                 status byte (>1)- if the reader signals a problem
00576                                                 error code (<0) - if something goes wrong
00577 ***************************************************************************/
00578 int FedmIscTagHandler_ISO15693_IDS_SL13A::StartLog(     
00579         unsigned int uiStartTime )
00580 {
00581         int iBack = 0;
00582         int iErr = 0;
00583         
00584         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA7));
00585         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00586 
00587         if(m_bNonAddressedMode)
00588         {
00589                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00590         }
00591         else if(m_pTabItem->m_bIsSelected)
00592         {
00593                 return FEDM_ERROR_UNSUPPORTED;
00594         }
00595         else
00596         {
00597                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00598                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00599         }
00600 
00601         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_START_TIME, uiStartTime));
00602 
00603         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00604         
00605         // ... and execute
00606         iBack = m_pReader->SendProtocol(0xB1);
00607         if(iBack == 0x95)
00608         {
00609                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00610         }
00611 
00612         return iBack;
00613 }
00614 
00615 /***************************************************************************
00616   Begin                 :       31.03.2011 / M. Hultsch
00617 
00618   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00619 
00620   Function                      :       [0xB1][0xA7] Start Logging
00621                                                 start logging process and sets the start time in UTC format
00622                                                 - with single parameters (composed internal)
00623 
00624   Parameters            :       unsigned char ucYear
00625                                                 unsigned char ucMonth
00626                                                 unsigned char ucDay
00627                                                 unsigned char ucHour
00628                                                 unsigned char ucMinute
00629                                                 unsigned char ucSecond
00630 
00631   Return value          :       0                               - if tramsmission was successful
00632                                                 status byte (>1)- if the reader signals a problem
00633                                                 error code (<0) - if something goes wrong
00634 ***************************************************************************/
00635 int FedmIscTagHandler_ISO15693_IDS_SL13A::StartLog(     
00636         unsigned char ucYear,
00637         unsigned char ucMonth,
00638         unsigned char ucDay,
00639         unsigned char ucHour,
00640         unsigned char ucMinute,
00641         unsigned char ucSecond )
00642 {
00643         int iBack = 0;
00644         int iErr = 0;
00645         unsigned int uiStartTime = 0;
00646         
00647         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA7));
00648         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00649 
00650         if(m_bNonAddressedMode)
00651         {
00652                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00653         }
00654         else if(m_pTabItem->m_bIsSelected)
00655         {
00656                 return FEDM_ERROR_UNSUPPORTED;
00657         }
00658         else
00659         {
00660                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00661                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00662         }
00663 
00664         // compose start time
00665         uiStartTime  =  (ucSecond & 0x3F);
00666         uiStartTime |=  (((unsigned int)(ucMinute & 0x3F)) << 6);
00667         uiStartTime |=  (((unsigned int)(ucHour & 0x1F)) << 12);
00668         uiStartTime |=  (((unsigned int)(ucDay & 0x1F)) << 17);
00669         uiStartTime |=  (((unsigned int)(ucMonth & 0x0F)) << 22);
00670         uiStartTime |=  (((unsigned int)(ucYear & 0x3F)) << 26);
00671 
00672         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_START_TIME, uiStartTime));
00673 
00674         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00675         
00676         // ... and execute
00677         iBack = m_pReader->SendProtocol(0xB1);
00678         if(iBack == 0x95)
00679         {
00680                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00681         }
00682 
00683         return iBack;
00684 }
00685 
00686 /***************************************************************************
00687   Begin                 :       31.03.2011 / M. Hultsch
00688 
00689   Version               :       03.03.01 / 01.04.2011 / M. Hultsch
00690 
00691   Function                      :       [0xB1][0xA8] Get Log State
00692                                                 returns the logging state with single status parameters
00693 
00694   Parameters            :       bool& bActiveFlag,
00695                                                 unsigned int&  uiErrorsAndEvents
00696                                                 unsigned char& ucNoOfMemReplacements,
00697                                                 unsigned int&  uiNoOfMeasurements,
00698                                                 unsigned char& ucMeasurementAddressPointer,
00699                                                 unsigned char& ucExtremeLowerLimitCounter
00700                                                 unsigned char& ucLowerLimitCounter
00701                                                 unsigned char& ucHigherLimitCounter
00702                                                 unsigned char& ucExtremeHigherLimitCounter
00703 
00704   Return value          :       0                               - if tramsmission was successful
00705                                                 status byte (>1)- if the reader signals a problem
00706                                                 error code (<0) - if something goes wrong
00707 ***************************************************************************/
00708 int FedmIscTagHandler_ISO15693_IDS_SL13A::GetLogState(  
00709         bool& bActiveFlag,
00710         unsigned int&  uiErrorsAndEvents,
00711         unsigned char& ucNoOfMemReplacements,
00712         unsigned int&  uiNoOfMeasurements,
00713         unsigned char& ucMeasurementAddressPointer,
00714         unsigned char& ucExtremeLowerLimitCounter,
00715         unsigned char& ucLowerLimitCounter,
00716         unsigned char& ucHigherLimitCounter,
00717         unsigned char& ucExtremeHigherLimitCounter )
00718 {
00719         int iBack = 0;
00720         int iErr = 0;
00721         unsigned int uiMeasurementStatus = 0;
00722         unsigned int uiLimitsCounter = 0;
00723         
00724         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00725         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00726 
00727         if(m_bNonAddressedMode)
00728         {
00729                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00730         }
00731         else if(m_pTabItem->m_bIsSelected)
00732         {
00733                 return FEDM_ERROR_UNSUPPORTED;
00734         }
00735         else
00736         {
00737                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00738                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00739         }
00740 
00741         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00742         
00743         // ... and execute
00744         iBack = m_pReader->SendProtocol(0xB1);
00745         if(iBack == 0)
00746         {
00747                 // get measurement setup data
00748                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_MEAS_STATE, &uiMeasurementStatus));
00749                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_LIMITS_COUNTER, &uiLimitsCounter));
00750 
00751                 if(uiMeasurementStatus & 0x00000001)
00752                         bActiveFlag = true;
00753                 else
00754                         bActiveFlag = false;
00755 
00756                 uiErrorsAndEvents                       = ((uiMeasurementStatus & 0x000007FE) >> 1);
00757                 ucNoOfMemReplacements           = (unsigned char)((uiMeasurementStatus & 0x00003800) >> 11);
00758                 uiNoOfMeasurements                      = ((uiMeasurementStatus & 0x00FFC000) >> 14);
00759                 ucMeasurementAddressPointer     = (unsigned char)((uiMeasurementStatus & 0xFF000000) >> 24);
00760 
00761                 ucExtremeLowerLimitCounter      = (unsigned char) (uiLimitsCounter & 0x000000FF);
00762                 ucLowerLimitCounter                     = (unsigned char)((uiLimitsCounter & 0x0000FF00) >>  8);
00763                 ucHigherLimitCounter            = (unsigned char)((uiLimitsCounter & 0x00FF0000) >> 16);
00764                 ucExtremeHigherLimitCounter     = (unsigned char)((uiLimitsCounter & 0xFF000000) >> 24);
00765         }
00766         else if(iBack == 0x95)
00767         {
00768                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00769         }
00770 
00771         return iBack;
00772 }
00773 
00774 /***************************************************************************
00775   Begin                 :       31.03.2011 / M. Hultsch
00776 
00777   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00778 
00779   Function                      :       [0xB1][0xA8] Get Log State
00780                                                 returns the logging state with composed status parameters
00781 
00782   Parameters            :       unsigned int& uiMeasurementStatus
00783                                                 unsigned char& ucLimitCounters
00784 
00785   Return value          :       0                               - if tramsmission was successful
00786                                                 status byte (>1)- if the reader signals a problem
00787                                                 error code (<0) - if something goes wrong
00788 ***************************************************************************/
00789 int FedmIscTagHandler_ISO15693_IDS_SL13A::GetLogState(  
00790         unsigned int& uiMeasurementStatus,
00791         unsigned int& uiLimitCounters )
00792 {
00793         int iBack = 0;
00794         int iErr = 0;
00795         
00796         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00797         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00798 
00799         if(m_bNonAddressedMode)
00800         {
00801                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00802         }
00803         else if(m_pTabItem->m_bIsSelected)
00804         {
00805                 return FEDM_ERROR_UNSUPPORTED;
00806         }
00807         else
00808         {
00809                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00810                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00811         }
00812 
00813         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00814         
00815         // ... and execute
00816         iBack = m_pReader->SendProtocol(0xB1);
00817         if(iBack == 0)
00818         {
00819                 // get measurement setup data
00820                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_MEAS_STATE, &uiMeasurementStatus));
00821                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_LIMITS_COUNTER, &uiLimitCounters));
00822         }
00823         else if(iBack == 0x95)
00824         {
00825                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00826         }
00827 
00828         return iBack;
00829 }
00830 
00831 /***************************************************************************
00832   Begin                 :       31.03.2011 / M. Hultsch
00833 
00834   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00835 
00836   Function                      :       [0xB1][0xA9] Get Calibration Data
00837                                                 reads internal and external calibration data from System Area Blocks 0x05 and 0x06
00838 
00839   Parameters            :       unsigned int& uiInternalCalibrationData
00840                                                 unsigned int& uiExternalCalibrationData
00841 
00842   Return value          :       0                               - if tramsmission was successful
00843                                                 status byte (>1)- if the reader signals a problem
00844                                                 error code (<0) - if something goes wrong
00845 ***************************************************************************/
00846 int FedmIscTagHandler_ISO15693_IDS_SL13A::GetCalibrationData(   
00847         unsigned int& uiInternalCalibrationData,
00848         unsigned int& uiExternalCalibrationData )
00849 {
00850         int iBack = 0;
00851         int iErr = 0;
00852         
00853         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA9));
00854         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00855 
00856         if(m_bNonAddressedMode)
00857         {
00858                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00859         }
00860         else if(m_pTabItem->m_bIsSelected)
00861         {
00862                 return FEDM_ERROR_UNSUPPORTED;
00863         }
00864         else
00865         {
00866                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00867                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00868         }
00869 
00870         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00871         
00872         // ... and execute
00873         iBack = m_pReader->SendProtocol(0xB1);
00874         if(iBack == 0)
00875         {
00876                 // get calibration data
00877                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_INT_CAL_DATA, &uiInternalCalibrationData));
00878                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_EXT_CAL_DATA, &uiExternalCalibrationData));
00879         }
00880         else if(iBack == 0x95)
00881         {
00882                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00883         }
00884 
00885         return iBack;
00886 }
00887 
00888 /***************************************************************************
00889   Begin                 :       31.03.2011 / M. Hultsch
00890 
00891   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00892 
00893   Function                      :       [0xB1][0xAA] Get Battery Level
00894                                                 returns the actual battery level
00895 
00896   Parameters            :       unsigned char& ucBatteryLevel
00897 
00898   Return value          :       0                               - if tramsmission was successful
00899                                                 status byte (>1)- if the reader signals a problem
00900                                                 error code (<0) - if something goes wrong
00901 ***************************************************************************/
00902 int FedmIscTagHandler_ISO15693_IDS_SL13A::GetBatteryLevel(      
00903         unsigned char& ucBatteryLevel )
00904 {
00905         int iBack = 0;
00906         int iErr = 0;
00907         
00908         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xAA));
00909         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00910 
00911         if(m_bNonAddressedMode)
00912         {
00913                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00914         }
00915         else if(m_pTabItem->m_bIsSelected)
00916         {
00917                 return FEDM_ERROR_UNSUPPORTED;
00918         }
00919         else
00920         {
00921                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00922                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00923         }
00924 
00925         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00926         
00927         // ... and execute
00928         iBack = m_pReader->SendProtocol(0xB1);
00929         if(iBack == 0)
00930         {
00931                 // get measurement setup data
00932                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_BATTERY_LEVEL, &ucBatteryLevel));
00933         }
00934         else if(iBack == 0x95)
00935         {
00936                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00937         }
00938 
00939         return iBack;
00940 }
00941 
00942 /***************************************************************************
00943   Begin                 :       31.03.2011 / M. Hultsch
00944 
00945   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00946 
00947   Function                      :       [0xB1][0xAB] Verify Password
00948                                                 compares the password of the specified password level
00949 
00950   Parameters            :       unsigned char ucPasswordLevel
00951 
00952   Return value          :       0                               - if tramsmission was successful
00953                                                 status byte (>1)- if the reader signals a problem
00954                                                 error code (<0) - if something goes wrong
00955 ***************************************************************************/
00956 int FedmIscTagHandler_ISO15693_IDS_SL13A::VerifyPassword(       
00957         unsigned char ucPasswordLevel )
00958 {
00959         int iBack = 0;
00960         int iErr = 0;
00961         
00962         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xAB));
00963         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00964 
00965         if(m_bNonAddressedMode)
00966         {
00967                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00968         }
00969         else if(m_pTabItem->m_bIsSelected)
00970         {
00971                 return FEDM_ERROR_UNSUPPORTED;
00972         }
00973         else
00974         {
00975                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00976                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00977         }
00978 
00979         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_PASSWORD_LEVEL, ucPasswordLevel));
00980 
00981         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
00982         
00983         // ... and execute
00984         iBack = m_pReader->SendProtocol(0xB1);
00985         if(iBack == 0x95)
00986         {
00987                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
00988         }
00989 
00990         return iBack;
00991 }
00992 
00993 /***************************************************************************
00994   Begin                 :       31.03.2011 / M. Hultsch
00995 
00996   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
00997 
00998   Function                      :       [0xB1][0xAC] Initialize
00999                                                 writes parameters to System Area Block 0x0B
01000 
01001   Parameters            :       unsigned char ucNoOfUserBlocks
01002                                                 unsigned int uiDelayTime
01003                                                 bool bSingleUse
01004 
01005   Return value          :       0                               - if tramsmission was successful
01006                                                 status byte (>1)- if the reader signals a problem
01007                                                 error code (<0) - if something goes wrong
01008 ***************************************************************************/
01009 int FedmIscTagHandler_ISO15693_IDS_SL13A::Initialize(   
01010         unsigned char ucNoOfUserBlocks,
01011         unsigned int uiDelayTime,
01012         bool bSingleUse )
01013 {
01014         int iBack = 0;
01015         int iErr = 0;
01016         unsigned int uiIniData = 0;
01017         
01018         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xAC));
01019         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
01020 
01021         if(m_bNonAddressedMode)
01022         {
01023                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01024         }
01025         else if(m_pTabItem->m_bIsSelected)
01026         {
01027                 return FEDM_ERROR_UNSUPPORTED;
01028         }
01029         else
01030         {
01031                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01032                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01033         }
01034 
01035         // compose initialization data
01036         uiIniData  = ucNoOfUserBlocks;
01037         uiIniData |= ((uiDelayTime & 0x00000FFF) << 8);
01038         if(bSingleUse)
01039                 uiIniData |= 0x80000000;
01040 
01041         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_0xB1_REQ_IDS_INIT_DATA, uiIniData));
01042 
01043         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01044         
01045         // ... and execute
01046         iBack = m_pReader->SendProtocol(0xB1);
01047         if(iBack == 0x95)
01048         {
01049                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
01050         }
01051 
01052         return iBack;
01053 }
01054 
01055 /***************************************************************************
01056   Begin                 :       31.03.2011 / M. Hultsch
01057 
01058   Version               :       03.03.01 / 31.03.2011 / M. Hultsch
01059 
01060   Function                      :       [0xB1][0xAD] Get Temperature
01061                                                 starts the AD conversion and returns the measured temperature
01062 
01063   Parameters            :       unsigned int& uiTemperature
01064 
01065   Return value          :       0                               - if tramsmission was successful
01066                                                 status byte (>1)- if the reader signals a problem
01067                                                 error code (<0) - if something goes wrong
01068 ***************************************************************************/
01069 int FedmIscTagHandler_ISO15693_IDS_SL13A::GetTemperature(       
01070         unsigned int& uiTemperature )
01071 {
01072         int iBack = 0;
01073         int iErr = 0;
01074         
01075         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xAD));
01076         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
01077 
01078         if(m_bNonAddressedMode)
01079         {
01080                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
01081         }
01082         else if(m_pTabItem->m_bIsSelected)
01083         {
01084                 return FEDM_ERROR_UNSUPPORTED;
01085         }
01086         else
01087         {
01088                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
01089                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
01090         }
01091 
01092         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_IDS));
01093         
01094         // ... and execute
01095         iBack = m_pReader->SendProtocol(0xB1);
01096         if(iBack == 0)
01097         {
01098                 // get measurement setup data
01099                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_0xB1_RSP_IDS_MEAS_TEMP, &uiTemperature));
01100         }
01101         else if(iBack == 0x95)
01102         {
01103                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_ISO_ERROR, &m_ucTagError));
01104         }
01105 
01106         return iBack;
01107 }
01108 
01109 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)


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