FedmIscTagHandler.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler.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                   :       30.03.2009
00018 
00019 Version                 :       04.06.01 / 07.03.2014 / M. Hultsch
00020                                                 - modification in Init: reset of m_sTagName removed
00021 
00022                                                 04.03.01 / 15.11.2012 / M. Hultsch
00023 
00024 Operation Systems       :       independent
00025 
00026 Function                        :       base class for OBID i-scan® and 
00027                                                 OBID® classic-pro transponder
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 #include "FedmIscTagHandler.h"
00040 #include "../FEDM_ISCReader.h"
00041 #include "../FEDM_ISOTabItem.h"
00042 #include "../FEDM_ISCReaderID.h"
00043 #include "../FEDM_ISC.h"
00044 #include "../../FEDM_Functions.h"
00045 
00046 
00047 #if _MSC_VER >= 1400
00048         #pragma warning(disable : 4996)
00049 #endif
00050 
00051 
00052 #if _MSC_VER <= 1200 // for Visual Studio 6
00053         const unsigned int FedmIscTagHandler::TYPE_BASIC = 1;
00054         const unsigned int FedmIscTagHandler::TYPE_EPC_CLASS1_GEN2 = 10;
00055         const unsigned int FedmIscTagHandler::TYPE_EPC_CLASS1_GEN2_IDS_SL900A = 11;
00056         const unsigned int FedmIscTagHandler::TYPE_ISO14443 = 20;
00057         const unsigned int FedmIscTagHandler::TYPE_ISO14443_INNOVATRON = 21;
00058         const unsigned int FedmIscTagHandler::TYPE_ISO14443_2 = 30;
00059         const unsigned int FedmIscTagHandler::TYPE_ISO14443_2_INNOVISION_JEWEL = 31;
00060         const unsigned int FedmIscTagHandler::TYPE_ISO14443_2_STM_SR176 = 32;
00061         const unsigned int FedmIscTagHandler::TYPE_ISO14443_2_STM_SRIxxx = 33;
00062         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3 = 40;
00063         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_INFINEON_MY_D = 41;
00064         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_INFINEON_MY_D_MOVE = 42;
00065         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_MIFARE_CLASSIC = 43;
00066         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_MIFARE_ULTRALIGHT = 44;
00067         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_MIFARE_PLUS_SL1 = 45;
00068         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_MIFARE_PLUS_SL2 = 46;
00069         const unsigned int FedmIscTagHandler::TYPE_ISO14443_3_ASK_CTX = 47;
00070         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4 = 50;
00071         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MIFARE_DESFIRE = 51;
00072         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MIFARE_PLUS_SL1 = 52;
00073         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MIFARE_PLUS_SL2 = 53;
00074         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MIFARE_PLUS_SL3 = 54;
00075         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MAXIM = 60;
00076         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MAXIM_MAX66000 = 61;
00077         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MAXIM_MAX66020 = 62;
00078         const unsigned int FedmIscTagHandler::TYPE_ISO14443_4_MAXIM_MAX66040 = 63;
00079         const unsigned int FedmIscTagHandler::TYPE_ISO18000_3M3 = 100;
00080         const unsigned int FedmIscTagHandler::TYPE_ISO15693 = 0xE0000000;
00081         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM = 0xE0020000;
00082         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM_LRI2K = 0xE0022000;
00083         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM_LRIS2K = 0xE0020280;
00084         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM_M24LR64R = 0xE00202C0;
00085         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM_LRIS64K = 0xE0020440;
00086         const unsigned int FedmIscTagHandler::TYPE_ISO15693_STM_M24LRxxER = 0xE00205C0;
00087         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP = 0xE0040000;
00088         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLI = 0xE0040100;
00089         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLIX = 0xE0040110;
00090         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLI_L = 0xE0040300;
00091         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLIX_L = 0xE0040310;
00092         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLI_S = 0xE0040200;
00093         const unsigned int FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLIX_S = 0xE0040210;
00094         const unsigned int FedmIscTagHandler::TYPE_ISO15693_Infineon = 0xE0050000;
00095         const unsigned int FedmIscTagHandler::TYPE_ISO15693_Infineon_my_d = 0xE005FFFF;
00096         const unsigned int FedmIscTagHandler::TYPE_ISO15693_TI = 0xE0070000;
00097         const unsigned int FedmIscTagHandler::TYPE_ISO15693_TI_Tag_it_HFI_Pro = 0xE007E000;
00098         const unsigned int FedmIscTagHandler::TYPE_ISO15693_TI_Tag_it_HFI_Plus = 0xE0078000;
00099         const unsigned int FedmIscTagHandler::TYPE_ISO15693_Fujitsu = 0xE0080000;
00100         const unsigned int FedmIscTagHandler::TYPE_ISO15693_Fujitsu_MB89R1xx = 0xE0080001;
00101         const unsigned int FedmIscTagHandler::TYPE_ISO15693_EM = 0xE0160000;
00102         const unsigned int FedmIscTagHandler::TYPE_ISO15693_EM_4034 = 0xE0160004;
00103         const unsigned int FedmIscTagHandler::TYPE_ISO15693_KSW = 0xE0170000;
00104         const unsigned int FedmIscTagHandler::TYPE_ISO15693_MAXIM = 0xE02B0000;
00105         const unsigned int FedmIscTagHandler::TYPE_ISO15693_MAXIM_MAX66100 = 0xE02B0010;
00106         const unsigned int FedmIscTagHandler::TYPE_ISO15693_MAXIM_MAX66120 = 0xE02B0020;
00107         const unsigned int FedmIscTagHandler::TYPE_ISO15693_MAXIM_MAX66140 = 0xE02B0030;
00108         const unsigned int FedmIscTagHandler::TYPE_ISO15693_IDS_SL13A = 0xE036FFFF;
00109 #endif
00110 
00111 
00112 
00113 //####################################################################
00114 // class FedmIscTagHandler
00115 // >> supports only ISO Host Commands <<
00116 //####################################################################
00117 
00118 _FEDM_ISC_CORE_EXT_CLASS FedmIscTagHandler::FedmIscTagHandler(FEDM_ISCReader* pReader, unsigned int uiTagHandlerType, FEDM_ISOTabItem* pTabItem)
00119 {
00120         if(pReader == NULL || pTabItem == NULL)
00121                 throw FEDM_ERROR_NULL_POINTER;
00122 
00123         m_uiTagHandlerType      = uiTagHandlerType;
00124         m_pReader                       = pReader;
00125         m_pTabItem                      = pTabItem;
00126         m_sTagName                      = m_pReader->GetTagName(pTabItem->m_ucTrType);
00127 
00128         m_bNonAddressedMode     = false;
00129         m_uiErrorDBAddress = 0;
00130         m_ucISOErrorCode = 0;
00131 }
00132 
00133 _FEDM_ISC_CORE_EXT_CLASS FedmIscTagHandler::~FedmIscTagHandler()
00134 {
00135 }
00136 
00137 _FEDM_ISC_CORE_EXT_CLASS void FedmIscTagHandler::Init()
00138 {
00139         //m_sTagName = m_pReader->GetTagName(m_pTabItem->m_ucTrType);
00140 
00141         m_bNonAddressedMode     = false;
00142         m_uiErrorDBAddress = 0;
00143         m_ucISOErrorCode = 0;
00144 }
00145 
00146 _FEDM_ISC_CORE_EXT_CLASS unsigned int FedmIscTagHandler::GetTagHandlerType()
00147 {
00148         return m_uiTagHandlerType;
00149 }
00150 
00151 _FEDM_ISC_CORE_EXT_CLASS unsigned int FedmIscTagHandler::GetTagDriverType()
00152 {
00153         return (unsigned int)m_pTabItem->m_ucTrType;
00154 }
00155 
00156 #if defined(__BORLANDC__)
00157 const char* FedmIscTagHandler::GetTagName()
00158 #else
00159 _FEDM_ISC_CORE_EXT_CLASS const char* FedmIscTagHandler::GetTagName()
00160 #endif
00161 {
00162         return m_sTagName.c_str();
00163 }
00164 
00165 #if defined(__BORLANDC__)
00166 const char* FedmIscTagHandler::GetUID()
00167 #else
00168 _FEDM_ISC_CORE_EXT_CLASS const char* FedmIscTagHandler::GetUID()
00169 #endif
00170 {
00171         int iBack = FEDM_ConvHexUCharToHexStr(m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen, m_sUid);
00172         if(iBack)
00173                 return "";
00174 
00175         return m_sUid.c_str();
00176 }
00177 
00178 
00179 /***************************************************************************
00180   Begin                 :       01.07.2011 / M. Hultsch
00181 
00182   Version               :       03.03.04 / 01.07.2011 / M. Hultsch
00183 
00184   Function                      :       return of antenna information
00185                                                 1st Note: available only, if Inventory command was executed with ANT option
00186                                                 2nd Note: the arrays ucNumber, ucStatus and ucRSSI must have the size of 8
00187 
00188   Parameters            :       unsigned char* ucNumber         - [out] array with antenna numbers
00189                                                 unsigned char* ucStatus         - [out] array with status
00190                                                 unsigned char* ucRSSI           - [out] array with RSSI values
00191 
00192   Return value          :       >0      : number of antennas
00193                                                 <0      : error code
00194 ***************************************************************************/
00195 _FEDM_ISC_CORE_EXT_CLASS int FedmIscTagHandler::GetRSSI(unsigned char* ucNumber, unsigned char* ucStatus, unsigned char* ucRSSI)
00196 {
00197         int cnt = 0;
00198 
00199         if(m_pTabItem->m_ucAntCount > 0)
00200         {
00201                 for(cnt=0; cnt<m_pTabItem->m_ucAntCount; cnt++)
00202                 {
00203                         ucNumber[cnt] = m_pTabItem->m_ucAntNumber[cnt];
00204                         ucStatus[cnt] = m_pTabItem->m_ucAntStatus[cnt];
00205                         ucRSSI[cnt] = m_pTabItem->m_ucAntRSSI[cnt];
00206                 }
00207 
00208                 return m_pTabItem->m_ucAntCount;
00209         }
00210 
00211         return FEDM_ERROR_NO_DATA;
00212 }
00213 
00214 
00215 /***************************************************************************
00216   Begin                 :       25.02.2011 / M. Hultsch
00217 
00218   Version               :       03.03.00 / 25.02.2011 / M. Hultsch
00219 
00220   Function                      :       basic [0xB0][0x23] read multiple blocks command
00221                                                 without support for extended address mode
00222 
00223   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00224                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00225                                                 unsigned int& uiBlockSize                       - [out] block size of tag
00226                                                 unsigned char* pucData                          - [out] buffer with data blocks
00227 
00228   Return value          :       0                               - if tramsmission was successful
00229                                                 status byte (>1)- if the reader signals a problem
00230                                                 error code (<0) - if something goes wrong
00231 ***************************************************************************/
00232 _FEDM_ISC_CORE_EXT_CLASS int FedmIscTagHandler::ReadMultipleBlocks(
00233                 unsigned int uiFirstDataBlock,
00234                 unsigned int uiNoOfDataBlocks,
00235                 unsigned int& uiBlockSize,
00236                 unsigned char* pucData )
00237 {
00238         FEDM_TRACE_FNC(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__, FELOGMNG_DBG_FUNCTION_PARAMETER, "FirstDataBlock=" << uiFirstDataBlock << ", NoOfDataBlocks=" << uiNoOfDataBlocks);
00239 
00240         int iErr = 0;
00241 
00242         // prepare ISO Host Command
00243         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00244 
00245         if(m_bNonAddressedMode)
00246         {
00247 //              m_pReader->SetNonAddressedTabIndex(m_pTabItem->m_uiTabIndex);
00248                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00249         }
00250         else if(m_pTabItem->m_bIsSelected)
00251         {
00252                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00253         }
00254         else
00255         {
00256                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00257                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00258         }
00259 
00260         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR, uiFirstDataBlock));
00261         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00262         
00263         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x23));
00264         
00265         // ... and execute
00266         int iBack = m_pReader->SendProtocol(0xB0);
00267         if(iBack == 0)
00268         {
00269                 // save received data blocks in internal memory
00270                 uiBlockSize = m_pTabItem->m_ucBlockSize;
00271                 memcpy(pucData, &m_pTabItem->m_ucRxDB[uiFirstDataBlock*m_pTabItem->m_ucBlockSize], uiNoOfDataBlocks * m_pTabItem->m_ucBlockSize);
00272         }
00273         else if (iBack == 0x95)
00274         {
00275                 // ISO Error
00276                 m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode);
00277         }
00278 
00279         return iBack;
00280 }
00281 
00282 
00283 /***************************************************************************
00284   Begin                 :       31.03.2009 / M. Hultsch
00285 
00286   Version               :       03.01.00 / 07.10.2009 / M. Hultsch
00287 
00288   Function                      :       basic [0xB0][0x23] read multiple blocks command
00289                                                 without support for extended address mode
00290 
00291   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00292                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00293                                                 unsigned int& uiBlockSize                       - [out] block size of tag
00294                                                 unsigned char* pucSecurityStatus        - [out] buffer with security info
00295                                                 unsigned char* pucData                          - [out] buffer with data blocks
00296 
00297   Return value          :       0                               - if tramsmission was successful
00298                                                 status byte (>1)- if the reader signals a problem
00299                                                 error code (<0) - if something goes wrong
00300 ***************************************************************************/
00301 _FEDM_ISC_CORE_EXT_CLASS int FedmIscTagHandler::ReadMultipleBlocks(
00302                 unsigned int uiFirstDataBlock,
00303                 unsigned int uiNoOfDataBlocks,
00304                 unsigned int& uiBlockSize,
00305                 unsigned char* pucSecurityStatus,
00306                 unsigned char* pucData )
00307 {
00308         FEDM_TRACE_FNC(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__, FELOGMNG_DBG_FUNCTION_PARAMETER, "FirstDataBlock=" << uiFirstDataBlock << ", NoOfDataBlocks=" << uiNoOfDataBlocks);
00309 
00310         int iErr = 0;
00311 
00312         // prepare ISO Host Command
00313         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00314         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_SEC, true));
00315 
00316         if(m_bNonAddressedMode)
00317         {
00318 //              m_pReader->SetNonAddressedTabIndex(m_pTabItem->m_uiTabIndex);
00319                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00320         }
00321         else if(m_pTabItem->m_bIsSelected)
00322         {
00323                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00324         }
00325         else
00326         {
00327                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00328                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00329         }
00330 
00331         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR, uiFirstDataBlock));
00332         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00333         
00334         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x23));
00335         
00336         // ... and execute
00337         int iBack = m_pReader->SendProtocol(0xB0);
00338         if(iBack == 0)
00339         {
00340                 // save received data blocks in internal memory
00341                 uiBlockSize = m_pTabItem->m_ucBlockSize;
00342                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00343                 memcpy(pucData, &m_pTabItem->m_ucRxDB[uiFirstDataBlock*m_pTabItem->m_ucBlockSize], uiNoOfDataBlocks * m_pTabItem->m_ucBlockSize);
00344         }
00345         else if (iBack == 0x95)
00346         {
00347                 // ISO Error
00348                 m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode);
00349         }
00350 
00351         return iBack;
00352 }
00353 
00354 
00355 /***************************************************************************
00356   Begin                 :       31.03.2009 / M. Hultsch
00357 
00358   Version               :       03.01.00 / 07.10.2009 / M. Hultsch
00359 
00360   Function                      :       basic [0xB0][0x24] write multiple blocks command
00361                                                 without support for extended address mode
00362 
00363   Parameters            :       unsigned int uiFirstDataBlock           - [in] first data block address
00364                                                 unsigned int uiNoOfDataBlocks           - [in] number of requested data blocks
00365                                                 unsigned int uiBlockSize                        - [in] block size of tag
00366                                                 unsigned char* pucData                          - [in] buffer with data blocks
00367 
00368   Return value          :       0                               - if tramsmission was successful
00369                                                 status byte (>1)- if the reader signals a problem
00370                                                 error code (<0) - if something goes wrong
00371 ***************************************************************************/
00372 _FEDM_ISC_CORE_EXT_CLASS int FedmIscTagHandler::WriteMultipleBlocks(
00373                 unsigned int uiFirstDataBlock,
00374                 unsigned int uiNoOfDataBlocks,
00375                 unsigned int uiBlockSize,
00376                 unsigned char* pucData )
00377 {
00378         FEDM_TRACE_FNC(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__, FELOGMNG_DBG_FUNCTION_PARAMETER, "FirstDataBlock=" << uiFirstDataBlock << ", NoOfDataBlocks=" << uiNoOfDataBlocks << ", BlockSize=" << uiBlockSize);
00379 
00380         int iErr = 0;
00381 
00382         // check of internal buffer capacity
00383         if( (uiFirstDataBlock + uiNoOfDataBlocks) * uiBlockSize > m_pTabItem->m_ucTxDB.size() )
00384         {
00385                 FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_ERROR, __FUNCTION__ << " - (uiFirstDataBlock + uiNoOfDataBlocks) * uiBlockSize > TxDB.size()");
00386                 return FEDM_ERROR_ARRAY_BOUNDARY;
00387         }
00388 
00389         // prepare ISO Host Command
00390         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)0));
00391         if(m_bNonAddressedMode)
00392         {
00393 //              m_pReader->SetNonAddressedTabIndex(m_pTabItem->m_uiTabIndex);
00394                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00395         }
00396         else if(m_pTabItem->m_bIsSelected)
00397         {
00398                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00399         }
00400         else
00401         {
00402                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00403                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00404         }
00405 
00406         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_ADR, uiFirstDataBlock));
00407         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DBN, uiNoOfDataBlocks));
00408         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_REQ_DB_SIZE, uiBlockSize));
00409 
00410         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0x24));
00411 
00412         m_pTabItem->m_ucBlockSize = (unsigned char)uiBlockSize;
00413 
00414         // save data blocks in internal memory
00415         memcpy(&m_pTabItem->m_ucTxDB[uiFirstDataBlock*uiBlockSize], pucData, uiNoOfDataBlocks * uiBlockSize);
00416 
00417         // ... and execute
00418         int iBack = m_pReader->SendProtocol(0xB0);
00419         if(iBack == 0x03)
00420         {
00421                 // if write error, save db address which causes the error
00422                 // one or two byte db address is supported
00423                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_RSP_DB_ADR_E, &m_uiErrorDBAddress));
00424         }
00425         else if (iBack == 0x95)
00426         {
00427                 // ISO Error
00428                 m_pReader->GetData(FEDM_ISC_TMP_B0_ISO_ERROR, &m_ucISOErrorCode);
00429         }
00430 
00431         return iBack;
00432 }


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