FedmIscTagHandler_ISO15693.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO15693.cpp                   |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2009-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                   :       30.03.2009
00018 
00019 Version                 :       03.03.02 / 02.05.2011 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID i-scan® HF transponder ISO15693
00024 
00025 NOTE                            :       this class supports only selected or addressed mode in Host-Mode
00026 
00027 
00028 Trademarks:
00029 -----------
00030 OBID®, OBID i-scan® and OBID myAXXESS® are registered Trademarks of FEIG ELECTRONIC GmbH
00031 Other Trademarks: see FEDM.h
00032 */
00033 
00034 
00035 #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00036 
00037 #include "FedmIscTagHandler_ISO15693.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 
00051 //####################################################################
00052 // class FedmIscTagHandler_ISO15693
00053 // >> supports only ISO Host Commands <<
00054 //####################################################################
00055 
00056 FedmIscTagHandler_ISO15693::FedmIscTagHandler_ISO15693(
00057         FEDM_ISCReader* pReader,
00058         FEDM_ISOTabItem* pTabItem )
00059         : FedmIscTagHandler(pReader, FedmIscTagHandler::TYPE_ISO15693, pTabItem)
00060 {
00061         m_sTagName = "ISO 15693";
00062 
00063         Init();
00064 }
00065 
00066 FedmIscTagHandler_ISO15693::FedmIscTagHandler_ISO15693(
00067         FEDM_ISCReader* pReader,
00068         unsigned int uiTagHandlerType,
00069         FEDM_ISOTabItem* pTabItem )
00070         : FedmIscTagHandler(pReader, uiTagHandlerType, pTabItem)
00071 {
00072         m_sTagName = "ISO 15693";
00073 
00074         Init();
00075 }
00076 
00077 FedmIscTagHandler_ISO15693::~FedmIscTagHandler_ISO15693()
00078 {
00079 }
00080 
00081 // set all data members to 0
00082 void FedmIscTagHandler_ISO15693::Init()
00083 {
00084         FedmIscTagHandler::Init();
00085 }
00086 
00087 
00088 const char* FedmIscTagHandler_ISO15693::GetManufacturerName()
00089 {
00090         return m_pTabItem->GetISO15693Manufacturer();
00091 }
00092 
00093 /***************************************************************************
00094   Begin                 :       31.03.2009 / M. Hultsch
00095 
00096   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00097 
00098   Function                      :       basic [0xB0][0x02] Stay Quiet command
00099 
00100   Parameters            :       -
00101 
00102   Return value          :       0                               - if tramsmission was successful
00103                                                 status byte (>1)- if the reader signals a problem
00104                                                 error code (<0) - if something goes wrong
00105 ***************************************************************************/
00106 int FedmIscTagHandler_ISO15693::StayQuiet()
00107 {
00108         int iErr = 0;
00109 
00110         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00111 
00112         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00113         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00114         
00115         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x02));
00116 
00117     m_ucISOErrorCode = 0;
00118         
00119         // ... and execute
00120         int iBack = m_pReader->SendProtocol(0xB0);
00121         if(iBack == 0x95)
00122         {
00123                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00124         }
00125 
00126         return iBack;
00127 }
00128 
00129 
00130 /***************************************************************************
00131   Begin                 :       31.03.2009 / M. Hultsch
00132 
00133   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00134 
00135   Function                      :       basic [0xB0][0x22] Lock Multiple Blocks command
00136                                                 without support for extended address mode
00137 
00138   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00139                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00140 
00141   Return value          :       0                               - if tramsmission was successful
00142                                                 status byte (>1)- if the reader signals a problem
00143                                                 error code (<0) - if something goes wrong
00144 ***************************************************************************/
00145 int FedmIscTagHandler_ISO15693::LockMultipleBlocks(
00146         unsigned int uiFirstDataBlock,
00147         unsigned int uiNoOfDataBlocks )
00148 {
00149         int iErr = 0;
00150 
00151         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00152 
00153         if(m_bNonAddressedMode)
00154         {
00155                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00156         }
00157         else
00158         {
00159                 if(m_pTabItem->m_bIsSelected)
00160                 {
00161                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00162                 }
00163                 else
00164                 {
00165                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00166                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00167                 }
00168         }
00169 
00170         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR, uiFirstDataBlock));
00171         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00172         
00173         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x22));
00174 
00175     m_ucISOErrorCode = 0;
00176 
00177         // ... and execute
00178         int iBack = m_pReader->SendProtocol(0xB0);
00179         if(iBack == 0x95)
00180         {
00181                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00182         }
00183 
00184         return iBack;
00185 }
00186 
00187 
00188 /***************************************************************************
00189   Begin                 :       31.03.2009 / M. Hultsch
00190 
00191   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00192 
00193   Function                      :       basic [0xB0][0x26] Reset to Ready command
00194 
00195   Parameters            :       -
00196 
00197   Return value          :       0                               - if tramsmission was successful
00198                                                 status byte (>1)- if the reader signals a problem
00199                                                 error code (<0) - if something goes wrong
00200 ***************************************************************************/
00201 int FedmIscTagHandler_ISO15693::ResetToReady()
00202 {
00203         int iErr = 0;
00204 
00205         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00206 
00207         if(m_bNonAddressedMode)
00208         {
00209                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00210         }
00211         else
00212         {
00213                 if(m_pTabItem->m_bIsSelected)
00214                 {
00215                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00216                 }
00217                 else
00218                 {
00219                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00220                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00221                 }
00222         }
00223 
00224         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x26));
00225 
00226     m_ucISOErrorCode = 0;
00227         
00228         // ... and execute
00229         int iBack = m_pReader->SendProtocol(0xB0);
00230         if(iBack == 0x95)
00231         {
00232                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00233         }
00234 
00235         return iBack;
00236 }
00237 
00238 
00239 /***************************************************************************
00240   Begin                 :       31.03.2009 / M. Hultsch
00241 
00242   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00243 
00244   Function                      :       basic [0xB0][0x27] Write AFI command
00245 
00246   Parameters            :       unsigned char ucAFI     - [in] AFI value
00247 
00248   Return value          :       0                               - if tramsmission was successful
00249                                                 status byte (>1)- if the reader signals a problem
00250                                                 error code (<0) - if something goes wrong
00251 ***************************************************************************/
00252 int FedmIscTagHandler_ISO15693::WriteAFI(unsigned char ucAFI)
00253 {
00254         int iErr = 0;
00255 
00256         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00257 
00258         if(m_bNonAddressedMode)
00259         {
00260                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00261         }
00262         else
00263         {
00264                 if(m_pTabItem->m_bIsSelected)
00265                 {
00266                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00267                 }
00268                 else
00269                 {
00270                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00271                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00272                 }
00273         }
00274 
00275         m_pTabItem->m_ucAFI = ucAFI;
00276 
00277         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x27));
00278 
00279     m_ucISOErrorCode = 0;
00280         
00281         // ... and execute
00282         int iBack = m_pReader->SendProtocol(0xB0);
00283         if(iBack == 0x95)
00284         {
00285                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00286         }
00287 
00288         return iBack;
00289 }
00290 
00291 
00292 /***************************************************************************
00293   Begin                 :       31.03.2009 / M. Hultsch
00294 
00295   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00296 
00297   Function                      :       basic [0xB0][0x28] Lock AFI command
00298 
00299   Parameters            :       -
00300 
00301   Return value          :       0                               - if tramsmission was successful
00302                                                 status byte (>1)- if the reader signals a problem
00303                                                 error code (<0) - if something goes wrong
00304 ***************************************************************************/
00305 int FedmIscTagHandler_ISO15693::LockAFI()
00306 {
00307         int iErr = 0;
00308 
00309         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00310 
00311         if(m_bNonAddressedMode)
00312         {
00313                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00314         }
00315         else
00316         {
00317                 if(m_pTabItem->m_bIsSelected)
00318                 {
00319                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00320                 }
00321                 else
00322                 {
00323                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00324                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00325                 }
00326         }
00327 
00328         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x28));
00329 
00330     m_ucISOErrorCode = 0;
00331         
00332         // ... and execute
00333         int iBack = m_pReader->SendProtocol(0xB0);
00334         if(iBack == 0x95)
00335         {
00336                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00337         }
00338 
00339         return iBack;
00340 }
00341 
00342 
00343 /***************************************************************************
00344   Begin                 :       31.03.2009 / M. Hultsch
00345 
00346   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00347 
00348   Function                      :       basic [0xB0][0x29] Write DSFID command
00349 
00350   Parameters            :       unsigned char ucDSFID   - [in] DSFID value
00351 
00352   Return value          :       0                               - if tramsmission was successful
00353                                                 status byte (>1)- if the reader signals a problem
00354                                                 error code (<0) - if something goes wrong
00355 ***************************************************************************/
00356 int FedmIscTagHandler_ISO15693::WriteDSFID(unsigned char ucDSFID)
00357 {
00358         int iErr = 0;
00359 
00360         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00361 
00362         if(m_bNonAddressedMode)
00363         {
00364                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00365         }
00366         else
00367         {
00368                 if(m_pTabItem->m_bIsSelected)
00369                 {
00370                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00371                 }
00372                 else
00373                 {
00374                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00375                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00376                 }
00377         }
00378 
00379         m_pTabItem->m_ucDsfID = ucDSFID;
00380 
00381         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x29));
00382 
00383     m_ucISOErrorCode = 0;
00384         
00385         // ... and execute
00386         int iBack = m_pReader->SendProtocol(0xB0);
00387         if(iBack == 0x95)
00388         {
00389                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00390         }
00391 
00392         return iBack;
00393 }
00394 
00395 
00396 /***************************************************************************
00397   Begin                 :       31.03.2009 / M. Hultsch
00398 
00399   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00400 
00401   Function                      :       basic [0xB0][0x2A] Lock DSFID command
00402 
00403   Parameters            :       -
00404 
00405   Return value          :       0                               - if tramsmission was successful
00406                                                 status byte (>1)- if the reader signals a problem
00407                                                 error code (<0) - if something goes wrong
00408 ***************************************************************************/
00409 int FedmIscTagHandler_ISO15693::LockDSFID()
00410 {
00411         int iErr = 0;
00412 
00413         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00414 
00415         if(m_bNonAddressedMode)
00416         {
00417                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00418         }
00419         else
00420         {
00421                 if(m_pTabItem->m_bIsSelected)
00422                 {
00423                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00424                 }
00425                 else
00426                 {
00427                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00428                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00429                 }
00430         }
00431 
00432         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x2A));
00433 
00434     m_ucISOErrorCode = 0;
00435         
00436         // ... and execute
00437         int iBack = m_pReader->SendProtocol(0xB0);
00438         if(iBack == 0x95)
00439         {
00440                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00441         }
00442 
00443         return iBack;
00444 }
00445 
00446 
00447 /***************************************************************************
00448   Begin                 :       31.03.2009 / M. Hultsch
00449 
00450   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00451 
00452   Function                      :       basic [0xB0][0x2B] Get System Information command
00453                                                 without support for extended address mode
00454 
00455   Parameters            :       string& sUid                            - [out] UID
00456                                                 unsigned char& ucAFI            - [out] AFI
00457                                                 unsigned int& uiMemSize         - [out] memory size
00458                                                 unsigned char& ucICRef          - [out] IC reference
00459 
00460   Return value          :       0                               - if tramsmission was successful
00461                                                 status byte (>1)- if the reader signals a problem
00462                                                 error code (<0) - if something goes wrong
00463 ***************************************************************************/
00464 int FedmIscTagHandler_ISO15693::GetSystemInformation(
00465         string& sUid,
00466         unsigned char& ucAFI,
00467         unsigned int& uiMemSize,
00468         unsigned char& ucICRef )
00469 {
00470         int iErr = 0;
00471 
00472         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00473 
00474         if(m_bNonAddressedMode)
00475         {
00476                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00477         }
00478         else
00479         {
00480                 if(m_pTabItem->m_bIsSelected)
00481                 {
00482                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00483                 }
00484                 else
00485                 {
00486                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00487                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00488                 }
00489         }
00490 
00491         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x2B));
00492 
00493     m_ucISOErrorCode = 0;
00494         
00495         // ... and execute
00496         int iBack = m_pReader->SendProtocol(0xB0);
00497         if(iBack == 0)
00498         {
00499                 FEDM_ConvHexUCharToHexStr(m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen, sUid);
00500                 ucAFI = m_pTabItem->m_ucAFI;
00501                 uiMemSize = (((unsigned int)m_pTabItem->m_ucMemSize[0]) << 8) + m_pTabItem->m_ucMemSize[1];
00502                 ucICRef = m_pTabItem->m_ucICRef;
00503         }
00504         else if(iBack == 0x95)
00505         {
00506                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00507         }
00508 
00509         return iBack;
00510 }
00511 
00512 
00513 /***************************************************************************
00514   Begin                 :       31.03.2009 / M. Hultsch
00515 
00516   Version               :       03.03.02 / 02.05.2011 / M. Hultsch
00517 
00518   Function                      :       basic [0xB0][0x2C] Get Multiple Block Security Status command
00519                                                 without support for extended address mode
00520 
00521   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00522                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00523                                                 unsigned char* pucSecurityStatus        - [out] buffer with security info
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::GetMultipleBlockSecurityStatus(
00530         unsigned int uiFirstDataBlock,
00531         unsigned int uiNoOfDataBlocks,
00532         unsigned char* pucSecurityStatus )
00533 {
00534         int iErr = 0;
00535 
00536         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00537 
00538         if(m_bNonAddressedMode)
00539         {
00540                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00541         }
00542         else
00543         {
00544                 if(m_pTabItem->m_bIsSelected)
00545                 {
00546                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00547                 }
00548                 else
00549                 {
00550                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00551                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00552                 }
00553         }
00554 
00555         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR, uiFirstDataBlock));
00556         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00557         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x2C));
00558 
00559     m_ucISOErrorCode = 0;
00560         
00561         // ... and execute
00562         int iBack = m_pReader->SendProtocol(0xB0);
00563         if(iBack == 0)
00564         {
00565                 // save received data blocks in internal memory
00566                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00567         }
00568         else if(iBack == 0x95)
00569         {
00570                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00571         }
00572 
00573         return iBack;
00574 }
00575 
00576 #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