FedmIscTagHandler_ISO15693_Infineon.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO15693_Infineon.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.01.00 / 10.02.2010 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID i-scan® HF transponder ISO15693 of manufacturer Infineon Technologies AG
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_Infineon.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_Infineon
00054 // >> supports only ISO Host Commands <<
00055 //####################################################################
00056 
00057 FedmIscTagHandler_ISO15693_Infineon::FedmIscTagHandler_ISO15693_Infineon(
00058         FEDM_ISCReader* pReader,
00059         FEDM_ISOTabItem* pTabItem )
00060         : FedmIscTagHandler_ISO15693(pReader, FedmIscTagHandler::TYPE_ISO15693_Infineon, pTabItem)
00061 {
00062         m_sTagName = "ISO 15693 : ";
00063         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_INFINEON);
00064 }
00065 
00066 FedmIscTagHandler_ISO15693_Infineon::FedmIscTagHandler_ISO15693_Infineon(
00067         FEDM_ISCReader* pReader,
00068         unsigned int uiTagHandlerType,
00069         FEDM_ISOTabItem* pTabItem )
00070         : FedmIscTagHandler_ISO15693(pReader, uiTagHandlerType, pTabItem)
00071 {
00072         m_sTagName = "ISO 15693 : ";
00073         m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_INFINEON);
00074 }
00075 
00076 FedmIscTagHandler_ISO15693_Infineon::~FedmIscTagHandler_ISO15693_Infineon()
00077 {
00078 }
00079 
00080 // set all data members to 0
00081 /*void FedmIscTagHandler_ISO15693_Infineon::Init()
00082 {
00083 }*/
00084 
00085 /***************************************************************************
00086   Begin                 :       09.10.2009 / M. Hultsch
00087 
00088   Version               :       03.01.00 / 24.11.2009 / M. Hultsch
00089 
00090   Function                      :       [0xB1][0x10] Read
00091 
00092   Parameters            :
00093 
00094   Return value          :       0                               - if tramsmission was successful
00095                                                 status byte (>1)- if the reader signals a problem
00096                                                 error code (<0) - if something goes wrong
00097 ***************************************************************************/
00098 int FedmIscTagHandler_ISO15693_Infineon::Read(
00099         unsigned int uiFirstDataBlock, 
00100         unsigned int& uiNoOfDataBlocks,
00101         unsigned int& uiBlockSize,
00102         unsigned char* pucSecurityStatus,
00103         unsigned char* pucData)
00104 {
00105         int iErr = 0;
00106         int iBack=0;
00107         
00108         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0x10));
00109         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00110 
00111         if(m_bNonAddressedMode)
00112         {
00113                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00114         }
00115         else if(m_pTabItem->m_bIsSelected)
00116         {
00117                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00118         }
00119         else
00120         {
00121                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00122                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00123         }
00124 
00125         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_ADR, uiFirstDataBlock));
00126         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_N, uiNoOfDataBlocks));
00127 
00128         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_INFINEON));
00129         
00130         // ... and execute
00131         iBack = m_pReader->SendProtocol(0xB1);
00132         if(iBack == 0x00)
00133         {
00134                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_INFINEON_DB_N, &uiNoOfDataBlocks));
00135                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_INFINEON_DB_SIZE, &uiBlockSize));
00136                 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00137                 memcpy(pucData, &m_pTabItem->m_ucRxDB[uiFirstDataBlock * uiBlockSize], uiNoOfDataBlocks * uiBlockSize);
00138         }
00139 
00140         return iBack;
00141 }
00142         
00143 /***************************************************************************
00144   Begin                 :       09.10.2009 / M. Hultsch
00145 
00146   Version               :       03.01.00 / 12.10.2009 / M. Hultsch
00147 
00148   Function                      :       [0xB1][0x30] Write
00149 
00150   Parameters            :
00151 
00152   Return value          :       0                               - if tramsmission was successful
00153                                                 status byte (>1)- if the reader signals a problem
00154                                                 error code (<0) - if something goes wrong
00155 ***************************************************************************/
00156 int FedmIscTagHandler_ISO15693_Infineon::Write(
00157         unsigned int uiFirstDataBlock, 
00158         unsigned int uiNoOfDataBlocks, 
00159         unsigned int uiBlockSize, 
00160         unsigned char* pucData)
00161 {
00162         int iErr = 0;
00163         
00164         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0x30));
00165         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00166 
00167         if(m_bNonAddressedMode)
00168         {
00169                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00170         }
00171         else if(m_pTabItem->m_bIsSelected)
00172         {
00173                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00174         }
00175         else
00176         {
00177                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00178                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00179         }
00180 
00181         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_ADR, uiFirstDataBlock));
00182         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_N, uiNoOfDataBlocks));
00183         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_SIZE, uiBlockSize));
00184         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_SIZE, uiBlockSize));
00185 
00186         memcpy(&m_pTabItem->m_ucTxDB[uiFirstDataBlock * uiBlockSize], pucData, uiNoOfDataBlocks * uiBlockSize);
00187 
00188         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_INFINEON));
00189         
00190         // ... and execute
00191         int iBack = m_pReader->SendProtocol(0xB1);
00192         if(iBack == 0x03 || iBack == 0x95)
00193         {
00194                 // if write error, save db address which causes the error
00195                 // one or two byte db address is supported
00196                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_DB_ADR_E, &m_uiErrorDBAddress));
00197         }
00198 
00199         return iBack;
00200 }
00201         
00202 /***************************************************************************
00203   Begin                 :       09.10.2009 / M. Hultsch
00204 
00205   Version               :       03.01.00 / 12.10.2009 / M. Hultsch
00206 
00207   Function                      :       [0xB1][0x90] WriteByte
00208 
00209   Parameters            :
00210 
00211   Return value          :       0                               - if tramsmission was successful
00212                                                 status byte (>1)- if the reader signals a problem
00213                                                 error code (<0) - if something goes wrong
00214 ***************************************************************************/
00215 int FedmIscTagHandler_ISO15693_Infineon::WriteByte(unsigned int uiFirstDataBlock, unsigned int uiNoOfDataBlocks)
00216 {
00217         int iErr = 0;
00218         
00219         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0x90));
00220         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00221 
00222         if(m_bNonAddressedMode)
00223         {
00224                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00225         }
00226         else if(m_pTabItem->m_bIsSelected)
00227         {
00228                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00229         }
00230         else
00231         {
00232                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00233                 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00234         }
00235 
00236         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_ADR, uiFirstDataBlock));
00237         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_INFINEON_DB_N, uiNoOfDataBlocks));
00238 
00239         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_INFINEON));
00240         
00241         // ... and execute
00242         int iBack = m_pReader->SendProtocol(0xB1);
00243         if(iBack == 0x03 || iBack == 0x95)
00244         {
00245                 // if write error, save db address which causes the error
00246                 // one or two byte db address is supported
00247                 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_DB_ADR_E, &m_uiErrorDBAddress));
00248         }
00249 
00250         return iBack;
00251 }
00252 
00253 #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