FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S.cpp   |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2009-2010   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                   :       02.10.2009
00018 
00019 Version                 :       03.02.04 / 19.08.2010 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID i-scan® HF transponder ISO15693 of manufacturer NXP Semiconductors
00024                                                 specialized tag handler on top with custom specific commands
00025 
00026 NOTE                            :       this class supports only selected 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_NXP_ICODE_SLI_S.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 
00052 //####################################################################
00053 // class FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S
00054 // >> supports only ISO Host Commands <<
00055 //####################################################################
00056 
00057 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S(
00058         FEDM_ISCReader* pReader,
00059         FEDM_ISOTabItem* pTabItem )
00060         : FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_L(pReader, FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLI_S, pTabItem)
00061 {
00062         m_sTagName = "ISO 15693 : ";
00063         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_NXP);
00064         m_sTagName += " I-Code SLI-S";
00065 }
00066 
00067 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S(
00068         FEDM_ISCReader* pReader,
00069         unsigned int uiTagHandlerType,
00070         FEDM_ISOTabItem* pTabItem )
00071         : FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_L(pReader, uiTagHandlerType, pTabItem)
00072 {
00073         m_sTagName = "ISO 15693 : ";
00074         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_NXP);
00075         m_sTagName += " I-Code SLI-S";
00076 }
00077 
00078 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::~FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S()
00079 {
00080 }
00081 
00082 // set all data members to 0
00083 /*void FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::Init()
00084 {
00085 }*/
00086 
00087 /***************************************************************************
00088   Begin                 :       09.10.2009 / M. Hultsch
00089 
00090   Version               :       03.02.04 / 19.08.2010 / M. Hultsch
00091 
00092   Function                      :       [0xB1][0xA8] ReadEPC
00093 
00094   Parameters            :       unsigned char* ucEpc            - pointer to epc buffer
00095                                                 unsigned int uiEpcBufferLen     - length of epc buffer
00096 
00097   Return value          :       0                               - if tramsmission was successful
00098                                                 status byte (>1)- if the reader signals a problem
00099                                                 error code (<0) - if something goes wrong
00100 ***************************************************************************/
00101 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::ReadEPC(
00102         unsigned char* ucEpc,
00103         unsigned int uiEpcBufferLen )
00104 {
00105         FEDM_CHK3(ucEpc);
00106 
00107         if(uiEpcBufferLen < 12)
00108                 return FEDM_ERROR_BUFFER_LENGTH;
00109 
00110         int iErr = 0;
00111         
00112         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00113         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00114 
00115         if(m_bNonAddressedMode)
00116         {
00117                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00118         }
00119         else if(m_pTabItem->m_bIsSelected)
00120         {
00121                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00122         }
00123         else
00124         {
00125                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00126                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00127         }
00128 
00129         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00130         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00131         
00132         // ... and execute
00133         int iBack = m_pReader->SendProtocol(0xB1);
00134         if(iBack)
00135                 return iBack;
00136 
00137         FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_NXP_EPC_DATA, ucEpc, 12));
00138 
00139         return FEDM_OK;
00140 }
00141 
00142 /***************************************************************************
00143   Begin                 :       09.10.2009 / M. Hultsch
00144 
00145   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00146 
00147   Function                      :       [0xB1][0xB6] ProtectPage
00148 
00149   Parameters            :       unsigned char ucPageNumber,unsigned char ucProtectionStatus
00150 
00151   Return value          :       0                               - if tramsmission was successful
00152                                                 status byte (>1)- if the reader signals a problem
00153                                                 error code (<0) - if something goes wrong
00154 ***************************************************************************/
00155 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::ProtectPage(
00156         unsigned char ucPageNumber,
00157         unsigned char ucProtectionStatus )
00158 {
00159         int iErr = 0;
00160 
00161         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB6));
00162         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00163 
00164         if(m_bNonAddressedMode)
00165         {
00166                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00167         }
00168         else if(m_pTabItem->m_bIsSelected)
00169         {
00170                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00171         }
00172         else
00173         {
00174                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00175                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00176         }
00177                 
00178         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PAGE_NO, ucPageNumber));
00179         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PROTECTION_STATUS, ucProtectionStatus));
00180 
00181         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB6));
00182         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00183         
00184         // ... and execute
00185         return m_pReader->SendProtocol(0xB1);
00186 }
00187 
00188 /***************************************************************************
00189   Begin                 :       09.10.2009 / M. Hultsch
00190 
00191   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00192 
00193   Function                      :       [0xB1][0xB7] LockPageProtectionCondition
00194 
00195   Parameters            :       unsigned char ucPageNumber
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_NXP_ICODE_SLI_S::LockPageProtectionCondition(
00202         unsigned char ucPageNumber )
00203 {
00204         int iErr = 0;
00205         
00206         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB7));
00207         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00208 
00209         if(m_bNonAddressedMode)
00210         {
00211                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00212         }
00213         else if(m_pTabItem->m_bIsSelected)
00214         {
00215                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00216         }
00217         else
00218         {
00219                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00220                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00221         }
00222                 
00223         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PAGE_NO, ucPageNumber));
00224 
00225         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB7));
00226         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00227         
00228         // ... and execute
00229         return m_pReader->SendProtocol(0xB1);
00230 }
00231 
00232 /***************************************************************************
00233   Begin                 :       09.10.2009 / M. Hultsch
00234 
00235   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00236 
00237   Function                      :       [0xB1][0xB8] GetMultipleBlockProtectionStatus
00238 
00239   Parameters            :       unsigned char ucDBAdr, unsigned char ucDBN
00240 
00241   Return value          :       0                               - if tramsmission was successful
00242                                                 status byte (>1)- if the reader signals a problem
00243                                                 error code (<0) - if something goes wrong
00244 ***************************************************************************/
00245 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::GetMultipleBlockProtectionStatus(
00246         unsigned int uiFirstDataBlock,
00247         unsigned int uiNoOfDataBlocks,
00248         unsigned char* pucSecurityStatus )
00249 {
00250         int iErr = 0;
00251         
00252         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB8));
00253         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00254 
00255         if(m_bNonAddressedMode)
00256         {
00257                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00258         }
00259         else if(m_pTabItem->m_bIsSelected)
00260         {
00261                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00262         }
00263         else
00264         {
00265                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00266                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00267         }
00268         
00269         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_DB_ADR, uiFirstDataBlock));
00270         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_DB_N, uiNoOfDataBlocks));
00271 
00272 
00273         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB8));
00274         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00275         
00276         // ... and execute
00277         int iBack = m_pReader->SendProtocol(0xB1);
00278         if(iBack == 0)
00279         {
00280                 // save received data blocks in internal memory
00281                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00282         }
00283 
00284         return iBack;
00285 }
00286 
00287 /***************************************************************************
00288   Begin                 :       09.10.2009 / M. Hultsch
00289 
00290   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00291 
00292   Function                      :       [0xB1][0xB9] DestroySLI_S
00293 
00294   Parameters            :       
00295 
00296   Return value          :       0                               - if tramsmission was successful
00297                                                 status byte (>1)- if the reader signals a problem
00298                                                 error code (<0) - if something goes wrong
00299 ***************************************************************************/
00300 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::DestroySLI_S()
00301 {       
00302         // ... and execute
00303         return DestroySLI_L();
00304 }
00305 
00306 /***************************************************************************
00307   Begin                 :       09.10.2009 / M. Hultsch
00308 
00309   Version               :       03.01.00 / 09.10.2009 / M. Hultsch
00310 
00311   Function                      :       [0xB1][0xBB] PasswordProtection
00312 
00313   Parameters            :       unsigned char ucPasswordParameter
00314 
00315   Return value          :       0                               - if tramsmission was successful
00316                                                 status byte (>1)- if the reader signals a problem
00317                                                 error code (<0) - if something goes wrong
00318 ***************************************************************************/
00319 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::PasswordProtection(
00320         unsigned char ucPasswordParameter )
00321 {
00322         int iErr = 0;   
00323 
00324         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xBB));
00325         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00326 
00327         if(m_bNonAddressedMode)
00328         {
00329                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00330         }
00331         else if(m_pTabItem->m_bIsSelected)
00332         {
00333                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00334         }
00335         else
00336         {
00337                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00338                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00339         }
00340 
00341         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_64BIT_PWD_PARAMETER, ucPasswordParameter));
00342 
00343         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xBB));
00344         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00345         
00346         // ... and execute
00347         return m_pReader->SendProtocol(0xB1);
00348 }
00349 
00350 #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