FedmIscTagHandler_ISO15693_STM_M24LR64R.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO15693_STM_M24LR64R.cpp      |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2009-2014   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                   :       25.11.2009
00018 
00019 Version                 :       04.06.01 / 07.03.2014 / M. Hultsch
00020                                                 - new methods: LockMultipleBlocks and GetMultipleBlockSecurityStatus
00021 
00022                                                 03.03.00 / 10.02.2011 / M. Hultsch
00023 
00024 Operation Systems       :       independent
00025 
00026 Function                        :       class for OBID i-scan® HF transponder ISO15693 of manufacturer STMicroelectronics SA
00027                                                 specialized tag handler on top with custom specific commands
00028 
00029 NOTE                            :       this class supports only selected or addressed mode in Host-Mode
00030 
00031 
00032 Trademarks:
00033 -----------
00034 OBID®, OBID i-scan® and OBID myAXXESS® are registered Trademarks of FEIG ELECTRONIC GmbH
00035 Other Trademarks: see FEDM.h
00036 */
00037 
00038 
00039 #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00040 
00041 #include "FedmIscTagHandler_ISO15693_STM_M24LR64R.h"
00042 #include "../FEDM_ISCReader.h"
00043 #include "../FEDM_ISOTabItem.h"
00044 #include "../FEDM_ISCReaderID.h"
00045 #include "../FEDM_ISC.h"
00046 #include "../../FEDM_Functions.h"
00047 
00048 
00049 #if _MSC_VER >= 1400
00050         #pragma warning(disable : 4996)
00051 #endif
00052 
00053 
00054 
00055 //####################################################################
00056 // class FedmIscTagHandler_ISO15693_STM_M24LR64R
00057 // >> supports only ISO Host Commands <<
00058 //####################################################################
00059 
00060 FedmIscTagHandler_ISO15693_STM_M24LR64R::FedmIscTagHandler_ISO15693_STM_M24LR64R(
00061         FEDM_ISCReader* pReader,
00062         FEDM_ISOTabItem* pTabItem )
00063         : FedmIscTagHandler_ISO15693_STM(pReader, FedmIscTagHandler::TYPE_ISO15693_STM_M24LR64R, pTabItem)
00064 {
00065         m_sTagName = "ISO 15693 : ";
00066         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_STM);
00067         m_sTagName += " M24LR64-R";
00068 }
00069 
00070 FedmIscTagHandler_ISO15693_STM_M24LR64R::FedmIscTagHandler_ISO15693_STM_M24LR64R(
00071         FEDM_ISCReader* pReader,
00072         unsigned int uiTagHandlerType,
00073         FEDM_ISOTabItem* pTabItem )
00074         : FedmIscTagHandler_ISO15693_STM(pReader, uiTagHandlerType, pTabItem)
00075 {
00076         m_sTagName = "ISO 15693 : ";
00077         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_STM);
00078         m_sTagName += " M24LR64-R";
00079 }
00080 
00081 FedmIscTagHandler_ISO15693_STM_M24LR64R::~FedmIscTagHandler_ISO15693_STM_M24LR64R()
00082 {
00083 }
00084 
00085 // set all data members to 0
00086 /*void FedmIscTagHandler_ISO15693_STM_M24LR64R::Init()
00087 {
00088 }*/
00089 
00090 
00091 /***************************************************************************
00092   Begin                 :       10.02.2011 / M. Hultsch
00093 
00094   Version               :       03.03.00 / 10.02.2011 / M. Hultsch
00095 
00096   Function                      :       [0xB0][0x23] Read Multiple Blocks command
00097                                                 with support for extended address mode
00098 
00099   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00100                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00101                                                 unsigned int& uiBlockSize                       - [out] block size of tag
00102                                                 unsigned char* pucSecurityStatus        - [out] buffer with security info
00103                                                 unsigned char* pucData                          - [out] buffer with data blocks
00104 
00105   Return value          :       0                               - if tramsmission was successful
00106                                                 status byte (>1)- if the reader signals a problem
00107                                                 error code (<0) - if something goes wrong
00108 ***************************************************************************/
00109 int FedmIscTagHandler_ISO15693_STM_M24LR64R::ReadMultipleBlocks(
00110                 unsigned int uiFirstDataBlock,
00111                 unsigned int uiNoOfDataBlocks,
00112                 unsigned int& uiBlockSize,
00113                 unsigned char* pucSecurityStatus,
00114                 unsigned char* pucData )
00115 {
00116         int iErr = 0;
00117         unsigned int uiBank = FEDM_ISC_ISO_BANK_USER_MEMORY;
00118 
00119         // prepare ISO Host Command
00120         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00121         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_EXT_ADR, true));
00122 
00123         if(m_bNonAddressedMode)
00124         {
00125 //              m_pReader->SetNonAddressedTabIndex(m_pTabItem->m_uiTabIndex);
00126                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00127         }
00128         else
00129         {
00130                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00131                 if(m_pTabItem->m_ucSnrLen != 8)
00132                 {
00133                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_UID_LF, true));
00134                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID_LEN, m_pTabItem->m_ucSnrLen));
00135                 }
00136                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00137         }
00138 
00139         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK, (unsigned char)0));
00140         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK_BANK_NR, uiBank));
00141 
00142         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR_EXT, uiFirstDataBlock));
00143         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00144         
00145         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x23));
00146         
00147         // ... and execute
00148         int iBack = m_pReader->SendProtocol(0xB0);
00149         if(iBack == 0)
00150         {
00151                 // save received data blocks in internal memory
00152                 uiBlockSize = m_pTabItem->m_ucBlockSize;
00153                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00154                 memcpy(pucData, &m_pTabItem->m_ucRxDB[uiFirstDataBlock*m_pTabItem->m_ucBlockSize], uiNoOfDataBlocks * m_pTabItem->m_ucBlockSize);
00155         }
00156 
00157         return iBack;
00158 }
00159 
00160 
00161 /***************************************************************************
00162   Begin                 :       10.02.2011 / M. Hultsch
00163 
00164   Version               :       03.03.00 / 10.02.2011 / M. Hultsch
00165 
00166   Function                      :       [0xB0][0x24] Write Multiple Blocks command
00167                                                 with support for extended address mode
00168 
00169   Parameters            :       unsigned int uiBank                                     - [in] bank number
00170                                                 unsigned int uiFirstDataBlock           - [in] first data block address
00171                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00172                                                 string sPassword                                        - [in] optional password
00173                                                 unsigned char* pucData                          - [in] buffer with data blocks
00174 
00175   Return value          :       0                               - if tramsmission was successful
00176                                                 status byte (>1)- if the reader signals a problem
00177                                                 error code (<0) - if something goes wrong
00178 ***************************************************************************/
00179 int FedmIscTagHandler_ISO15693_STM_M24LR64R::WriteMultipleBlocks(
00180                 unsigned int uiFirstDataBlock,
00181                 unsigned int uiNoOfDataBlocks,
00182                 unsigned int uiBlockSize,
00183                 unsigned char* pucData )
00184 {
00185         int iErr = 0;
00186         unsigned int uiBank = FEDM_ISC_ISO_BANK_USER_MEMORY;
00187 
00188         // check of internal buffer capacity
00189         if( (uiFirstDataBlock + uiNoOfDataBlocks) * uiBlockSize > m_pTabItem->m_ucTxDB.size() )
00190                 return FEDM_ERROR_ARRAY_BOUNDARY;
00191 
00192         // prepare ISO Host Command
00193         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00194         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_EXT_ADR, true));
00195 
00196         if(m_bNonAddressedMode)
00197         {
00198 //              m_pReader->SetNonAddressedTabIndex(m_pTabItem->m_uiTabIndex);
00199                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00200         }
00201         else
00202         {
00203                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00204                 if(m_pTabItem->m_ucSnrLen != 8)
00205                 {
00206                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_UID_LF, true));
00207                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID_LEN, m_pTabItem->m_ucSnrLen));
00208                 }
00209                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00210         }
00211 
00212         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK, (unsigned char)0));
00213         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK_BANK_NR, uiBank));
00214 
00215         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR_EXT, uiFirstDataBlock));
00216         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00217         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_SIZE, (unsigned char)uiBlockSize));
00218 
00219         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x24));
00220 
00221         m_pTabItem->m_ucBlockSize = (unsigned char)uiBlockSize;
00222 
00223         // save data blocks in internal memory
00224         memcpy(&m_pTabItem->m_ucTxDB[uiFirstDataBlock*uiBlockSize], pucData, uiNoOfDataBlocks * uiBlockSize);
00225 
00226         // ... and execute
00227         int iBack = m_pReader->SendProtocol(0xB0);
00228         if(iBack == 0x03)
00229         {
00230                 // if write error, save db address which causes the error
00231                 // one or two byte db address is supported
00232                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_RSP_DB_EXT_ADR_E, &m_uiErrorDBAddress));
00233         }
00234 
00235         return iBack;
00236 }
00237 
00238 
00239 /***************************************************************************
00240   Begin                 :       07.03.2014 / M. Hultsch
00241 
00242   Version               :       04.06.01 / 07.03.2014 / M. Hultsch
00243 
00244   Function                      :       basic [0xB0][0x22] Lock Multiple Blocks command
00245                                                 with support for extended address mode
00246 
00247   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00248                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00249 
00250   Return value          :       0                               - if tramsmission was successful
00251                                                 status byte (>1)- if the reader signals a problem
00252                                                 error code (<0) - if something goes wrong
00253 ***************************************************************************/
00254 int FedmIscTagHandler_ISO15693_STM_M24LR64R::LockMultipleBlocks(
00255         unsigned int uiFirstDataBlock,
00256         unsigned int uiNoOfDataBlocks )
00257 {
00258         int iErr = 0;
00259 
00260         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00261         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_EXT_ADR, true));
00262 
00263         if(m_bNonAddressedMode)
00264         {
00265                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00266         }
00267         else
00268         {
00269                 if(m_pTabItem->m_bIsSelected)
00270                 {
00271                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00272                 }
00273                 else
00274                 {
00275                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00276                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00277                 }
00278         }
00279 
00280         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK, (unsigned char)3)); // user memory
00281         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR_EXT, uiFirstDataBlock));
00282         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00283         
00284         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x22));
00285 
00286     m_ucISOErrorCode = 0;
00287 
00288         // ... and execute
00289         int iBack = m_pReader->SendProtocol(0xB0);
00290         if(iBack == 0x95)
00291         {
00292                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00293         }
00294 
00295         return iBack;
00296 }
00297 
00298 
00299 /***************************************************************************
00300   Begin                 :       07.03.2014 / M. Hultsch
00301 
00302   Version               :       04.06.01 / 07.03.2014 / M. Hultsch
00303 
00304   Function                      :       basic [0xB0][0x2C] Get Multiple Block Security Status command
00305                                                 with support for extended address mode
00306 
00307   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00308                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00309                                                 unsigned char* pucSecurityStatus        - [out] buffer with security info
00310 
00311   Return value          :       0                               - if tramsmission was successful
00312                                                 status byte (>1)- if the reader signals a problem
00313                                                 error code (<0) - if something goes wrong
00314 ***************************************************************************/
00315 int FedmIscTagHandler_ISO15693_STM_M24LR64R::GetMultipleBlockSecurityStatus(
00316         unsigned int uiFirstDataBlock,
00317         unsigned int uiNoOfDataBlocks,
00318         unsigned char* pucSecurityStatus )
00319 {
00320         int iErr = 0;
00321 
00322         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00323         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_EXT_ADR, true));
00324 
00325         if(m_bNonAddressedMode)
00326         {
00327                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00328         }
00329         else
00330         {
00331                 if(m_pTabItem->m_bIsSelected)
00332                 {
00333                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00334                 }
00335                 else
00336                 {
00337                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00338                         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00339                 }
00340         }
00341 
00342         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_BANK, (unsigned char)3)); // user memory
00343         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR_EXT, uiFirstDataBlock));
00344         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00345         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x2C));
00346 
00347     m_ucISOErrorCode = 0;
00348         
00349         // ... and execute
00350         int iBack = m_pReader->SendProtocol(0xB0);
00351         if(iBack == 0)
00352         {
00353                 // save received data blocks in internal memory
00354                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00355         }
00356         else if(iBack == 0x95)
00357         {
00358                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode));
00359         }
00360 
00361         return iBack;
00362 }
00363 
00364 
00365 /***************************************************************************
00366   Begin                 :       09.10.2009 / M. Hultsch
00367 
00368   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00369 
00370   Function                      :       [0xB1][0xB1] WriteSectorPassword
00371 
00372   Parameters            :       unsigned char PasswordNumber
00373                                                 string sPassword
00374 
00375   Return value          :       0                               - if tramsmission was successful
00376                                                 status byte (>1)- if the reader signals a problem
00377                                                 error code (<0) - if something goes wrong
00378 ***************************************************************************/
00379 int FedmIscTagHandler_ISO15693_STM_M24LR64R::WriteSectorPassword(
00380         unsigned char ucPasswordNumber,
00381         string sPassword)
00382 {
00383         int iErr = 0;
00384         
00385         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB1));
00386         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00387 
00388         if(m_bNonAddressedMode)
00389         {
00390                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00391         }
00392         else if(m_pTabItem->m_bIsSelected)
00393         {
00394                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00395         }
00396         else
00397         {
00398                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00399                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00400         }
00401         
00402         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_PASSWORD_NO, ucPasswordNumber));
00403         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_PASSWORD, sPassword));
00404 
00405         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_STM));
00406         
00407         // ... and execute
00408         return m_pReader->SendProtocol(0xB1);
00409 }
00410 
00411 /***************************************************************************
00412   Begin                 :       09.10.2009 / M. Hultsch
00413 
00414   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00415 
00416   Function                      :       [0xB1][0xB2] LockSectorPassword
00417 
00418   Parameters            :       unsigned char SectorNumber
00419                                                 unsigned char ucSectorSecurityStatus
00420 
00421   Return value          :       0                               - if tramsmission was successful
00422                                                 status byte (>1)- if the reader signals a problem
00423                                                 error code (<0) - if something goes wrong
00424 ***************************************************************************/
00425 int FedmIscTagHandler_ISO15693_STM_M24LR64R::LockSectorPassword(
00426         unsigned char ucSectorNumber,
00427         unsigned char ucSectorSecurityStatus)
00428 {
00429         int iErr = 0;
00430         
00431         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB2));
00432         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00433 
00434         if(m_bNonAddressedMode)
00435         {
00436                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00437         }
00438         else if(m_pTabItem->m_bIsSelected)
00439         {
00440                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00441         }
00442         else
00443         {
00444                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00445                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00446         }
00447         
00448         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_INFO_BYTE, (unsigned char)0x02));
00449         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_BLOCK_NO, ucSectorNumber));
00450         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_PROTECT_STATUS, ucSectorSecurityStatus));
00451         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_STM));
00452         
00453         // ... and execute
00454         return m_pReader->SendProtocol(0xB1);
00455 }
00456 
00457 /***************************************************************************
00458   Begin                 :       09.10.2009 / M. Hultsch
00459 
00460   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00461 
00462   Function                      :       [0xB1][0xB3] PresentPassword
00463 
00464   Parameters            :       unsigned char PasswordNumber
00465                                                 string sPassword
00466 
00467   Return value          :       0                               - if tramsmission was successful
00468                                                 status byte (>1)- if the reader signals a problem
00469                                                 error code (<0) - if something goes wrong
00470 ***************************************************************************/
00471 int FedmIscTagHandler_ISO15693_STM_M24LR64R::PresentSectorPassword(
00472         unsigned char ucPasswordNumber,
00473         string sPassword)
00474 {
00475         int iErr = 0;
00476 
00477         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB3));
00478         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00479 
00480         if(m_bNonAddressedMode)
00481         {
00482                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00483         }
00484         else if(m_pTabItem->m_bIsSelected)
00485         {
00486                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00487         }
00488         else
00489         {
00490                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00491                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00492         }
00493 
00494         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_PASSWORD_NO, ucPasswordNumber));
00495         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_STM_PASSWORD, sPassword));
00496 
00497         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_STM));
00498         
00499         // ... and execute
00500         return m_pReader->SendProtocol(0xB1);
00501 }
00502 
00503 #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