FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------------------
00002 |                                                                               |
00003 |      FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto.cpp        |
00004 |                                                                               |
00005 ---------------------------------------------------------------------
00006 
00007 Copyright © 2009-2011   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                   :       30.03.2009
00018 
00019 Version                 :       03.03.00 / 27.01.2011 / M. Sahm, M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       implementation class for OBID® classic-pro transponder ISO14443-4 MIFARE DESFire
00024                                                 with [0xC3] commands and internal SAM crypto commands
00025 
00026 NOTE                            :       this class supports only selected 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 #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00036 
00037 #include "../../FEDM.h"
00038 #include "../FEDM_ISCReader.h"
00039 #include "FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto.h"
00040 #include "FedmIscTagHandler_ISO14443_4_MIFARE_DESFire.h"
00041 
00042 
00043 #if _MSC_VER >= 1400
00044         #pragma warning(disable : 4996)
00045 #endif
00046 
00047 
00048 
00049 //####################################################################
00050 // class FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto
00051 // >> supports only ISO Host Commands <<
00052 //####################################################################
00053 
00054 FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto()
00055 {
00056         m_uiTimeout = 30; // 30 x 100ms
00057 }
00058 
00059 FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::~FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto()
00060 {
00061 }
00062 
00063 void FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::SetTimeout(unsigned int uiTimeout)
00064 {
00065         m_uiTimeout = uiTimeout;
00066 }
00067 
00068 unsigned char FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetErrorSource()
00069 {
00070         return m_pParent->m_pImpl_C3->m_ucErrorSource;
00071 }
00072 
00073 unsigned int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetErrorCode()
00074 {
00075         return m_pParent->m_pImpl_C3->m_uiErrorCode;
00076 }
00077 
00078 //---------------------------------------------------------------------------------
00079 // ------------------------ SECURITY RELATED COMMANDS -----------------------------
00080 //---------------------------------------------------------------------------------
00081 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::Authenticate(
00082         unsigned char ucSamSlotNo,
00083         unsigned char ucDESFireAuthMode,
00084         unsigned char ucDESFireKeyNo,
00085         unsigned char ucSamAuthMode,
00086         unsigned char ucSamKeyNo,
00087         unsigned char ucSamKeyVersion,
00088         unsigned char ucSamDiversificationInputLen,
00089         unsigned char* pucSamDiversificationInput )
00090 {
00091         unsigned char RFU = 0x00;
00092         unsigned int uiOldTimeout = 0;
00093         GetPortTimeout(&uiOldTimeout);
00094         SetPortTimeout(m_uiTimeout*100);
00095         int iBack = m_pParent->m_pImpl_C3->Authenticate(0x01, ucSamSlotNo, m_uiTimeout, RFU, ucDESFireAuthMode, ucDESFireKeyNo, ucSamAuthMode, ucSamKeyNo, ucSamKeyVersion, ucSamDiversificationInputLen, pucSamDiversificationInput);
00096         SetPortTimeout(uiOldTimeout);
00097         return iBack;
00098 }
00099 
00100 
00101 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ChangeKeySettings(
00102         unsigned char ucSamSlotNo, 
00103         unsigned char ucNewKeySettings )
00104 {
00105         unsigned int uiOldTimeout = 0;
00106         GetPortTimeout(&uiOldTimeout);
00107         SetPortTimeout(m_uiTimeout*100);
00108         int iBack = m_pParent->m_pImpl_C3->ChangeKeySettings(0x01, ucSamSlotNo, m_uiTimeout, ucNewKeySettings);
00109         SetPortTimeout(uiOldTimeout);
00110         return iBack;
00111 }
00112 
00113 
00114 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetKeySettings(
00115         unsigned char ucSamSlotNo, 
00116         unsigned char *pucResponseData, 
00117         unsigned int uiResponseBufferLength, 
00118         unsigned int &uiResponseLength )
00119 {
00120         unsigned int uiOldTimeout = 0;
00121         GetPortTimeout(&uiOldTimeout);
00122         SetPortTimeout(m_uiTimeout);
00123         int iBack = m_pParent->m_pImpl_C3->GetKeySettings(0x01, ucSamSlotNo, m_uiTimeout, pucResponseData, uiResponseBufferLength, uiResponseLength);
00124         SetPortTimeout(uiOldTimeout);
00125         return iBack;
00126 }
00127 
00128 
00129 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ChangeKey(
00130         unsigned char ucSamSlotNo, 
00131         unsigned char ucSamKeyCompilationMethod, 
00132         unsigned char ucSamCfg, 
00133         unsigned char ucSamKeyNoCurrentKey, 
00134         unsigned char ucSamKeyVersionCurrentKey, 
00135         unsigned char ucSamKeyNoNewKey, 
00136         unsigned char ucSamKeyVersionNewKey, 
00137         unsigned char ucSamDiversificationInputLen, 
00138         unsigned char *pucSamDiversificationInput )
00139 {
00140         unsigned char ucRFU = 0x00;
00141         unsigned int uiRFU = 0;
00142         string sRFU = "";
00143         unsigned int uiOldTimeout = 0;
00144         GetPortTimeout(&uiOldTimeout);
00145         SetPortTimeout(m_uiTimeout*100);
00146         int iBack = m_pParent->m_pImpl_C3->ChangeKey(   0x01, 
00147                                                                                                         ucSamSlotNo, 
00148                                                                                                         m_uiTimeout, 
00149                                                                                                         ucRFU, 
00150                                                                                                         ucRFU, 
00151                                                                                                         sRFU, 
00152                                                                                                         sRFU, 
00153                                                                                                         ucSamKeyCompilationMethod, 
00154                                                                                                         ucSamCfg, 
00155                                                                                                         ucSamKeyNoCurrentKey, 
00156                                                                                                         ucSamKeyVersionCurrentKey, 
00157                                                                                                         ucSamKeyNoNewKey, 
00158                                                                                                         ucSamKeyVersionNewKey, 
00159                                                                                                         ucSamDiversificationInputLen, 
00160                                                                                                         pucSamDiversificationInput);
00161         SetPortTimeout(uiOldTimeout);
00162         return iBack;
00163 }
00164 
00165 
00166 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetKeyVersion(
00167         unsigned char ucSamSlotNo, 
00168         unsigned char ucDESFireKeyNo, 
00169         unsigned char *pucResponseData, 
00170         unsigned int uiResponseBufferLength, 
00171         unsigned int &uiResponseLength)
00172 {
00173         unsigned int uiOldTimeout = 0;
00174         GetPortTimeout(&uiOldTimeout);
00175         SetPortTimeout(m_uiTimeout*100);
00176         int iBack = m_pParent->m_pImpl_C3->GetKeyVersion(0x01, ucSamSlotNo, m_uiTimeout, ucDESFireKeyNo, pucResponseData, uiResponseBufferLength, uiResponseLength);
00177         SetPortTimeout(uiOldTimeout);
00178         return iBack;
00179 }
00180 
00181 //---------------------------------------------------------------------------------
00182 // ------------------------ PICC LEVEL COMMANDS -----------------------------------
00183 //---------------------------------------------------------------------------------
00184 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateApplication(
00185         unsigned char ucSamSlotNo, 
00186         unsigned char ucPiccLevelFlags, 
00187         unsigned int uiApplicationID, 
00188         unsigned char ucKeySetting1, 
00189         unsigned char ucKeySetting2, 
00190         unsigned int uiISOFileID, 
00191         std::string sDFName )
00192 {
00193         unsigned int uiOldTimeout = 0;
00194         GetPortTimeout(&uiOldTimeout);
00195         SetPortTimeout(m_uiTimeout*100);
00196         int iBack = m_pParent->m_pImpl_C3->CreateApplication(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, uiApplicationID, ucKeySetting1, ucKeySetting2, uiISOFileID, sDFName);
00197         SetPortTimeout(uiOldTimeout);
00198         return iBack;
00199 }
00200 
00201 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::DeleteApplication(
00202         unsigned char ucSamSlotNo, 
00203         unsigned char ucPiccLevelFlags,
00204         unsigned int uiApplicationID )
00205 {
00206         unsigned int uiOldTimeout = 0;
00207         GetPortTimeout(&uiOldTimeout);
00208         SetPortTimeout(m_uiTimeout*100);
00209         int iBack = m_pParent->m_pImpl_C3->DeleteApplication(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, uiApplicationID);
00210         SetPortTimeout(uiOldTimeout);
00211         return iBack;
00212 }
00213 
00214 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetApplicationIDs(
00215         unsigned char ucSamSlotNo, 
00216         unsigned char ucPiccLevelFlags, 
00217         unsigned char *pucResponseData, 
00218         unsigned int uiResponseBufferLength, 
00219         unsigned int &uiResponseLength)
00220 {
00221         unsigned int uiOldTimeout = 0;
00222         GetPortTimeout(&uiOldTimeout);
00223         SetPortTimeout(m_uiTimeout*100);
00224         int iBack = m_pParent->m_pImpl_C3->GetApplicationIDs(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00225         SetPortTimeout(uiOldTimeout);
00226         return iBack;
00227 }
00228 
00229 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::FreeMemory(
00230         unsigned char ucSamSlotNo, 
00231         unsigned char ucPiccLevelFlags,
00232         unsigned char* pucResponseData,
00233         unsigned int uiResponseBufferLength,
00234         unsigned int& uiResponseLength )
00235 {
00236         unsigned int uiOldTimeout = 0;
00237         GetPortTimeout(&uiOldTimeout);
00238         SetPortTimeout(m_uiTimeout*100);
00239         int iBack = m_pParent->m_pImpl_C3->FreeMemory(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00240         SetPortTimeout(uiOldTimeout);
00241         return iBack;
00242 }
00243 
00244 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetDFNames(
00245         unsigned char ucSamSlotNo,
00246         unsigned char ucPiccLevelFlags, 
00247         unsigned char *pucResponseData, 
00248         unsigned int uiResponseBufferLength, 
00249         unsigned int &uiResponseLength)
00250 {
00251         unsigned int uiOldTimeout = 0;
00252         GetPortTimeout(&uiOldTimeout);
00253         SetPortTimeout(m_uiTimeout*100);
00254         int iBack = m_pParent->m_pImpl_C3->GetDFNames(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00255         SetPortTimeout(uiOldTimeout);
00256         return iBack;
00257 }
00258 
00259 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::SelectApplication(
00260         unsigned char ucSamSlotNo, 
00261         unsigned char ucPiccLevelFlags, 
00262         unsigned int uiApplicationID)
00263 {
00264         unsigned int uiOldTimeout = 0;
00265         GetPortTimeout(&uiOldTimeout);
00266         SetPortTimeout(m_uiTimeout*100);
00267         int iBack = m_pParent->m_pImpl_C3->SelectApplication(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, uiApplicationID);
00268         SetPortTimeout(uiOldTimeout);
00269         return iBack;
00270 }
00271 
00272 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::FormatPICC(
00273         unsigned char ucSamSlotNo, 
00274         unsigned char ucPiccLevelFlags)
00275 {
00276         unsigned int uiOldTimeout = 0;
00277         GetPortTimeout(&uiOldTimeout);
00278         SetPortTimeout(m_uiTimeout*100);
00279         int iBack = m_pParent->m_pImpl_C3->FormatPICC(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags);
00280         SetPortTimeout(uiOldTimeout);
00281         return iBack;
00282 }
00283 
00284 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetVersion(
00285         unsigned char ucSamSlotNo, 
00286         unsigned char ucPiccLevelFlags, 
00287         unsigned char *pucResponseData, 
00288         unsigned int uiResponseBufferLength, 
00289         unsigned int &uiResponseLength )
00290 {
00291         unsigned int uiOldTimeout = 0;
00292         GetPortTimeout(&uiOldTimeout);
00293         SetPortTimeout(m_uiTimeout*100);
00294         int iBack = m_pParent->m_pImpl_C3->GetVersion(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00295         SetPortTimeout(uiOldTimeout);
00296         return iBack;
00297 }
00298 
00299 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetCardUID(
00300         unsigned char ucSamSlotNo, 
00301         unsigned char ucPiccLevelFlags, 
00302         unsigned char *pucResponseData, 
00303         unsigned int uiResponseBufferLength, 
00304         unsigned int &uiResponseLength )
00305 {
00306         unsigned int uiOldTimeout = 0;
00307         GetPortTimeout(&uiOldTimeout);
00308         SetPortTimeout(m_uiTimeout*100);
00309         int iBack = m_pParent->m_pImpl_C3->GetCardUID(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00310         SetPortTimeout(uiOldTimeout);
00311         return iBack;
00312 }
00313 
00314 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::SetConfiguration(
00315         unsigned char ucSamSlotNo, 
00316         unsigned char ucPiccLevelFlags, 
00317         unsigned char *pucRequestData, 
00318         unsigned int uiRequestLength )
00319 {
00320         unsigned int uiOldTimeout = 0;
00321         GetPortTimeout(&uiOldTimeout);
00322         SetPortTimeout(m_uiTimeout*100);
00323         int iBack = m_pParent->m_pImpl_C3->SetConfiguration(0x01, ucSamSlotNo, m_uiTimeout, ucPiccLevelFlags, pucRequestData, uiRequestLength);
00324         SetPortTimeout(uiOldTimeout);
00325         return iBack;
00326 }
00327 
00328 //---------------------------------------------------------------------------------
00329 // ------------------------ APPLICATION LEVEL COMMANDS ----------------------------
00330 //---------------------------------------------------------------------------------
00331 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ChangeFileSettings(
00332         unsigned char ucSamSlotNo, 
00333         unsigned char ucApplicationLevelFlags, 
00334         unsigned char ucFileNo, 
00335         unsigned char ucNewFileCommSettings, 
00336         unsigned char ucNewFileReadWriteAccessRights, 
00337         unsigned char ucNewFileChangeAccessRights, 
00338         unsigned char ucNewFileReadAccessRights, 
00339         unsigned char ucNewFileWriteAccessRights)
00340 {
00341         unsigned int uiOldTimeout = 0;
00342         GetPortTimeout(&uiOldTimeout);
00343         SetPortTimeout(m_uiTimeout*100);
00344         int iBack = m_pParent->m_pImpl_C3->ChangeFileSettings(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, ucNewFileCommSettings, ucNewFileReadWriteAccessRights, ucNewFileChangeAccessRights, ucNewFileReadAccessRights, ucNewFileWriteAccessRights);
00345         SetPortTimeout(uiOldTimeout);
00346         return iBack;
00347 }
00348 
00349 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetFileIDs(
00350         unsigned char ucSamSlotNo, 
00351         unsigned char ucApplicationLevelFlags, 
00352         unsigned char *pucResponseData, 
00353         unsigned int uiResponseBufferLength, 
00354         unsigned int &uiResponseLength )
00355 {
00356         unsigned int uiOldTimeout = 0;
00357         GetPortTimeout(&uiOldTimeout);
00358         SetPortTimeout(m_uiTimeout*100);
00359         int iBack = m_pParent->m_pImpl_C3->GetFileIDs(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00360         SetPortTimeout(uiOldTimeout);
00361         return iBack;
00362 }
00363 
00364 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetFileSettings(
00365         unsigned char ucSamSlotNo, 
00366         unsigned char ucApplicationLevelFlags, 
00367         unsigned char ucFileNo, 
00368         unsigned char *pucResponseData, 
00369         unsigned int uiResponseBufferLength, 
00370         unsigned int &uiResponseLength )
00371 {
00372         unsigned int uiOldTimeout = 0;
00373         GetPortTimeout(&uiOldTimeout);
00374         SetPortTimeout(m_uiTimeout*100);
00375         int iBack = m_pParent->m_pImpl_C3->GetFileSettings(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, pucResponseData, uiResponseBufferLength, uiResponseLength);
00376         SetPortTimeout(uiOldTimeout);
00377         return iBack;
00378 }
00379 
00380 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateStdDataFile(
00381         unsigned char ucSamSlotNo, 
00382         unsigned char ucApplicationLevelFlags, 
00383         unsigned char ucFileNo, 
00384         unsigned int uiISOFileID, 
00385         unsigned char ucFileCommSettings, 
00386         unsigned char ucFileReadWriteAccessRights, 
00387         unsigned char ucFileChangeAccessRights, 
00388         unsigned char ucFileReadAccessRights, 
00389         unsigned char ucFileWriteAccessRights, 
00390         unsigned int uiFileSize )
00391 {
00392         unsigned int uiOldTimeout = 0;
00393         GetPortTimeout(&uiOldTimeout);
00394         SetPortTimeout(m_uiTimeout*100);
00395         int iBack = m_pParent->m_pImpl_C3->CreateStdDataFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, uiISOFileID, ucFileCommSettings, ucFileReadWriteAccessRights, ucFileChangeAccessRights, ucFileReadAccessRights, ucFileWriteAccessRights, uiFileSize);
00396         SetPortTimeout(uiOldTimeout);
00397         return iBack;
00398 }
00399 
00400 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateBackupDataFile(
00401         unsigned char ucSamSlotNo, 
00402         unsigned char ucApplicationLevelFlags, 
00403         unsigned char ucFileNo, 
00404         unsigned int uiISOFileID, 
00405         unsigned char ucFileCommSettings, 
00406         unsigned char ucFileReadWriteAccessRights, 
00407         unsigned char ucFileChangeAccessRights, 
00408         unsigned char ucFileReadAccessRights, 
00409         unsigned char ucFileWriteAccessRights, 
00410         unsigned int uiFileSize )
00411 {
00412         unsigned int uiOldTimeout = 0;
00413         GetPortTimeout(&uiOldTimeout);
00414         SetPortTimeout(m_uiTimeout*100);
00415         int iBack = m_pParent->m_pImpl_C3->CreateBackupDataFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, uiISOFileID, ucFileCommSettings, ucFileReadWriteAccessRights, ucFileChangeAccessRights, ucFileReadAccessRights, ucFileWriteAccessRights, uiFileSize);
00416         SetPortTimeout(uiOldTimeout);
00417         return iBack;
00418 }
00419 
00420 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateValueFile(
00421         unsigned char ucSamSlotNo, 
00422         unsigned char ucApplicationLevelFlags, 
00423         unsigned char ucFileNo, 
00424         unsigned char ucFileCommSettings, 
00425         unsigned char ucFileReadWriteAccessRights, 
00426         unsigned char ucFileChangeAccessRights, 
00427         unsigned char ucFileReadAccessRights, 
00428         unsigned char ucFileWriteAccessRights, 
00429         unsigned int uiLowerLimit, 
00430         unsigned int uiUpperLimit, 
00431         unsigned int uiValue, 
00432         unsigned char ucLimitedCreditEnabled )
00433 {
00434         unsigned int uiOldTimeout = 0;
00435         GetPortTimeout(&uiOldTimeout);
00436         SetPortTimeout(m_uiTimeout*100);
00437         int iBack = m_pParent->m_pImpl_C3->CreateValueFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, ucFileCommSettings, ucFileReadWriteAccessRights, ucFileChangeAccessRights, ucFileReadAccessRights, ucFileWriteAccessRights, uiLowerLimit, uiUpperLimit, uiValue, ucLimitedCreditEnabled);
00438         SetPortTimeout(uiOldTimeout);
00439         return iBack;
00440 }
00441 
00442 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateLinearRecordFile(
00443         unsigned char ucSamSlotNo, 
00444         unsigned char ucApplicationLevelFlags, 
00445         unsigned char ucFileNo, 
00446         unsigned int uiISOFileID, 
00447         unsigned char ucFileCommSettings, 
00448         unsigned char ucFileReadWriteAccessRights, 
00449         unsigned char ucFileChangeAccessRights, 
00450         unsigned char ucFileReadAccessRights, 
00451         unsigned char ucFileWriteAccessRights, 
00452         unsigned int uiRecordSize, 
00453         unsigned int uiMaxNoOfRecords )
00454 {
00455         unsigned int uiOldTimeout = 0;
00456         GetPortTimeout(&uiOldTimeout);
00457         SetPortTimeout(m_uiTimeout*100);
00458         int iBack = m_pParent->m_pImpl_C3->CreateLinearRecordFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, uiISOFileID, ucFileCommSettings, ucFileReadWriteAccessRights, ucFileChangeAccessRights, ucFileReadAccessRights, ucFileWriteAccessRights, uiRecordSize, uiMaxNoOfRecords);
00459         SetPortTimeout(uiOldTimeout);
00460         return iBack;
00461 }
00462 
00463 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CreateCyclicRecordFile(
00464         unsigned char ucSamSlotNo, 
00465         unsigned char ucApplicationLevelFlags, 
00466         unsigned char ucFileNo, 
00467         unsigned int uiISOFileID, 
00468         unsigned char ucFileCommSettings, 
00469         unsigned char ucFileReadWriteAccessRights, 
00470         unsigned char ucFileChangeAccessRights, 
00471         unsigned char ucFileReadAccessRights, 
00472         unsigned char ucFileWriteAccessRights, 
00473         unsigned int uiRecordSize, 
00474         unsigned int uiMaxNoOfRecords )
00475 {
00476         unsigned int uiOldTimeout = 0;
00477         GetPortTimeout(&uiOldTimeout);
00478         SetPortTimeout(m_uiTimeout*100);
00479         int iBack = m_pParent->m_pImpl_C3->CreateCyclicRecordFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo, uiISOFileID, ucFileCommSettings, ucFileReadWriteAccessRights, ucFileChangeAccessRights, ucFileReadAccessRights, ucFileWriteAccessRights, uiRecordSize, uiMaxNoOfRecords);
00480         SetPortTimeout(uiOldTimeout);
00481         return iBack;
00482 }
00483 
00484 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::DeleteFile(
00485         unsigned char ucSamSlotNo, 
00486         unsigned char ucApplicationLevelFlags, 
00487         unsigned char ucFileNo )
00488 {
00489         unsigned int uiOldTimeout = 0;
00490         GetPortTimeout(&uiOldTimeout);
00491         SetPortTimeout(m_uiTimeout*100);
00492         int iBack = m_pParent->m_pImpl_C3->DeleteFile(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, ucFileNo);
00493         SetPortTimeout(uiOldTimeout);
00494         return iBack;
00495 }
00496 
00497 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetISOFileIDs(
00498         unsigned char ucSamSlotNo, 
00499         unsigned char ucApplicationLevelFlags, 
00500         unsigned char *pucResponseData, 
00501         unsigned int uiResponseBufferLength, 
00502         unsigned int &uiResponseLength )
00503 {
00504         unsigned int uiOldTimeout = 0;
00505         GetPortTimeout(&uiOldTimeout);
00506         SetPortTimeout(m_uiTimeout*100);
00507         int iBack = m_pParent->m_pImpl_C3->GetISOFileIDs(0x01, ucSamSlotNo, m_uiTimeout, ucApplicationLevelFlags, pucResponseData, uiResponseBufferLength, uiResponseLength);
00508         SetPortTimeout(uiOldTimeout);
00509         return iBack;
00510 }
00511 
00512 //---------------------------------------------------------------------------------
00513 // ------------------------ DATA MANIPULATION COMMANDS ----------------------------
00514 //---------------------------------------------------------------------------------
00515 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ReadStandardData(
00516         unsigned char ucSamSlotNo, 
00517         unsigned char ucDataManipulationFlags, 
00518         unsigned char ucFileNo, 
00519         unsigned char ucFileCommSettings, 
00520         unsigned int uiFileOffset, 
00521         unsigned int uiFileLen, 
00522         unsigned char *pucFileData)
00523 {
00524         unsigned int uiOldTimeout = 0;
00525         GetPortTimeout(&uiOldTimeout);
00526         SetPortTimeout(m_uiTimeout*100);
00527         int iBack = m_pParent->m_pImpl_C3->ReadStandardData(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiFileOffset, uiFileLen, pucFileData);
00528         SetPortTimeout(uiOldTimeout);
00529         return iBack;
00530 }
00531 
00532 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::WriteStandardData(
00533         unsigned char ucSamSlotNo, 
00534         unsigned char ucDataManipulationFlags, 
00535         unsigned char ucFileNo, 
00536         unsigned char ucFileCommSettings, 
00537         unsigned int uiFileOffset, 
00538         unsigned int uiFileLen, 
00539         unsigned char *pucFileData)
00540 {
00541         unsigned int uiOldTimeout = 0;
00542         GetPortTimeout(&uiOldTimeout);
00543         SetPortTimeout(m_uiTimeout*100);
00544         int iBack = m_pParent->m_pImpl_C3->WriteStandardData(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiFileOffset, uiFileLen, pucFileData);
00545         SetPortTimeout(uiOldTimeout);
00546         return iBack;
00547 }
00548 
00549 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetValue(
00550         unsigned char ucSamSlotNo, 
00551         unsigned char ucDataManipulationFlags, 
00552         unsigned char ucFileNo, 
00553         unsigned char ucFileCommSettings, 
00554         unsigned int &uiValue)
00555 {
00556         unsigned int uiOldTimeout = 0;
00557         GetPortTimeout(&uiOldTimeout);
00558         SetPortTimeout(m_uiTimeout*100);
00559         int iBack = m_pParent->m_pImpl_C3->GetValue(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiValue);
00560         SetPortTimeout(uiOldTimeout);
00561         return iBack;
00562 }
00563 
00564 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::Debit(
00565         unsigned char ucSamSlotNo, 
00566         unsigned char ucDataManipulationFlags, 
00567         unsigned char ucFileNo, 
00568         unsigned char ucFileCommSettings, 
00569         unsigned int uiDebitValue)
00570 {
00571         unsigned int uiOldTimeout = 0;
00572         GetPortTimeout(&uiOldTimeout);
00573         SetPortTimeout(m_uiTimeout*100);
00574         int iBack = m_pParent->m_pImpl_C3->Debit(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiDebitValue);
00575         SetPortTimeout(uiOldTimeout);
00576         return iBack;
00577 }
00578 
00579 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::Credit(
00580         unsigned char ucSamSlotNo, 
00581         unsigned char ucDataManipulationFlags, 
00582         unsigned char ucFileNo, 
00583         unsigned char ucFileCommSettings, 
00584         unsigned int uiCreditValue)
00585 {
00586         unsigned int uiOldTimeout = 0;
00587         GetPortTimeout(&uiOldTimeout);
00588         SetPortTimeout(m_uiTimeout*100);
00589         int iBack = m_pParent->m_pImpl_C3->Credit(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiCreditValue);
00590         SetPortTimeout(uiOldTimeout);
00591         return iBack;
00592 }
00593 
00594 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::LimitedCredit(
00595         unsigned char ucSamSlotNo, 
00596         unsigned char ucDataManipulationFlags, 
00597         unsigned char ucFileNo, 
00598         unsigned char ucFileCommSettings, 
00599         unsigned int uiCreditValue)
00600 {
00601         unsigned int uiOldTimeout = 0;
00602         GetPortTimeout(&uiOldTimeout);
00603         SetPortTimeout(m_uiTimeout*100);
00604         int iBack = m_pParent->m_pImpl_C3->LimitedCredit(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiCreditValue);
00605         SetPortTimeout(uiOldTimeout);
00606         return iBack;
00607 }
00608 
00609 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::WriteRecord(
00610         unsigned char ucSamSlotNo, 
00611         unsigned char ucDataManipulationFlags, 
00612         unsigned char ucFileNo, 
00613         unsigned char ucFileCommSettings, 
00614         unsigned int uiFileOffset, 
00615         unsigned int uiRecordLen, 
00616         unsigned char *pucRecordData)
00617 {
00618         unsigned int uiOldTimeout = 0;
00619         GetPortTimeout(&uiOldTimeout);
00620         SetPortTimeout(m_uiTimeout*100);
00621         int iBack = m_pParent->m_pImpl_C3->WriteRecord(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiFileOffset, uiRecordLen, pucRecordData);
00622         SetPortTimeout(uiOldTimeout);
00623         return iBack;
00624 }
00625 
00626 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ReadRecords(
00627         unsigned char ucSamSlotNo, 
00628         unsigned char ucDataManipulationFlags, 
00629         unsigned char ucFileNo, 
00630         unsigned char ucFileCommSettings, 
00631         unsigned int uiRecordOffset, 
00632         unsigned int uiNoOfRecords, 
00633         unsigned int uiRecordSize, 
00634         unsigned char *pucRecordData)
00635 {
00636         unsigned int uiOldTimeout = 0;
00637         GetPortTimeout(&uiOldTimeout);
00638         SetPortTimeout(m_uiTimeout*100);
00639         int iBack = m_pParent->m_pImpl_C3->ReadRecords(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings, uiRecordOffset, uiNoOfRecords, uiRecordSize, pucRecordData);
00640         SetPortTimeout(uiOldTimeout);
00641         return iBack;
00642 }
00643 
00644 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::ClearRecordFile(
00645         unsigned char ucSamSlotNo,
00646         unsigned char ucDataManipulationFlags,
00647         unsigned char ucFileNo,
00648         unsigned char ucFileCommSettings)
00649 {
00650         unsigned int uiOldTimeout = 0;
00651         GetPortTimeout(&uiOldTimeout);
00652         SetPortTimeout(m_uiTimeout*100);
00653         int iBack = m_pParent->m_pImpl_C3->ClearRecordFile(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags, ucFileNo, ucFileCommSettings);
00654         SetPortTimeout(uiOldTimeout);
00655         return iBack;
00656 }
00657 
00658 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::CommitTransaction(
00659         unsigned char ucSamSlotNo, 
00660         unsigned char ucDataManipulationFlags )
00661 {
00662         unsigned int uiOldTimeout = 0;
00663         GetPortTimeout(&uiOldTimeout);
00664         SetPortTimeout(m_uiTimeout*100);
00665         int iBack = m_pParent->m_pImpl_C3->CommitTransaction(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags);
00666         SetPortTimeout(uiOldTimeout);
00667         return iBack;
00668 }
00669 
00670 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::AbortTransaction(
00671         unsigned char ucSamSlotNo, 
00672         unsigned char ucDataManipulationFlags )
00673 {
00674         unsigned int uiOldTimeout = 0;
00675         GetPortTimeout(&uiOldTimeout);
00676         SetPortTimeout(m_uiTimeout*100);
00677         int iBack = m_pParent->m_pImpl_C3->AbortTransaction(0x01, ucSamSlotNo, m_uiTimeout, ucDataManipulationFlags);
00678         SetPortTimeout(uiOldTimeout);
00679         return iBack;
00680 }
00681 
00682 
00683 /***************************************************************************
00684   Begin                 :       10.11.2010 / M. Hultsch
00685 
00686   Version               :       03.02.07 / 10.11.2010 / M. Hultsch
00687 
00688   Function                      :       gets port timeout from port library
00689 
00690   Parameters            :       unsigned int*  uiTimeout        -       pointer to value
00691 
00692   Return value          :       FEDM_OK or error code (<0)
00693 ***************************************************************************/
00694 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::GetPortTimeout(unsigned int* uiTimeout)
00695 {
00696         int iPortHnd = m_pParent->m_pReader->GetPortHnd();
00697         if(iPortHnd < 0)
00698                 return FEDM_ERROR_NOT_CONNECTED;
00699 
00700 
00701         char cValue[16];
00702         int iErr;
00703 
00704 #ifdef _FEDM_COM_SUPPORT
00705 #if !defined(_FEDM_SUPPORT_SLINK)
00706         LPFN_FECOM_GET_PORT_PARA lpfnGetPortPara = (LPFN_FECOM_GET_PORT_PARA)m_pParent->m_pReader->GetFeComFunction(FECOM_GET_PORT_PARA);
00707         FEDM_CHK3(lpfnGetPortPara);
00708 #endif
00709 #endif
00710 
00711 #ifdef _FEDM_USB_SUPPORT
00712 #if !defined(_FEDM_SUPPORT_SLINK)
00713         LPFN_FEUSB_GET_DEVICE_PARA lpfnGetDevicePara = (LPFN_FEUSB_GET_DEVICE_PARA)m_pParent->m_pReader->GetFeUsbFunction(FEUSB_GET_DEVICE_PARA);
00714         FEDM_CHK3(lpfnGetDevicePara);
00715 #endif
00716 #endif
00717 
00718 #ifdef _FEDM_TCP_SUPPORT
00719 #if !defined(_FEDM_SUPPORT_SLINK)
00720         LPFN_FETCP_GET_SOCKET_PARA lpfnGetSocketPara = (LPFN_FETCP_GET_SOCKET_PARA)m_pParent->m_pReader->GetFeTcpFunction(FETCP_GET_SOCKET_PARA);
00721         FEDM_CHK3(lpfnGetSocketPara);
00722 #endif
00723 #endif
00724 
00725         if(FEDM_IS_COMPORT(iPortHnd))
00726         {
00727 #ifdef _FEDM_COM_SUPPORT
00728 #if !defined(_FEDM_SUPPORT_SLINK)
00729                 FEDM_CHK1(iErr, lpfnGetPortPara(iPortHnd, "Timeout", cValue));
00730 #else
00731                 FEDM_CHK1(iErr, FECOM_GetPortPara(iPortHnd, "Timeout", cValue));
00732 #endif
00733                 sscanf(cValue,"%u", uiTimeout);
00734 #else
00735                 return FEDM_ERROR_UNSUPPORTED;
00736 #endif
00737         }
00738         else if(FEDM_IS_TCPPORT(iPortHnd))
00739         {
00740 #ifdef _FEDM_TCP_SUPPORT
00741 #if !defined(_FEDM_SUPPORT_SLINK)
00742                 FEDM_CHK1(iErr, lpfnGetSocketPara(iPortHnd, "Timeout", cValue));
00743 #else
00744                 FEDM_CHK1(iErr, FETCP_GetSocketPara(iPortHnd, "Timeout", cValue));
00745 #endif
00746                 sscanf(cValue,"%u", uiTimeout);
00747 #else
00748                 return FEDM_ERROR_UNSUPPORTED;
00749 #endif
00750         }
00751         else if(FEDM_IS_USBPORT(iPortHnd))
00752         {
00753 #ifdef _FEDM_USB_SUPPORT
00754 #if !defined(_FEDM_SUPPORT_SLINK)
00755                 FEDM_CHK1(iErr, lpfnGetDevicePara(iPortHnd, "Timeout", cValue));
00756 #else
00757                 FEDM_CHK1(iErr, FEUSB_GetDevicePara(iPortHnd, "Timeout", cValue));
00758 #endif
00759                 sscanf(cValue,"%u", uiTimeout);
00760 #endif
00761         }
00762         else
00763         {
00764                 return FEDM_ERROR_UNSUPPORTED_PORT_DRIVER;
00765         }
00766 
00767         return FEDM_OK;
00768 }
00769 
00770 /***************************************************************************
00771   Begin                 :       10.11.2010 / M. Hultsch
00772 
00773   Version               :       03.02.07 / 10.11.2010 / M. Hultsch
00774 
00775   Function                      :       aets port timeout in port library
00776 
00777   Parameters            :       unsigned int uiTimeout  -       new timeout value
00778 
00779   Return value          :       FEDM_OK or error code (<0)
00780 ***************************************************************************/
00781 int FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::SetPortTimeout(unsigned int uiTimeout)
00782 {
00783         char cValue[16];
00784 
00785         int iPortHnd = m_pParent->m_pReader->GetPortHnd();
00786         if(iPortHnd < 0)
00787                 return FEDM_ERROR_NOT_CONNECTED;
00788 
00789 
00790 #ifdef _FEDM_COM_SUPPORT
00791 #if !defined(_FEDM_SUPPORT_SLINK)
00792         LPFN_FECOM_SET_PORT_PARA lpfnSetPortPara = (LPFN_FECOM_SET_PORT_PARA)m_pParent->m_pReader->GetFeComFunction(FECOM_SET_PORT_PARA);
00793         FEDM_CHK3(lpfnSetPortPara);
00794 #endif
00795 #endif
00796 
00797 #ifdef _FEDM_USB_SUPPORT
00798 #if !defined(_FEDM_SUPPORT_SLINK)
00799         LPFN_FEUSB_SET_DEVICE_PARA lpfnSetDevicePara = (LPFN_FEUSB_SET_DEVICE_PARA)m_pParent->m_pReader->GetFeUsbFunction(FEUSB_SET_DEVICE_PARA);
00800         FEDM_CHK3(lpfnSetDevicePara);
00801 #endif
00802 #endif
00803 
00804 #ifdef _FEDM_TCP_SUPPORT
00805 #if !defined(_FEDM_SUPPORT_SLINK)
00806         LPFN_FETCP_SET_SOCKET_PARA lpfnSetSocketPara = (LPFN_FETCP_SET_SOCKET_PARA)m_pParent->m_pReader->GetFeTcpFunction(FETCP_SET_SOCKET_PARA);
00807         FEDM_CHK3(lpfnSetSocketPara);
00808 #endif
00809 #endif
00810 
00811         if(FEDM_IS_COMPORT(iPortHnd))
00812         {
00813 #ifdef _FEDM_COM_SUPPORT
00814                 sprintf(cValue,"%u", uiTimeout);
00815 #if !defined(_FEDM_SUPPORT_SLINK)
00816                 return lpfnSetPortPara(iPortHnd, "Timeout", cValue);
00817 #else
00818                 return FECOM_SetPortPara(iPortHnd, "Timeout", cValue);
00819 #endif
00820 #else
00821                 return FEDM_ERROR_UNSUPPORTED;
00822 #endif
00823         }
00824         else if(FEDM_IS_TCPPORT(iPortHnd))
00825         {
00826 #ifdef _FEDM_TCP_SUPPORT
00827                 sprintf(cValue,"%u", uiTimeout);
00828 #if !defined(_FEDM_SUPPORT_SLINK)
00829                 return lpfnSetSocketPara(iPortHnd, "Timeout", cValue);
00830 #else
00831                 return FETCP_SetSocketPara(iPortHnd, "Timeout", cValue);
00832 #endif
00833 #else
00834                 return FEDM_ERROR_UNSUPPORTED;
00835 #endif
00836         }
00837         else if(FEDM_IS_USBPORT(iPortHnd))
00838         {
00839 #ifdef _FEDM_USB_SUPPORT
00840                 sprintf(cValue,"%u", uiTimeout);
00841 #if !defined(_FEDM_SUPPORT_SLINK)
00842                 return lpfnSetDevicePara(iPortHnd, "Timeout", cValue);
00843 #else
00844                 return FEUSB_SetDevicePara(iPortHnd, "Timeout", cValue);
00845 #endif
00846 #else
00847                 return FEDM_ERROR_UNSUPPORTED;
00848 #endif
00849         }
00850 
00851         return FEDM_ERROR_UNSUPPORTED;
00852 }
00853 
00854 #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