Home | History | Annotate | Download | only in src

Lines Matching refs:NdefMap

97 static NFCSTATUS phFriNfc_Tpz_H_RdBytes(phFriNfc_NdefMap_t *NdefMap,
105 static NFCSTATUS phFriNfc_Tpz_H_ProReadID(phFriNfc_NdefMap_t *NdefMap);
111 static NFCSTATUS phFriNfc_Tpz_H_ProReadAll(phFriNfc_NdefMap_t *NdefMap);
117 static NFCSTATUS phFriNfc_Tpz_H_CallNxtOp(phFriNfc_NdefMap_t *NdefMap);
123 static NFCSTATUS phFriNfc_Tpz_H_ChkCCBytes(phFriNfc_NdefMap_t *NdefMap);
129 static NFCSTATUS phFriNfc_Tpz_H_findNDEFTLV(phFriNfc_NdefMap_t *NdefMap);
135 static NFCSTATUS phFriNfc_Tpz_H_WrAByte(phFriNfc_NdefMap_t *NdefMap,
145 static NFCSTATUS phFriNfc_Tpz_H_ProWrNMN(phFriNfc_NdefMap_t *NdefMap);
151 static NFCSTATUS phFriNfc_Tpz_H_ProWrTLV(phFriNfc_NdefMap_t *NdefMap);
157 static NFCSTATUS phFriNfc_Tpz_H_WrLByte(phFriNfc_NdefMap_t *NdefMap);
163 static NFCSTATUS phFriNfc_Tpz_H_CpDataToUsrBuf( phFriNfc_NdefMap_t *NdefMap);
169 static NFCSTATUS phFriNfc_Tpz_H_ProWrUsrData( phFriNfc_NdefMap_t *NdefMap);
175 static void phFriNfc_Tpz_H_BlkChk(phFriNfc_NdefMap_t *NdefMap);
181 static NFCSTATUS phFriNfc_Tpz_H_WrByte0ValE1(phFriNfc_NdefMap_t *NdefMap);
187 static void phFriNfc_Tpz_H_Complete(phFriNfc_NdefMap_t *NdefMap,
194 static NFCSTATUS phFriNfc_Tpz_H_ChkCCinChkNdef(phFriNfc_NdefMap_t *NdefMap);
200 static void phFriNfc_Tpz_H_ChkLockBits(phFriNfc_NdefMap_t *NdefMap);
206 static NFCSTATUS phFriNfc_Tpz_H_WrCCorTLV(phFriNfc_NdefMap_t *NdefMap);
226 static NFCSTATUS phFriNfc_Tpz_H_ProCCTLV(phFriNfc_NdefMap_t *NdefMap);
228 void phFriNfc_TopazMap_H_Reset(phFriNfc_NdefMap_t *NdefMap)
231 NdefMap->TopazContainer.CRIndex = PH_FRINFC_NDEFMAP_CR_INVALID_OPE;
232 NdefMap->TopazContainer.CurrentBlock = PH_FRINFC_TOPAZ_VAL1;
233 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL0;
234 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_VAL0;
235 (void)memset(NdefMap->TopazContainer.ReadBuffer, PH_FRINFC_TOPAZ_VAL0,
236 sizeof(NdefMap->TopazContainer.ReadBuffer));
237 NdefMap->TopazContainer.ReadWriteCompleteFlag = PH_FRINFC_TOPAZ_FLAG0;
238 NdefMap->TopazContainer.RemainingSize = PH_FRINFC_TOPAZ_VAL0;
239 (void)memset(NdefMap->TopazContainer.UID, PH_FRINFC_TOPAZ_VAL0,
240 sizeof(NdefMap->TopazContainer.UID));
241 NdefMap->TopazContainer.Cur_RW_Index=0;
242 NdefMap->TopazContainer.ByteRWFrmCard =0;
250 * \param[in] NdefMap Pointer to a valid instance of the \ref phFriNfc_NdefMap_t
258 NFCSTATUS phFriNfc_TopazMap_ChkNdef( phFriNfc_NdefMap_t *NdefMap)
262 if ( NdefMap != NULL)
265 NdefMap->PrevOperation = PH_FRINFC_NDEFMAP_CHECK_OPE;
268 NdefMap->TopazContainer.CRIndex = PH_FRINFC_NDEFMAP_CR_CHK_NDEF;
269 NdefMap->TopazContainer.CurrentBlock = PH_FRINFC_TOPAZ_VAL1;
270 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL0;
273 NdefMap->CardType = PH_FRINFC_NDEFMAP_TOPAZ_CARD;
276 NdefMap->State = PH_FRINFC_TOPAZ_STATE_READID;
277 NdefMap->PrevOperation = PH_FRINFC_NDEFMAP_CHECK_OPE;
280 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
281 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READID;
284 NdefMap->Cmd.JewelCmd = phHal_eJewel_RID;
286 NdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelRid;
290 Result = phFriNfc_Tpz_H_RdBytes(NdefMap, NdefMap->TopazContainer.CurrentBlock,
291 NdefMap->TopazContainer.ByteNumber);
300 phFriNfc_NdefMap_t *NdefMap)
304 result = phFriNfc_Tpz_H_WrAByte (NdefMap, CC_BLOCK_NUMBER,
309 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WR_CC_BYTE;
324 NFCSTATUS phFriNfc_TopazMap_RdNdef( phFriNfc_NdefMap_t *NdefMap,
332 NdefMap->ApduBuffer = PacketData;
334 NdefMap->ApduBufferSize = *PacketDataLength;
336 NdefMap->NumOfBytesRead = PacketDataLength;
340 *NdefMap->NumOfBytesRead = PH_FRINFC_TOPAZ_VAL0;
342 NdefMap->ApduBuffIndex = PH_FRINFC_TOPAZ_VAL0;
344 NdefMap->Offset = Offset;
347 NdefMap->TopazContainer.CRIndex = PH_FRINFC_NDEFMAP_CR_RD_NDEF;
349 if( (Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN) || ( NdefMap->PrevOperation ==
354 NdefMap->Offset = PH_FRINFC_NDEFMAP_SEEK_BEGIN;
356 NdefMap->TopazContainer.CurrentBlock = PH_FRINFC_TOPAZ_VAL1;
357 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL0;
359 NdefMap->State = PH_FRINFC_TOPAZ_STATE_READALL;
360 NdefMap->TopazContainer.ReadWriteCompleteFlag =
364 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
365 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READALL;
369 NdefMap->Cmd.JewelCmd = phHal_eJewel_ReadAll;
371 NdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelReadAll;
377 NdefMap->PrevOperation = PH_FRINFC_NDEFMAP_READ_OPE;
380 (NdefMap->TopazContainer.ReadWriteCompleteFlag ==
391 phFriNfc_Tpz_H_RdBytes(NdefMap,
392 NdefMap->TopazContainer.CurrentBlock,
393 NdefMap->TopazContainer.ByteNumber):
394 phFriNfc_Tpz_H_CpDataToUsrBuf(NdefMap));
408 NFCSTATUS phFriNfc_TopazMap_WrNdef( phFriNfc_NdefMap_t *NdefMap,
416 NdefMap->ApduBuffer = PacketData;
418 NdefMap->ApduBufferSize = *PacketDataLength;
420 NdefMap->ApduBuffIndex = PH_FRINFC_TOPAZ_VAL0;
422 NdefMap->WrNdefPacketLength = PacketDataLength;
426 *NdefMap->WrNdefPacketLength = PH_FRINFC_TOPAZ_VAL0;
429 NdefMap->TopazContainer.CRIndex = PH_FRINFC_NDEFMAP_CR_WR_NDEF;
431 NdefMap->Offset = Offset;
435 (NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_READ_OPE))
437 NdefMap->Offset = PH_FRINFC_NDEFMAP_SEEK_BEGIN;
439 NdefMap->TopazContainer.CurrentBlock = PH_FRINFC_TOPAZ_VAL1;
440 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL0;
442 NdefMap->State = PH_FRINFC_TOPAZ_STATE_READALL;
446 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
447 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READALL;
450 NdefMap->Cmd.JewelCmd = phHal_eJewel_ReadAll;
452 NdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelReadAll;
455 NdefMap->TopazContainer.ReadWriteCompleteFlag =
457 NdefMapNdefMap->CardMemSize;
458 TempByteVal = NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1];
463 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE;
465 TempByteVal = NdefMap->ApduBuffer[NdefMap->ApduBuffIndex];
469 NdefMap->PrevOperation = PH_FRINFC_NDEFMAP_WRITE_OPE;
471 (NdefMap->TopazContainer.ReadWriteCompleteFlag ==
481 phFriNfc_Tpz_H_BlkChk(NdefMap);
483 Result = ((NdefMap->Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN)?
484 phFriNfc_Tpz_H_RdBytes(NdefMap, NdefMap->TopazContainer.CurrentBlock,
485 NdefMap->TopazContainer.ByteNumber):
486 phFriNfc_Tpz_H_WrAByte(NdefMap, NdefMap->TopazContainer.CurrentBlock,
487 NdefMap->TopazContainer.ByteNumber,TempByteVal));
891 static NFCSTATUS phFriNfc_Tpz_H_RdBytes(phFriNfc_NdefMap_t *NdefMap,
901 NdefMap->psDepAdditionalInfo.DepFlags.MetaChaining = PH_FRINFC_TOPAZ_VAL0;
902 NdefMap->psDepAdditionalInfo.DepFlags.NADPresent = PH_FRINFC_TOPAZ_VAL0;
903 NdefMap->psDepAdditionalInfo.NAD = PH_FRINFC_TOPAZ_VAL0;
905 NdefMap->MapCompletionInfo.CompletionRoutine = phFriNfc_TopazMap_Process;
906 NdefMap->MapCompletionInfo.Context = NdefMap;
908 *NdefMap->SendRecvLength = NdefMap->TempReceiveLength;
912 switch(NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0])
914 switch(NdefMap->Cmd.JewelCmd)
929 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
931 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READID;
935 (void)memset(&(NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1]),
940 NdefMap->SendLength = index;
943 NdefMap->SendLength = PH_FRINFC_TOPAZ_VAL0;
958 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
960 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READALL;
964 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1] = 0x00;
966 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2] = 0x00;
970 (void)memcpy(&(NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL3]),
971 &(NdefMap->psRemoteDevInfo->RemoteDevInfo.Jewel_Info.Uid),
977 NdefMap->SendLength = index;
980 NdefMap->SendLength = PH_FRINFC_TOPAZ_VAL0;
996 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
998 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READ;
1006 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1] =
1011 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2] = 0x00;
1015 (void)memcpy(&(NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL3]),
1016 &(NdefMap->psRemoteDevInfo->RemoteDevInfo.Jewel_Info.Uid),
1021 NdefMap->SendLength = index;
1027 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] =
1030 NdefMap->SendLength = PH_FRINFC_TOPAZ_VAL1;
1038 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = 0x00;
1039 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1] = 0x00;
1040 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2] = 104;
1041 NdefMap->SendLength = 3;
1054 Result = phFriNfc_OvrHal_Transceive( NdefMap->LowerDevice,
1055 &NdefMap->MapCompletionInfo,
1056 NdefMap->psRemoteDevInfo,
1057 NdefMap->Cmd,
1058 &NdefMap->psDepAdditionalInfo,
1059 NdefMap->SendRecvBuf,
1060 NdefMap->SendLength,
1061 NdefMap->SendRecvBuf,
1062 NdefMap->SendRecvLength);
1067 static NFCSTATUS phFriNfc_Tpz_H_WrAByte(phFriNfc_NdefMap_t *NdefMap,
1079 NdefMap->psDepAdditionalInfo.DepFlags.MetaChaining = PH_FRINFC_TOPAZ_VAL0;
1080 NdefMap->psDepAdditionalInfo.DepFlags.NADPresent = PH_FRINFC_TOPAZ_VAL0;
1081 NdefMap->psDepAdditionalInfo.NAD = PH_FRINFC_TOPAZ_VAL0;
1083 NdefMap->MapCompletionInfo.CompletionRoutine = phFriNfc_TopazMap_Process;
1084 NdefMap->MapCompletionInfo.Context = NdefMap;
1086 *NdefMap->SendRecvLength = NdefMap->TempReceiveLength;
1089 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
1092 NdefMap->Cmd.JewelCmd = phHal_eJewel_Write1E;
1094 NdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelWriteErase1;
1100 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_WRITE_1E;
1108 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL1] =
1113 NdefMap->SendRecvBuf[index] = ByteVal;
1117 (void)memcpy(&(NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL3]),
1118 &(NdefMap->psRemoteDevInfo->RemoteDevInfo.Jewel_Info.Uid),
1123 NdefMap->SendLength = index;
1131 NdefMap->SendRecvBuf[index] =
1135 NdefMap->SendRecvBuf[index] = ByteVal;
1137 NdefMap->SendLength = PH_FRINFC_TOPAZ_VAL2;
1142 Result = phFriNfc_OvrHal_Transceive( NdefMap->LowerDevice,
1143 &NdefMap->MapCompletionInfo,
1144 NdefMap->psRemoteDevInfo,
1145 NdefMap->Cmd,
1146 &NdefMap->psDepAdditionalInfo,
1147 NdefMap->SendRecvBuf,
1148 NdefMap->SendLength,
1149 NdefMap->SendRecvBuf,
1150 NdefMap->SendRecvLength);
1155 static NFCSTATUS phFriNfc_Tpz_H_ProReadID(phFriNfc_NdefMap_t *NdefMap)
1160 if(((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] &
1162 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL6))
1165 (void)memcpy(NdefMap->TopazContainer.UID,
1166 &NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2],
1170 NdefMap->State = PH_FRINFC_TOPAZ_STATE_READALL;
1173 NdefMap->Cmd.JewelCmd = phHal_eJewel_Raw;
1174 NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] = PH_FRINFC_TOPAZ_CMD_READALL;
1177 NdefMap->Cmd.JewelCmd = phHal_eJewel_ReadAll;
1179 NdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelReadAll;
1184 Result = phFriNfc_Tpz_H_RdBytes(NdefMap, NdefMap->TopazContainer.CurrentBlock,
1185 NdefMap->TopazContainer.ByteNumber);
1191 static NFCSTATUS phFriNfc_Tpz_H_ProReadAll(phFriNfc_NdefMap_t *NdefMap)
1199 if ((NdefMap->TopazContainer.UID[0] == NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2]) &&
1200 (NdefMap->TopazContainer.UID[1] == NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2 + 1]) &&
1201 (NdefMap->TopazContainer.UID[2] == NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2 + 2]) &&
1202 (NdefMap->TopazContainer.UID[3] == NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2 + 3]))
1211 memcompare = memcmp(NdefMap->TopazContainer.UID,
1212 &NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL2],
1216 if(((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] &
1218 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_READALL_RESP) &&
1222 (void)memcpy(NdefMap->TopazContainer.ReadBuffer,
1223 &NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL10],
1227 phFriNfc_Tpz_H_ChkLockBits(NdefMap);
1229 Result = phFriNfc_Tpz_H_CallNxtOp(NdefMap);
1234 static NFCSTATUS phFriNfc_Tpz_H_CallNxtOp(phFriNfc_NdefMap_t *NdefMap)
1240 switch(NdefMap->PrevOperation)
1245 Result = phFriNfc_Tpz_H_ChkCCinChkNdef(NdefMap);
1247 if (NdefMap->CardState != PH_NDEFMAP_CARD_STATE_INVALID)
1250 Result = phFriNfc_Tpz_H_ChkSpcVer( NdefMap,
1251 NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL1]);
1255 ( NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL2] <=
1258 Result = phFriNfc_Tpz_H_findNDEFTLV(NdefMap);
1267 NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INITIALIZED;
1268 NdefMap->CardMemSize =
1269 NdefMap->TopazContainer.RemainingSize = (uint16_t)
1283 Result = phFriNfc_Tpz_H_ChkCCBytes(NdefMap);
1289 phFriNfc_Tpz_H_findNDEFTLV(NdefMap));
1293 NdefMap->TopazContainer.ByteNumber += PH_FRINFC_TOPAZ_VAL2;
1295 Result = phFriNfc_Tpz_H_CpDataToUsrBuf(NdefMap);
1301 if((NdefMap->CardState == PH_NDEFMAP_CARD_STATE_READ_WRITE) ||
1302 (NdefMap->CardState == PH_NDEFMAP_CARD_STATE_INITIALIZED))
1306 Result = phFriNfc_Tpz_H_ChkCCBytes(NdefMap);
1310 Result = phFriNfc_Tpz_H_findNDEFTLV(NdefMap);
1313 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_T_OF_TLV;
1317 NdefMap->TLVStruct.NdefTLVByte = PH_FRINFC_TOPAZ_VAL4;
1318 NdefMap->TLVStruct.NdefTLVBlock = PH_FRINFC_TOPAZ_VAL1;
1319 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL4;
1321 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_CC_BYTE0;
1324 Result = phFriNfc_Tpz_H_WrCCorTLV(NdefMap);
1331 static NFCSTATUS phFriNfc_Tpz_H_ChkCCBytes(phFriNfc_NdefMap_t *NdefMap)
1336 if(NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL0] ==
1340 Result = phFriNfc_Tpz_H_ChkSpcVer( NdefMap,
1341 NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL1]);
1344 Result = ((( NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL2] >
1352 NdefMap->TopazContainer.RemainingSize =
1353 NdefMap->CardMemSize = ((Result == NFCSTATUS_SUCCESS)?
1355 NdefMap->CardMemSize);
1358 if(((NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_WRITE_OPE) &&
1359 (NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL3] !=
1367 if(((NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_READ_OPE) &&
1368 ((NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL3] !=
1370 (NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL3] !=
1380 extern NFCSTATUS phFriNfc_Tpz_H_ChkSpcVer( phFriNfc_NdefMap_t *NdefMap,
1387 PHNFC_UNUSED_VARIABLE(NdefMap);
1422 static NFCSTATUS phFriNfc_Tpz_H_findNDEFTLV(phFriNfc_NdefMap_t *NdefMap)
1431 (NdefMap->TopazContainer.RemainingSize >= PH_FRINFC_TOPAZ_VAL3))
1433 switch(NdefMap->TopazContainer.ReadBuffer[index])
1440 NdefMap->TopazContainer.RemainingSize -= PH_FRINFC_TOPAZ_VAL2;
1442 Result = phFriNfc_MapTool_SetCardState(NdefMap,
1443 (uint32_t)NdefMap->TopazContainer.ReadBuffer[index]);
1445 if((NdefMap->TopazContainer.ReadBuffer[index] >
1446 NdefMap->TopazContainer.RemainingSize) ||
1447 ((NdefMap->TopazContainer.ReadBuffer[index] ==
1448 PH_FRINFC_TOPAZ_VAL0) && (NdefMap->PrevOperation ==
1460 NdefMap->TLVStruct.BytesRemainLinTLV =
1461 NdefMap->TopazContainer.ReadBuffer[index];
1464 NdefMap->TLVStruct.NdefTLVByte = (uint16_t)((index - PH_FRINFC_TOPAZ_VAL1) %
1467 NdefMap->TLVStruct.NdefTLVBlock = (uint8_t)(((index - PH_FRINFC_TOPAZ_VAL1) /
1471 NdefMap->TLVStruct.NdefTLVFoundFlag = PH_FRINFC_TOPAZ_FLAG1;
1473 NdefMap->TopazContainer.ByteNumber = (uint8_t)(((NdefMap->TLVStruct.NdefTLVBlock - 1) * 8) +
1474 NdefMap->TLVStruct.NdefTLVByte);
1483 NdefMap->TopazContainer.RemainingSize--;
1499 NdefMap->TopazContainer.RemainingSize -= PH_FRINFC_TOPAZ_VAL2;
1500 if(NdefMap->TopazContainer.ReadBuffer[index] >
1501 NdefMap->TopazContainer.RemainingSize)
1512 NdefMap->TopazContainer.RemainingSize =
1513 NdefMap->TopazContainer.RemainingSize -
1514 NdefMap->TopazContainer.ReadBuffer[index];
1518 (NdefMap->TopazContainer.ReadBuffer[index] +
1526 if((NdefMap->TLVStruct.NdefTLVFoundFlag == PH_FRINFC_TOPAZ_FLAG0) &&
1527 (NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_READ_OPE))
1532 if((NdefMap->TLVStruct.NdefTLVFoundFlag == PH_FRINFC_TOPAZ_FLAG0) &&
1533 ((NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_WRITE_OPE) ||
1534 (NdefMap->PrevOperation == PH_FRINFC_NDEFMAP_CHECK_OPE)))
1536 NdefMap->TLVStruct.NdefTLVByte = PH_FRINFC_TOPAZ_VAL4;
1537 NdefMap->TLVStruct.NdefTLVBlock = PH_FRINFC_TOPAZ_VAL1;
1538 NdefMap->TopazContainer.ByteNumber = PH_FRINFC_TOPAZ_VAL4;
1539 NdefMap->TopazContainer.RemainingSize = PH_FRINFC_TOPAZ_TOTAL_RWBYTES1;
1544 static NFCSTATUS phFriNfc_Tpz_H_CpDataToUsrBuf(phFriNfc_NdefMap_t *NdefMap)
1549 if(NdefMap->ApduBufferSize >=
1550 NdefMap->TLVStruct.BytesRemainLinTLV)
1554 (void)memcpy(NdefMap->ApduBuffer,
1555 &(NdefMap->TopazContainer.ReadBuffer[
1556 NdefMap->TopazContainer.ByteNumber]),
1557 NdefMap->TLVStruct.BytesRemainLinTLV);
1560 *(NdefMap->NumOfBytesRead) =
1561 NdefMap->TLVStruct.BytesRemainLinTLV;
1563 NdefMap->TopazContainer.ByteNumber =
1566 NdefMap->TopazContainer.ReadWriteCompleteFlag =
1570 NdefMap->TopazContainer.RemainingSize =
1571 NdefMap->TopazContainer.RemainingSize -
1572 NdefMap->TLVStruct.BytesRemainLinTLV;
1574 NdefMap->TLVStruct.BytesRemainLinTLV =
1580 (void)memcpy(NdefMap->ApduBuffer,
1581 &(NdefMap->TopazContainer.ReadBuffer[
1582 NdefMap->TopazContainer.ByteNumber]),
1583 NdefMap->ApduBufferSize);
1586 *(NdefMap->NumOfBytesRead) =
1587 NdefMap->ApduBufferSize;
1589 NdefMap->TopazContainer.ByteNumber =
1590 (uint8_t)(NdefMap->TopazContainer.ByteNumber +
1591 NdefMap->ApduBufferSize);
1593 NdefMap->TopazContainer.RemainingSize
1594 = NdefMap->TopazContainer.RemainingSize
1595 - (uint16_t)NdefMap->ApduBufferSize;
1597 NdefMap->TLVStruct.BytesRemainLinTLV =
1598 NdefMap->TLVStruct.BytesRemainLinTLV -
1599 (uint16_t)NdefMap->ApduBufferSize;
1604 static NFCSTATUS phFriNfc_Tpz_H_ProWrNMN(phFriNfc_NdefMap_t *NdefMap)
1611 if((NdefMap->TopazContainer.InternalState ==
1613 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1615 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1617 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE_L_TLV;
1619 BlockNo = (uint8_t)(((NdefMap->TLVStruct.NdefTLVByte + PH_FRINFC_TOPAZ_VAL1) >
1621 (NdefMap->TLVStruct.NdefTLVBlock + PH_FRINFC_TOPAZ_VAL1):
1622 NdefMap->TLVStruct.NdefTLVBlock);
1624 ByteNo = (uint8_t)((NdefMap->TLVStruct.NdefTLVByte + PH_FRINFC_TOPAZ_VAL1) %
1629 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_L_TLV_0;
1631 Result = phFriNfc_Tpz_H_WrAByte( NdefMap, BlockNo, ByteNo,
1636 if((NdefMap->TopazContainer.InternalState ==
1638 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1640 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1643 NdefMap->CardState = (uint8_t)((NdefMap->CardState ==
1646 NdefMap->CardState);
1648 *NdefMap->WrNdefPacketLength = NdefMap->ApduBuffIndex;
1655 static NFCSTATUS phFriNfc_Tpz_H_ProWrTLV(phFriNfc_NdefMap_t *NdefMap)
1659 if((NdefMap->TopazContainer.InternalState ==
1661 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1663 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1666 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE;
1668 NdefMap->TopazContainer.ByteNumber++;
1670 phFriNfc_Tpz_H_BlkChk(NdefMap);
1674 Result = phFriNfc_Tpz_H_WrAByte( NdefMap,
1675 NdefMap->TopazContainer.CurrentBlock,
1676 NdefMap->TopazContainer.ByteNumber,
1677 NdefMap->ApduBuffer[NdefMap->ApduBuffIndex]
1682 if((NdefMap->TopazContainer.InternalState ==
1684 (((NdefMap->Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN) &&
1685 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1686 NdefMap->ApduBuffIndex)) ||
1687 ((NdefMap->Offset == PH_FRINFC_NDEFMAP_SEEK_CUR) &&
1688 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1689 (NdefMap->ApduBuffIndex + NdefMap->TLVStruct.BytesRemainLinTLV)))) &&
1690 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1693 NdefMap->TLVStruct.BytesRemainLinTLV =
1694 ((NdefMap->Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN)?
1695 NdefMap->ApduBuffIndex:
1696 (NdefMap->TLVStruct.BytesRemainLinTLV + NdefMap->ApduBuffIndex));
1699 Result = phFriNfc_Tpz_H_WrByte0ValE1(NdefMap);
1705 static NFCSTATUS phFriNfc_Tpz_H_ProWrUsrData(phFriNfc_NdefMap_t *NdefMap)
1710 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1711 NdefMap->ApduBuffer[NdefMap->ApduBuffIndex]) &&
1712 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1715 NdefMap->ApduBuffIndex += PH_FRINFC_TOPAZ_VAL1;
1718 NdefMap->TopazContainer.RemainingSize -= PH_FRINFC_TOPAZ_VAL1;
1721 NdefMap->TopazContainer.ByteNumber++;
1724 phFriNfc_Tpz_H_BlkChk(NdefMap);
1727 if((NdefMap->ApduBufferSize == NdefMap->ApduBuffIndex) ||
1728 (NdefMap->TopazContainer.RemainingSize == PH_FRINFC_TOPAZ_VAL0))
1731 NdefMap->TopazContainer.ReadWriteCompleteFlag = (uint8_t)
1732 ((NdefMap->TopazContainer.RemainingSize == PH_FRINFC_TOPAZ_VAL0)?
1735 Result = phFriNfc_Tpz_H_WrLByte(NdefMap);
1740 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE;
1743 Result = phFriNfc_Tpz_H_WrAByte(NdefMap, NdefMap->TopazContainer.CurrentBlock,
1744 NdefMap->TopazContainer.ByteNumber,
1745 NdefMap->ApduBuffer[NdefMap->ApduBuffIndex]
1752 static NFCSTATUS phFriNfc_Tpz_H_WrLByte(phFriNfc_NdefMap_t *NdefMap)
1758 BlockNo = (uint8_t)(((NdefMap->TLVStruct.NdefTLVByte +
1761 (NdefMap->TLVStruct.NdefTLVBlock +
1763 NdefMap->TLVStruct.NdefTLVBlock);
1765 ByteNo = (uint8_t)((NdefMap->TLVStruct.NdefTLVByte +
1768 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE_L_TLV;
1770 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_L_TLV;
1773 ((NdefMap->Offset == PH_FRINFC_NDEFMAP_SEEK_BEGIN)?
1774 NdefMap->ApduBuffIndex:
1775 (NdefMap->ApduBuffIndex +
1776 NdefMap->TLVStruct.BytesRemainLinTLV));
1778 Result = phFriNfc_Tpz_H_WrAByte(NdefMap, BlockNo, ByteNo,TempByteVal);
1782 static NFCSTATUS phFriNfc_Tpz_H_WrByte0ValE1(phFriNfc_NdefMap_t *NdefMap)
1787 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE_NMN;
1789 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_NMN_E1;
1792 Result = phFriNfc_Tpz_H_WrAByte(NdefMap, PH_FRINFC_TOPAZ_VAL1,
1797 static void phFriNfc_Tpz_H_Complete(phFriNfc_NdefMap_t *NdefMap,
1801 NdefMap->State = PH_FRINFC_NDEFMAP_STATE_RESET_INIT;
1804 NdefMap->CompletionRoutine[NdefMap->TopazContainer.CRIndex].
1805 CompletionRoutine(NdefMap->CompletionRoutine->Context, Status);
1808 static void phFriNfc_Tpz_H_BlkChk(phFriNfc_NdefMap_t *NdefMap)
1810 NdefMap->TopazContainer.CurrentBlock =
1811 (uint8_t)((NdefMap->TopazContainer.ByteNumber >
1813 (NdefMap->TopazContainer.CurrentBlock +
1815 NdefMap->TopazContainer.CurrentBlock);
1817 NdefMap->TopazContainer.ByteNumber = (uint8_t)(NdefMap->TopazContainer.ByteNumber %
1821 static NFCSTATUS phFriNfc_Tpz_H_ChkCCinChkNdef(phFriNfc_NdefMap_t *NdefMap)
1826 if(NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL0] ==
1830 Result = (((NdefMap->TopazContainer.ReadBuffer[PH_FRINFC_TOPAZ_VAL3] &
1836 NdefMap->CardMemSize = NdefMap->TopazContainer.RemainingSize =
1839 NdefMap->CardMemSize);
1842 if (NdefMap->CardState != PH_NDEFMAP_CARD_STATE_READ_ONLY)
1844 NdefMap->CardState = (uint8_t)((Result == NFCSTATUS_SUCCESS)?
1852 static void phFriNfc_Tpz_H_ChkLockBits(phFriNfc_NdefMap_t *NdefMap)
1855 NdefMap->CardState = (uint8_t)
1856 (((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_LOCKBIT_BYTENO_0] ==
1858 ((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_LOCKBIT_BYTENO_1] ==
1860 (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_LOCKBIT_BYTENO_1] ==
1866 if (NdefMap->CardState == PH_NDEFMAP_CARD_STATE_READ_WRITE)
1868 if (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_CC_BYTENO_3] == PH_FRINFC_TOPAZ_CC_READWRITE)
1870 NdefMap->CardState = PH_NDEFMAP_CARD_STATE_READ_WRITE;
1872 else if (NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_CC_BYTENO_3] == PH_FRINFC_TOPAZ_CC_READONLY)
1874 NdefMap->CardState = PH_NDEFMAP_CARD_STATE_READ_ONLY;
1878 NdefMap->CardState = PH_NDEFMAP_CARD_STATE_INVALID;
1883 static NFCSTATUS phFriNfc_Tpz_H_WrCCorTLV(phFriNfc_NdefMap_t *NdefMap)
1889 switch(NdefMap->TopazContainer.InternalState)
1923 ByteNo = (uint8_t)NdefMap->TLVStruct.NdefTLVByte;
1924 BlockNo = NdefMap->TLVStruct.NdefTLVBlock;
1927 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WR_CC_OR_TLV;
1928 Result = phFriNfc_Tpz_H_WrAByte( NdefMap, BlockNo, ByteNo,TempByteVal);
1932 static NFCSTATUS phFriNfc_Tpz_H_ProCCTLV(phFriNfc_NdefMap_t *NdefMap)
1936 switch(NdefMap->TopazContainer.InternalState)
1941 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1943 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1945 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_CC_BYTE1;
1946 Result = phFriNfc_Tpz_H_WrCCorTLV(NdefMap);
1953 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1955 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1957 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_CC_BYTE2;
1958 Result = phFriNfc_Tpz_H_WrCCorTLV(NdefMap);
1965 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1967 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1969 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_CC_BYTE3;
1970 Result = phFriNfc_Tpz_H_WrCCorTLV(NdefMap);
1977 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1979 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1981 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_T_OF_TLV;
1982 Result = phFriNfc_Tpz_H_WrCCorTLV(NdefMap);
1989 if((NdefMap->SendRecvBuf[PH_FRINFC_TOPAZ_VAL0] ==
1991 (*NdefMap->SendRecvLength == PH_FRINFC_TOPAZ_VAL1))
1994 NdefMap->TopazContainer.ByteNumber++;
1996 phFriNfc_Tpz_H_BlkChk(NdefMap);
1998 NdefMap->State = PH_FRINFC_TOPAZ_STATE_WRITE_NMN;
2001 NdefMap->TopazContainer.InternalState = PH_FRINFC_TOPAZ_WR_NMN_0;
2004 Result = phFriNfc_Tpz_H_WrAByte( NdefMap, PH_FRINFC_TOPAZ_VAL1,