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
00036 #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)
00037
00038 #include "FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S.h"
00039 #include "../FEDM_ISCReader.h"
00040 #include "../FEDM_ISOTabItem.h"
00041 #include "../FEDM_ISCReaderID.h"
00042 #include "../FEDM_ISC.h"
00043 #include "../../FEDM_Functions.h"
00044
00045
00046 #if _MSC_VER >= 1400
00047 #pragma warning(disable : 4996)
00048 #endif
00049
00050
00051
00052
00053
00054
00055
00056
00057 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S(
00058 FEDM_ISCReader* pReader,
00059 FEDM_ISOTabItem* pTabItem )
00060 : FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_L(pReader, FedmIscTagHandler::TYPE_ISO15693_NXP_ICODE_SLI_S, pTabItem)
00061 {
00062 m_sTagName = "ISO 15693 : ";
00063 m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_NXP);
00064 m_sTagName += " I-Code SLI-S";
00065 }
00066
00067 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S(
00068 FEDM_ISCReader* pReader,
00069 unsigned int uiTagHandlerType,
00070 FEDM_ISOTabItem* pTabItem )
00071 : FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_L(pReader, uiTagHandlerType, pTabItem)
00072 {
00073 m_sTagName = "ISO 15693 : ";
00074 m_sTagName += FEDM_TabItem::GetISO15693Manufacturer(FEDM_ISC_ISO_MFR_NXP);
00075 m_sTagName += " I-Code SLI-S";
00076 }
00077
00078 FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::~FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S()
00079 {
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::ReadEPC(
00102 unsigned char* ucEpc,
00103 unsigned int uiEpcBufferLen )
00104 {
00105 FEDM_CHK3(ucEpc);
00106
00107 if(uiEpcBufferLen < 12)
00108 return FEDM_ERROR_BUFFER_LENGTH;
00109
00110 int iErr = 0;
00111
00112 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00113 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00114
00115 if(m_bNonAddressedMode)
00116 {
00117 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00118 }
00119 else if(m_pTabItem->m_bIsSelected)
00120 {
00121 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00122 }
00123 else
00124 {
00125 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00126 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00127 }
00128
00129 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xA8));
00130 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00131
00132
00133 int iBack = m_pReader->SendProtocol(0xB1);
00134 if(iBack)
00135 return iBack;
00136
00137 FEDM_CHK1(iErr, m_pReader->GetData(FEDM_ISC_TMP_B1_RSP_NXP_EPC_DATA, ucEpc, 12));
00138
00139 return FEDM_OK;
00140 }
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::ProtectPage(
00156 unsigned char ucPageNumber,
00157 unsigned char ucProtectionStatus )
00158 {
00159 int iErr = 0;
00160
00161 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB6));
00162 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00163
00164 if(m_bNonAddressedMode)
00165 {
00166 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00167 }
00168 else if(m_pTabItem->m_bIsSelected)
00169 {
00170 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00171 }
00172 else
00173 {
00174 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00175 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00176 }
00177
00178 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PAGE_NO, ucPageNumber));
00179 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PROTECTION_STATUS, ucProtectionStatus));
00180
00181 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB6));
00182 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00183
00184
00185 return m_pReader->SendProtocol(0xB1);
00186 }
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::LockPageProtectionCondition(
00202 unsigned char ucPageNumber )
00203 {
00204 int iErr = 0;
00205
00206 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB7));
00207 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00208
00209 if(m_bNonAddressedMode)
00210 {
00211 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00212 }
00213 else if(m_pTabItem->m_bIsSelected)
00214 {
00215 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00216 }
00217 else
00218 {
00219 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00220 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00221 }
00222
00223 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_PAGE_NO, ucPageNumber));
00224
00225 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB7));
00226 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00227
00228
00229 return m_pReader->SendProtocol(0xB1);
00230 }
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::GetMultipleBlockProtectionStatus(
00246 unsigned int uiFirstDataBlock,
00247 unsigned int uiNoOfDataBlocks,
00248 unsigned char* pucSecurityStatus )
00249 {
00250 int iErr = 0;
00251
00252 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB8));
00253 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00254
00255 if(m_bNonAddressedMode)
00256 {
00257 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00258 }
00259 else if(m_pTabItem->m_bIsSelected)
00260 {
00261 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00262 }
00263 else
00264 {
00265 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00266 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00267 }
00268
00269 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_DB_ADR, uiFirstDataBlock));
00270 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_DB_N, uiNoOfDataBlocks));
00271
00272
00273 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xB8));
00274 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00275
00276
00277 int iBack = m_pReader->SendProtocol(0xB1);
00278 if(iBack == 0)
00279 {
00280
00281 memcpy(pucSecurityStatus, &m_pTabItem->m_ucSecStatus[uiFirstDataBlock], uiNoOfDataBlocks);
00282 }
00283
00284 return iBack;
00285 }
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::DestroySLI_S()
00301 {
00302
00303 return DestroySLI_L();
00304 }
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319 int FedmIscTagHandler_ISO15693_NXP_ICODE_SLI_S::PasswordProtection(
00320 unsigned char ucPasswordParameter )
00321 {
00322 int iErr = 0;
00323
00324 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xBB));
00325 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE, (unsigned char)0));
00326
00327 if(m_bNonAddressedMode)
00328 {
00329 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_NONADR));
00330 }
00331 else if(m_pTabItem->m_bIsSelected)
00332 {
00333 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_SEL));
00334 }
00335 else
00336 {
00337 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MODE_ADR, (unsigned char)FEDM_ISC_ISO_MODE_ADR));
00338 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_UID, m_pTabItem->m_ucSnr, m_pTabItem->m_ucSnrLen));
00339 }
00340
00341 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_REQ_NXP_64BIT_PWD_PARAMETER, ucPasswordParameter));
00342
00343 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_CMD, (unsigned char)0xBB));
00344 FEDM_CHK1(iErr, m_pReader->SetData(FEDM_ISC_TMP_B1_MFR, (unsigned char)FEDM_ISC_ISO_MFR_NXP));
00345
00346
00347 return m_pReader->SendProtocol(0xB1);
00348 }
00349
00350 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO15693)