FedmIscTagHandler_ISO14443_3.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO14443_3.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                   :       03.04.2009
00018 
00019 Version                 :       03.01.00 / 10.02.2010 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID® classic-pro transponder ISO14443-3
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 #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00035 
00036 #include "FedmIscTagHandler_ISO14443_3.h"
00037 #include "../FEDM_ISCReader.h"
00038 #include "../FEDM_ISOTabItem.h"
00039 #include "../FEDM_ISCReaderID.h"
00040 #include "../FEDM_ISC.h"
00041 
00042 
00043 #if _MSC_VER >= 1400
00044         #pragma warning(disable : 4996)
00045 #endif
00046 
00047 
00048 
00049 //####################################################################
00050 // class FedmIscTagHandler_ISO14443_3
00051 // >> supports only ISO Host Commands <<
00052 //####################################################################
00053 
00054 FedmIscTagHandler_ISO14443_3::FedmIscTagHandler_ISO14443_3(
00055         FEDM_ISCReader* pReader, 
00056         FEDM_ISOTabItem* pTabItem )
00057         : FedmIscTagHandler_ISO14443_2(pReader, FedmIscTagHandler::TYPE_ISO14443_3, pTabItem)
00058 {
00059         if(m_pTabItem != NULL)
00060         {
00061                 if(m_pTabItem->m_ucTrType == FEDM_ISC_TR_TYPE_ISO14443A)
00062                         m_sTagName = "ISO 14443-3 Type A";
00063                 else if(m_pTabItem->m_ucTrType == FEDM_ISC_TR_TYPE_ISO14443B)
00064                         m_sTagName = "ISO 14443-3 Type B";
00065         }
00066 }
00067 
00068 FedmIscTagHandler_ISO14443_3::FedmIscTagHandler_ISO14443_3(
00069         FEDM_ISCReader* pReader, 
00070         unsigned int uiTagHandlerType,
00071         FEDM_ISOTabItem* pTabItem )
00072         : FedmIscTagHandler_ISO14443_2(pReader, uiTagHandlerType, pTabItem)
00073 {
00074         if(m_pTabItem != NULL)
00075         {
00076                 if(m_pTabItem->m_ucTrType == FEDM_ISC_TR_TYPE_ISO14443A)
00077                         m_sTagName = "ISO 14443-3 Type A";
00078                 else if(m_pTabItem->m_ucTrType == FEDM_ISC_TR_TYPE_ISO14443B)
00079                         m_sTagName = "ISO 14443-3 Type B";
00080         }
00081 }
00082 
00083 FedmIscTagHandler_ISO14443_3::~FedmIscTagHandler_ISO14443_3()
00084 {
00085 }
00086 
00087 // set all data members to 0
00088 /*void FedmIscTagHandler_ISO14443_3::Init()
00089 {
00090         FedmIscTagHandler_ISO14443_2::Init();
00091 }*/
00092 
00093 int FedmIscTagHandler_ISO14443_3::GetProtocolInfo(
00094         unsigned char& ucMaxFrameSize,
00095         unsigned char& ucProtocolType )
00096 {
00097         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00098 
00099         ucMaxFrameSize = ((m_pTabItem->m_ucProtoInfo & 0xF0) >> 4);
00100         ucProtocolType = (m_pTabItem->m_ucProtoInfo & 0x0F);
00101 
00102         return FEDM_OK;
00103 }
00104 
00105 
00106 /***************************************************************************
00107   Begin                 :       20.11.2009 / M. Hultsch
00108 
00109   Version               :       03.01.00 / 23.11.2009 / M. Hultsch
00110 
00111   Function                      :       return of Card Info read with last TagSelect call
00112 
00113                                                 NOTE: only for selected tags
00114 
00115   Parameters            :       unsigned char& ucFormat                         - reference to Format
00116                                                 unsigned char* pucCardInfo                      - pointer to Card Info
00117                                                 unsigned int   uiCardInfoBufferSize     - size of pucCardInfo
00118 
00119   Return value          :       length (>1)- number of bytes in Card Info
00120                                                 error code (<0) - if something goes wrong
00121 ***************************************************************************/
00122 int FedmIscTagHandler_ISO14443_3::GetCardInfo(
00123         unsigned char& ucCardInfoFormat,
00124         unsigned char* pucCardInfo,
00125         unsigned int   uiCardInfoBufferSize )
00126 {
00127         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00128 
00129         int iErr = 0;
00130         int iLen = 0;
00131 
00132         FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_RSP_FORMAT, &ucCardInfoFormat));
00133 
00134         switch(ucCardInfoFormat)
00135         {
00136         case 0x00: // no card information
00137                 return FEDM_ERROR_NO_DATA;
00138 
00139         case 0x01: // card information of an ISO14443-4 Type-A Transponder
00140                 if(uiCardInfoBufferSize < (unsigned int)(4 + m_pReader->m_TmpData[2048 + 3] - 1))
00141                 {
00142                         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_ERROR, __FUNCTION__ << " - uiCardInfoBufferSize < " << (unsigned int)(4 + m_pReader->m_TmpData[2048 + 3] - 1));
00143                         return FEDM_ERROR_BUFFER_LENGTH;
00144                 }
00145 
00146                 memcpy(&pucCardInfo[0], &m_pReader->m_TmpData[2048], 4);
00147                 memcpy(&pucCardInfo[4], &m_pReader->m_TmpData[2052], pucCardInfo[3]-1); // pucCardInfo[3]-1 is TL
00148                 iLen = 4 + pucCardInfo[3]-1;
00149                 break;
00150 
00151         case 0x02: // card information of an ISO14443-4 Type-B Transponder
00152                 if(uiCardInfoBufferSize < 4)
00153                 {
00154                         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_ERROR, __FUNCTION__ << " - uiCardInfoBufferSize < 4");
00155                         return FEDM_ERROR_BUFFER_LENGTH;
00156                 }
00157 
00158                 memcpy(&pucCardInfo[0], &m_pReader->m_TmpData[2048], 4);
00159                 iLen = 4;
00160                 break;
00161 
00162         case 0x03: // card information of an ISO14443-3 Type-A Transponder
00163                 if(uiCardInfoBufferSize < 3)
00164                 {
00165                         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_ERROR, __FUNCTION__ << " - uiCardInfoBufferSize < 3");
00166                         return FEDM_ERROR_BUFFER_LENGTH;
00167                 }
00168 
00169                 memcpy(&pucCardInfo[0], &m_pReader->m_TmpData[2048], 3);
00170                 iLen = 3;
00171                 break;
00172 
00173         default:
00174                 return FEDM_ERROR_NO_DATA;
00175         }
00176 
00177         return iLen;
00178 }
00179 
00180 
00181 /***************************************************************************
00182   Begin                 :       31.03.2009 / M. Hultsch
00183 
00184   Version               :       03.01.00 / 11.05.2009 / M. Hultsch
00185 
00186   Function                      :       [0xB0][0xC0] Halt command
00187 
00188                                                 NOTE: only for selected tags
00189 
00190   Parameters            :       -
00191 
00192   Return value          :       0                               - if tramsmission was successful
00193                                                 status byte (>1)- if the reader signals a problem
00194                                                 error code (<0) - if something goes wrong
00195 ***************************************************************************/
00196 int FedmIscTagHandler_ISO14443_3::Halt()
00197 {
00198         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00199 
00200         FEDM_CHK3(m_pTabItem);
00201         FEDM_CHK3(m_pReader);
00202 
00203         int iErr = 0;
00204 
00205         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_CMD, (unsigned char)0xC0));
00206         FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B0_MODE, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00207 
00208         // ... and execute
00209         return m_pReader->SendProtocol(0xB0);
00210 }
00211 
00212 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)


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