summaryrefslogtreecommitdiffstats
path: root/src/phFriNfc_FelicaMap.c
diff options
context:
space:
mode:
authorSunil Jogi <sunil.jogi@nxp.com>2011-07-12 05:03:50 -0700
committerMartijn Coenen <maco@google.com>2011-08-08 16:27:39 +0200
commitdd7125f5ab402a8e52625182542c668db3e51c2c (patch)
treefc6e49030166685bf015d135cc09669f4c1b1048 /src/phFriNfc_FelicaMap.c
parent34af9600bae35a39b5d0ac31123c3d99ae706e5c (diff)
downloadexternal_libnfc-nxp-dd7125f5ab402a8e52625182542c668db3e51c2c.zip
external_libnfc-nxp-dd7125f5ab402a8e52625182542c668db3e51c2c.tar.gz
external_libnfc-nxp-dd7125f5ab402a8e52625182542c668db3e51c2c.tar.bz2
Felica system code related changes
Modified implementation for Felica card handling includes following: - SENSF_REQ with RC=0x00 during discovery - T3T NDEF detection with SC = 0x12FC - If card is not NDEF then poll for primary SC - NFC-F presence check with check for expected IDm Change-Id: I8e7e83a36ec2c6e8e423df751c4bc73badb6edb5
Diffstat (limited to 'src/phFriNfc_FelicaMap.c')
-rw-r--r--src/phFriNfc_FelicaMap.c130
1 files changed, 74 insertions, 56 deletions
diff --git a/src/phFriNfc_FelicaMap.c b/src/phFriNfc_FelicaMap.c
index 2604649..8a810f9 100644
--- a/src/phFriNfc_FelicaMap.c
+++ b/src/phFriNfc_FelicaMap.c
@@ -57,13 +57,10 @@ static NFCSTATUS phFriNfc_Felica_HCalCheckSum(const uint8_t *TempBuffer,
uint8_t EndIndex,
uint16_t RecvChkSum);
-#ifndef PH_HAL4_ENABLE
/* Helpers for Poll Related Operations*/
static NFCSTATUS phFriNfc_Felica_HPollCard( phFriNfc_NdefMap_t *NdefMap,
const uint8_t sysCode[],
uint8_t state);
-#endif /* #ifndef PH_HAL4_ENABLE */
-
static NFCSTATUS phFriNfc_Felica_HUpdateManufIdDetails(const phFriNfc_NdefMap_t *NdefMap);
@@ -2118,39 +2115,65 @@ static NFCSTATUS phFriNfc_Felica_HWriteDataBlk(phFriNfc_NdefMap_t *NdefMap)
NFCSTATUS phFriNfc_Felica_ChkNdef( phFriNfc_NdefMap_t *NdefMap)
{
NFCSTATUS status = NFCSTATUS_PENDING;
-
-#ifndef PH_HAL4_ENABLE
uint8_t sysCode[2];
-#endif /* #ifndef PH_HAL4_ENABLE */
-#ifdef PH_HAL4_ENABLE
-
- /* check the ndef compliency with the system code reecived in the RemoteDevInfo*/
- status = phFriNfc_Felica_HUpdateManufIdDetails(NdefMap);
-
- if (status == NFCSTATUS_SUCCESS)
- {
-
- /* set the operation type to Check ndef type*/
- NdefMap->Felica.OpFlag = PH_FRINFC_NDEFMAP_FELI_CHK_NDEF_OP;
- status = phFriNfc_Felica_HRdAttrInfo(NdefMap);
- }
-#else
-
/* set the system code for selecting the wild card*/
sysCode[0] = 0x12;
sysCode[1] = 0xFC;
status = phFriNfc_Felica_HPollCard( NdefMap,sysCode,PH_NFCFRI_NDEFMAP_FELI_STATE_SELECT_NDEF_APP);
-#endif /* #ifdef PH_HAL4_ENABLE */
return (status);
}
/*!
* \brief Check whether a particular Remote Device is NDEF compliant.
- * selects the wild card and then NFC Forum Reference Applications
+ * selects the sysCode and then NFC Forum Reference Applications
*/
+#ifdef PH_HAL4_ENABLE
+static NFCSTATUS phFriNfc_Felica_HPollCard( phFriNfc_NdefMap_t *NdefMap,
+ const uint8_t sysCode[],
+ uint8_t state)
+{
+ NFCSTATUS status = NFCSTATUS_PENDING;
+
+ /*Format the Poll Packet for selecting the system code passed as parameter */
+ NdefMap->SendRecvBuf[0] = 0x06;
+ NdefMap->SendRecvBuf[1] = 0x00;
+ NdefMap->SendRecvBuf[2] = sysCode[0];
+ NdefMap->SendRecvBuf[3] = sysCode[1];
+ NdefMap->SendRecvBuf[4] = 0x01;
+ NdefMap->SendRecvBuf[5] = 0x03;
+
+ NdefMap->SendLength = 6;
+
+ /*set the completion routines for the felica card operations*/
+ NdefMap->MapCompletionInfo.CompletionRoutine = phFriNfc_Felica_Process;
+ NdefMap->MapCompletionInfo.Context = NdefMap;
+
+ /*Set Ndef State*/
+ NdefMap->State = state;
+
+ /* set the felica cmd */
+ NdefMap->Cmd.FelCmd = phHal_eFelica_Raw;
+
+ /*set the additional informations for the data exchange*/
+ NdefMap->psDepAdditionalInfo.DepFlags.MetaChaining = 0;
+ NdefMap->psDepAdditionalInfo.DepFlags.NADPresent = 0;
+
+ status = phFriNfc_OvrHal_Transceive(NdefMap->LowerDevice,
+ &NdefMap->MapCompletionInfo,
+ NdefMap->psRemoteDevInfo,
+ NdefMap->Cmd,
+ &NdefMap->psDepAdditionalInfo,
+ NdefMap->SendRecvBuf,
+ NdefMap->SendLength,
+ NdefMap->SendRecvBuf,
+ NdefMap->SendRecvLength);
+ return (status);
+}
+#endif
+
#ifndef PH_HAL4_ENABLE
static NFCSTATUS phFriNfc_Felica_HPollCard( phFriNfc_NdefMap_t *NdefMap,
@@ -2210,50 +2233,45 @@ static NFCSTATUS phFriNfc_Felica_HUpdateManufIdDetails(const phFriNfc_NdefMap_
{
NFCSTATUS status = NFCSTATUS_PENDING;
-#ifdef PH_HAL4_ENABLE
- /* copy the IDm and PMm in Manufacture Details Structure*/
- (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufID),
- (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDm,
- 8);
- (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufParameter),
- (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.PMm,
- 8);
- status = PHNFCSTVAL(CID_NFC_NONE, NFCSTATUS_SUCCESS);
-#else
-
-
- /* Check the System Code for 0x12,0xFC*/
- if( (NdefMap->FelicaPollDetails.psTempRemoteDevInfo.RemoteDevInfo.CardInfo212_424.Startup212_424.SystemCodeAvailable == 1)
- && (NdefMap->FelicaPollDetails.psTempRemoteDevInfo.RemoteDevInfo.CardInfo212_424.Startup212_424.SystemCode[0] == 0x12)
- && (NdefMap->FelicaPollDetails.psTempRemoteDevInfo.RemoteDevInfo.CardInfo212_424.Startup212_424.SystemCode[1] == 0xFC))
+ /* Get the details from Poll Response packet */
+ if (NdefMap->SendRecvLength >= 20)
{
-
- /* copy the IDm and PMm in Manufacture Details Structure*/
- (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufID),
- (uint8_t *)NdefMap->FelicaPollDetails.psTempRemoteDevInfo.RemoteDevInfo.CardInfo212_424.Startup212_424.NFCID2t,
- 8);
- (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufParameter),
- (uint8_t *)NdefMap->FelicaPollDetails.psTempRemoteDevInfo.RemoteDevInfo.CardInfo212_424.Startup212_424.PMm,
- 8);
-
+ (void)memcpy( (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDm,
+ (uint8_t *)&NdefMap->SendRecvBuf[2], 8);
+ (void)memcpy( (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.PMm,
+ (uint8_t *)&NdefMap->SendRecvBuf[10], 8);
+ NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.SystemCode[1] = NdefMap->SendRecvBuf[18];
+ NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.SystemCode[0] = NdefMap->SendRecvBuf[19];
+ NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDmLength = 8;
- status = PHNFCSTVAL(CID_NFC_NONE,
- NFCSTATUS_SUCCESS);
-
+ /* copy the IDm and PMm in Manufacture Details Structure*/
+ (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufID),
+ (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDm,
+ 8);
+ (void)memcpy( (uint8_t *)(NdefMap->FelicaManufDetails.ManufParameter),
+ (uint8_t *)NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.PMm,
+ 8);
+ if((NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.SystemCode[1] == 0x12)
+ && (NdefMap->psRemoteDevInfo->RemoteDevInfo.Felica_Info.SystemCode[0] == 0xFC))
+ {
+ status = PHNFCSTVAL(CID_NFC_NONE, NFCSTATUS_SUCCESS);
+ }
+ else
+ {
+ status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
+ NFCSTATUS_NO_NDEF_SUPPORT);
+ }
}
else
{
- status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
- NFCSTATUS_NO_NDEF_SUPPORT);
+ status = PHNFCSTVAL(CID_FRI_NFC_NDEF_MAP,
+ NFCSTATUS_NO_NDEF_SUPPORT);
}
-#endif /* #ifdef PH_HAL4_ENABLE */
-
- return (status);
+ return (status);
}
-
/*!
* \brief Completion Routine, Processing function, needed to avoid long blocking.
* \note The lower (Overlapped HAL) layer must register a pointer to this function as a Completion