Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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
00051
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
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
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
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
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
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:
00150 return FEDM_ERROR_NO_DATA;
00151
00152 case 0x01:
00153 case 0x02:
00154 case 0x03:
00155 return FEDM_ERROR_UNSUPPORTED;
00156
00157 case 0x04:
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
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
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;
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;
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)