diff options
-rw-r--r-- | src/phFriNfc_MifULFormat.c | 68 | ||||
-rw-r--r-- | src/phFriNfc_MifULFormat.h | 15 | ||||
-rw-r--r-- | src/phFriNfc_NdefMap.c | 8 | ||||
-rw-r--r-- | src/phFriNfc_SmtCrdFmt.h | 17 | ||||
-rw-r--r-- | src/phFriNfc_TopazMap.c | 120 | ||||
-rw-r--r-- | src/phFriNfc_TopazMap.h | 12 |
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 */ /*@}*/ |