summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/phFriNfc_MifULFormat.c68
-rw-r--r--src/phFriNfc_MifULFormat.h15
-rw-r--r--src/phFriNfc_NdefMap.c8
-rw-r--r--src/phFriNfc_SmtCrdFmt.h17
-rw-r--r--src/phFriNfc_TopazMap.c120
-rw-r--r--src/phFriNfc_TopazMap.h12
6 files changed, 198 insertions, 42 deletions
diff --git a/src/phFriNfc_MifULFormat.c b/src/phFriNfc_MifULFormat.c
index 8f3de28..899249d 100644
--- a/src/phFriNfc_MifULFormat.c
+++ b/src/phFriNfc_MifULFormat.c
@@ -20,10 +20,10 @@
*
* Project: NFC-FRI
*
- * $Date: Fri Oct 23 12:00:05 2009 $
+ * $Date: Mon Dec 13 14:14:12 2010 $
* $Author: ing02260 $
- * $Revision: 1.8 $
- * $Aliases: NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
+ * $Revision: 1.9 $
+ * $Aliases: $
*
*/
@@ -37,17 +37,20 @@
*
*/
/*@{*/
-#define PHFRINFCMIFULFORMAT_FILEREVISION "$Revision: 1.8 $"
-#define PHFRINFCMIFULFORMAT_FILEALIASES "$Aliases: NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
+#define PHFRINFCMIFULFORMAT_FILEREVISION "$Revision: 1.9 $"
+#define PHFRINFCMIFULFORMAT_FILEALIASES "$Aliases: $"
/*@}*/
#ifdef FRINFC_READONLY_NDEF
/* Mifare UL OTP block number is 3 */
+ #define RD_LOCK_OTP_BLOCK_NUMBER 0x02U
#define OTP_BLOCK_NUMBER 0x03U
/* READ ONLY value that shall be written in the OTP to make the card read only */
#define READ_ONLY_VALUE_IN_OTP 0x0FU
/* Mifare UL OTP block number is 3 */
#define MIFARE_UL_READ_MAX_SIZE 16U
+ /* Lock byte value */
+ #define MIFARE_UL_LOCK_BYTE_VALUE 0xFFU
#endif /* #ifdef FRINFC_READONLY_NDEF */
/*!
* \brief \copydoc page_ovr Helper function for Mifare UL. This function calls the
@@ -110,6 +113,12 @@ void phFriNfc_MfUL_Reset(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt)
(void)memcpy(NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes,
OTPByte,
sizeof(NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes));
+#ifdef FRINFC_READONLY_NDEF
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[0] = 0;
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[1] = 0;
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[2] = 0;
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[3] = 0;
+#endif /* #ifdef FRINFC_READONLY_NDEF */
}
NFCSTATUS phFriNfc_MfUL_Format(phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFmt)
@@ -176,7 +185,7 @@ void phFriNfc_MfUL_Process(void *Context,
/* Card already have the OTP bytes so write TLV */
NdefSmtCrdFmt->State = PH_FRINFC_MFUL_FMT_WR_TLV1;
- Status = phFriNfc_MfUL_H_WrRd(NdefSmtCrdFmt);
+ Status = phFriNfc_MfUL_H_WrRd (NdefSmtCrdFmt);
}
#endif /* #ifdef PH_NDEF_MIFARE_ULC */
@@ -188,14 +197,25 @@ void phFriNfc_MfUL_Process(void *Context,
{
if (MIFARE_UL_READ_MAX_SIZE == *NdefSmtCrdFmt->SendRecvLength)
{
- uint8_t otp_page_size = 0;
+ uint8_t otp_lock_page_size = 0;
+ uint8_t i = 0;
+
+ otp_lock_page_size = sizeof (NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes);
+ (void)memcpy ((void *)NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes,
+ (void *)NdefSmtCrdFmt->SendRecvBuf,
+ sizeof(NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes));
- otp_page_size = sizeof (NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes);
- (void)memcpy (NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes,
- NdefSmtCrdFmt->SendRecvBuf,
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[2] = MIFARE_UL_LOCK_BYTE_VALUE;
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes[3] = MIFARE_UL_LOCK_BYTE_VALUE;
+ i = (uint8_t)(i + otp_lock_page_size);
+
+ otp_lock_page_size = sizeof (NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes);
+
+ (void)memcpy ((void *)NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes,
+ (void *)(NdefSmtCrdFmt->SendRecvBuf + i),
sizeof(NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes));
- NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes[(otp_page_size - 1)] =
+ NdefSmtCrdFmt->AddInfo.Type2Info.OTPBytes[(otp_lock_page_size - 1)] =
READ_ONLY_VALUE_IN_OTP;
NdefSmtCrdFmt->State = PH_FRINFC_MFUL_FMT_RO_WR_OTP_BYTES;
@@ -206,6 +226,12 @@ void phFriNfc_MfUL_Process(void *Context,
case PH_FRINFC_MFUL_FMT_RO_WR_OTP_BYTES:
{
+ NdefSmtCrdFmt->State = PH_FRINFC_MFUL_FMT_RO_WR_LOCK_BYTES;
+ Status = phFriNfc_MfUL_H_WrRd (NdefSmtCrdFmt);
+ }
+
+ case PH_FRINFC_MFUL_FMT_RO_WR_LOCK_BYTES:
+ {
/* Do nothing */
break;
}
@@ -299,12 +325,30 @@ static void phFriNfc_MfUL_H_fillSendBuf( phFriNfc_sNdefSmtCrdFmt_t *NdefSmtCrdFm
/* Read command */
NdefSmtCrdFmt->Cmd.MfCmd = phHal_eMifareCmdListMifareRead;
#endif /* #ifdef PH_HAL4_ENABLE */
- *NdefSmtCrdFmt->SendRecvBuf = OTP_BLOCK_NUMBER;
+ *NdefSmtCrdFmt->SendRecvBuf = RD_LOCK_OTP_BLOCK_NUMBER;
/* Send length for read command is always one */
NdefSmtCrdFmt->SendLength = PH_FRINFC_MFUL_FMT_VAL_1;
break;
}
+ case PH_FRINFC_MFUL_FMT_RO_WR_LOCK_BYTES:
+ {
+#ifdef PH_HAL4_ENABLE
+ NdefSmtCrdFmt->Cmd.MfCmd = phHal_eMifareWrite4;
+#else
+ /* Read command */
+ NdefSmtCrdFmt->Cmd.MfCmd = phHal_eMifareCmdListMifareWrite4;
+#endif /* #ifdef PH_HAL4_ENABLE */
+
+ /* Send length for read command is always one */
+ NdefSmtCrdFmt->SendLength = PH_FRINFC_MFUL_FMT_VAL_5;
+ *NdefSmtCrdFmt->SendRecvBuf = RD_LOCK_OTP_BLOCK_NUMBER;
+ (void)memcpy(&NdefSmtCrdFmt->SendRecvBuf[PH_FRINFC_MFUL_FMT_VAL_1],
+ NdefSmtCrdFmt->AddInfo.Type2Info.LockBytes,
+ PH_FRINFC_MFUL_FMT_VAL_4);
+ break;
+ }
+
case PH_FRINFC_MFUL_FMT_RO_WR_OTP_BYTES:
{
#ifdef PH_HAL4_ENABLE
diff --git a/src/phFriNfc_MifULFormat.h b/src/phFriNfc_MifULFormat.h
index 527dcc4..9307523 100644
--- a/src/phFriNfc_MifULFormat.h
+++ b/src/phFriNfc_MifULFormat.h
@@ -20,10 +20,10 @@
*
* Project: NFC-FRI
*
- * $Date: Wed Jun 3 14:38:25 2009 $
- * $Author: ing07336 $
- * $Revision: 1.4 $
- * $Aliases: NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
+ * $Date: Mon Dec 13 14:14:12 2010 $
+ * $Author: ing02260 $
+ * $Revision: 1.5 $
+ * $Aliases: $
*
*/
@@ -44,8 +44,8 @@
#include <phFriNfc_NdefMap.h>
#endif /* #ifdef PH_NDEF_MIFARE_ULC */
-#define PH_FRINFC_MIFUL_FORMAT_FILEREVISION "$Revision: 1.4 $"
-#define PH_FRINFC_MIFUL_FORMAT_FILEALIASES "$Aliases: NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
+#define PH_FRINFC_MIFUL_FORMAT_FILEREVISION "$Revision: 1.5 $"
+#define PH_FRINFC_MIFUL_FORMAT_FILEALIASES "$Aliases: $"
/*!
@@ -62,7 +62,8 @@
#endif /* #ifdef PH_NDEF_MIFARE_ULC */
#ifdef FRINFC_READONLY_NDEF
#define PH_FRINFC_MFUL_FMT_RO_RD_16BYTES 5 /*!< Read only the tag */
-#define PH_FRINFC_MFUL_FMT_RO_WR_OTP_BYTES 6 /*!< Write OTP bytes to make the tag Read only */
+#define PH_FRINFC_MFUL_FMT_RO_WR_LOCK_BYTES 6 /*!< Write lock bytes to make the tag Read only */
+#define PH_FRINFC_MFUL_FMT_RO_WR_OTP_BYTES 7 /*!< Write OTP bytes to make the tag Read only */
#endif /* #ifdef FRINFC_READONLY_NDEF */
/*@}*/
diff --git a/src/phFriNfc_NdefMap.c b/src/phFriNfc_NdefMap.c
index 89fc4b3..d1fb133 100644
--- a/src/phFriNfc_NdefMap.c
+++ b/src/phFriNfc_NdefMap.c
@@ -20,9 +20,9 @@
*
* Project: NFC-FRI
*
-* $Date: Tue Jul 27 08:58:22 2010 $
+* $Date: Mon Dec 13 14:14:12 2010 $
* $Author: ing02260 $
-* $Revision: 1.38 $
+* $Revision: 1.39 $
* $Aliases: $
*
*/
@@ -64,7 +64,7 @@
*
*/
/*@{*/
-#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.38 $"
+#define PHFRINFCNDEFMAP_FILEREVISION "$Revision: 1.39 $"
#define PHFRINFCNDEFMAP_FILEALIASES "$Aliases: $"
/*@}*/
@@ -640,12 +640,12 @@ phFriNfc_NdefMap_ConvertToReadOnly (
switch (NdefMap->CardType)
{
case PH_FRINFC_NDEFMAP_TOPAZ_CARD:
- case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD:
{
result = phFriNfc_TopazMap_ConvertToReadOnly (NdefMap);
break;
}
+ case PH_FRINFC_NDEFMAP_TOPAZ_DYNAMIC_CARD:
default:
{
result = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
diff --git a/src/phFriNfc_SmtCrdFmt.h b/src/phFriNfc_SmtCrdFmt.h
index c63be23..ebf870d 100644
--- a/src/phFriNfc_SmtCrdFmt.h
+++ b/src/phFriNfc_SmtCrdFmt.h
@@ -20,10 +20,10 @@
*
* Project: NFC-FRI
*
- * $Date: Fri Feb 20 14:38:17 2009 $
- * $Author: ing07385 $
- * $Revision: 1.3 $
- * $Aliases: NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
+ * $Date: Mon Dec 13 14:14:11 2010 $
+ * $Author: ing02260 $
+ * $Revision: 1.5 $
+ * $Aliases: $
*
*/
@@ -37,8 +37,8 @@
*
*/
/*@{*/
-#define PHFRINFC_SMTCRDFMT_FILEREVISION "$Revision: 1.3 $"
-#define PHFRINFC_SMTCRDFMT_FILEALIASES "$Aliases: NFC_FRI1.1_WK908_R19_1,NFC_FRI1.1_WK910_PREP1,NFC_FRI1.1_WK910_R20_1,NFC_FRI1.1_WK912_PREP1,NFC_FRI1.1_WK912_R21_1,NFC_FRI1.1_WK914_PREP1,NFC_FRI1.1_WK914_R22_1,NFC_FRI1.1_WK914_R22_2,NFC_FRI1.1_WK916_R23_1,NFC_FRI1.1_WK918_R24_1,NFC_FRI1.1_WK920_PREP1,NFC_FRI1.1_WK920_R25_1,NFC_FRI1.1_WK922_PREP1,NFC_FRI1.1_WK922_R26_1,NFC_FRI1.1_WK924_PREP1,NFC_FRI1.1_WK924_R27_1,NFC_FRI1.1_WK926_R28_1,NFC_FRI1.1_WK928_R29_1,NFC_FRI1.1_WK930_R30_1,NFC_FRI1.1_WK934_PREP_1,NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"
+#define PHFRINFC_SMTCRDFMT_FILEREVISION "$Revision: 1.5 $"
+#define PHFRINFC_SMTCRDFMT_FILEALIASES "$Aliases: $"
/*@}*/
/*! \defgroup grp_fri_smart_card_formatting NFC FRI Smart Card Formatting
@@ -142,6 +142,9 @@ typedef struct phFriNfc_Type2_AddInfo
{
/* Stores the CC byte values. For Ex: 0xE1, 0x10 , 0x10, 0x00*/
uint8_t OTPBytes[4];
+#ifdef FRINFC_READONLY_NDEF
+ uint8_t LockBytes[4];
+#endif /* #ifdef FRINFC_READONLY_NDEF */
/* Current Block Address*/
uint8_t CurrentBlock;
} phFriNfc_Type2_AddInfo_t;
@@ -156,6 +159,7 @@ typedef struct phFriNfc_Type2_AddInfo
* during the implementation phase.
*
*/
+
typedef struct phFriNfc_Type4_AddInfo
{
/* Specifies Keys related to PICC/NFCForum Master Key settings*/
@@ -170,7 +174,6 @@ typedef struct phFriNfc_Type4_AddInfo
uint16_t MajorVersion;
uint16_t MinorVersion;
-
} phFriNfc_Type4_AddInfo_t;
/*
diff --git a/src/phFriNfc_TopazMap.c b/src/phFriNfc_TopazMap.c
index ff445cb..78828ec 100644
--- a/src/phFriNfc_TopazMap.c
+++ b/src/phFriNfc_TopazMap.c
@@ -20,10 +20,10 @@
*
* Project: NFC-FRI
*
-* $Date: Wed May 12 10:21:17 2010 $
+* $Date: Mon Dec 13 14:14:14 2010 $
* $Author: ing02260 $
-* $Revision: 1.21 $
-* $Aliases: NFC_FRI1.1_WK1019_SDK,NFC_FRI1.1_WK1023_R35_1 $
+* $Revision: 1.23 $
+* $Aliases: $
*
*/
@@ -42,8 +42,8 @@
*
*/
/*@{*/
-#define PHFRINFCTOPAZMAP_FILEREVISION "$Revision: 1.21 $"
-#define PHFRINFCTOPAZMAP_FILEALIASES "$Aliases: NFC_FRI1.1_WK1019_SDK,NFC_FRI1.1_WK1023_R35_1 $"
+#define PHFRINFCTOPAZMAP_FILEREVISION "$Revision: 1.23 $"
+#define PHFRINFCTOPAZMAP_FILEALIASES "$Aliases: $"
/*@}*/
/****************** Start of macros ********************/
/* Below MACRO is used for the WRITE error scenario,
@@ -56,6 +56,14 @@
#ifdef FRINFC_READONLY_NDEF
#define CC_BLOCK_NUMBER (0x01U)
+ #define LOCK_BLOCK_NUMBER (0x0EU)
+
+ #define LOCK0_BYTE_NUMBER (0x00U)
+ #define LOCK0_BYTE_VALUE (0xFFU)
+
+ #define LOCK1_BYTE_NUMBER (0x01U)
+ #define LOCK1_BYTE_VALUE (0x7FU)
+
#define CC_RWA_BYTE_NUMBER (0x03U)
#define CC_READ_ONLY_VALUE (0x0FU)
@@ -298,7 +306,7 @@ phFriNfc_TopazMap_ConvertToReadOnly (
if (NFCSTATUS_PENDING == PHNFCSTATUS(result))
{
- NdefMap->State = PH_FRINFC_TOPAZ_STATE_READ_ONLY;
+ NdefMap->State = PH_FRINFC_TOPAZ_STATE_WR_CC_BYTE;
}
return result;
}
@@ -502,6 +510,9 @@ void phFriNfc_TopazMap_Process( void *Context,
static uint8_t rf_error_state = 0;
#endif /* #ifdef TOPAZ_RF_ERROR_WORKAROUND */
+#ifdef FRINFC_READONLY_NDEF
+ static uint8_t written_lock_byte = 0;
+#endif /* #ifdef FRINFC_READONLY_NDEF */
psNdefMap = (phFriNfc_NdefMap_t *)Context;
@@ -510,12 +521,27 @@ void phFriNfc_TopazMap_Process( void *Context,
switch (psNdefMap->State)
{
#ifdef FRINFC_READONLY_NDEF
- case PH_FRINFC_TOPAZ_STATE_READ_ONLY:
+ case PH_FRINFC_TOPAZ_STATE_WR_CC_BYTE:
{
if((CC_READ_ONLY_VALUE == *psNdefMap->SendRecvBuf)
&& (PH_FRINFC_TOPAZ_VAL1 == *psNdefMap->SendRecvLength))
{
- /* Do nothing */
+#ifdef TOPAZ_RAW_SUPPORT
+ *psNdefMap->SendRecvBuf = PH_FRINFC_TOPAZ_CMD_READ;
+#else
+#ifdef PH_HAL4_ENABLE
+ psNdefMap->Cmd.JewelCmd = phHal_eJewel_Read1;
+#else
+ psNdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelRead1;
+#endif /* #ifdef PH_HAL4_ENABLE */
+#endif /* #ifdef TOPAZ_RAW_SUPPORT */
+ Status = phFriNfc_Tpz_H_RdBytes (psNdefMap, LOCK_BLOCK_NUMBER,
+ LOCK0_BYTE_NUMBER);
+
+ if (NFCSTATUS_PENDING == PHNFCSTATUS(Status))
+ {
+ psNdefMap->State = PH_FRINFC_TOPAZ_STATE_RD_LOCK0_BYTE;
+ }
}
else
{
@@ -524,6 +550,84 @@ void phFriNfc_TopazMap_Process( void *Context,
}
break;
}
+
+ case PH_FRINFC_TOPAZ_STATE_RD_LOCK0_BYTE:
+ {
+ if (PH_FRINFC_TOPAZ_VAL1 == *psNdefMap->SendRecvLength)
+ {
+ Status = phFriNfc_Tpz_H_WrAByte (psNdefMap, LOCK_BLOCK_NUMBER,
+ LOCK0_BYTE_NUMBER,
+ LOCK0_BYTE_VALUE);
+
+ if (NFCSTATUS_PENDING == PHNFCSTATUS(Status))
+ {
+ psNdefMap->State = PH_FRINFC_TOPAZ_STATE_WR_LOCK0_BYTE;
+ }
+ }
+ break;
+ }
+
+ case PH_FRINFC_TOPAZ_STATE_WR_LOCK0_BYTE:
+ {
+ if((LOCK0_BYTE_VALUE == *psNdefMap->SendRecvBuf)
+ && (PH_FRINFC_TOPAZ_VAL1 == *psNdefMap->SendRecvLength))
+ {
+#ifdef TOPAZ_RAW_SUPPORT
+ *psNdefMap->SendRecvBuf = PH_FRINFC_TOPAZ_CMD_READ;
+#else
+#ifdef PH_HAL4_ENABLE
+ psNdefMap->Cmd.JewelCmd = phHal_eJewel_Read1;
+#else
+ psNdefMap->Cmd.JewelCmd = phHal_eJewelCmdListJewelRead1;
+#endif /* #ifdef PH_HAL4_ENABLE */
+#endif /* #ifdef TOPAZ_RAW_SUPPORT */
+ Status = phFriNfc_Tpz_H_RdBytes (psNdefMap, LOCK_BLOCK_NUMBER,
+ LOCK1_BYTE_NUMBER);
+
+ if (NFCSTATUS_PENDING == PHNFCSTATUS(Status))
+ {
+ psNdefMap->State = PH_FRINFC_TOPAZ_STATE_RD_LOCK1_BYTE;
+ }
+ }
+ else
+ {
+ Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
+ NFCSTATUS_INVALID_RECEIVE_LENGTH);
+ }
+ }
+
+ case PH_FRINFC_TOPAZ_STATE_RD_LOCK1_BYTE:
+ {
+ if (PH_FRINFC_TOPAZ_VAL1 == *psNdefMap->SendRecvLength)
+ {
+ written_lock_byte = (uint8_t)(*psNdefMap->SendRecvBuf | LOCK1_BYTE_VALUE);
+ Status = phFriNfc_Tpz_H_WrAByte (psNdefMap, LOCK_BLOCK_NUMBER,
+ LOCK1_BYTE_NUMBER,
+ written_lock_byte);
+
+ if (NFCSTATUS_PENDING == PHNFCSTATUS(Status))
+ {
+ psNdefMap->State = PH_FRINFC_TOPAZ_STATE_WR_LOCK1_BYTE;
+ }
+ }
+ break;
+ }
+
+ case PH_FRINFC_TOPAZ_STATE_WR_LOCK1_BYTE:
+ {
+ if((written_lock_byte == *psNdefMap->SendRecvBuf)
+ && (PH_FRINFC_TOPAZ_VAL1 == *psNdefMap->SendRecvLength))
+ {
+ written_lock_byte = 0;
+ /* Do nothing */
+ }
+ else
+ {
+ written_lock_byte = 0;
+ Status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
+ NFCSTATUS_INVALID_RECEIVE_LENGTH);
+ }
+ }
#endif /* #ifdef FRINFC_READONLY_NDEF */
case PH_FRINFC_TOPAZ_STATE_WRITE:
{
diff --git a/src/phFriNfc_TopazMap.h b/src/phFriNfc_TopazMap.h
index 967a6ce..263095a 100644
--- a/src/phFriNfc_TopazMap.h
+++ b/src/phFriNfc_TopazMap.h
@@ -20,9 +20,9 @@
*
* Project: NFC-FRI
*
- * $Date: Tue Aug 31 15:13:10 2010 $
+ * $Date: Mon Dec 13 14:14:14 2010 $
* $Author: ing02260 $
- * $Revision: 1.25 $
+ * $Revision: 1.26 $
* $Aliases: $
*
*/
@@ -41,7 +41,7 @@
#include <phFriNfc_NdefMap.h>
-#define PH_FRINFC_NDEFMAP_TOPAZMAP_FILEREVISION "$Revision: 1.25 $"
+#define PH_FRINFC_NDEFMAP_TOPAZMAP_FILEREVISION "$Revision: 1.26 $"
#define PH_FRINFC_NDEFMAP_TOPAZMAP_FILEALIASES "$Aliases: $"
#if !defined (ES_HW_VER)
@@ -77,7 +77,11 @@
#ifdef FRINFC_READONLY_NDEF
- #define PH_FRINFC_TOPAZ_STATE_READ_ONLY 9 /*!< READ ONLY state */
+ #define PH_FRINFC_TOPAZ_STATE_WR_CC_BYTE 9 /*!< READ ONLY state */
+ #define PH_FRINFC_TOPAZ_STATE_RD_LOCK0_BYTE 10 /*!< read Lock byte 0 state */
+ #define PH_FRINFC_TOPAZ_STATE_WR_LOCK0_BYTE 11 /*!< write Lock byte 0 state */
+ #define PH_FRINFC_TOPAZ_STATE_RD_LOCK1_BYTE 12 /*!< read Lock byte 1 state */
+ #define PH_FRINFC_TOPAZ_STATE_WR_LOCK1_BYTE 13 /*!< write Lock byte 1 state */
#endif /* #ifdef FRINFC_READONLY_NDEF */
/*@}*/