FedmIscTagHandler_ISO14443_Innovatron.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |      FedmIscTagHandler_ISO14443_Innovatron.cpp        |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright © 2012                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                   :       06.08.2012
00018 
00019 Version                 :       04.02.06 / 06.08.2012 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       class for OBID® classic-pro transponder ISO14443 Innovatron (ISO 14443B')
00024 
00025 NOTE                            :       this class supports only selected 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_Innovatron.h"
00037 #include "../FEDM_ISCReader.h"
00038 #include "../FEDM_ISOTabItem.h"
00039 #include "../FEDM_ISCReaderID.h"
00040 #include "feisc.h"
00041 
00042 
00043 #if _MSC_VER >= 1400
00044         #pragma warning(disable : 4996)
00045 #endif
00046 
00047 
00048 
00049 //####################################################################
00050 // class FedmIscTagHandler_ISO14443_Innovatron
00051 // >> supports only ISO Host Commands <<
00052 //####################################################################
00053 
00054 FedmIscTagHandler_ISO14443_Innovatron::FedmIscTagHandler_ISO14443_Innovatron(
00055         FEDM_ISCReader* pReader, 
00056         FEDM_ISOTabItem* pTabItem )
00057         : FedmIscTagHandler_ISO14443(pReader, FedmIscTagHandler::TYPE_ISO14443, pTabItem)
00058 {
00059         if(m_pTabItem != NULL)
00060         {
00061                 m_sTagName = "Innovatron (ISO 14443B')";
00062         }
00063 }
00064 
00065 // protected constructor for internal use
00066 FedmIscTagHandler_ISO14443_Innovatron::FedmIscTagHandler_ISO14443_Innovatron(
00067         FEDM_ISCReader* pReader, 
00068         unsigned int uiTagHandlerType,
00069         FEDM_ISOTabItem* pTabItem )
00070         : FedmIscTagHandler_ISO14443(pReader, uiTagHandlerType, pTabItem)
00071 {
00072         if(m_pTabItem != NULL)
00073         {
00074                 m_sTagName = "Innovatron (ISO 14443B')";
00075         }
00076 }
00077 
00078 FedmIscTagHandler_ISO14443_Innovatron::~FedmIscTagHandler_ISO14443_Innovatron()
00079 {
00080 }
00081 
00082 unsigned char FedmIscTagHandler_ISO14443_Innovatron::GetVerlog()
00083 {
00084         return m_pTabItem->m_ucVerlog;
00085 }
00086 
00087 unsigned char FedmIscTagHandler_ISO14443_Innovatron::GetConfig()
00088 {
00089         return m_pTabItem->m_ucConfig;
00090 }
00091 
00092 /***************************************************************************
00093   Begin                 :       06.08.2012 / M. Hultsch
00094 
00095   Version               :       04.02.06 / 06.08.2012 / M. Hultsch
00096 
00097   Function                      :       Returns the ATR, returned with Inventory
00098 
00099   Parameters            :       unsigned char*  pucAtr                  - [in] buffer for ATR
00100                                                 unsigned int    uiAtrBufferLen  - [in]  length of response buffer
00101                                                 unsigned int&   uiAtrLen                - [out] length of ATR (number of bytes)
00102 
00103   Return value          :       0                               - OK, ATR is valid
00104                                                 error code (<0) - if something goes wrong
00105 ***************************************************************************/
00106 int FedmIscTagHandler_ISO14443_Innovatron::GetAtr(unsigned char* pucAtr, unsigned int uiAtrBufferLen, unsigned int& uiAtrLen)
00107 {
00108         if(uiAtrBufferLen < (unsigned int)m_pTabItem->m_ucAtrLen)
00109                 return FEDM_ERROR_BUFFER_LENGTH;
00110 
00111         memcpy(pucAtr, m_pTabItem->m_ucAtr, m_pTabItem->m_ucAtrLen);
00112         uiAtrLen = (unsigned int)m_pTabItem->m_ucAtrLen;
00113 
00114         return FEDM_OK;
00115 }
00116 
00117 
00118 /***************************************************************************
00119   Begin                 :       20.11.2009 / M. Hultsch
00120 
00121   Version               :       03.01.00 / 23.11.2009 / M. Hultsch
00122 
00123   Function                      :       return of Card Info read with last TagSelect call
00124 
00125                                                 NOTE: only for selected tags
00126 
00127   Parameters            :       unsigned char& ucFormat                         - reference to Format
00128                                                 unsigned char* pucCardInfo                      - pointer to Card Info
00129                                                 unsigned int   uiCardInfoBufferSize     - size of pucCardInfo
00130 
00131   Return value          :       0                               - if tramsmission was successful
00132                                                 status byte (>1)- if the reader signals a problem
00133                                                 error code (<0) - if something goes wrong
00134 ***************************************************************************/
00135 int FedmIscTagHandler_ISO14443_Innovatron::GetCardInfo(
00136         unsigned char& ucCardInfoFormat,
00137         unsigned char* pucCardInfo,
00138         unsigned int   uiCardInfoBufferSize )
00139 {
00140         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00141 
00142         int iErr = 0;
00143         int iLen = 0;
00144 
00145         FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B0_RSP_FORMAT, &ucCardInfoFormat));
00146 
00147         switch(ucCardInfoFormat)
00148         {
00149         case 0x00: // no card information
00150                 return FEDM_ERROR_NO_DATA;
00151 
00152         case 0x01: // card information of an ISO14443-4 Type-A Transponder
00153         case 0x02: // card information of an ISO14443-4 Type-B Transponder
00154         case 0x03: // card information of an ISO14443-3 Type-A Transponder
00155                 return FEDM_ERROR_UNSUPPORTED;
00156 
00157         case 0x04: // card information of an Innovatron (ISO 14443B') Transponder
00158                 if(uiCardInfoBufferSize < 1)
00159                 {
00160                         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_ERROR, __FUNCTION__ << " - uiCardInfoBufferSize < 1");
00161                         return FEDM_ERROR_BUFFER_LENGTH;
00162                 }
00163 
00164                 pucCardInfo[0] = m_pReader->m_TmpData[2048];
00165                 iLen = 1;
00166                 break;
00167 
00168         default:
00169                 return FEDM_ERROR_NO_DATA;
00170         }
00171 
00172         return iLen;
00173 }
00174 
00175 
00176 /***************************************************************************
00177   Begin                 :       06.08.2012 / M. Hultsch
00178 
00179   Version               :       04.02.06 / 06.08.2012 / M. Hultsch
00180 
00181   Function                      :       [0xB2][0xBB] Innovatron (ISO 14443B') Data Exchange - synchronous call
00182 
00183                                                 NOTE: only for selected tags
00184 
00185   Parameters            :       unsigned char*  pucRequestData          - [in] buffer with APDU request
00186                                                 unsigned int    uiRequestLen            - [in] length of APDU (number of bytes)
00187                                                 unsigned char*  pucResponseData         - [out] for synchronous mode: buffer for APDU response
00188                                                 unsigned int    uiResponseBufferLen     - [in]  for synchronous mode: legth of response bufer
00189                                                 unsigned int&   uiResponseLen           - [out] length of APDU response (number of bytes)
00190 
00191   Return value          :       0                               - if tramsmission was successful
00192                                                 status byte (>1)- if the reader signals a problem
00193                                                 error code (<0) - if something goes wrong
00194 ***************************************************************************/
00195 int FedmIscTagHandler_ISO14443_Innovatron::Apdu(
00196         unsigned char*  pucRequestData,
00197         unsigned int    uiRequestLen,
00198         unsigned char*  pucResponseData,
00199         unsigned int    uiResponseBufferLen,
00200         unsigned int&   uiResponseLen )
00201 {
00202         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00203 
00204         int iDataLen = 2;
00205 
00206         m_ucRequestData[0] = 0xBB;
00207         m_ucRequestData[1] = 0x00;      // mode
00208 
00209         if(pucRequestData == NULL)
00210                 return FEDM_ERROR_NULL_POINTER;
00211 
00212         if(uiRequestLen == 0)
00213                 return FEDM_ERROR_PARAMETER;
00214 
00215         if(uiRequestLen > (FEDM_ISO14443_INNOVATRON_APDU_BUFFER_SIZE-2))
00216                 return FEDM_ERROR_SENDBUFFER_OVERFLOW;
00217 
00218         memcpy(&m_ucRequestData[2], pucRequestData, uiRequestLen);
00219         iDataLen += uiRequestLen;
00220 
00221         return FEISC_0xB2_ISOCmd(       m_pReader->GetReaderHnd(),
00222                                                                 m_pReader->GetBusAddress(),
00223                                                                 m_ucRequestData,
00224                                                                 iDataLen,
00225                                                                 m_ucResponseData,
00226                                                                 (int*)&m_uiResponseLen,
00227                                                                 0 );
00228 }
00229 
00230 int FedmIscTagHandler_ISO14443_Innovatron::Discard()
00231 {
00232         FEDM_TRACE(m_pReader->GetLogger(), FELOGMNG_DBG_FUNCTION_CALL | FELOGMNG_DBG_LF_COMM_TAG_HANDLER, __FUNCTION__);
00233 
00234         m_ucRequestData[0] = 0xBB;
00235         m_ucRequestData[1] = 0x01;      // mode
00236 
00237 
00238         return FEISC_0xB2_ISOCmd(       m_pReader->GetReaderHnd(),
00239                                                                 m_pReader->GetBusAddress(),
00240                                                                 m_ucRequestData,
00241                                                                 2,
00242                                                                 m_ucResponseData,
00243                                                                 (int*)&m_uiResponseLen,
00244                                                                 0 );
00245 }
00246 
00247 #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