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_ISC_TAG_HANDLER_ISO15693_MAXIM_MAX66140_H_INCLUDED_)
00035 #define _FEDM_ISC_TAG_HANDLER_ISO15693_MAXIM_MAX66140_H_INCLUDED_
00036
00037 #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00038
00039 #include "../../FEDM.h"
00040 #include "FedmIscTagHandler_ISO15693_Maxim.h"
00041
00042 class FEDM_ISOTabItem;
00043
00051 class _FEDM_ISC_CORE_EXT_CLASS FedmIscTagHandler_ISO15693_Maxim_MAX66140 : public FedmIscTagHandler_ISO15693_Maxim
00052 {
00053 public:
00054
00055
00056 friend class FEDM_ISCReaderModule;
00057 friend class FEDM_ISCReader;
00058 friend class FEDM_ISOTabItem;
00059
00060
00061
00062
00063 int UserComputePageMAC( unsigned char* pucSecret,
00064 unsigned char* pucMemoryPageData,
00065 unsigned char ucPageNumber,
00066 unsigned char* pucUID,
00067 unsigned char* pucMAC);
00068
00069 int UserComputeSecret( unsigned char* pucSecret,
00070 unsigned char* pucMemoryPageData,
00071 unsigned char* pucPartialSecret,
00072 unsigned char* pucNewSecret);
00073
00074 int UserComputeCopyBufferMAC( unsigned char* pucSecret,
00075 unsigned char* pucMemoryPageData,
00076 unsigned char* pucReadWriteBufferData,
00077 unsigned char* pucIntegrityBytes,
00078 unsigned char pucPageNumber,
00079 unsigned char* pucUID,
00080 unsigned char* pucMAC);
00081
00082 int GetMemoryPageData( unsigned char ucRequestFlags,
00083 unsigned char ucPageNumber,
00084 unsigned char& ucResponseFlags,
00085 unsigned char* pucMemoryPageData);
00086
00087 int UpdateChallenge();
00088
00098 int GenerateSecret( unsigned char ucRequestFlags,
00099 unsigned char ucControlByte,
00100 unsigned char* pucPartialSecret,
00101 unsigned char& ucResponseFlags,
00102 unsigned char& ucPageCRCStatus);
00103
00113 int WriteBuffer( unsigned char ucRequestFlags,
00114 unsigned char ucBlockNumber,
00115 unsigned char* pucNewBlockData,
00116 unsigned char& ucResponseFlags);
00117
00127 int ReadBuffer( unsigned char ucRequestFlags,
00128 unsigned char& pucResponseFlags,
00129 unsigned char& ucBlockNumber,
00130 unsigned char* pucReadWriteBufferData);
00131
00141 int CopyBuffer( unsigned char ucRequestFlags,
00142 unsigned char ucBlockNumber,
00143 unsigned char* pucMAC,
00144 unsigned char& ucResponseFlags,
00145 unsigned char& ucPageCRCStatus);
00146
00156 int ReadSingleBlock( unsigned char ucRequestFlags,
00157 unsigned char ucBlockNumber,
00158 unsigned char& ucResponseFlags,
00159 unsigned char& ucSecurityStatus,
00160 unsigned char* pucMemoryData);
00161
00171 int CustomReadBlock( unsigned char ucRequestFlags,
00172 unsigned char ucBlockNumber,
00173 unsigned char& ucResponseFlags,
00174 unsigned char& ucSecurityStatus,
00175 unsigned char* pucMemoryData,
00176 unsigned char* pucIntegrityBytes);
00177
00187 int ComputePageMAC( unsigned char ucRequestFlags,
00188 unsigned char ucPageNumber,
00189 unsigned char& ucResponseFlags,
00190 unsigned char& ucPageCRCStatus,
00191 unsigned char* pucMAC);
00192
00193 protected:
00194
00195 FedmIscTagHandler_ISO15693_Maxim_MAX66140(FEDM_ISCReader* pReader, FEDM_ISOTabItem* pTabItem);
00196
00197 FedmIscTagHandler_ISO15693_Maxim_MAX66140(FEDM_ISCReader* pReader, unsigned int uiTagHandlerType, FEDM_ISOTabItem* pTabItem);
00198
00199 virtual ~FedmIscTagHandler_ISO15693_Maxim_MAX66140();
00200
00201 int ComputeMAC(unsigned char* ucM, unsigned int* uiMAC);
00202
00203 unsigned char m_ucRequestData[64];
00204 unsigned char m_ucResponseData[256];
00205
00206 unsigned char ucChallenge[5];
00207
00208 };
00209
00210 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00211
00212 #endif // !defined(_FEDM_ISC_TAG_HANDLER_ISO15693_MAXIM_MAX66140_H_INCLUDED_)