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
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
00051
00052
00053
00054 FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto::FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto()
00055 {
00056 m_uiTimeout = 30;
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
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
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
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
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
00685
00686
00687
00688
00689
00690
00691
00692
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
00772
00773
00774
00775
00776
00777
00778
00779
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)