summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]Android.mk17
-rwxr-xr-x[-rw-r--r--]inc/phNfcConfig.h50
-rwxr-xr-x[-rw-r--r--]inc/phNfcInterface.h92
-rwxr-xr-x[-rw-r--r--]inc/phNfcTypes.h329
-rwxr-xr-x[-rw-r--r--]src/phHal4Nfc.c136
-rwxr-xr-x[-rw-r--r--]src/phHal4Nfc.h352
-rwxr-xr-x[-rw-r--r--]src/phHal4Nfc_ADD.c238
-rwxr-xr-x[-rw-r--r--]src/phHal4Nfc_Emulation.c64
-rwxr-xr-x[-rw-r--r--]src/phHal4Nfc_Internal.h49
-rwxr-xr-x[-rw-r--r--]src/phHciNfc.c4
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_AdminMgmt.c107
-rwxr-xr-xsrc/phHciNfc_CE.c455
-rwxr-xr-xsrc/phHciNfc_CE.h114
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_CE_A.c1264
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_CE_A.h55
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_CE_B.c1256
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_CE_B.h56
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_Generic.c167
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_Pipe.c106
-rwxr-xr-x[-rw-r--r--]src/phHciNfc_Sequence.c240
-rwxr-xr-x[-rw-r--r--]src/phLibNfc.h1149
-rwxr-xr-x[-rw-r--r--]src/phLibNfc_Internal.h4
-rwxr-xr-x[-rw-r--r--]src/phLibNfc_initiator.c656
23 files changed, 5395 insertions, 1565 deletions
diff --git a/Android.mk b/Android.mk
index b45f78b..9294807 100644..100755
--- a/Android.mk
+++ b/Android.mk
@@ -10,14 +10,14 @@ LOCAL_ARM_MODE := arm
#phLibNfc
LOCAL_SRC_FILES:= \
- src/phLibNfc.c \
- src/phLibNfc_discovery.c \
- src/phLibNfc_initiator.c \
- src/phLibNfc_llcp.c \
- src/phLibNfc_Ioctl.c \
- src/phLibNfc_ndef_raw.c \
- src/phLibNfc_SE.c \
- src/phLibNfc_target.c
+ src/phLibNfc.c \
+ src/phLibNfc_discovery.c \
+ src/phLibNfc_initiator.c \
+ src/phLibNfc_llcp.c \
+ src/phLibNfc_Ioctl.c \
+ src/phLibNfc_ndef_raw.c \
+ src/phLibNfc_SE.c \
+ src/phLibNfc_target.c
#phHalNfc
LOCAL_SRC_FILES += src/phHal4Nfc_ADD.c
@@ -32,6 +32,7 @@ LOCAL_SRC_FILES += src/phDnldNfc.c
#phHciNfc
LOCAL_SRC_FILES += src/phHciNfc_AdminMgmt.c
LOCAL_SRC_FILES += src/phHciNfc.c
+LOCAL_SRC_FILES += src/phHciNfc_CE.c
LOCAL_SRC_FILES += src/phHciNfc_CE_A.c
LOCAL_SRC_FILES += src/phHciNfc_CE_B.c
LOCAL_SRC_FILES += src/phHciNfc_DevMgmt.c
diff --git a/inc/phNfcConfig.h b/inc/phNfcConfig.h
index 6bc050c..0c94dc0 100644..100755
--- a/inc/phNfcConfig.h
+++ b/inc/phNfcConfig.h
@@ -124,14 +124,14 @@
/**< Indicates PN544 Power Modes Configuration for the NFC Device,
- 0x00U -> PN544 stays in active bat mode
+ 0x00U -> PN544 stays in active bat mode
(except when generating RF field)
- 0x01U -> PN544 goes in standby when possible otherwise
+ 0x01U -> PN544 goes in standby when possible otherwise
stays in active bat mode
- 0x02U -> PN544 goes in idle mode as soon as it can
+ 0x02U -> PN544 goes in idle mode as soon as it can
(otherwise it is in active bat except when generating RF field)
- 0x03U -> PN544 goes in standby when possible otherwise goes in idle mode
- as soon as it can (otherwise it is in active bat except when
+ 0x03U -> PN544 goes in standby when possible otherwise goes in idle mode
+ as soon as it can (otherwise it is in active bat except when
generating RF field)
*/
@@ -150,7 +150,7 @@
/**< Max number of remote devices supported */
#ifndef MAX_REMOTE_DEVICES
-#define MAX_REMOTE_DEVICES 0x0A
+#define MAX_REMOTE_DEVICES 0x0A
#endif
/**< System Event Notification
@@ -198,30 +198,30 @@
/**< Presence check interval in milliseconds */
#ifndef PRESENCE_CHECK_INTERVAL
#define PRESENCE_CHECK_INTERVAL 500U
-#endif
+#endif
-/** Resolution value for the timer, here the
+/** Resolution value for the timer, here the
timer resolution is 500 milliseconds */
#ifndef TIMER_RESOLUTION
#define TIMER_RESOLUTION 500U
-#endif
+#endif
/* Kindly note that the below Timeout values should be
* in Multiples of the value provided to TIMER_RESOLUTION
*/
-/**< Defines guard time out value for LLC timer,
+/**< Defines guard time out value for LLC timer,
1000 is in milliseconds */
#ifndef LINK_GUARD_TIMEOUT
#define LINK_GUARD_TIMEOUT 1000U
-#endif
+#endif
-/**< Defines connection time out value for LLC timer,
+/**< Defines connection time out value for LLC timer,
1000 is in milliseconds */
#ifndef LINK_CONNECTION_TIMEOUT
#define LINK_CONNECTION_TIMEOUT 1000U
-#endif
+#endif
/**< Defines ACK time out value for LLC timer,
150 is in milliseconds */
@@ -239,7 +239,7 @@
#endif
-/**< Define to configure the Active Mode Polling Guard Time-out
+/**< Define to configure the Active Mode Polling Guard Time-out
*/
#ifndef DEV_MGMT_ACT_GRD_TO_DEFAULT
@@ -275,7 +275,7 @@
#ifndef HOST_CE_A_SAK_DEFAULT
#define HOST_CE_A_SAK_DEFAULT 0x20U
-#endif
+#endif
#ifndef NXP_CE_A_ATQA_HIGH
#define NXP_CE_A_ATQA_HIGH 0x00U
@@ -288,11 +288,11 @@
#ifndef NXP_UICC_CE_RIGHTS
#define NXP_UICC_CE_RIGHTS 0x0FU
-#endif
+#endif
#ifndef NXP_UICC_RD_RIGHTS
#define NXP_UICC_RD_RIGHTS 0x00U
-#endif
+#endif
/*
@@ -302,7 +302,7 @@
*/
#define ES_HW_VER 32
-
+
/*
*****************************************************************
*************** FEATURE SPECIFIC MACROS *************************
@@ -319,7 +319,7 @@
#endif
#if (NXP_SMX == 1)
-#define NXP_HAL_ENABLE_SMX
+#define NXP_HAL_ENABLE_SMX
#endif
/**< Macro to Enable the Host Session
@@ -373,7 +373,17 @@
#define RECONNECT_SUPPORT
/**< Macro to Enable the Card Emulation Feature */
-/* #define HOST_EMULATION */
+#define HOST_EMULATION
+
+//this ifdef can be removed when this is not a patch that is being
+//administered after a new release of Android. it is required that
+//the new pipes for A and B emu get created for the CE patch ON THE NFC CHIP
+//if this patch is adminstered AFTER the phone has been already updated with
+//a release, it is possible that the create A/B pipe code could never
+//get executed, so we are forcing it every time. this can be removed
+//for a main build with a new OS release, or any time this build has run at
+//least once on a device
+#define FIRST_CE_PATCH
#define NXP_HAL_VERIFY_EEPROM_CRC 0x01U
diff --git a/inc/phNfcInterface.h b/inc/phNfcInterface.h
index fdae2ed..3a2d9c4 100644..100755
--- a/inc/phNfcInterface.h
+++ b/inc/phNfcInterface.h
@@ -75,27 +75,31 @@
#define NFC_NOTIFY_DEINIT_COMPLETED 0x02
#define NFC_NOTIFY_DEINIT_FAILED 0xF2
-#define NFC_NOTIFY_EVENT 0x70
+#define NFC_NOTIFY_EVENT 0x70
#define NFC_NOTIFY_DEVICE_ACTIVATED 0x82
#define NFC_NOTIFY_DEVICE_DEACTIVATED 0x83
#define NFC_NOTIFY_SEND_COMPLETED 0x03
+#define NFC_NOTIFY_SEND_CE_A_COMPLETED 0x76
+#define NFC_NOTIFY_SEND_CE_B_COMPLETED 0x77
#define NFC_NOTIFY_SEND_ERROR 0xF3
#define NFC_NOTIFY_RECV_COMPLETED 0x04
#define NFC_NOTIFY_RECV_ERROR 0xF4
-#define NFC_NOTIFY_RECV_EVENT 0x74
+#define NFC_NOTIFY_RECV_EVENT 0x74
+#define NFC_NOTIFY_CE_A_RECV_EVENT 0x75
+#define NFC_NOTIFY_CE_B_RECV_EVENT 0x78
#define NFC_NOTIFY_RECV_CANCELLED 0x34
#define NFC_NOTIFY_TRANSCEIVE_COMPLETED 0x05
#define NFC_NOTIFY_TRANSCEIVE_ERROR 0xF5
#define NFC_NOTIFY_POLL_ENABLED 0x06
-#define NFC_NOTIFY_POLL_RESTARTED 0x16
+#define NFC_NOTIFY_POLL_RESTARTED 0x16
#define NFC_NOTIFY_POLL_DISABLED 0x26
-#define NFC_NOTIFY_CONFIG_SUCCESS 0x36
-#define NFC_NOTIFY_CONFIG_ERROR 0xF6
+#define NFC_NOTIFY_CONFIG_SUCCESS 0x36
+#define NFC_NOTIFY_CONFIG_ERROR 0xF6
#define NFC_NOTIFY_TARGET_DISCOVERED 0x10
#define NFC_NOTIFY_DISCOVERY_ERROR 0xFA
@@ -107,9 +111,9 @@
#define NFC_NOTIFY_TARGET_DISCONNECTED 0x15
#define NFC_NOTIFY_DISCONNECT_FAILED 0xFD
-#define NFC_NOTIFY_TRANSACTION 0x07
+#define NFC_NOTIFY_TRANSACTION 0x07
-#define NFC_NOTIFY_RESULT 0x08
+#define NFC_NOTIFY_RESULT 0x08
#define NFC_NOTIFY_DEVICE_ERROR 0xFEU
#define NFC_NOTIFY_ERROR 0xFFU
@@ -149,16 +153,16 @@ enum phNfcIF_eExecution{
typedef enum phNfc_eModeType{
- MODE_ON = 0x00U, /**< Switches the particular feature ON*/
- MODE_OFF /**< Switches the particular feature OFF*/
+ MODE_ON = 0x00U, /**< Switches the particular feature ON*/
+ MODE_OFF /**< Switches the particular feature OFF*/
}phNfc_eModeType_t;
/**
* State Structure to hold the State Information
*
- * This structure holds the state Information of a specified
+ * This structure holds the state Information of a specified
* Layer .
- *
+ *
*/
typedef struct phNfc_sState
@@ -173,31 +177,31 @@ typedef struct phNfc_sState
/**
- * Transaction Completion Information Structure
+ * Transaction Completion Information Structure
*
- * This structure holds the completion callback information of the
- * transaction passed from the lower layer to the upper layer
+ * This structure holds the completion callback information of the
+ * transaction passed from the lower layer to the upper layer
* along with the completion callback.
*/
typedef struct phNfc_sTransactionInfo
{
- /* Returns the status of the Transaction Completion routine */
+ /* Returns the status of the Transaction Completion routine */
NFCSTATUS status;
- /* Indicates the Type of the Transaction */
- uint8_t type;
- /* To contain more Transaction Notification specific info */
- void *info;
- /* The data response from the Transaction */
+ /* Indicates the Type of the Transaction */
+ uint8_t type;
+ /* To contain more Transaction Notification specific info */
+ void *info;
+ /* The data response from the Transaction */
uint8_t *buffer;
- /* The size of the data response from the Transaction */
+ /* The size of the data response from the Transaction */
uint16_t length;
}phNfc_sTransactionInfo_t;
/**
- * Notification Information Structure
+ * Notification Information Structure
*
- * This structure holds the notification callback information passed from
+ * This structure holds the notification callback information passed from
* the lower layer to the upper layer along with the notification callback.
*/
@@ -206,29 +210,29 @@ typedef struct phNfc_sCompletionInfo
/* Returns the status of the completion routine */
NFCSTATUS status;
- /* Indicates the Type of the Information
- * associated with the completion
- */
- uint8_t type;
+ /* Indicates the Type of the Information
+ * associated with the completion
+ */
+ uint8_t type;
- /* To contain more completion specific info */
+ /* To contain more completion specific info */
void *info;
}phNfc_sCompletionInfo_t;
/**
- * Notification Information
- *
+ * Notification Information
+ *
*/
typedef struct phNfc_sNotificationInfo
{
- /* Returns the status of the Notification routine */
- NFCSTATUS status;
- /* Indicates the Type of the Notification */
- phHal_eNotificationType_t type;
- /* To contain more Notification specific info */
- void *info;
+ /* Returns the status of the Notification routine */
+ NFCSTATUS status;
+ /* Indicates the Type of the Notification */
+ phHal_eNotificationType_t type;
+ /* To contain more Notification specific info */
+ void *info;
}phNfc_sNotificationInfo_t;
@@ -298,8 +302,8 @@ typedef NFCSTATUS (*pphNfcIF_Interface_t) (
/**
* Data Transaction between the lower layer interface
*
- * Sends or Receives the given amount of data to the lower layer.
- * The call returns immediately and the registered callback is
+ * Sends or Receives the given amount of data to the lower layer.
+ * The call returns immediately and the registered callback is
* called when all data has been written.
* <p>
*
@@ -351,11 +355,11 @@ typedef struct phNfc_sLowerIF
typedef struct phNfcIF_sCallBack
{
- /**<Holds context info to be sent to lower layer*/
+ /**<Holds context info to be sent to lower layer*/
void *pif_ctxt;
- /**<Callback notifies occurrance of event in Lower Interface*/
+ /**<Callback notifies occurrance of event in Lower Interface*/
pphNfcIF_Notification_CB_t notify;
- /**<asynchronous Interface Transaction Completion callback*/
+ /**<asynchronous Interface Transaction Completion callback*/
pphNfcIF_Transact_Completion_CB_t send_complete;
pphNfcIF_Transact_Completion_CB_t receive_complete;
@@ -371,11 +375,11 @@ typedef struct phNfcIF_sCallBack
typedef struct phNfcIF_sReference
{
- /**<Generic Interface structure with the Lower Layer*/
+ /**<Generic Interface structure with the Lower Layer*/
phNfc_sLowerIF_t *plower_if;
- /**<pointer to the data to be sent*/
+ /**<pointer to the data to be sent*/
uint8_t *tx_data;
- /**<pointer to the data to be received*/
+ /**<pointer to the data to be received*/
uint8_t *rx_data;
}phNfcIF_sReference_t, *pphNfcIF_sReference_t;
diff --git a/inc/phNfcTypes.h b/inc/phNfcTypes.h
index 914ae07..f698ddb 100644..100755
--- a/inc/phNfcTypes.h
+++ b/inc/phNfcTypes.h
@@ -101,23 +101,23 @@ typedef unsigned long uint32_t; /**< \ingroup grp_nfc_common
#endif /* _WIN32 */
#ifndef TRUE
-#define TRUE (0x01) /**< \ingroup grp_nfc_common
+#define TRUE (0x01) /**< \ingroup grp_nfc_common
Logical True Value */
#endif
#ifndef FALSE
-#define FALSE (0x00) /**< \ingroup grp_nfc_common
+#define FALSE (0x00) /**< \ingroup grp_nfc_common
Logical False Value */
#endif
-typedef uint8_t utf8_t; /**< \ingroup grp_nfc_common
+typedef uint8_t utf8_t; /**< \ingroup grp_nfc_common
UTF8 Character String */
-typedef uint8_t bool_t; /**< \ingroup grp_nfc_common
- boolean data type */
+typedef uint8_t bool_t; /**< \ingroup grp_nfc_common
+ boolean data type */
typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common
- NFC return values
+ NFC return values
\ref phNfcStatus.h for different status
values */
@@ -126,7 +126,7 @@ typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common
#endif
/* This Macro to be used to resolve Unused and unreference
- * compiler warnings.
+ * compiler warnings.
*/
#define PHNFC_UNUSED_VARIABLE(x) for((x)=(x);(x)!=(x);)
@@ -165,7 +165,7 @@ typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common
#define PHHAL_ATQA_LENGTH 0x02U /**< ATQA length */
#define PHHAL_MAX_UID_LENGTH 0x0AU /**< Maximum UID length expected */
-#define PHHAL_MAX_ATR_LENGTH 0x30U /**< Maximum ATR_RES (General Bytes)
+#define PHHAL_MAX_ATR_LENGTH 0x30U /**< Maximum ATR_RES (General Bytes)
* length expected */
#define PHHAL_ATQB_LENGTH 0x0BU /**< ATQB length */
@@ -180,7 +180,7 @@ typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common
ISO15693 Tag */
#define VENDOR_NAME_LEN 0x14U
-#define MAX_TRANSFER_UNIT 0x21U
+#define MAX_TRANSFER_UNIT 0x21U
#define SESSIONID_SIZE 0x08U
#define MAX_AID_LEN 0x10U
#define MAX_UICC_PARAM_LEN 0xFFU
@@ -212,9 +212,9 @@ typedef uint16_t NFCSTATUS; /**< \ingroup grp_nfc_common
/**
* Data Buffer Structure to hold the Data Buffer
*
- * This structure holds the Data in the Buffer of the specified
+ * This structure holds the Data in the Buffer of the specified
* size.
- *
+ *
*/
typedef struct phNfc_sData_t
{
@@ -226,7 +226,7 @@ typedef struct phNfc_sData_t
* \brief Possible Hardware Configuration exposed to upper layer.
* Typically this should be at least the communication link (Ex:"COM1","COM2")
* the controller is connected to.
- */
+ */
typedef struct phLibNfc_sConfig_t
{
/** Device node of the controller */
@@ -255,29 +255,29 @@ typedef struct phLibNfc_Message_t
* Deferred message. This message type will be posted to the client application thread
* to notify that a deferred call must be invoked.
*/
-#define PH_LIBNFC_DEFERREDCALL_MSG (0x311)
+#define PH_LIBNFC_DEFERREDCALL_MSG (0x311)
/**
*\brief Deferred call declaration.
- * This type of API is called from ClientApplication ( main thread) to notify
+ * This type of API is called from ClientApplication ( main thread) to notify
* specific callback.
*/
typedef void (*pphLibNfc_DeferredCallback_t) (void*);
/**
*\brief Deferred parameter declaration.
- * This type of data is passed as parameter from ClientApplication (main thread) to the
+ * This type of data is passed as parameter from ClientApplication (main thread) to the
* callback.
*/
typedef void *pphLibNfc_DeferredParameter_t;
/**
*\brief Deferred message specific info declaration.
- * This type of information is packed as message data when \ref PH_LIBNFC_DEFERREDCALL_MSG
+ * This type of information is packed as message data when \ref PH_LIBNFC_DEFERREDCALL_MSG
* type message is posted to message handler thread.
- */
+ */
typedef struct phLibNfc_DeferredCall_t
{
- pphLibNfc_DeferredCallback_t pCallback;/**< pointer to Deferred callback */
- pphLibNfc_DeferredParameter_t pParameter;/**< pointer to Deferred parameter */
+ pphLibNfc_DeferredCallback_t pCallback;/**< pointer to Deferred callback */
+ pphLibNfc_DeferredParameter_t pParameter;/**< pointer to Deferred parameter */
} phLibNfc_DeferredCall_t;
@@ -293,7 +293,7 @@ typedef struct phLibNfc_DeferredCall_t
*/
typedef struct phNfc_sSupProtocol_t
{
- unsigned int MifareUL : 1; /**< Protocol Mifare Ultra Light or
+ unsigned int MifareUL : 1; /**< Protocol Mifare Ultra Light or
any NFC Forum Type-2 tags */
unsigned int MifareStd : 1; /**< Protocol Mifare Standard. */
unsigned int ISO14443_4A : 1; /**< Protocol ISO14443-4 Type A. */
@@ -312,11 +312,11 @@ typedef struct phNfc_sSupProtocol_t
* \brief Information related to the NFC Device
*
* The <em> Device Information Structure </em> holds information
- * related to the NFC IC read during initialization time.
+ * related to the NFC IC read during initialization time.
* It allows the caller firware, hardware version, the model id,
- * HCI verison supported and vendor name. Refer to the NFC Device
+ * HCI verison supported and vendor name. Refer to the NFC Device
* User Manual on how to interpret each of the values. In addition
- * it also contains capabilities of the NFC Device such as the
+ * it also contains capabilities of the NFC Device such as the
* protocols supported in Reader and emulation mode
*
*/
@@ -337,10 +337,10 @@ typedef struct phNfc_sDeviceCapabilities_t
Vendor name (Null terminated string)*/
uint8_t full_version[NXP_FULL_VERSION_LEN];
- phNfc_sSupProtocol_t ReaderSupProtocol; /**< Supported protocols
+ phNfc_sSupProtocol_t ReaderSupProtocol; /**< Supported protocols
(Bitmapped) in Reader mode. */
phNfc_sSupProtocol_t EmulationSupProtocol; /**< Supported protocols
- (Bitmapped) in Emulation
+ (Bitmapped) in Emulation
mode. */
char firmware_update_info; /** */
} phNfc_sDeviceCapabilities_t;
@@ -361,79 +361,79 @@ typedef struct phNfc_sDeviceCapabilities_t
typedef enum phNfc_eMifareCmdList_t
{
phNfc_eMifareRaw = 0x00U, /**< This command performs raw transcations .
- Format of the phLibNfc_sTransceiveInfo_t
- content in this case shall be as below:
- • cmd: filed shall set to phHal_eMifareRaw .
+ Format of the phLibNfc_sTransceiveInfo_t
+ content in this case shall be as below:
+ • cmd: filed shall set to phHal_eMifareRaw .
• addr : doesn't carry any significance.
- • sSendData : Shall contain formatted raw buffer
- based on MIFARE commands type used.
- Formatted buffer shall follow below
+ • sSendData : Shall contain formatted raw buffer
+ based on MIFARE commands type used.
+ Formatted buffer shall follow below
formating scheme.
-
+
CmdType+ Block No + CommandSpecific data + 2 byte CRC
- Ex: With Write 4 byte command on block 8 looks as
- " 0xA2,0x08,0x01,0x02,0x03,0x04,CRC1,CRC2
- Note : For MIFARE Std card we recommend use MIFARE
+ Ex: With Write 4 byte command on block 8 looks as
+ " 0xA2,0x08,0x01,0x02,0x03,0x04,CRC1,CRC2
+ Note : For MIFARE Std card we recommend use MIFARE
commands directly.
*/
phNfc_eMifareAuthentA = 0x60U, /**< Mifare Standard:\n
This command performs an authentication with KEY A for a sector.\n
- Format of the phLibNfc_sTransceiveInfo_t content in this case is :
- • cmd: field shall set to phHal_eMifareAuthentA .
- • addr : indicates MIFARE block address.
+ Format of the phLibNfc_sTransceiveInfo_t content in this case is :
+ • cmd: field shall set to phHal_eMifareAuthentA .
+ • addr : indicates MIFARE block address.
Ex: 0x08 indicates block 8 needs to be authenticated.
- • sSendData : Shall contain authentication key values.
- sSendData ,buffer shall contain authentication
- key values 01 02 03 04 05 06 authenticates
- block 08 with the key 0x01[..]06. If this
- command fails, then user needs to reactivate
- the remote Mifare card.
+ • sSendData : Shall contain authentication key values.
+ sSendData ,buffer shall contain authentication
+ key values 01 02 03 04 05 06 authenticates
+ block 08 with the key 0x01[..]06. If this
+ command fails, then user needs to reactivate
+ the remote Mifare card.
*/
phNfc_eMifareAuthentB = 0x61U, /**< Mifare Standard:\n
This command performs an authentication with KEY B for a sector.\n
- Format of the phLibNfc_sTransceiveInfo_t content in this case is :
- • cmd: field shall set to phHal_eMifareAuthentB .
- • addr : indicates MIFARE block address.
+ Format of the phLibNfc_sTransceiveInfo_t content in this case is :
+ • cmd: field shall set to phHal_eMifareAuthentB .
+ • addr : indicates MIFARE block address.
Ex: 0x08 indicates block 8 needs to be authenticated.
- • sSendData : Shall contain authentication key values.
- sSendData ,buffer shall contain authentication
- key values 01 02 03 04 05 06 authenticates
- block 08 with the key 0x01[..]06. If this
- command fails, then user needs to reactivate
- the remote Mifare card.
+ • sSendData : Shall contain authentication key values.
+ sSendData ,buffer shall contain authentication
+ key values 01 02 03 04 05 06 authenticates
+ block 08 with the key 0x01[..]06. If this
+ command fails, then user needs to reactivate
+ the remote Mifare card.
*/
phNfc_eMifareRead16 = 0x30U, /**< Mifare Standard and Ultra Light:\n
Read 16 Bytes from a Mifare Standard block or 4 Mifare Ultra Light pages.\n
- Format of the phLibNfc_sTransceiveInfo_t content in this case is :
- • cmd: field shall set to phHal_eMifareRead16 .
- • addr : memory adress to read.
- • sRecvData : Shall contain buffer of size 16
- to read the data into.
+ Format of the phLibNfc_sTransceiveInfo_t content in this case is :
+ • cmd: field shall set to phHal_eMifareRead16 .
+ • addr : memory adress to read.
+ • sRecvData : Shall contain buffer of size 16
+ to read the data into.
- If this command fails, the user needs to reactivate the
+ If this command fails, the user needs to reactivate the
the remote Mifare card
*/
phNfc_eMifareRead = 0x30U,
phNfc_eMifareWrite16 = 0xA0U, /**< Mifare Standard and Ultra Light:\n
Write 16 Bytes to a Mifare Standard block or 4 Mifare Ultra Light pages.\n
- Format of the phLibNfc_sTransceiveInfo_t content in this case is :
- • cmd: field shall set to phHal_eMifareWrite16 .
- • addr : starting memory adress to write from.
+ Format of the phLibNfc_sTransceiveInfo_t content in this case is :
+ • cmd: field shall set to phHal_eMifareWrite16 .
+ • addr : starting memory adress to write from.
• sSendData : Shall contain buffer of size 16 containing
- the data bytes to be written.
-
- If this command fails, the user needs to reactivate the
+ the data bytes to be written.
+
+ If this command fails, the user needs to reactivate the
the remote Mifare card
*/
phNfc_eMifareWrite4 = 0xA2U, /**< Mifare Ultra Light:\n
Write 4 bytes.\n
- Format of the phLibNfc_sTransceiveInfo_t content in this case is :
- • cmd: field shall set to phHal_eMifareWrite4 .
- • addr : starting memory adress to write from.
+ Format of the phLibNfc_sTransceiveInfo_t content in this case is :
+ • cmd: field shall set to phHal_eMifareWrite4 .
+ • addr : starting memory adress to write from.
• sSendData : Shall contain buffer of size 4 containing
- the data bytes to be written.
+ the data bytes to be written.
- If this command fails, the user needs to reactivate the
+ If this command fails, the user needs to reactivate the
the remote Mifare card
*/
phNfc_eMifareInc = 0xC1U, /**< Increment. */
@@ -456,7 +456,7 @@ typedef enum phNfc_eMifareCmdList_t
typedef enum phNfc_eIso14443_4_CmdList_t
{
phNfc_eIso14443_4_Raw = 0x00U /**< ISO 14443-4 Exchange command:\n
- - This command sends the data buffer directly
+ - This command sends the data buffer directly
to the remote device */
} phNfc_eIso14443_4_CmdList_t;
@@ -472,7 +472,7 @@ typedef enum phNfc_eIso14443_4_CmdList_t
typedef enum phNfc_eNfcIP1CmdList_t
{
phNfc_eNfcIP1_Raw = 0x00U /**< NfcIP Exchange command:\n
- - This command sends the data buffer directly
+ - This command sends the data buffer directly
to the remote device */
}phNfc_eNfcIP1CmdList_t;
@@ -488,11 +488,11 @@ typedef enum phNfc_eIso15693_CmdList_t
{
#if 0
phNfc_eIso15693_Raw = 0x00U, /**< ISO 15693 Exchange Raw command:\n
- - This command sends the data buffer directly
+ - This command sends the data buffer directly
to the remote device */
#endif
phNfc_eIso15693_Cmd = 0x20U, /**< ISO 15693 Exchange command:\n
- - This command is used to access the card
+ - This command is used to access the card
to the remote device */
phNfc_eIso15693_Invalid = 0xFFU /**< Invalid Command */
} phNfc_eIso15693_CmdList_t;
@@ -508,7 +508,7 @@ typedef enum phNfc_eIso15693_CmdList_t
typedef enum phNfc_eFelicaCmdList_t
{
phNfc_eFelica_Raw = 0xF0U, /**< Felica Raw command:\n
- - This command sends the data buffer directly
+ - This command sends the data buffer directly
to the remote device */
phNfc_eFelica_Check = 0x00, /**< Felica Check command:\n
- This command checks the data from the Felica
@@ -530,7 +530,7 @@ typedef enum phNfc_eFelicaCmdList_t
typedef enum phNfc_eJewelCmdList_t
{
phNfc_eJewel_Raw = 0x00U, /**< Jewel command:\n
- - This command sends the data buffer directly
+ - This command sends the data buffer directly
to the remote device */
phNfc_eJewel_Invalid = 0xFFU /**< Invalid jewel command */
}phNfc_eJewelCmdList_t;
@@ -538,10 +538,10 @@ typedef enum phNfc_eJewelCmdList_t
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Reader A RF Gate Information Container
+* \brief Remote Device Reader A RF Gate Information Container
*
* The <em> Reader A structure </em> includes the available information
-* related to the discovered ISO14443A remote device. This information
+* related to the discovered ISO14443A remote device. This information
* is updated for every device discovery.
* \note None.
*
@@ -550,11 +550,11 @@ typedef struct phNfc_sIso14443AInfo_t
{
uint8_t Uid[PHHAL_MAX_UID_LENGTH]; /**< UID information of the TYPE A
Tag Discovered */
- uint8_t UidLength; /**< UID information length, shall not be greater
+ uint8_t UidLength; /**< UID information length, shall not be greater
than PHHAL_MAX_UID_LENGTH i.e., 10 */
- uint8_t AppData[PHHAL_MAX_ATR_LENGTH]; /**< Application data information of the
- tag discovered (= Historical bytes for
- type A) */
+ uint8_t AppData[PHHAL_MAX_ATR_LENGTH]; /**< Application data information of the
+ tag discovered (= Historical bytes for
+ type A) */
uint8_t AppDataLength; /**< Application data length */
uint8_t Sak; /**< SAK informationof the TYPE A
Tag Discovered */
@@ -562,23 +562,23 @@ typedef struct phNfc_sIso14443AInfo_t
Tag Discovered */
uint8_t MaxDataRate; /**< Maximum data rate supported by the TYPE A
Tag Discovered */
- uint8_t Fwi_Sfgt; /**< Frame waiting time and start up frame guard
- time as defined in ISO/IEC 14443-4[7] for
+ uint8_t Fwi_Sfgt; /**< Frame waiting time and start up frame guard
+ time as defined in ISO/IEC 14443-4[7] for
type A */
} phNfc_sIso14443AInfo_t;
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Reader B RF Gate Information Container
+* \brief Remote Device Reader B RF Gate Information Container
*
* The <em> Reader B structure </em> includes the available information
-* related to the discovered ISO14443B remote device. This information
+* related to the discovered ISO14443B remote device. This information
* is updated for every device discovery.
* \note None.
*
*/
-typedef struct phNfc_sIso14443BInfo_t
+typedef struct phNfc_sIso14443BInfo_t
{
union phNfc_uAtqBInfo
{
@@ -594,8 +594,8 @@ typedef struct phNfc_sIso14443BInfo_t
uint8_t AtqRes[PHHAL_ATQB_LENGTH]; /**< ATQB Response Information of TYPE B
Tag Discovered */
} AtqB;
- uint8_t HiLayerResp[PHHAL_MAX_ATR_LENGTH]; /**< Higher Layer Response information
- in answer to ATRRIB Command for Type B */
+ uint8_t HiLayerResp[PHHAL_MAX_ATR_LENGTH]; /**< Higher Layer Response information
+ in answer to ATRRIB Command for Type B */
uint8_t HiLayerRespLength; /**< Higher Layer Response length */
uint8_t Afi; /**< Application Family Identifier of TYPE B
Tag Discovered */
@@ -603,13 +603,29 @@ typedef struct phNfc_sIso14443BInfo_t
Tag Discovered */
} phNfc_sIso14443BInfo_t;
+/** \ingroup grp_hal_nfci
+*
+* \brief Remote Device 14443-4 Card RF Gate Information Container
+*
+* The <em> Card 14443-4 structure </em> includes the available information
+* related to the discovered ISO14443-4 PCD remote device. This information
+* is updated for every device discovery.
+* \note None.
+*
+*/
+typedef struct phNfc_sIso14443_4_PCD_Info_t
+{
+ uint8_t *buffer; /**< Data submitted to the emulated card*/
+ uint16_t length; /**< Data length*/
+} phNfc_sIso14443_4_PCD_Info_t;
+
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Reader B prime RF Gate Information Container
+* \brief Remote Device Reader B prime RF Gate Information Container
*
*/
-typedef struct phNfc_sIso14443BPrimeInfo_t
+typedef struct phNfc_sIso14443BPrimeInfo_t
{
/* TODO: This will be updated later */
void *BPrimeCtxt;
@@ -618,19 +634,19 @@ typedef struct phNfc_sIso14443BPrimeInfo_t
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Jewel Reader RF Gate Information Container
+* \brief Remote Device Jewel Reader RF Gate Information Container
*
* The <em> Jewel Reader structure </em> includes the available information
-* related to the discovered Jewel remote device. This information
+* related to the discovered Jewel remote device. This information
* is updated for every device discovery.
* \note None.
*
*/
-typedef struct phNfc_sJewelInfo_t
+typedef struct phNfc_sJewelInfo_t
{
uint8_t Uid[PHHAL_MAX_UID_LENGTH]; /**< UID information of the TYPE A
Tag Discovered */
- uint8_t UidLength; /**< UID information length, shall not be greater
+ uint8_t UidLength; /**< UID information length, shall not be greater
than PHHAL_MAX_UID_LENGTH i.e., 10 */
uint8_t HeaderRom0; /**< Header Rom byte zero */
uint8_t HeaderRom1; /**< Header Rom byte one */
@@ -640,10 +656,10 @@ typedef struct phNfc_sJewelInfo_t
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Felica Reader RF Gate Information Container
+* \brief Remote Device Felica Reader RF Gate Information Container
*
* The <em> Felica Reader structure </em> includes the available information
-* related to the discovered Felica remote device. This information
+* related to the discovered Felica remote device. This information
* is updated for every device discovery.
* \note None.
*
@@ -651,7 +667,7 @@ typedef struct phNfc_sJewelInfo_t
typedef struct phNfc_sFelicaInfo_t
{
uint8_t IDm[(PHHAL_FEL_ID_LEN + 2)]; /**< Current ID of Felica tag */
- uint8_t IDmLength; /**< IDm length, shall not be greater
+ uint8_t IDmLength; /**< IDm length, shall not be greater
than PHHAL_FEL_ID_LEN i.e., 8 */
uint8_t PMm[PHHAL_FEL_PM_LEN]; /**< Current PM of Felica tag */
uint8_t SystemCode[PHHAL_FEL_SYS_CODE_LEN]; /**< System code of Felica tag */
@@ -660,10 +676,10 @@ typedef struct phNfc_sFelicaInfo_t
/** \ingroup grp_hal_nfci
*
-* \brief Remote Device Reader 15693 RF Gate Information Container
+* \brief Remote Device Reader 15693 RF Gate Information Container
*
* The <em> Reader A structure </em> includes the available information
-* related to the discovered ISO15693 remote device. This information
+* related to the discovered ISO15693 remote device. This information
* is updated for every device discovery.
* \note None.
*
@@ -673,7 +689,7 @@ typedef struct phNfc_sIso15693Info_t
{
uint8_t Uid[PHHAL_15693_UID_LENGTH]; /**< UID information of the 15693
Tag Discovered */
- uint8_t UidLength; /**< UID information length, shall not be greater
+ uint8_t UidLength; /**< UID information length, shall not be greater
than PHHAL_15693_UID_LENGTH i.e., 8 */
uint8_t Dsfid; /**< DSF information of the 15693
Tag Discovered */
@@ -688,7 +704,7 @@ typedef struct phNfc_sIso15693Info_t
*
* \brief NFC Data Rate Supported between the Reader and the Target
*
-* The <em> \ref phHalNfc_eDataRate enum </em> lists all the Data Rate
+* The <em> \ref phHalNfc_eDataRate enum </em> lists all the Data Rate
* values to be used to determine the rate at which the data is transmitted
* to the target.
*
@@ -698,41 +714,41 @@ typedef struct phNfc_sIso15693Info_t
/** \ingroup grp_hal_nfci
*
-* \brief NFCIP1 Data rates
+* \brief NFCIP1 Data rates
*
*/
typedef enum phNfc_eDataRate_t{
- phNfc_eDataRate_106 = 0x00U,
- phNfc_eDataRate_212,
- phNfc_eDataRate_424,
- /* phNfc_eDataRate_848,
- phNfc_eDataRate_1696,
- phNfc_eDataRate_3392,
+ phNfc_eDataRate_106 = 0x00U,
+ phNfc_eDataRate_212,
+ phNfc_eDataRate_424,
+ /* phNfc_eDataRate_848,
+ phNfc_eDataRate_1696,
+ phNfc_eDataRate_3392,
phNfc_eDataRate_6784,*/
- phNfc_eDataRate_RFU
+ phNfc_eDataRate_RFU
} phNfc_eDataRate_t;
/** \ingroup grp_hal_nfci
*
-* \brief NFCIP1 Gate Information Container
+* \brief NFCIP1 Gate Information Container
*
* The <em> NFCIP1 structure </em> includes the available information
-* related to the discovered NFCIP1 remote device. This information
+* related to the discovered NFCIP1 remote device. This information
* is updated for every device discovery.
* \note None.
*
*/
-typedef struct phNfc_sNfcIPInfo_t
+typedef struct phNfc_sNfcIPInfo_t
{
- /* Contains the random NFCID3I conveyed with the ATR_REQ.
- always 10 bytes length
+ /* Contains the random NFCID3I conveyed with the ATR_REQ.
+ always 10 bytes length
or contains the random NFCID3T conveyed with the ATR_RES.
always 10 bytes length */
- uint8_t NFCID[PHHAL_MAX_UID_LENGTH];
+ uint8_t NFCID[PHHAL_MAX_UID_LENGTH];
uint8_t NFCID_Length;
/* ATR_RES = General bytes length, Max length = 48 bytes */
- uint8_t ATRInfo[PHHAL_MAX_ATR_LENGTH];
+ uint8_t ATRInfo[PHHAL_MAX_ATR_LENGTH];
uint8_t ATRInfo_Length;
/**< SAK information of the tag discovered */
uint8_t SelRes;
@@ -740,7 +756,7 @@ typedef struct phNfc_sNfcIPInfo_t
uint8_t SenseRes[PHHAL_ATQA_LENGTH];
/**< Is Detection Mode of the NFCIP Target Active */
uint8_t Nfcip_Active;
- /**< Maximum frame length supported by the NFCIP device */
+ /**< Maximum frame length supported by the NFCIP device */
uint16_t MaxFrameLength;
/**< Data rate supported by the NFCIP device */
phNfc_eDataRate_t Nfcip_Datarate;
@@ -767,6 +783,7 @@ typedef union phNfc_uRemoteDevInfo_t
phNfc_sFelicaInfo_t Felica_Info;
phNfc_sJewelInfo_t Jewel_Info;
phNfc_sIso15693Info_t Iso15693_Info;
+ phNfc_sIso14443_4_PCD_Info_t Iso14443_4_PCD_Info;
} phNfc_uRemoteDevInfo_t;
@@ -776,7 +793,7 @@ typedef union phNfc_uRemoteDevInfo_t
*
* The <em> RF Device Type List </em> is used to identify the type of
* remote device that is discovered/connected. There seperate
-* types to identify a Remote Reader (denoted by _PCD) and
+* types to identify a Remote Reader (denoted by _PCD) and
* Remote Tag (denoted by _PICC)
* \note None.
*
@@ -810,8 +827,8 @@ typedef enum phNfc_eRFDevType_t
phNfc_eISO15693_PICC,
/* NFC-IP1 Device Types */
- phNfc_eNfcIP1_Target,
- phNfc_eNfcIP1_Initiator,
+ phNfc_eNfcIP1_Target,
+ phNfc_eNfcIP1_Initiator,
/* Other Sources */
phNfc_eInvalid_DevType
@@ -860,18 +877,18 @@ typedef union phNfc_uCommand_t
* Device detected by the polling function .\n
* It lists parameters common to all supported remote devices.
*
- * \note
+ * \note
*
* \sa \ref phHal4Nfc_ConfigureDiscovery and \ref phHal4Nfc_Connect
*
*/
typedef struct phNfc_sRemoteDevInformation_t
{
- uint8_t SessionOpened; /**< [out] Boolean
+ uint8_t SessionOpened; /**< [out] Boolean
* Flag indicating the validity of
* the handle of the remote device. */
- phNfc_eRemDevType_t RemDevType; /**< [out] Remote device type which says that remote
- is Reader A or Reader B or NFCIP or Felica or
+ phNfc_eRemDevType_t RemDevType; /**< [out] Remote device type which says that remote
+ is Reader A or Reader B or NFCIP or Felica or
Reader B Prime or Jewel*/
phNfc_uRemoteDevInfo_t RemoteDevInfo; /**< Union of available Remote Device.
* \ref phNfc_uRemoteDevInfo_t Information. */
@@ -884,10 +901,10 @@ typedef struct phNfc_sRemoteDevInformation_t
/** \ingroup grp_hal_common
*
- * \brief Transceive Information Data Structure for sending commands/response
+ * \brief Transceive Information Data Structure for sending commands/response
* to the remote device
*
- * The <em> Transceive Information Data Structure </em> is used to pass the
+ * The <em> Transceive Information Data Structure </em> is used to pass the
* Command, Address (only required for MIFARE) and the send and receive data
* data structure (buffer and length) for communication with remote device
*
@@ -913,8 +930,8 @@ typedef struct phNfc_sTransceiveInfo_t
* \brief Poll Device Information for conifiguring the discovery wheel
Reader and Card Emulation Phases
*
-* The <em> \ref phNfc_sPollDevInfo_t enum </em> is used to enable/disable
-* phases of the discovery wheel related to specific reader types and
+* The <em> \ref phNfc_sPollDevInfo_t enum </em> is used to enable/disable
+* phases of the discovery wheel related to specific reader types and
* card emulation phase
* \note Enabling specific Reader technology when NFCIP1 speed is set in the
* phNfc_sADD_Cfg_t is implicitly done in HAL. Use this structure to only
@@ -922,23 +939,23 @@ typedef struct phNfc_sTransceiveInfo_t
*/
typedef struct phNfc_sPollDevInfo_t
{
- unsigned EnableIso14443A : 1; /**< Flag to enable
+ unsigned EnableIso14443A : 1; /**< Flag to enable
Reader A discovery */
- unsigned EnableIso14443B : 1; /**< Flag to enable
+ unsigned EnableIso14443B : 1; /**< Flag to enable
Reader B discovery */
unsigned EnableFelica212 : 1; /**< Flag to enable
Felica 212 discovery */
unsigned EnableFelica424 : 1; /**< Flag to enable
Felica 424 discovery */
- unsigned EnableIso15693 : 1; /**< Flag to enable
+ unsigned EnableIso15693 : 1; /**< Flag to enable
ISO 15693 discovery */
- unsigned EnableNfcActive : 1; /**< Flag to enable
- Active Mode of NFC-IP discovery.
- This is updated internally
+ unsigned EnableNfcActive : 1; /**< Flag to enable
+ Active Mode of NFC-IP discovery.
+ This is updated internally
based on the NFC-IP speed.
*/
unsigned RFU : 1; /**< Reserved for future use */
- unsigned DisableCardEmulation : 1; /**< Flag to
+ unsigned DisableCardEmulation : 1; /**< Flag to
disable the card emulation */
} phNfc_sPollDevInfo_t;
@@ -947,7 +964,7 @@ typedef struct phNfc_sPollDevInfo_t
*
* \brief P2P speed for the Initiator
*
-* The <em> \ref phNfc_eP2PMode_t enum </em> lists all the NFCIP1 speeds
+* The <em> \ref phNfc_eP2PMode_t enum </em> lists all the NFCIP1 speeds
* to be used for configuring the NFCIP1 discovery
*
* \note None.
@@ -986,7 +1003,7 @@ typedef enum phNfc_eNotificationType_t
/** \ingroup grp_hal_common
*
-* \brief
+* \brief
*
* \note None.
*/
@@ -1010,11 +1027,11 @@ typedef struct phNfc_sUiccInfo_t
*
* \note None.
*/
-typedef struct phNfc_sNfcIPCfg_t
+typedef struct phNfc_sNfcIPCfg_t
{
/* ATR_RES = General bytes length, Max length = 48 bytes */
uint8_t generalBytesLength;
- uint8_t generalBytes[PHHAL_MAX_ATR_LENGTH];
+ uint8_t generalBytes[PHHAL_MAX_ATR_LENGTH];
/* TODO: This will be updated later for any additional params*/
} phNfc_sNfcIPCfg_t;
@@ -1025,19 +1042,19 @@ typedef struct phNfc_sNfcIPCfg_t
* \brief Discovery Configuration Mode
*
* This enumeration is used to choose the Discovery Configuration
-* Mode :- Configure and Start, Stop or Start with last set
+* Mode :- Configure and Start, Stop or Start with last set
* configuration
* \note None.
*/
typedef enum phNfc_eDiscoveryConfigMode_t
{
- NFC_DISCOVERY_CONFIG = 0x00U,/**< Configure discovery with values
- in phNfc_sADD_Cfg_t and start
+ NFC_DISCOVERY_CONFIG = 0x00U,/**< Configure discovery with values
+ in phNfc_sADD_Cfg_t and start
discovery */
NFC_DISCOVERY_START, /**< Start Discovery with previously set
configuration */
NFC_DISCOVERY_STOP, /**< Stop the Discovery */
- NFC_DISCOVERY_RESUME /**< Resume the Discovery with previously
+ NFC_DISCOVERY_RESUME /**< Resume the Discovery with previously
* set configuration.
* This is valid only when the Target
* is not connected.
@@ -1048,14 +1065,14 @@ typedef enum phNfc_eDiscoveryConfigMode_t
*
* \brief Target or Tag Release Mode
*
-* This enumeration defines various modes of releasing an acquired target
+* This enumeration defines various modes of releasing an acquired target
* or tag.
* \note None.
*/
typedef enum phNfc_eReleaseType_t
{
NFC_INVALID_RELEASE_TYPE =0x00U,/**<Invalid release type */
- NFC_DISCOVERY_RESTART, /**< Release current target and
+ NFC_DISCOVERY_RESTART, /**< Release current target and
restart discovery within same technology*/
NFC_DISCOVERY_CONTINUE, /**< Release current target and continue
discovery with next technology in the wheel */
@@ -1067,8 +1084,8 @@ typedef enum phNfc_eReleaseType_t
*
* \brief Poll configuration structure
*
-* The <em> Poll configuration structure </em> holds information about the
-* enabling the the type of discovery required by the application. This
+* The <em> Poll configuration structure </em> holds information about the
+* enabling the the type of discovery required by the application. This
* structure is the input parameter for the discovery call
*
* \note All members of this structure are input parameters [out].
@@ -1078,28 +1095,28 @@ typedef enum phNfc_eReleaseType_t
*/
typedef struct phNfc_sADD_Cfg_t
{
- union
+ union
{
- phNfc_sPollDevInfo_t PollCfgInfo; /**< Enable/Disable Specific
- Reader Functionality and
- Card Emulation */
+ phNfc_sPollDevInfo_t PollCfgInfo; /**< Enable/Disable Specific
+ Reader Functionality and
+ Card Emulation */
unsigned PollEnabled; /** Can be used to set polling 'Off'
by setting PollEnabled to zero */
} PollDevInfo;
- uint32_t Duration; /**< Duration of virtual or idle
+ uint32_t Duration; /**< Duration of virtual or idle
period in microseconds in the step size
of 48 microseconds.If duration is set less
than 48 microseconds then default value is
- used.For more details please refer PN 544
+ used.For more details please refer PN 544
user manual*/
uint8_t NfcIP_Mode ; /**< Select the P2P
speeds using phNfc_eP2PMode_t type.
- This is used to enable NFC-IP Discovery
+ This is used to enable NFC-IP Discovery
The related Reader Type will be implicitly
selected */
uint8_t NfcIP_Target_Mode ;
- uint8_t NfcIP_Tgt_Disable; /**< Flag to
+ uint8_t NfcIP_Tgt_Disable; /**< Flag to
disable the NFCIP1 TARGET */
} phNfc_sADD_Cfg_t;
diff --git a/src/phHal4Nfc.c b/src/phHal4Nfc.c
index 0f6ce2b..b4c1d45 100644..100755
--- a/src/phHal4Nfc.c
+++ b/src/phHal4Nfc.c
@@ -213,7 +213,7 @@ static void phHal4Nfc_CloseComplete(
Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer
);
}
- if((NULL == Hal4Ctxt->sTgtConnectInfo.psConnectedDevice)
+ if((NULL == Hal4Ctxt->sTgtConnectInfo.psConnectedDevice)
&& (NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData))
{
phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData);
@@ -371,7 +371,7 @@ NFCSTATUS phHal4Nfc_Open(
openRetVal = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_ALREADY_INITIALISED);
}
else/*Do an initialization*/
- {
+ {
#ifdef ANDROID
dlopen_firmware();
#endif
@@ -431,7 +431,7 @@ NFCSTATUS phHal4Nfc_Open(
/*Hci Init did not succeed.free Resources and return*/
if( (openRetVal != NFCSTATUS_SUCCESS)
&& (PHNFCSTATUS (openRetVal) != NFCSTATUS_PENDING) )
- {
+ {
phOsalNfc_FreeMemory(Hal4Ctxt->pHal4Nfc_LayerCfg);
phOsalNfc_FreeMemory(Hal4Ctxt);
Hal4Ctxt = NULL;
@@ -479,7 +479,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
if(NFC_FW_DOWNLOAD_CHECK == IoctlCode)
{
RetStatus = phDnldNfc_Run_Check(
- psHwReference
+ psHwReference
);
}
else
@@ -490,7 +490,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)
phOsalNfc_GetMemory((uint32_t)sizeof(
phHal4Nfc_Hal4Ctxt_t)
- );
+ );
if(NULL == Hal4Ctxt)
{
RetStatus = PHNFCSTVAL(CID_NFC_HAL,
@@ -498,15 +498,15 @@ NFCSTATUS phHal4Nfc_Ioctl(
}
else
{
- ((phHal_sHwReference_t *)psHwReference)->hal_context
+ ((phHal_sHwReference_t *)psHwReference)->hal_context
= Hal4Ctxt;
(void)memset((void *)Hal4Ctxt,
0,
- ((uint32_t)sizeof(phHal4Nfc_Hal4Ctxt_t)));
- Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ ((uint32_t)sizeof(phHal4Nfc_Hal4Ctxt_t)));
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
Hal4Ctxt->sUpperLayerInfo.pUpperIoctlCb
= pIoctlCallback;/*Register upper layer callback*/
- Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam = pOutParam;
+ Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam = pOutParam;
/*Upgrade the firmware*/
RetStatus = phDnldNfc_Upgrade (
psHwReference,
@@ -525,7 +525,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
else
#endif/*NFC_FW_DOWNLOAD*/
{
- RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
}
}
else/*Status is Initialised*/
@@ -589,7 +589,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
);
}
break;
- /*Used to Read Memory/Registers .3 bytes of Array passed form the
+ /*Used to Read Memory/Registers .3 bytes of Array passed form the
address to read from in MSB first format.*/
case NFC_MEM_READ:
{
@@ -615,8 +615,8 @@ NFCSTATUS phHal4Nfc_Ioctl(
}
}
break;
- /*Used to Write Memory/Registers .First 3 bytes of Array passed in MSB
- first format form the address to write to.The 4th Byte is the 8 bit
+ /*Used to Write Memory/Registers .First 3 bytes of Array passed in MSB
+ first format form the address to write to.The 4th Byte is the 8 bit
value to be written to the address*/
case NFC_MEM_WRITE:
{
@@ -625,7 +625,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
{
for( ind = 0; ind < 3; ind++ )
{
- config_type = ((config_type << BYTE_SIZE )
+ config_type = ((config_type << BYTE_SIZE )
| (pInParam->buffer[ind] ));
}
RetStatus = phHciNfc_System_Configure (
@@ -637,7 +637,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
}
else
{
- RetStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,
NFCSTATUS_INVALID_PARAMETER);
}
}
@@ -660,7 +660,7 @@ NFCSTATUS phHal4Nfc_Ioctl(
/**
* The close function called by the upper layer when HAL4 is to be closed
- * (shutdown).
+ * (shutdown).
*/
NFCSTATUS phHal4Nfc_Close(
phHal_sHwReference_t *psHwReference,
@@ -678,10 +678,10 @@ NFCSTATUS phHal4Nfc_Close(
}
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateSelfTestMode)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
/*return already closed*/
@@ -781,7 +781,7 @@ void phHal4Nfc_Hal4Reset(
phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo
->sLowerRecvData.buffer);
}
- if((NULL == Hal4Ctxt->sTgtConnectInfo.psConnectedDevice)
+ if((NULL == Hal4Ctxt->sTgtConnectInfo.psConnectedDevice)
&& (NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData))
{
phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData);
@@ -831,10 +831,10 @@ NFCSTATUS phHal4Nfc_GetDeviceCapabilities(
/*Check for Initialized state*/
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
retstatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
@@ -900,7 +900,7 @@ static void phHal4Nfc_LowerNotificationHandler(
gpphHal4Nfc_Hwref = (phHal_sHwReference_t *)pHwRef;
}
}
- else/*No Copy of Hw ref in HAL.Copy both Hwref and Hal context passed
+ else/*No Copy of Hw ref in HAL.Copy both Hwref and Hal context passed
by Hci*/
{
Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)pContext;
@@ -990,6 +990,22 @@ static void phHal4Nfc_LowerNotificationHandler(
phHal4Nfc_SendCompleteHandler(Hal4Ctxt,pInfo);
}
break;
+#if defined (HOST_EMULATION)
+ case NFC_NOTIFY_SEND_CE_A_COMPLETED :
+ PHDBG_INFO("Hal4:CE A Send Callback");
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phHal4Nfc_CE_A_SendCompleteHandler(Hal4Ctxt,pInfo);
+ }
+ break;
+ case NFC_NOTIFY_SEND_CE_B_COMPLETED :
+ PHDBG_INFO("Hal4:CE B Send Callback");
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phHal4Nfc_CE_B_SendCompleteHandler(Hal4Ctxt,pInfo);
+ }
+ break;
+#endif //HOST_EMULATION
case NFC_NOTIFY_TRANSACTION :
phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
break;
@@ -1013,6 +1029,46 @@ static void phHal4Nfc_LowerNotificationHandler(
}
phHal4Nfc_RecvCompleteHandler(Hal4Ctxt,pInfo);
break;
+#if defined (HOST_EMULATION)
+ case NFC_NOTIFY_CE_A_RECV_EVENT:
+ PHDBG_INFO("Hal4:Receive Event");
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ != PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ phOsalNfc_Timer_Stop(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ );
+ phOsalNfc_Timer_Delete(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ );
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+ phHal4Nfc_CE_A_RecvCompleteHandler(Hal4Ctxt,pInfo);
+ break;
+ case NFC_NOTIFY_CE_B_RECV_EVENT:
+ PHDBG_INFO("Hal4:Receive Event");
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ != PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ phOsalNfc_Timer_Stop(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ );
+ phOsalNfc_Timer_Delete(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ );
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+ phHal4Nfc_CE_B_RecvCompleteHandler(Hal4Ctxt,pInfo);
+ break;
+#endif //HOST_EMULATION
case NFC_NOTIFY_TARGET_PRESENT:
phHal4Nfc_PresenceChkComplete(Hal4Ctxt,pInfo);
break;
@@ -1025,7 +1081,7 @@ static void phHal4Nfc_LowerNotificationHandler(
= Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt;
static phHal4Nfc_NotificationInfo_t uNotificationInfo;
if(NULL != Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler)
- {
+ {
Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler(
Hal4Ctxt->sUpperLayerInfo.DefaultListenerCtxt,
@@ -1064,8 +1120,8 @@ static void phHal4Nfc_LowerNotificationHandler(
break;
}
case NFC_NOTIFY_CONNECT_FAILED:
- case NFC_NOTIFY_DISCONNECT_FAILED:
- /*Generic Error type received from Hci.Handle the error based on
+ case NFC_NOTIFY_DISCONNECT_FAILED:
+ /*Generic Error type received from Hci.Handle the error based on
Hal4 next state and which past callback was Pending*/
case NFC_NOTIFY_ERROR:
{
@@ -1159,7 +1215,7 @@ static void phHal4Nfc_HandleEvent(
break;
default:
break;
- }
+ }
}
}
break;
@@ -1190,7 +1246,7 @@ static void phHal4Nfc_HandleEvent(
case NFC_EVT_PROTECTED:
{
#ifdef IGNORE_EVT_PROTECTED
- /*Ignore_Event_Protected is set to false during Field Off event and
+ /*Ignore_Event_Protected is set to false during Field Off event and
Set protection Configuration.After a NFC_EVT_PROTECTED is received
once all subsequent NFC_EVT_PROTECTED events are ignored*/
if(FALSE == Hal4Ctxt->Ignore_Event_Protected)
@@ -1200,7 +1256,7 @@ static void phHal4Nfc_HandleEvent(
sNotificationInfo.info = psEventInfo;
sNotificationInfo.status = NFCSTATUS_SUCCESS;
sNotificationInfo.type = NFC_EVENT_NOTIFICATION;
- pInfo = &sNotificationInfo;
+ pInfo = &sNotificationInfo;
phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
#ifdef IGNORE_EVT_PROTECTED
}
@@ -1238,20 +1294,20 @@ static void phHal4Nfc_HandleEvent(
}
if(NULL != Hal4Ctxt->psADDCtxtInfo)
{
- Hal4Ctxt->psADDCtxtInfo->sADDCfg.PollDevInfo.PollEnabled
+ Hal4Ctxt->psADDCtxtInfo->sADDCfg.PollDevInfo.PollEnabled
|= psEventInfo->eventInfo.rd_phases;
- /*Configure HCI Discovery*/
+ /*Configure HCI Discovery*/
RetStatus = phHciNfc_Config_Discovery(
(void *)Hal4Ctxt->psHciHandle,
gpphHal4Nfc_Hwref,
&(Hal4Ctxt->psADDCtxtInfo->sADDCfg)
- );
+ );
Hal4Ctxt->Hal4NextState = (NFCSTATUS_PENDING == RetStatus?
eHal4StateConfiguring:
Hal4Ctxt->Hal4NextState);
}
break;
- }
+ }
/*Call Default Event handler for these Events*/
case NFC_INFO_TXLDO_OVERCUR:
case NFC_INFO_MEM_VIOLATION:
@@ -1280,7 +1336,7 @@ static void phHal4Nfc_HandleEvent(
case NFC_EVT_TRANSACTION:
case NFC_EVT_START_OF_TRANSACTION:
case NFC_EVT_END_OF_TRANSACTION:
- case NFC_EVT_CONNECTIVITY:
+ case NFC_EVT_CONNECTIVITY:
case NFC_EVT_OPERATION_ENDED:
case NFC_EVT_MIFARE_ACCESS:
case NFC_EVT_APDU_RECEIVED:
@@ -1298,7 +1354,7 @@ static void phHal4Nfc_HandleEvent(
sNotificationInfo.type = NFC_EVENT_NOTIFICATION;
pInfo = &sNotificationInfo;
PHDBG_INFO("Hal4:Event Field ON\n");
- phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
+ phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
break;
case NFC_EVT_FIELD_OFF:
#ifdef IGNORE_EVT_PROTECTED
@@ -1309,7 +1365,7 @@ static void phHal4Nfc_HandleEvent(
sNotificationInfo.type = NFC_EVENT_NOTIFICATION;
pInfo = &sNotificationInfo;
PHDBG_INFO("Hal4:Event Field OFF\n");
- phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
+ phHal4Nfc_HandleEmulationEvent(Hal4Ctxt,pInfo);
break;
default:
PHDBG_WARNING("Hal4:Unhandled Event type received");
@@ -1373,14 +1429,14 @@ static void phHal4Nfc_IoctlComplete(
{
/*Copy status*/
NFCSTATUS status = (((phNfc_sCompletionInfo_t *)pInfo)->status);
- pphHal4Nfc_IoctlCallback_t pUpper_IoctlCb
+ pphHal4Nfc_IoctlCallback_t pUpper_IoctlCb
= Hal4Ctxt->sUpperLayerInfo.pUpperIoctlCb;
#ifdef MERGE_SAK_SW2
- pphHal4Nfc_GenCallback_t pConfigCallback =
+ pphHal4Nfc_GenCallback_t pConfigCallback =
Hal4Ctxt->sUpperLayerInfo.pConfigCallback;
#endif/*#ifdef MERGE_SAK_SW2*/
void *pUpper_Context = Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt;
- Hal4Ctxt->sUpperLayerInfo.pUpperIoctlCb = NULL;
+ Hal4Ctxt->sUpperLayerInfo.pUpperIoctlCb = NULL;
#ifdef MERGE_SAK_SW1 /*Software workaround 1*/
if(eHal4StateOpenAndReady == Hal4Ctxt->Hal4NextState)
{
@@ -1392,7 +1448,7 @@ static void phHal4Nfc_IoctlComplete(
NFCSTATUS_SUCCESS
);
}
-#endif/*#ifdef MERGE_SAK_SW1*/
+#endif/*#ifdef MERGE_SAK_SW1*/
#ifdef MERGE_SAK_SW2 /*Software workaround 2*/
else if((eHal4StateConfiguring == Hal4Ctxt->Hal4NextState)
&&(NULL != pConfigCallback))
@@ -1411,7 +1467,7 @@ static void phHal4Nfc_IoctlComplete(
|| (NFC_GPIO_READ == Hal4Ctxt->Ioctl_Type)
)
{
- Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam->length
+ Hal4Ctxt->sUpperLayerInfo.pIoctlOutParam->length
= sizeof (uint8_t);
}
/*Call registered Ioctl callback*/
diff --git a/src/phHal4Nfc.h b/src/phHal4Nfc.h
index 47e3136..0392c40 100644..100755
--- a/src/phHal4Nfc.h
+++ b/src/phHal4Nfc.h
@@ -87,7 +87,7 @@
HAL functionality */
#define PH_HAL4NFC_VERSION 8
#define PH_HAL4NFC_REVISION 21
-#define PH_HAL4NFC_PATCH 1
+#define PH_HAL4NFC_PATCH 1
#define PH_HAL4NFC_BUILD 0
/** HAL Interface Version Macros : Updated for every external release of
@@ -273,7 +273,7 @@ typedef enum{
firmware operation*/
eInitTestModeOn, /**<Limited Initialization used for running self
tests */
- eInitCustom /**<Reserved for Future Use */
+ eInitCustom /**<Reserved for Future Use */
} phHal4Nfc_InitType_t;
/**
@@ -587,8 +587,8 @@ extern NFCSTATUS phHal4Nfc_ConfigParameters(
* session has to be closed before
* (see\ref phHal4Nfc_Disconnect).
* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
- * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Reactivation is not supported for
- * NfcIp target and Jewel/Topaz
+ * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Reactivation is not supported for
+ * NfcIp target and Jewel/Topaz
* remote device types.
* \retval NFCSTATUS_INVALID_REMOTE_DEVICE The Remote Device Identifier is
* not valid.
@@ -996,6 +996,334 @@ phHal4Nfc_Receive(
);
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is called by the type A Peer to wait for receiving data from
+* the other reader.It is used only by the NfcIP Target.
+* \note NOTE: After this function is called, its mandatory to wait for the
+* pphHal4Nfc_ReceiveCallback_t callback, before calling any other function.
+* Only functions allowed are phHal4Nfc_Close() and phHal4Nfc_Hal4Reset().
+*
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring the
+* data
+*
+* \param[in] pReceiveCallback Callback function called after receiving
+* the data or in case an error has
+* has occurred.
+*
+* \param[in] pContext Upper layer context to be returned
+* in the callback.
+*
+* \retval NFCSTATUS_PENDING Receive is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_CE_A_Receive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psRecvInfo,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* The function is used by the type A Target to respond to packect received
+* from reader. pSendCallback()
+* is called , when all steps in the send sequence are completed.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring
+* the data
+*
+* \param[in] sTransferData Data and the length of the data to be
+* transferred
+*
+* \param[in] pSendCallback Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+* \retval NFCSTATUS_PENDING Send is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers.
+*
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_CE_A_Send(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_SendCallback_t pSendCallback,
+ void *pContext
+ );
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_nfci
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * The phHal4Nfc_CE_A_Transceive function allows to send data to and receive data
+ * from the reader selected by the caller.
+ * The caller has to provide the Remote Device Information structure and the
+ * command in order to communicate with the selected remote device.For CE
+ * transactions the command type will not be used.
+ *
+ *
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in,out] psTransferInfo Information required by transceive is
+ * concealed in this structure.It contains
+ * the send,receive buffers and their
+ * lengths.
+ *
+ * \param[in] psRemoteDevInfo Points to the Remote Device Information
+ * structure which identifies the selected
+ * Remote Device.
+ *
+ * \param[in] pReceiveCallback Callback function for returning the
+ * received response or error.
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * the callback.
+ *
+ * \retval NFCSTATUS_PENDING Transceive initiated.pTrcvCallback
+ * will return the response or error.
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval NFCSTATUS_SUCCESS This status is used when send data
+ * length is zero and HAL contains
+ * previously more bytes from previous
+ * receive. \n
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+ * parameters could not be properly
+ * interpreted or are invalid.
+ * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or
+ * has been disconnected meanwhile.
+ * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Transaction on this Device type is
+ * not supported.
+ * \retval NFCSTATUS_BUSY Previous transaction is not
+ * completed.
+ * \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
+ * to complete the request at that
+ * point in time.
+ * \retval NFCSTATUS_MORE_INFORMATION Received number of bytes is greater
+ * than receive buffer provided by the
+ * upper layer.Extra bytes will be
+ * retained by Hal and returned on next
+ * call to transceive.
+ * \retval Others Errors related to the lower layers.
+ *
+ */
+extern
+NFCSTATUS
+phHal4Nfc_CE_A_Transceive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* This function is called by the type B Peer to wait for receiving data from
+* the other reader.It is used only by the NfcIP Target.
+* \note NOTE: After this function is called, its mandatory to wait for the
+* pphHal4Nfc_ReceiveCallback_t callback, before calling any other function.
+* Only functions allowed are phHal4Nfc_Close() and phHal4Nfc_Hal4Reset().
+*
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring the
+* data
+*
+* \param[in] pReceiveCallback Callback function called after receiving
+* the data or in case an error has
+* has occurred.
+*
+* \param[in] pContext Upper layer context to be returned
+* in the callback.
+*
+* \retval NFCSTATUS_PENDING Receive is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_CE_B_Receive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psRecvInfo,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ );
+
+/**
+* \if hal
+* \ingroup grp_hal_common
+* \else
+* \ingroup grp_mw_external_hal_funcs
+* \endif
+*
+* The function is used by the type B Target to respond to packect received
+* from reader. pSendCallback()
+* is called , when all steps in the send sequence are completed.
+*
+* \param[in] psHwReference Hardware Reference, pre-initialized by
+* upper layer. \n
+*
+* \param[in] psTransactInfo information required for transferring
+* the data
+*
+* \param[in] sTransferData Data and the length of the data to be
+* transferred
+*
+* \param[in] pSendCallback Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+* \retval NFCSTATUS_PENDING Send is in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or has
+* been disconnected meanwhile.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+* \retval Others Errors related to the lower layers.
+*
+*
+*/
+extern
+NFCSTATUS
+phHal4Nfc_CE_B_Send(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_SendCallback_t pSendCallback,
+ void *pContext
+ );
+
+
+/**
+ * \if hal
+ * \ingroup grp_hal_nfci
+ * \else
+ * \ingroup grp_mw_external_hal_funcs
+ * \endif
+ *
+ * The phHal4Nfc_CE_B_Transceive function allows to send data to and receive data
+ * from the reader selected by the caller.
+ * The caller has to provide the Remote Device Information structure and the
+ * command in order to communicate with the selected remote device.For CE
+ * transactions the command type will not be used.
+ *
+ *
+ *
+ *
+ * \param[in] psHwReference Hardware Reference, pre-initialized by
+ * upper layer. \n
+ *
+ * \param[in,out] psTransferInfo Information required by transceive is
+ * concealed in this structure.It contains
+ * the send,receive buffers and their
+ * lengths.
+ *
+ * \param[in] psRemoteDevInfo Points to the Remote Device Information
+ * structure which identifies the selected
+ * Remote Device.
+ *
+ * \param[in] pReceiveCallback Callback function for returning the
+ * received response or error.
+ *
+ * \param[in] pContext Upper layer context to be returned in
+ * the callback.
+ *
+ * \retval NFCSTATUS_PENDING Transceive initiated.pTrcvCallback
+ * will return the response or error.
+ * \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
+ * \retval NFCSTATUS_SUCCESS This status is used when send data
+ * length is zero and HAL contains
+ * previously more bytes from previous
+ * receive. \n
+ * \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+ * parameters could not be properly
+ * interpreted or are invalid.
+ * \retval NFCSTATUS_INVALID_DEVICE The device has not been opened or
+ * has been disconnected meanwhile.
+ * \retval NFCSTATUS_FEATURE_NOT_SUPPORTED Transaction on this Device type is
+ * not supported.
+ * \retval NFCSTATUS_BUSY Previous transaction is not
+ * completed.
+ * \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
+ * to complete the request at that
+ * point in time.
+ * \retval NFCSTATUS_MORE_INFORMATION Received number of bytes is greater
+ * than receive buffer provided by the
+ * upper layer.Extra bytes will be
+ * retained by Hal and returned on next
+ * call to transceive.
+ * \retval Others Errors related to the lower layers.
+ *
+ */
+extern
+NFCSTATUS
+phHal4Nfc_CE_B_Transceive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ );
/**
* \if hal
* \ingroup grp_hal_common
@@ -1127,13 +1455,13 @@ extern NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
* \ingroup grp_mw_external_hal_funcs
* \endif
*
-* This function is called to switch the UICC on or Off.
+* This function is called to switch the UICC on or Off.
*
*
-* \param[in] psHwReference Hardware Reference, pre-initialized by
+* \param[in] psHwReference Hardware Reference, pre-initialized by
* upper layer. \n
*
-* \param[in] smx_mode Mode to which the switch should be made.
+* \param[in] smx_mode Mode to which the switch should be made.
*
* \param[in] pSwitchModecb Callback for Switch mode complete
* with success/error notification.
@@ -1142,22 +1470,22 @@ extern NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
*
* \retval NFCSTATUS_PENDING Switch in progress.Status will be
* returned in pSwitchModecb.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied
* parameters could not be properly
* interpreted.
* \retval NFCSTATUS_NOT_INITIALIZED Hal is not initialized.
-* \retval NFCSTATUS_BUSY Configuration in Progress or
+* \retval NFCSTATUS_BUSY Configuration in Progress or
* remote device is connected.
* \retval NFCSTATUS_INSUFFICIENT_RESOURCES System resources are insufficient
* to complete the request at that
* point in time.
-* \retval NFCSTATUS_FAILED No listener has been registered
+* \retval NFCSTATUS_FAILED No listener has been registered
* by the upper layer for Emulation
* before making this call.
-* \retval Others Errors related to the lower
+* \retval Others Errors related to the lower
* layers.
*/
-extern NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
+extern NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
phHal_sHwReference_t *psHwReference,
phHal_eSWP_Mode_t swp_mode,
pphHal4Nfc_GenCallback_t pSwitchModecb,
diff --git a/src/phHal4Nfc_ADD.c b/src/phHal4Nfc_ADD.c
index 0a3303c..54dd1c1 100644..100755
--- a/src/phHal4Nfc_ADD.c
+++ b/src/phHal4Nfc_ADD.c
@@ -33,12 +33,12 @@
#include <phOsalNfc.h>
/* ------------------------------- Macros ------------------------------------*/
-#define NFCIP_ACTIVE_SHIFT 0x03U
+#define NFCIP_ACTIVE_SHIFT 0x03U
#define NXP_UID 0x04U
#define NXP_MIN_UID_LEN 0x07U
/* --------------------Structures and enumerations --------------------------*/
-NFCSTATUS phHal4Nfc_ConfigParameters(
+NFCSTATUS phHal4Nfc_ConfigParameters(
phHal_sHwReference_t *psHwReference,
phHal_eConfigType_t CfgType,
phHal_uConfig_t *puConfig,
@@ -49,7 +49,7 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
NFCSTATUS CfgStatus = NFCSTATUS_SUCCESS;
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
/*NULL checks*/
- if(NULL == psHwReference
+ if(NULL == psHwReference
|| NULL == pConfigCallback
|| NULL == puConfig
)
@@ -60,10 +60,10 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
/*Check if initialised*/
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -72,7 +72,7 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
else
{
Hal4Ctxt = psHwReference->hal_context;
- /*If previous Configuration request has not completed,do not allow new
+ /*If previous Configuration request has not completed,do not allow new
configuration*/
if(Hal4Ctxt->Hal4NextState == eHal4StateConfiguring)
{
@@ -116,12 +116,12 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
(void)memcpy((void *)&Hal4Ctxt->uConfig,
(void *)puConfig,
sizeof(phHal_uConfig_t)
- );
+ );
break;
}
/*P2P Configuration*/
case NFC_P2P_CONFIG:
- {
+ {
/*If general bytes are not provided by above layer copy zeros
in general bytes*/
if(puConfig->nfcIPConfig.generalBytesLength == 0)
@@ -139,7 +139,7 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
);
}
break;
- }
+ }
/*Protection config*/
case NFC_SE_PROTECTION_CONFIG:
{
@@ -158,13 +158,13 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
}
if ( NFCSTATUS_SUCCESS == CfgStatus )
{
- /*Issue configure with given configuration*/
+ /*Issue configure with given configuration*/
CfgStatus = phHciNfc_Configure(
(void *)Hal4Ctxt->psHciHandle,
(void *)psHwReference,
CfgType,
&Hal4Ctxt->uConfig
- );
+ );
/* Change the State of the HAL only if status is Pending */
if ( NFCSTATUS_PENDING == CfgStatus )
{
@@ -186,9 +186,9 @@ NFCSTATUS phHal4Nfc_ConfigParameters(
/**Configure the discovery*/
-NFCSTATUS phHal4Nfc_ConfigureDiscovery(
+NFCSTATUS phHal4Nfc_ConfigureDiscovery(
phHal_sHwReference_t *psHwReference,
- phHal_eDiscoveryConfigMode_t discoveryMode,
+ phHal_eDiscoveryConfigMode_t discoveryMode,
phHal_sADD_Cfg_t *discoveryCfg,
pphHal4Nfc_GenCallback_t pConfigCallback,
void *pContext
@@ -196,7 +196,7 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
{
NFCSTATUS CfgStatus = NFCSTATUS_SUCCESS;
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
- if(NULL == psHwReference
+ if(NULL == psHwReference
|| NULL == pConfigCallback
|| NULL == discoveryCfg
)
@@ -206,10 +206,10 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
}
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -218,7 +218,7 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
else
{
Hal4Ctxt = psHwReference->hal_context;
- /*If previous Configuration request has not completed ,do not allow
+ /*If previous Configuration request has not completed ,do not allow
new configuration*/
if(Hal4Ctxt->Hal4NextState == eHal4StateConfiguring)
{
@@ -260,23 +260,23 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
break;
case NFC_DISCOVERY_CONFIG:
PHDBG_INFO("Hal4:Call to NFC_DISCOVERY_CONFIG");
- /*Since sADDCfg is allocated in stack ,copy the ADD
+ /*Since sADDCfg is allocated in stack ,copy the ADD
configuration structure to HAL4 context*/
(void)memcpy((void *)
&(Hal4Ctxt->psADDCtxtInfo->sADDCfg),
(void *)discoveryCfg,
sizeof(phHal_sADD_Cfg_t)
- );
- PHDBG_INFO("Hal4:Finished copying sADDCfg");
+ );
+ PHDBG_INFO("Hal4:Finished copying sADDCfg");
Hal4Ctxt->psADDCtxtInfo->smx_discovery = FALSE;
#ifdef UPDATE_NFC_ACTIVE
Hal4Ctxt->psADDCtxtInfo->sADDCfg.PollDevInfo.PollCfgInfo.EnableNfcActive
= ( 0 == Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode?
Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode:
NXP_NFCIP_ACTIVE_DEFAULT);
- Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode = ((
+ Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode = ((
Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode <<
- (NXP_NFCIP_ACTIVE_DEFAULT * NFCIP_ACTIVE_SHIFT))
+ (NXP_NFCIP_ACTIVE_DEFAULT * NFCIP_ACTIVE_SHIFT))
| Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode);
#endif/*#ifdef UPDATE_NFC_ACTIVE*/
/* information system_code(Felica) and
@@ -286,24 +286,24 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
(void *)Hal4Ctxt->psHciHandle,
(void *)psHwReference,
&(Hal4Ctxt->psADDCtxtInfo->sADDCfg)
- );/*Configure HCI Discovery*/
+ );/*Configure HCI Discovery*/
break;
case NFC_DISCOVERY_STOP:
break;
- /*Restart Discovery wheel*/
+ /*Restart Discovery wheel*/
case NFC_DISCOVERY_RESUME:
PHDBG_INFO("Hal4:Call to NFC_DISCOVERY_RESUME");
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
CfgStatus = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)psHwReference,
+ (void *)psHwReference,
FALSE
);
break;
default:
break;
}
- /* Change the State of the HAL only if HCI Configure
+ /* Change the State of the HAL only if HCI Configure
Returns status as Pending */
if ( NFCSTATUS_PENDING == CfgStatus )
{
@@ -311,7 +311,7 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
&(Hal4Ctxt->psADDCtxtInfo->sCurrentPollConfig),
(void *)&(discoveryCfg->PollDevInfo.PollCfgInfo),
sizeof(phHal_sPollDevInfo_t)
- );
+ );
PHDBG_INFO("Hal4:Finished copying PollCfgInfo");
PHDBG_INFO("Hal4:Configure returned NFCSTATUS_PENDING");
Hal4Ctxt->Hal4NextState = eHal4StateConfiguring;
@@ -324,7 +324,7 @@ NFCSTATUS phHal4Nfc_ConfigureDiscovery(
&(Hal4Ctxt->psADDCtxtInfo->sADDCfg.PollDevInfo.PollCfgInfo),
(void *)&(Hal4Ctxt->psADDCtxtInfo->sCurrentPollConfig),
sizeof(phHal_sPollDevInfo_t)
- );
+ );
}
}
}
@@ -346,8 +346,8 @@ void phHal4Nfc_ConfigureComplete(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
{
pphHal4Nfc_GenCallback_t pConfigCallback
= Hal4Ctxt->sUpperLayerInfo.pConfigCallback;
- pphHal4Nfc_ConnectCallback_t pUpperConnectCb
- = Hal4Ctxt->sTgtConnectInfo.pUpperConnectCb;
+ pphHal4Nfc_ConnectCallback_t pUpperConnectCb
+ = Hal4Ctxt->sTgtConnectInfo.pUpperConnectCb;
NFCSTATUS Status = ((phNfc_sCompletionInfo_t *)pInfo)->status;
if((type == NFC_NOTIFY_POLL_ENABLED) ||(type == NFC_NOTIFY_POLL_RESTARTED))
{
@@ -360,7 +360,7 @@ void phHal4Nfc_ConfigureComplete(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
PHDBG_WARNING("Hal4:Poll disabled,config success or config error");
}
if(NULL != Hal4Ctxt->sUpperLayerInfo.pConfigCallback)
- {
+ {
#ifdef MERGE_SAK_SW2
if((NFC_UICC_EMULATION == Hal4Ctxt->uConfig.emuConfig.emuType)&&
(FALSE ==
@@ -421,18 +421,18 @@ void phHal4Nfc_TargetDiscoveryComplete(
void *pInfo
)
{
- static phHal4Nfc_DiscoveryInfo_t sDiscoveryInfo;
+ static phHal4Nfc_DiscoveryInfo_t sDiscoveryInfo;
NFCSTATUS status = NFCSTATUS_SUCCESS;
/**SAK byte*/
uint8_t Sak = 0;
/*Union type to encapsulate and return the discovery info*/
phHal4Nfc_NotificationInfo_t uNotificationInfo;
- /*All the following types will be discovered as type A ,and differentiation
+ /*All the following types will be discovered as type A ,and differentiation
will have to be done within this module based on SAK byte and UID info*/
phHal_eRemDevType_t aRemoteDevTypes[3] = {
phHal_eISO14443_A_PICC,
phHal_eNfcIP1_Target,
- phHal_eMifare_PICC
+ phHal_eMifare_PICC
};
/*Count is used to add multiple info into remote dvice list for devices that
support multiple protocols*/
@@ -445,7 +445,7 @@ void phHal4Nfc_TargetDiscoveryComplete(
/*Update Hal4 state*/
Hal4Ctxt->Hal4CurrentState = eHal4StateTargetDiscovered;
Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
- PHDBG_INFO("Hal4:Remotedevice Discovered");
+ PHDBG_INFO("Hal4:Remotedevice Discovered");
if(NULL != ((phNfc_sCompletionInfo_t *)pInfo)->info)
{
/*Extract Remote device Info*/
@@ -484,9 +484,9 @@ void phHal4Nfc_TargetDiscoveryComplete(
if((0 == Sak)&& (0 == Count))
{
/*Mifare check*/
- if((NXP_UID ==
+ if((NXP_UID ==
psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.Uid[0])
- &&(NXP_MIN_UID_LEN <=
+ &&(NXP_MIN_UID_LEN <=
psRemoteDevInfo->RemoteDevInfo.Iso14443A_Info.UidLength))
{
aRemoteDevTypes[Count] = phHal_eMifare_PICC;
@@ -502,9 +502,9 @@ void phHal4Nfc_TargetDiscoveryComplete(
}
}
/*Check for P2P target passive*/
- if((Sak & NFCIP_BITMASK) &&
+ if((Sak & NFCIP_BITMASK) &&
(NULL != Hal4Ctxt->sUpperLayerInfo.pP2PNotification)&&
- (Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode
+ (Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode
& phHal_ePassive106))
{
if( Sak == 0x53 // Fudan card incompatible to ISO18092
@@ -519,7 +519,7 @@ void phHal4Nfc_TargetDiscoveryComplete(
{
aRemoteDevTypes[Count] = phHal_eNfcIP1_Target;
Count++;
- }
+ }
}
}/*case phHal_eISO14443_A_PICC:*/
break;
@@ -527,7 +527,7 @@ void phHal4Nfc_TargetDiscoveryComplete(
aRemoteDevTypes[Count] = phHal_eNfcIP1_Target;
Count++;
break;
- case phHal_eISO14443_B_PICC: /*TYPE_B*/
+ case phHal_eISO14443_B_PICC: /*TYPE_B*/
#ifdef TYPE_B
aRemoteDevTypes[Count] = phHal_eISO14443_B_PICC;
Count++;
@@ -539,14 +539,14 @@ void phHal4Nfc_TargetDiscoveryComplete(
/*nfc_id is used to differentiate between Felica and NfcIp target
discovered in Type F*/
nfc_id = (((uint16_t)psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDm[0])
- << BYTE_SIZE) |
+ << BYTE_SIZE) |
psRemoteDevInfo->RemoteDevInfo.Felica_Info.IDm[1];
/*check for NfcIp target*/
if(NXP_NFCIP_NFCID2_ID == nfc_id)
{
if((NULL != Hal4Ctxt->sUpperLayerInfo.pP2PNotification)
- &&((Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode
- & phHal_ePassive212) ||
+ &&((Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode
+ & phHal_ePassive212) ||
(Hal4Ctxt->psADDCtxtInfo->sADDCfg.NfcIP_Mode
& phHal_ePassive424)))
{
@@ -560,12 +560,12 @@ void phHal4Nfc_TargetDiscoveryComplete(
|| Hal4Ctxt->psADDCtxtInfo->sCurrentPollConfig.EnableFelica424)
{
aRemoteDevTypes[Count] = phHal_eFelica_PICC;
- Count++;
+ Count++;
}
}
break;
}
-#endif
+#endif
case phHal_eJewel_PICC: /*Jewel*/
#ifdef TYPE_JEWEL
{
@@ -573,10 +573,10 @@ void phHal4Nfc_TargetDiscoveryComplete(
if(Hal4Ctxt->psADDCtxtInfo->sCurrentPollConfig.EnableIso14443A)
{
aRemoteDevTypes[Count] = phHal_eJewel_PICC;
- Count++;
+ Count++;
}
break;
- }
+ }
#endif
#ifdef TYPE_ISO15693
case phHal_eISO15693_PICC: /*ISO15693*/
@@ -584,10 +584,10 @@ void phHal4Nfc_TargetDiscoveryComplete(
if(Hal4Ctxt->psADDCtxtInfo->sCurrentPollConfig.EnableIso15693)
{
aRemoteDevTypes[Count] = phHal_eISO15693_PICC;
- Count++;
+ Count++;
}
break;
- }
+ }
#endif /* #ifdef TYPE_ISO15693 */
/*Types currently not supported*/
case phHal_eISO14443_BPrime_PICC:
@@ -596,11 +596,11 @@ void phHal4Nfc_TargetDiscoveryComplete(
break;
}/*End of switch*/
/*Update status code to success if atleast one device info is available*/
- status = (((NFCSTATUS_SUCCESS != status)
+ status = (((NFCSTATUS_SUCCESS != status)
&& (NFCSTATUS_MULTIPLE_TAGS != status))
&&(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices != 0))?
NFCSTATUS_SUCCESS:status;
-
+
/*Update status to NFCSTATUS_MULTIPLE_PROTOCOLS if count > 1 ,and this
is first discovery notification from Hci*/
status = ((NFCSTATUS_SUCCESS == status)
@@ -611,15 +611,15 @@ void phHal4Nfc_TargetDiscoveryComplete(
/*Allocate and copy Remote device info into Hal4 Context*/
while(Count)
{
- PHDBG_INFO("Hal4:Count is not zero");
+ PHDBG_INFO("Hal4:Count is not zero");
--Count;
- /*Allocate memory for each of Count number of
+ /*Allocate memory for each of Count number of
devices*/
if(NULL == Hal4Ctxt->rem_dev_list[
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices])
{
Hal4Ctxt->rem_dev_list[
- Hal4Ctxt->psADDCtxtInfo->nbr_of_devices]
+ Hal4Ctxt->psADDCtxtInfo->nbr_of_devices]
= (phHal_sRemoteDevInformation_t *)
phOsalNfc_GetMemory(
(uint32_t)(
@@ -644,13 +644,13 @@ void phHal4Nfc_TargetDiscoveryComplete(
);
/*Now copy appropriate device type from aRemoteDevTypes array*/
Hal4Ctxt->rem_dev_list[
- Hal4Ctxt->psADDCtxtInfo->nbr_of_devices]->RemDevType
+ Hal4Ctxt->psADDCtxtInfo->nbr_of_devices]->RemDevType
= aRemoteDevTypes[Count];
/*Increment number of devices*/
- Hal4Ctxt->psADDCtxtInfo->nbr_of_devices++;
+ Hal4Ctxt->psADDCtxtInfo->nbr_of_devices++;
}/*End of else*/
}/*End of while*/
-
+
/*If Upper layer is interested only in P2P notifications*/
if((NULL != Hal4Ctxt->sUpperLayerInfo.pP2PNotification)
&&(((Hal4Ctxt->psADDCtxtInfo->nbr_of_devices == 1)
@@ -658,9 +658,9 @@ void phHal4Nfc_TargetDiscoveryComplete(
||(NULL == Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification))
)
{
- PHDBG_INFO("Hal4:Trying to notify P2P Listener");
+ PHDBG_INFO("Hal4:Trying to notify P2P Listener");
/*NFCSTATUS_SUCCESS or NFCSTATUS_MULTIPLE_PROTOCOLS*/
- if((NFCSTATUS_SUCCESS == status)
+ if((NFCSTATUS_SUCCESS == status)
||(NFCSTATUS_MULTIPLE_PROTOCOLS == status))
{
/*Pick only the P2P target device info from the list*/
@@ -668,15 +668,15 @@ void phHal4Nfc_TargetDiscoveryComplete(
Count > 0;--Count)
{
/*Only one P2P target can be detected in one discovery*/
- if(phHal_eNfcIP1_Target ==
+ if(phHal_eNfcIP1_Target ==
Hal4Ctxt->rem_dev_list[Count-1]->RemDevType)
{
(void)memcpy(
(void *)Hal4Ctxt->rem_dev_list[0],
(void *)Hal4Ctxt->rem_dev_list[Count-1],
sizeof(phHal_sRemoteDevInformation_t)
- );
- NfcIpDeviceCount = 1;
+ );
+ NfcIpDeviceCount = 1;
break;
}
}
@@ -691,7 +691,7 @@ void phHal4Nfc_TargetDiscoveryComplete(
/*Issue P2P notification*/
if(NfcIpDeviceCount == 1)
{
- sDiscoveryInfo.NumberOfDevices
+ sDiscoveryInfo.NumberOfDevices
= Hal4Ctxt->psADDCtxtInfo->nbr_of_devices;
sDiscoveryInfo.ppRemoteDevInfo = Hal4Ctxt->rem_dev_list;
uNotificationInfo.psDiscoveryInfo = &sDiscoveryInfo;
@@ -703,14 +703,14 @@ void phHal4Nfc_TargetDiscoveryComplete(
NFCSTATUS_SUCCESS
);
}
- else/*Restart Discovery wheel*/
+ else/*Restart Discovery wheel*/
{
- PHDBG_INFO("Hal4:No P2P device in list");
+ PHDBG_INFO("Hal4:No P2P device in list");
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
- PHDBG_INFO("Hal4:Restart discovery1");
+ PHDBG_INFO("Hal4:Restart discovery1");
status = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)gpphHal4Nfc_Hwref,
+ (void *)gpphHal4Nfc_Hwref,
FALSE
);
Hal4Ctxt->Hal4NextState = (NFCSTATUS_PENDING == status?
@@ -720,7 +720,7 @@ void phHal4Nfc_TargetDiscoveryComplete(
}
/*More discovery info available ,get next info from HCI*/
else if((NFCSTATUS_MULTIPLE_TAGS == status)
- &&(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices
+ &&(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices
< MAX_REMOTE_DEVICES))
{
status = phHciNfc_Select_Next_Target (
@@ -731,12 +731,12 @@ void phHal4Nfc_TargetDiscoveryComplete(
else/*Failed discovery ,restart discovery*/
{
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
- PHDBG_INFO("Hal4:Restart discovery2");
+ PHDBG_INFO("Hal4:Restart discovery2");
status = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)gpphHal4Nfc_Hwref,
+ (void *)gpphHal4Nfc_Hwref,
FALSE
- );/*Restart Discovery wheel*/
+ );/*Restart Discovery wheel*/
Hal4Ctxt->Hal4NextState = (NFCSTATUS_PENDING == status?
eHal4StateConfiguring:
Hal4Ctxt->Hal4NextState);
@@ -747,23 +747,23 @@ void phHal4Nfc_TargetDiscoveryComplete(
else if(NULL != Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)
{
PHDBG_INFO("Hal4:Trying to notify Tag notification");
- /*Multiple tags in field, get discovery info a second time for the
+ /*Multiple tags in field, get discovery info a second time for the
other devices*/
if((NFCSTATUS_MULTIPLE_TAGS == status)
&&(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices < MAX_REMOTE_DEVICES))
{
- PHDBG_INFO("Hal4:select next target1");
+ PHDBG_INFO("Hal4:select next target1");
status = phHciNfc_Select_Next_Target (
Hal4Ctxt->psHciHandle,
(void *)gpphHal4Nfc_Hwref
);
}
- /*Single tag multiple protocols scenario,Notify Multiple Protocols
+ /*Single tag multiple protocols scenario,Notify Multiple Protocols
status to upper layer*/
- else if(status == NFCSTATUS_MULTIPLE_PROTOCOLS)
+ else if(status == NFCSTATUS_MULTIPLE_PROTOCOLS)
{
PHDBG_INFO("Hal4:Multiple Tags or protocols");
- sDiscoveryInfo.NumberOfDevices
+ sDiscoveryInfo.NumberOfDevices
= Hal4Ctxt->psADDCtxtInfo->nbr_of_devices;
sDiscoveryInfo.ppRemoteDevInfo = Hal4Ctxt->rem_dev_list;
uNotificationInfo.psDiscoveryInfo = &sDiscoveryInfo;
@@ -775,13 +775,13 @@ void phHal4Nfc_TargetDiscoveryComplete(
);
}
else /*NFCSTATUS_SUCCESS*/
- {
+ {
if(((Hal4Ctxt->psADDCtxtInfo->nbr_of_devices == 1)
- &&(phHal_eNfcIP1_Target
+ &&(phHal_eNfcIP1_Target
== Hal4Ctxt->rem_dev_list[0]->RemDevType))
||(NFCSTATUS_SUCCESS != status)
|| (Hal4Ctxt->psADDCtxtInfo->nbr_of_devices == 0)
- )/*device detected but upper layer is not interested
+ )/*device detected but upper layer is not interested
in the type(P2P) or activate next failed*/
{
while(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices > 0)
@@ -791,12 +791,12 @@ void phHal4Nfc_TargetDiscoveryComplete(
Hal4Ctxt->rem_dev_list[
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices] = NULL;
}
- PHDBG_INFO("Hal4:Restart discovery3");
+ PHDBG_INFO("Hal4:Restart discovery3");
status = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)gpphHal4Nfc_Hwref,
+ (void *)gpphHal4Nfc_Hwref,
FALSE
- );/*Restart Discovery wheel*/
+ );/*Restart Discovery wheel*/
Hal4Ctxt->Hal4NextState = (
NFCSTATUS_PENDING == status?eHal4StateConfiguring
:Hal4Ctxt->Hal4NextState
@@ -806,13 +806,13 @@ void phHal4Nfc_TargetDiscoveryComplete(
{
/*Update status for MULTIPLE_TAGS here*/
status = (Hal4Ctxt->psADDCtxtInfo->nbr_of_devices > 1?
- NFCSTATUS_MULTIPLE_TAGS:status);
+ NFCSTATUS_MULTIPLE_TAGS:status);
/*If listener is registered ,call it*/
- sDiscoveryInfo.NumberOfDevices
+ sDiscoveryInfo.NumberOfDevices
= Hal4Ctxt->psADDCtxtInfo->nbr_of_devices;
sDiscoveryInfo.ppRemoteDevInfo
= Hal4Ctxt->rem_dev_list;
- uNotificationInfo.psDiscoveryInfo = &sDiscoveryInfo;
+ uNotificationInfo.psDiscoveryInfo = &sDiscoveryInfo;
PHDBG_INFO("Hal4:Calling Discovery Handler1");
(*Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)(
(void *)(Hal4Ctxt->sUpperLayerInfo.DiscoveryCtxt),
@@ -821,17 +821,17 @@ void phHal4Nfc_TargetDiscoveryComplete(
status
);
}
- }
- } /*else if(NULL != Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)*/
- else/*listener not registered ,Restart Discovery wheel*/
- {
+ }
+ } /*else if(NULL != Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)*/
+ else/*listener not registered ,Restart Discovery wheel*/
+ {
PHDBG_INFO("Hal4:No listener registered.Ignoring Discovery \
- Notification");
+ Notification");
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
- PHDBG_INFO("Hal4:Restart discovery4");
+ PHDBG_INFO("Hal4:Restart discovery4");
status = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)gpphHal4Nfc_Hwref,
+ (void *)gpphHal4Nfc_Hwref,
FALSE
);
Hal4Ctxt->Hal4NextState = (NFCSTATUS_PENDING == status?
@@ -841,40 +841,40 @@ void phHal4Nfc_TargetDiscoveryComplete(
}/*if(NULL != ((phNfc_sCompletionInfo_t *)pInfo)->info)*/
else/*NULL info received*/
{
- sDiscoveryInfo.NumberOfDevices
+ sDiscoveryInfo.NumberOfDevices
= Hal4Ctxt->psADDCtxtInfo->nbr_of_devices;
sDiscoveryInfo.ppRemoteDevInfo = Hal4Ctxt->rem_dev_list;
uNotificationInfo.psDiscoveryInfo = &sDiscoveryInfo;
- /*If Discovery info is available from previous notifications try to
+ /*If Discovery info is available from previous notifications try to
notify that to the upper layer*/
if((NULL != Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)
#ifdef NFC_RF_NOISE_SW
- &&((NFCSTATUS_SUCCESS == status)
+ &&((NFCSTATUS_SUCCESS == status)
|| (NFCSTATUS_MULTIPLE_TAGS == status))
#endif /* #ifdef NFC_RF_NOISE_SW */
)
{
-#ifndef NFC_RF_NOISE_SW
- status = (((NFCSTATUS_SUCCESS != status)
+#ifndef NFC_RF_NOISE_SW
+ status = (((NFCSTATUS_SUCCESS != status)
&& (NFCSTATUS_MULTIPLE_TAGS != status))
&&(Hal4Ctxt->psADDCtxtInfo->nbr_of_devices != 0))?
NFCSTATUS_SUCCESS:status;
#endif/*#ifndef NFC_RF_NOISE_SW*/
PHDBG_INFO("Hal4:Calling Discovery Handler2");
(*Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)(
- (void *)(Hal4Ctxt->sUpperLayerInfo.DiscoveryCtxt),
+ (void *)(Hal4Ctxt->sUpperLayerInfo.DiscoveryCtxt),
NFC_DISCOVERY_NOTIFICATION,
uNotificationInfo,
status
);
}
- else/*Restart Discovery wheel*/
+ else/*Restart Discovery wheel*/
{
Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
- PHDBG_INFO("Hal4:Restart discovery5");
+ PHDBG_INFO("Hal4:Restart discovery5");
status = phHciNfc_Restart_Discovery (
(void *)Hal4Ctxt->psHciHandle,
- (void *)gpphHal4Nfc_Hwref,
+ (void *)gpphHal4Nfc_Hwref,
FALSE
);
Hal4Ctxt->Hal4NextState = (NFCSTATUS_PENDING == status?
@@ -886,9 +886,9 @@ void phHal4Nfc_TargetDiscoveryComplete(
/**Register Notification handlers*/
-NFCSTATUS phHal4Nfc_RegisterNotification(
+NFCSTATUS phHal4Nfc_RegisterNotification(
phHal_sHwReference_t *psHwReference,
- phHal4Nfc_RegisterType_t eRegisterType,
+ phHal4Nfc_RegisterType_t eRegisterType,
pphHal4Nfc_Notification_t pNotificationHandler,
void *Context
)
@@ -902,10 +902,10 @@ NFCSTATUS phHal4Nfc_RegisterNotification(
}
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -928,11 +928,13 @@ NFCSTATUS phHal4Nfc_RegisterNotification(
= pNotificationHandler; /*Register the P2P Notification*/
break;
case eRegisterHostCardEmulation:
- RetStatus = NFCSTATUS_FEATURE_NOT_SUPPORTED;
+ Hal4Ctxt->sUpperLayerInfo.HCEEventNotificationCtxt = Context;
+ Hal4Ctxt->sUpperLayerInfo.pHCEEventNotification
+ = pNotificationHandler; /*Register the CE Notification*/
break;
case eRegisterSecureElement:
Hal4Ctxt->sUpperLayerInfo.EventNotificationCtxt = Context;
- Hal4Ctxt->sUpperLayerInfo.pEventNotification
+ Hal4Ctxt->sUpperLayerInfo.pEventNotification
= pNotificationHandler; /*Register the Se Notification*/
break;
default:
@@ -948,7 +950,7 @@ NFCSTATUS phHal4Nfc_RegisterNotification(
/**Unregister Notification handlers*/
-NFCSTATUS phHal4Nfc_UnregisterNotification(
+NFCSTATUS phHal4Nfc_UnregisterNotification(
phHal_sHwReference_t *psHwReference,
phHal4Nfc_RegisterType_t eRegisterType,
void *Context
@@ -963,10 +965,10 @@ NFCSTATUS phHal4Nfc_UnregisterNotification(
}
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -982,17 +984,19 @@ NFCSTATUS phHal4Nfc_UnregisterNotification(
Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = Context;
Hal4Ctxt->sUpperLayerInfo.DiscoveryCtxt = NULL;
/*UnRegister the tag Notification*/
- Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification = NULL;
+ Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification = NULL;
PHDBG_INFO("Hal4:Tag Discovery Listener Unregistered");
break;
case eRegisterP2PDiscovery:
Hal4Ctxt->sUpperLayerInfo.P2PDiscoveryCtxt = NULL;
/*UnRegister the p2p Notification*/
- Hal4Ctxt->sUpperLayerInfo.pP2PNotification = NULL;
+ Hal4Ctxt->sUpperLayerInfo.pP2PNotification = NULL;
PHDBG_INFO("Hal4:P2P Discovery Listener Unregistered");
- break;
- case eRegisterHostCardEmulation:/*RFU*/
- RetStatus = NFCSTATUS_FEATURE_NOT_SUPPORTED;
+ break;
+ case eRegisterHostCardEmulation:
+ Hal4Ctxt->sUpperLayerInfo.HCEEventNotificationCtxt = NULL;
+ Hal4Ctxt->sUpperLayerInfo.pHCEEventNotification = NULL;
+ PHDBG_INFO("Hal4:SE Listener Unregistered");
break;
/*UnRegister the Se Notification*/
case eRegisterSecureElement:
@@ -1003,7 +1007,7 @@ NFCSTATUS phHal4Nfc_UnregisterNotification(
default:
Hal4Ctxt->sUpperLayerInfo.DefaultListenerCtxt = NULL;
/*UnRegister the default Notification*/
- Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler = NULL;
+ Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler = NULL;
PHDBG_INFO("Hal4:Default Listener Unregistered");
break;
}
diff --git a/src/phHal4Nfc_Emulation.c b/src/phHal4Nfc_Emulation.c
index 6bb60e2..0756408 100644..100755
--- a/src/phHal4Nfc_Emulation.c
+++ b/src/phHal4Nfc_Emulation.c
@@ -52,7 +52,7 @@ void phHal4Nfc_HandleEmulationEvent(
/*Pass on Event notification info from Hci to Upper layer*/
uNotificationInfo.psEventInfo = psNotificationInfo->info;
if(NULL != Hal4Ctxt->sUpperLayerInfo.pEventNotification)
- {
+ {
Hal4Ctxt->sUpperLayerInfo.pEventNotification(
Hal4Ctxt->sUpperLayerInfo.EventNotificationCtxt,
psNotificationInfo->type,
@@ -60,7 +60,17 @@ void phHal4Nfc_HandleEmulationEvent(
NFCSTATUS_SUCCESS
);
}
- else/*No Event notification handler registered*/
+ if(NULL != Hal4Ctxt->sUpperLayerInfo.pHCEEventNotification)
+ {
+ Hal4Ctxt->sUpperLayerInfo.pHCEEventNotification(
+ Hal4Ctxt->sUpperLayerInfo.HCEEventNotificationCtxt,
+ psNotificationInfo->type,
+ uNotificationInfo,
+ NFCSTATUS_SUCCESS
+ );
+ }
+ if(NULL == Hal4Ctxt->sUpperLayerInfo.pHCEEventNotification &&
+ NULL == Hal4Ctxt->sUpperLayerInfo.pEventNotification)
{
/*Use default handler to notify to the upper layer*/
if(NULL != Hal4Ctxt->sUpperLayerInfo.pDefaultEventHandler)
@@ -78,7 +88,7 @@ void phHal4Nfc_HandleEmulationEvent(
/* Switch mode from Virtual to Wired or Vice Versa for SMX.
*/
-NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
+NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
phHal_sHwReference_t *psHwReference,
phHal_eSmartMX_Mode_t smx_mode,
pphHal4Nfc_GenCallback_t pSwitchModecb,
@@ -88,7 +98,7 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
NFCSTATUS CfgStatus = NFCSTATUS_PENDING;
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
static phHal_sADD_Cfg_t sSmxCfg;
-
+
/*NULL checks*/
if((NULL == psHwReference) || (NULL == pSwitchModecb))
{
@@ -98,10 +108,10 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
/*Check Initialised state*/
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -119,7 +129,7 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
}
else if(Hal4Ctxt->Hal4CurrentState >= eHal4StateOpenAndReady)
{
- /**If config discovery has not been called prior to this ,allocate
+ /**If config discovery has not been called prior to this ,allocate
ADD Context here*/
if (NULL == Hal4Ctxt->psADDCtxtInfo)
{
@@ -135,26 +145,26 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
if(NULL == Hal4Ctxt->psADDCtxtInfo)
{
phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
- CfgStatus= PHNFCSTVAL(CID_NFC_HAL ,
+ CfgStatus= PHNFCSTVAL(CID_NFC_HAL ,
NFCSTATUS_INSUFFICIENT_RESOURCES);
}
else
- {
+ {
/* Switch request to Wired mode */
if(eSmartMx_Wired == smx_mode)
{
- if(Hal4Ctxt->Hal4CurrentState
+ if(Hal4Ctxt->Hal4CurrentState
== eHal4StateTargetConnected)
{
PHDBG_INFO("Hal4:In Connected state.Returning Busy");
CfgStatus= PHNFCSTVAL(CID_NFC_HAL , NFCSTATUS_BUSY);
}
- /*It is Mandatory to register a listener before switching
+ /*It is Mandatory to register a listener before switching
to wired mode*/
else if(NULL ==
Hal4Ctxt->sUpperLayerInfo.pTagDiscoveryNotification)
{
- CfgStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ CfgStatus = PHNFCSTVAL(CID_NFC_HAL ,
NFCSTATUS_FAILED);
}
else
@@ -192,7 +202,7 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
Hal4Ctxt->sUpperLayerInfo.pConfigCallback
= pSwitchModecb;
}
- }
+ }
}
else/*Return Status not initialised*/
{
@@ -206,7 +216,7 @@ NFCSTATUS phHal4Nfc_Switch_SMX_Mode(
/* Switch mode for Swp.*/
-NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
+NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
phHal_sHwReference_t *psHwReference,
phHal_eSWP_Mode_t swp_mode,
pphHal4Nfc_GenCallback_t pSwitchModecb,
@@ -214,9 +224,9 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
)
{
NFCSTATUS CfgStatus = NFCSTATUS_PENDING;
- phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
/*NULL checks*/
- if(NULL == psHwReference
+ if(NULL == psHwReference
|| NULL == pSwitchModecb
)
{
@@ -226,10 +236,10 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
/*Check Initialised state*/
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
@@ -247,7 +257,7 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
}
else if(Hal4Ctxt->Hal4CurrentState >= eHal4StateOpenAndReady)
{
- /**If config discovery has not been called prior to this ,allocate
+ /**If config discovery has not been called prior to this ,allocate
ADD Context here*/
if (NULL == Hal4Ctxt->psADDCtxtInfo)
{
@@ -263,11 +273,11 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
if(NULL == Hal4Ctxt->psADDCtxtInfo)
{
phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
- CfgStatus= PHNFCSTVAL(CID_NFC_HAL ,
+ CfgStatus= PHNFCSTVAL(CID_NFC_HAL ,
NFCSTATUS_INSUFFICIENT_RESOURCES);
}
else
- {
+ {
/*Switch mode to On or off*/
CfgStatus = phHciNfc_Switch_SwpMode(
Hal4Ctxt->psHciHandle,
@@ -283,7 +293,7 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
Hal4Ctxt->sUpperLayerInfo.pConfigCallback
= pSwitchModecb;
}
- }
+ }
}
else/*Return Status not initialised*/
{
@@ -296,7 +306,7 @@ NFCSTATUS phHal4Nfc_Switch_Swp_Mode(
#ifdef FULL_HAL4_EMULATION_ENABLE
/* Switch Emulation mode ON or OFF.*/
-NFCSTATUS phHal4Nfc_Host_Emulation_Mode(
+NFCSTATUS phHal4Nfc_Host_Emulation_Mode(
phHal_sHwReference_t *psHwReference,
phNfc_eModeType_t eModeType,
pphHal4Nfc_GenCallback_t pEmulationModecb,
@@ -306,7 +316,7 @@ NFCSTATUS phHal4Nfc_Host_Emulation_Mode(
NFCSTATUS RetStatus = NFCSTATUS_PENDING;
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
/*NULL checks*/
- if(NULL == psHwReference
+ if(NULL == psHwReference
|| NULL == pEmulationModecb
)
{
@@ -316,15 +326,15 @@ NFCSTATUS phHal4Nfc_Host_Emulation_Mode(
/*Check Initialised state*/
else if((NULL == psHwReference->hal_context)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4CurrentState
+ psHwReference->hal_context)->Hal4CurrentState
< eHal4StateOpenAndReady)
|| (((phHal4Nfc_Hal4Ctxt_t *)
- psHwReference->hal_context)->Hal4NextState
+ psHwReference->hal_context)->Hal4NextState
== eHal4StateClosed))
{
phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
RetStatus = PHNFCSTVAL(CID_NFC_HAL , NFCSTATUS_NOT_INITIALISED);
- }
+ }
else
{
diff --git a/src/phHal4Nfc_Internal.h b/src/phHal4Nfc_Internal.h
index 50f4ea1..4765e3e 100644..100755
--- a/src/phHal4Nfc_Internal.h
+++ b/src/phHal4Nfc_Internal.h
@@ -37,7 +37,7 @@
#include <phHciNfc.h>
-/**
+/**
* \name HAL4
*
* File: \ref phHal4Nfc_Internal.h
@@ -49,18 +49,18 @@
#define PH_HAL4NFC_INTERNAL_FILEALIASES "$Aliases: NFC_FRI1.1_WK1023_R35_1 $" /**< \ingroup grp_file_attributes */
/*@}*/
-/* -----------------Include files ---------------------------------------*/
+/* -----------------Include files ---------------------------------------*/
/* ---------------- Macros ----------------------------------------------*/
#define LLCP_DISCON_CHANGES
#define PH_HAL4NFC_TRANSCEIVE_TIMEOUT 30000 /**<Transceive operation
- on any target should be
- completed within this
+ on any target should be
+ completed within this
interval.Else the
operation is timed out*/
#define PH_HAL4NFC_TGT_MERGE_ADDRESS 0x988BU
-#define PH_HAL4NFC_TGT_MERGE_SAK 0x00U
+#define PH_HAL4NFC_TGT_MERGE_SAK 0x00U
/*---------------- Hal4 Internal Data Structures -------------------------*/
@@ -80,7 +80,7 @@ typedef enum{
} phHal4Nfc_Hal4state_t;
-/**Global Pointer to hardware reference used in timer callbacks to get the
+/**Global Pointer to hardware reference used in timer callbacks to get the
context pointer*/
extern phHal_sHwReference_t *gpphHal4Nfc_Hwref;
@@ -100,7 +100,7 @@ typedef struct phHal4Nfc_TrcvCtxtInfo{
phHciNfc_XchgInfo_t XchangeInfo;
/*sData pointer to point to upper layer's send data*/
phNfc_sData_t *psUpperSendData;
- /*Maintains the offset of number of bytes sent in one go ,so that the
+ /*Maintains the offset of number of bytes sent in one go ,so that the
remaining bytes can be sent during the next transceive*/
uint32_t NumberOfBytesSent;
/*Number of bytes received during a P2p receive*/
@@ -145,9 +145,9 @@ typedef struct phHal4Nfc_TargetConnectInfo{
/*used when a release call is pending in HAL*/
phHal_eReleaseType_t ReleaseType;
/*Points to Remote device info of a connected device*/
- phHal_sRemoteDevInformation_t *psConnectedDevice;
+ phHal_sRemoteDevInformation_t *psConnectedDevice;
/*Emulation state Activated/Deactivated*/
- phHal_Event_t EmulationState;
+ phHal_Event_t EmulationState;
/*Presence check callback*/
pphHal4Nfc_GenCallback_t pPresenceChkCb;
}phHal4Nfc_TargetConnectInfo_t,*pphHal4Nfc_TargetConnectInfo_t;
@@ -163,16 +163,19 @@ typedef struct phHal4Nfc_UpperLayerInfo{
void *DefaultListenerCtxt;
/*Default event handler*/
pphHal4Nfc_Notification_t pDefaultEventHandler;
- /**Upper layer has to register this listener for receiving info about
+ /**Upper layer has to register this listener for receiving info about
discovered tags*/
pphHal4Nfc_Notification_t pTagDiscoveryNotification;
- /**Upper layer has to register this listener for receiving info about
+ /**Upper layer has to register this listener for receiving info about
discovered P2P devices*/
pphHal4Nfc_Notification_t pP2PNotification;
/*Event Notification Context*/
void *EventNotificationCtxt;
/**Notification handler for emulation and other events*/
pphHal4Nfc_Notification_t pEventNotification;
+ /**Notification handler for emulation and other events*/
+ void *HCEEventNotificationCtxt;
+ pphHal4Nfc_Notification_t pHCEEventNotification;
/**Upper layer's Config discovery/Emulation callback registry*/
pphHal4Nfc_GenCallback_t pConfigCallback;
void *psUpperLayerCtxt;
@@ -183,7 +186,7 @@ typedef struct phHal4Nfc_UpperLayerInfo{
/**Upper layer's Open Callback registry*/
pphHal4Nfc_GenCallback_t pUpperOpenCb;
/**Upper layer's Close Callback registry */
- pphHal4Nfc_GenCallback_t pUpperCloseCb;
+ pphHal4Nfc_GenCallback_t pUpperCloseCb;
/*Ioctl out param pointer ,points to buffer provided by upper layer during
a ioctl call*/
phNfc_sData_t *pIoctlOutParam;
@@ -193,16 +196,16 @@ typedef struct phHal4Nfc_UpperLayerInfo{
/**Context structure for HAL4.0*/
typedef struct phHal4Nfc_Hal4Ctxt{
- /**Hci handle obtained in Hci_Init*/
+ /**Hci handle obtained in Hci_Init*/
void *psHciHandle;
/**Layer configuration*/
pphNfcLayer_sCfg_t pHal4Nfc_LayerCfg;
/**Device capabilities*/
phHal_sDeviceCapabilities_t Hal4Nfc_DevCaps;
/*Current state of HAL4.Updated generally in callbacks*/
- phHal4Nfc_Hal4state_t Hal4CurrentState;
+ phHal4Nfc_Hal4state_t Hal4CurrentState;
/*Next state of HAL.Updated during calls*/
- phHal4Nfc_Hal4state_t Hal4NextState;
+ phHal4Nfc_Hal4state_t Hal4NextState;
/**Info related to upper layer*/
phHal4Nfc_UpperLayerInfo_t sUpperLayerInfo;
/*ADD context info*/
@@ -213,11 +216,11 @@ typedef struct phHal4Nfc_Hal4Ctxt{
phHal_sEventInfo_t *psEventInfo;
/*Select sector flag*/
uint8_t SelectSectorFlag;
- /**List of pointers to remote device information for all discovered
+ /**List of pointers to remote device information for all discovered
targets*/
phHal_sRemoteDevInformation_t *rem_dev_list[MAX_REMOTE_DEVICES];
/*Transceive context info*/
- pphHal4Nfc_TrcvCtxtInfo_t psTrcvCtxtInfo;
+ pphHal4Nfc_TrcvCtxtInfo_t psTrcvCtxtInfo;
/*Connect context info*/
phHal4Nfc_TargetConnectInfo_t sTgtConnectInfo;
/*Last called Ioctl_type*/
@@ -279,9 +282,21 @@ extern void phHal4Nfc_HandleEmulationEvent(
/*Callback completion routine for NFCIP1 Receive*/
extern void phHal4Nfc_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+/*Callback completion routine for CE_A Receive*/
+extern void phHal4Nfc_CE_A_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+
+/*Callback completion routine for CE_B Receive*/
+extern void phHal4Nfc_CE_B_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+
/*Callback completion routine for Send*/
extern void phHal4Nfc_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+/*Callback completion routine for Send*/
+extern void phHal4Nfc_CE_A_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+
+/*Callback completion routine for Send*/
+extern void phHal4Nfc_CE_B_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo);
+
/*Callback completion routine for P2P Activate Event received from HCI*/
extern void phHal4Nfc_P2PActivateComplete(
phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
diff --git a/src/phHciNfc.c b/src/phHciNfc.c
index d6990c1..bad0ad5 100644..100755
--- a/src/phHciNfc.c
+++ b/src/phHciNfc.c
@@ -703,11 +703,11 @@ phHciNfc_Config_Emulation (
case NFC_HOST_CE_B_EMULATION:
#if defined(HOST_EMULATION)
{
- if(TRUE == pEmulationCfg->config.
+ /*if(TRUE == pEmulationCfg->config.
hostEmuCfg_A.enableEmulation)
{
psHciContext->hci_seq = ADMIN_CE_SEQ;
- }
+ }*/
status = phHciNfc_EmulationCfg_Sequence(
psHciContext, pHwRef);
break;
diff --git a/src/phHciNfc_AdminMgmt.c b/src/phHciNfc_AdminMgmt.c
index b65abf2..ba8a023 100644..100755
--- a/src/phHciNfc_AdminMgmt.c
+++ b/src/phHciNfc_AdminMgmt.c
@@ -192,7 +192,7 @@ static
*
* This function initialses the Admin Gates and Establishes the Session by creating
* all the required pipes and sets the Session ID
- *
+ *
*/
NFCSTATUS
@@ -251,13 +251,13 @@ phHciNfc_Admin_Initialise(
else
{
/* Populate the pipe information in the pipe handle */
- ((phHciNfc_Pipe_Info_t *)p_pipe_info)->pipe.pipe_id =
+ ((phHciNfc_Pipe_Info_t *)p_pipe_info)->pipe.pipe_id =
PIPETYPE_STATIC_ADMIN;
- ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_resp =
+ ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_resp =
&phHciNfc_Recv_Admin_Response;
- ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_cmd =
+ ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_cmd =
&phHciNfc_Recv_Admin_Cmd;
- ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_event =
+ ((phHciNfc_Pipe_Info_t *)p_pipe_info)->recv_event =
&phHciNfc_Recv_Admin_Event;
psHciContext->p_pipe_list[PIPETYPE_STATIC_ADMIN] =
p_pipe_info ;
@@ -276,8 +276,8 @@ phHciNfc_Admin_Initialise(
{
p_pipe_info = p_admin_info->admin_pipe_info;
p_pipe_info->reg_index = SESSION_INDEX;
- p_pipe_info->prev_status =
- phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
+ p_pipe_info->prev_status =
+ phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
(uint8_t)HCI_ADMIN_PIPE_ID,
(uint8_t)ANY_GET_PARAMETER);
if(NFCSTATUS_PENDING == p_pipe_info->prev_status )
@@ -313,28 +313,36 @@ phHciNfc_Admin_Initialise(
#endif
case ADMIN_VERIFY_SESSION:
{
- phHal_sHwConfig_t *p_hw_config =
+ phHal_sHwConfig_t *p_hw_config =
(phHal_sHwConfig_t *) psHciContext->p_config_params;
- phHal_sHwReference_t *p_hw_ref =
+ phHal_sHwReference_t *p_hw_ref =
(phHal_sHwReference_t *) pHwRef;
int cmp_val = 0;
p_pipe_info = p_admin_info->admin_pipe_info;
- cmp_val = phOsalNfc_MemCompare(p_hw_config->session_id ,
- p_hw_ref->session_id ,
+ cmp_val = phOsalNfc_MemCompare(p_hw_config->session_id ,
+ p_hw_ref->session_id ,
sizeof(p_hw_ref->session_id));
- if((cmp_val == 0)
+//this ifdef can be removed when this is not a patch that is being
+//administered after a new release of Android. it is required that
+//the new pipes for A and B emu get created for the CE patch
+//if this patch is adminstered after the phone has been updated with
+//a release, it is possible that the create A/B pipe code could never
+//get executed, so we are forcing it every time. this can be removed
+//for a main build with a new OS release
+#ifndef FIRST_CE_PATCH
+ if((cmp_val == 0)
&& ( HCI_SESSION == psHciContext->init_mode)
)
{
psHciContext->hci_mode = hciMode_Session;
status = phHciNfc_Update_Pipe( psHciContext, pHwRef,
&p_admin_info->pipe_seq );
- if((status == NFCSTATUS_SUCCESS)
+ if((status == NFCSTATUS_SUCCESS)
&& (NULL != p_pipe_info))
{
-
+
p_pipe_info->reg_index = MAX_PIPE_INDEX;
- status = phHciNfc_Send_Generic_Cmd( psHciContext,
+ status = phHciNfc_Send_Generic_Cmd( psHciContext,
pHwRef, (uint8_t)HCI_ADMIN_PIPE_ID,
(uint8_t)ANY_GET_PARAMETER );
p_pipe_info->prev_status = status;
@@ -346,12 +354,13 @@ phHciNfc_Admin_Initialise(
}
else
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
break;
}
else
+#endif
{
/* To clear the pipe information*/
psHciContext->hci_mode = hciMode_Override;
@@ -362,14 +371,14 @@ phHciNfc_Admin_Initialise(
case ADMIN_CLEAR_PIPES:
{
p_pipe_info = p_admin_info->admin_pipe_info;
- p_pipe_info->prev_status =
+ p_pipe_info->prev_status =
phHciNfc_Send_Admin_Cmd( psHciContext,
pHwRef, ADM_CLEAR_ALL_PIPE,
length, p_pipe_info);
status = ((p_pipe_info->prev_status == NFCSTATUS_PENDING)?
- NFCSTATUS_SUCCESS :
+ NFCSTATUS_SUCCESS :
p_pipe_info->prev_status);
- if(status == NFCSTATUS_SUCCESS)
+ if(status == NFCSTATUS_SUCCESS)
{
p_admin_info->next_seq = ADMIN_PIPE_REOPEN;
status = NFCSTATUS_PENDING;
@@ -393,7 +402,7 @@ phHciNfc_Admin_Initialise(
{
status = phHciNfc_Create_All_Pipes( psHciContext, pHwRef,
&p_admin_info->pipe_seq );
- if(status == NFCSTATUS_SUCCESS)
+ if(status == NFCSTATUS_SUCCESS)
{
p_admin_info->next_seq = ADMIN_GET_WHITE_LIST;
status = NFCSTATUS_PENDING;
@@ -405,13 +414,13 @@ phHciNfc_Admin_Initialise(
p_pipe_info = p_admin_info->admin_pipe_info;
if(NULL == p_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
else
{
p_pipe_info->reg_index = WHITELIST_INDEX;
- status = phHciNfc_Send_Generic_Cmd( psHciContext,
+ status = phHciNfc_Send_Generic_Cmd( psHciContext,
pHwRef, (uint8_t)HCI_ADMIN_PIPE_ID,
(uint8_t)ANY_GET_PARAMETER );
p_pipe_info->prev_status = status;
@@ -420,7 +429,7 @@ phHciNfc_Admin_Initialise(
status = ((NFCSTATUS_PENDING == status )?
NFCSTATUS_SUCCESS : status);
}
- else
+ else
{
if(NFCSTATUS_PENDING == status )
{
@@ -436,13 +445,13 @@ phHciNfc_Admin_Initialise(
p_pipe_info = p_admin_info->admin_pipe_info;
if(NULL == p_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
else
{
p_pipe_info->reg_index = HOST_LIST_INDEX;
- status = phHciNfc_Send_Generic_Cmd( psHciContext,
+ status = phHciNfc_Send_Generic_Cmd( psHciContext,
pHwRef, (uint8_t)HCI_ADMIN_PIPE_ID,
(uint8_t)ANY_GET_PARAMETER );
p_pipe_info->prev_status = status;
@@ -464,7 +473,7 @@ phHciNfc_Admin_Initialise(
p_pipe_info = p_admin_info->admin_pipe_info;
if(NULL == p_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
else
@@ -476,7 +485,7 @@ phHciNfc_Admin_Initialise(
p_admin_info->whitelist[i] = i + 2;
}
status = phHciNfc_Set_Param(psHciContext, pHwRef,
- p_pipe_info, WHITELIST_INDEX,
+ p_pipe_info, WHITELIST_INDEX,
(uint8_t *)p_admin_info->whitelist, i );
if(NFCSTATUS_PENDING == status )
{
@@ -488,7 +497,7 @@ phHciNfc_Admin_Initialise(
}
case ADMIN_SET_SESSION:
{
- phHal_sHwConfig_t *p_hw_config =
+ phHal_sHwConfig_t *p_hw_config =
(phHal_sHwConfig_t *) psHciContext->p_config_params;
p_pipe_info = p_admin_info->admin_pipe_info;
status = phHciNfc_Set_Param(psHciContext, pHwRef, p_pipe_info,
@@ -644,8 +653,8 @@ phHciNfc_Admin_Release(
phHciNfc_AdminGate_Info_t *p_admin_info=NULL;
NFCSTATUS status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
- || (NULL == pHwRef)
+ if( (NULL == psHciContext)
+ || (NULL == pHwRef)
)
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
@@ -711,8 +720,8 @@ phHciNfc_Admin_Release(
uint8_t i=0;
NFCSTATUS status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
- || (NULL == pHwRef)
+ if( (NULL == psHciContext)
+ || (NULL == pHwRef)
|| (NULL == params)
)
{
@@ -737,7 +746,7 @@ phHciNfc_Admin_Release(
HCP_MSG_TYPE_COMMAND, cmd);
hcp_message = &(hcp_packet->msg.message);
- /* Source HOST ID Parameter is not passed as a
+ /* Source HOST ID Parameter is not passed as a
* parameter in the HCI SPEC */
/* hcp_message->payload[i++] = p_pipe_info->pipe.source.host_id; */
@@ -831,7 +840,7 @@ phHciNfc_Recv_Admin_Response(
#endif
)
{
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
phHciNfc_HCP_Packet_t *hcp_packet = NULL;
phHciNfc_HCP_Message_t *hcp_message = NULL;
@@ -869,7 +878,7 @@ phHciNfc_Recv_Admin_Response(
{
status = phHciNfc_Admin_InfoUpdate(psHciContext,
(phHal_sHwReference_t *)pHwRef,
- p_admin_info->admin_pipe_info->reg_index,
+ p_admin_info->admin_pipe_info->reg_index,
&pResponse[HCP_HEADER_LEN],
(uint8_t)(length - HCP_HEADER_LEN));
break;
@@ -961,7 +970,7 @@ static
#endif
)
{
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
phHciNfc_HCP_Packet_t *hcp_packet = NULL;
phHciNfc_HCP_Message_t *hcp_message = NULL;
@@ -973,9 +982,9 @@ static
uint8_t response = (uint8_t) ANY_OK;
NFCSTATUS status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
- || (NULL == pHwRef)
- || (HCP_HEADER_LEN > length )
+ if( (NULL == psHciContext)
+ || (NULL == pHwRef)
+ || (HCP_HEADER_LEN > length )
)
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
@@ -1000,17 +1009,17 @@ static
if(NULL != p_pipe_info)
{
/* The Source Host is the UICC Host */
- p_pipe_info->pipe.source.host_id =
+ p_pipe_info->pipe.source.host_id =
hcp_message->payload[index++];
/* The Source Gate is same as the Destination Gate */
- p_pipe_info->pipe.source.gate_id =
+ p_pipe_info->pipe.source.gate_id =
hcp_message->payload[index++];
/* The Source Host is the Terminal Host */
- p_pipe_info->pipe.dest.host_id =
+ p_pipe_info->pipe.dest.host_id =
hcp_message->payload[index++];
- p_pipe_info->pipe.dest.gate_id =
+ p_pipe_info->pipe.dest.gate_id =
hcp_message->payload[index++];
- p_pipe_info->pipe.pipe_id =
+ p_pipe_info->pipe.pipe_id =
hcp_message->payload[index++];
}
status = phHciNfc_Update_PipeInfo(psHciContext,
@@ -1094,16 +1103,16 @@ static
#endif
)
{
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
phHciNfc_HCP_Packet_t *hcp_packet = NULL;
phHciNfc_HCP_Message_t *hcp_message = NULL;
uint8_t event = (uint8_t) HCP_MSG_INSTRUCTION_INVALID;
NFCSTATUS status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
- || (NULL == pHwRef)
- || (HCP_HEADER_LEN > length )
+ if( (NULL == psHciContext)
+ || (NULL == pHwRef)
+ || (HCP_HEADER_LEN > length )
)
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
@@ -1118,7 +1127,7 @@ static
if( EVT_HOT_PLUG == event )
{
- status = phHciNfc_Send_Admin_Event ( psHciContext, pHwRef,
+ status = phHciNfc_Send_Admin_Event ( psHciContext, pHwRef,
EVT_HOT_PLUG, 0 ,NULL);
}
diff --git a/src/phHciNfc_CE.c b/src/phHciNfc_CE.c
new file mode 100755
index 0000000..b52316c
--- /dev/null
+++ b/src/phHciNfc_CE.c
@@ -0,0 +1,455 @@
+/*
+ * Copyright (C) 2010 NXP Semiconductors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*!
+* =========================================================================== *
+* *
+* *
+* \file phHciNfc_CE.c *
+* \brief HCI card emulation management routines. *
+* *
+* *
+* Project: NFC-FRI-1.1 *
+* *
+* $Date: Thu Dec 29 2011 $ *
+* $Author: doug yeager (doug@simplytapp.com) $ *
+* $Revision: 0.01 $ *
+* *
+* =========================================================================== *
+*/
+
+/*
+***************************** Header File Inclusion ****************************
+*/
+#include <phLibNfc.h>
+#include <phLibNfc_Internal.h>
+#include <phHal4Nfc_Internal.h>
+/*
+****************************** Macro Definitions *******************************
+*/
+#if defined (HOST_EMULATION)
+#include <phHciNfc_CE.h>
+
+/*
+*************************** Structure and Enumeration ***************************
+*/
+
+
+/*
+*************************** Static Function Declaration **************************
+*/
+
+
+/*
+*************************** Function Definitions ***************************
+*/
+
+/**
+* Registers notification handler to handle CE specific events
+*/
+NFCSTATUS phLibNfc_CE_NtfRegister (
+ pphLibNfc_CE_NotificationCb_t pCE_NotificationCb,
+ void *pContext
+ )
+{
+ NFCSTATUS Status = NFCSTATUS_SUCCESS;
+ pphLibNfc_LibContext_t pLibContext=(pphLibNfc_LibContext_t)gpphLibContext;
+
+ if((NULL == gpphLibContext) ||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ Status = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if((pCE_NotificationCb == NULL)
+ ||(NULL == pContext))
+ {
+ /*parameters sent by upper layer are not valid*/
+ Status = NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ Status = NFCSTATUS_SHUTDOWN;
+ }
+ else
+ {
+ /*Register CE notification with lower layer.
+ Any activity on Smx or UICC will be notified */
+ Status = phHal4Nfc_RegisterNotification(
+ pLibContext->psHwReference,
+ eRegisterHostCardEmulation,
+ phLibNfc_CeNotification,
+ (void*)pLibContext);
+ if(Status == NFCSTATUS_SUCCESS)
+ {
+ pLibContext->sCeContext.pCeListenerNtfCb = pCE_NotificationCb;
+ pLibContext->sCeContext.pCeListenerCtxt=pContext;
+ }
+ else
+ {
+ /* Registration failed */
+ Status = NFCSTATUS_FAILED;
+ }
+ }
+ return Status;
+}
+/**
+* CE Notification events are notified with this callback
+*/
+void phLibNfc_CeNotification(void *context,
+ phHal_eNotificationType_t type,
+ phHal4Nfc_NotificationInfo_t info,
+ NFCSTATUS status)
+{
+ pphLibNfc_LibContext_t pLibContext=(pphLibNfc_LibContext_t)context;
+ phHal_sEventInfo_t *pEvtInfo = NULL;
+
+ if(pLibContext != gpphLibContext)
+ {
+ /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ if((status == NFCSTATUS_SUCCESS) && (type == NFC_EVENT_NOTIFICATION))
+ {
+ pEvtInfo = info.psEventInfo;
+ status = NFCSTATUS_SUCCESS;
+ if(pEvtInfo->eventHost == phHal_eHostController &&
+ (pEvtInfo->eventSource==phHal_eISO14443_A_PICC ||
+ pEvtInfo->eventSource==phHal_eISO14443_B_PICC)
+ )
+ {
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)pLibContext->psHwReference->hal_context;
+ switch(pEvtInfo->eventType)
+ {
+ case NFC_EVT_ACTIVATED:
+ {
+ phHal4Nfc_CEActivateComplete(Hal4Ctxt,pEvtInfo);
+ break;
+ }
+ case NFC_EVT_DEACTIVATED:
+ {
+ phHal4Nfc_HandleCEDeActivate(Hal4Ctxt,pEvtInfo);
+ break;
+ }
+ case NFC_EVT_FIELD_ON:
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_EvtFieldOn,
+ NULL,
+ status);
+ break;
+ }
+ case NFC_EVT_FIELD_OFF:
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_EvtFieldOff,
+ NULL,
+ status);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+
+ }
+ }
+ }
+ return;
+}
+
+/*Activation complete handler*/
+void phHal4Nfc_CEActivateComplete(
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
+ void *pInfo
+ )
+{
+ phHal_sEventInfo_t *psEventInfo = (phHal_sEventInfo_t *)pInfo;
+
+ pphLibNfc_LibContext_t pLibContext=(pphLibNfc_LibContext_t)Hal4Ctxt->sUpperLayerInfo.HCEEventNotificationCtxt;
+
+ NFCSTATUS Status = NFCSTATUS_SUCCESS;
+ Hal4Ctxt->sTgtConnectInfo.EmulationState = NFC_EVT_ACTIVATED;
+ /*if P2p notification is registered*/
+ if( NULL != pLibContext->sCeContext.pCeListenerNtfCb)
+ {
+ /*Allocate remote device Info for CE target*/
+ Hal4Ctxt->rem_dev_list[0]
+ = (phHal_sRemoteDevInformation_t *)
+ phOsalNfc_GetMemory(
+ sizeof(phHal_sRemoteDevInformation_t)
+ );
+ if(NULL == Hal4Ctxt->rem_dev_list[0])
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ Status = PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else
+ {
+ (void)memset((void *)Hal4Ctxt->rem_dev_list[0],
+ 0,sizeof(phHal_sRemoteDevInformation_t));
+ /*Copy device info*/
+ (void)memcpy(Hal4Ctxt->rem_dev_list[0],
+ psEventInfo->eventInfo.pRemoteDevInfo,
+ sizeof(phHal_sRemoteDevInformation_t)
+ );
+ Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 1;
+ /*Allocate Trcv context info*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo= (pphHal4Nfc_TrcvCtxtInfo_t)
+ phOsalNfc_GetMemory((uint32_t)
+ (sizeof(phHal4Nfc_TrcvCtxtInfo_t)));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo,0,
+ sizeof(phHal4Nfc_TrcvCtxtInfo_t));
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus
+ = NFCSTATUS_PENDING;
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ Status= PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else
+ {
+ /*Update state*/
+ Hal4Ctxt->Hal4CurrentState = eHal4StateEmulation;
+ Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
+ /*set session Opened ,this will keep track of whether the session
+ is alive.will be reset if a Event DEACTIVATED is received*/
+ Hal4Ctxt->rem_dev_list[0]->SessionOpened = TRUE;
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice = Hal4Ctxt->rem_dev_list[0];
+ gpphLibContext->Connected_handle = Hal4Ctxt->sTgtConnectInfo.psConnectedDevice;
+ if(psEventInfo->eventSource==phHal_eISO14443_A_PICC)
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_A_EvtActivated,
+ (uint32_t)Hal4Ctxt->rem_dev_list[0],
+ Status);
+ }
+ else
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_B_EvtActivated,
+ (uint32_t)Hal4Ctxt->rem_dev_list[0],
+ Status);
+ }
+ }
+ }
+ }
+ return;
+}
+
+/*Deactivation complete handler*/
+void phHal4Nfc_HandleCEDeActivate(
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
+ void *pInfo
+ )
+{
+ pphLibNfc_LibContext_t pLibContext=(pphLibNfc_LibContext_t)Hal4Ctxt->sUpperLayerInfo.HCEEventNotificationCtxt;
+
+ pphHal4Nfc_TransceiveCallback_t pUpperRecvCb = NULL;
+ pphHal4Nfc_SendCallback_t pUpperSendCb = NULL;
+ phHal4Nfc_NotificationInfo_t uNotificationInfo;
+ uNotificationInfo.psEventInfo = (phHal_sEventInfo_t *)pInfo;
+ uint32_t handle=0;
+ /*session is closed*/
+ if(NULL != Hal4Ctxt->rem_dev_list[0])
+ {
+ if(Hal4Ctxt->rem_dev_list[0]->RemoteDevInfo.Iso14443_4_PCD_Info.buffer != NULL)
+ {
+ phOsalNfc_FreeMemory((void *)(Hal4Ctxt->rem_dev_list[0]->RemoteDevInfo.Iso14443_4_PCD_Info.buffer));
+ Hal4Ctxt->rem_dev_list[0]->RemoteDevInfo.Iso14443_4_PCD_Info.buffer = NULL;
+ }
+ Hal4Ctxt->rem_dev_list[0]->RemoteDevInfo.Iso14443_4_PCD_Info.length = 0;
+ Hal4Ctxt->rem_dev_list[0]->SessionOpened = FALSE;
+ handle = (uint32_t)Hal4Ctxt->rem_dev_list[0];
+ Hal4Ctxt->rem_dev_list[0] = NULL;
+ Hal4Ctxt->psADDCtxtInfo->nbr_of_devices = 0;
+ }
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice = NULL;
+ gpphLibContext->Connected_handle = 0x0000;
+ /*Update state*/
+ Hal4Ctxt->Hal4CurrentState = eHal4StateOpenAndReady;
+ Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
+ Hal4Ctxt->sTgtConnectInfo.EmulationState = NFC_EVT_DEACTIVATED;
+ /*If Trcv ctxt info is allocated ,free it here*/
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ if(PH_OSALNFC_INVALID_TIMER_ID !=
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId)
+ {
+ phOsalNfc_Timer_Stop(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId);
+ phOsalNfc_Timer_Delete(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId);
+ }
+ pUpperRecvCb = (pphHal4Nfc_TransceiveCallback_t)Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb;
+ pUpperSendCb = Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb;
+ /*Free Hal4 resources used by Target*/
+ if (NULL != Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer)
+ {
+ phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo->
+ sLowerRecvData.buffer);
+ }
+ if((NULL == Hal4Ctxt->sTgtConnectInfo.psConnectedDevice)
+ && (NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData))
+ {
+ phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData);
+ }
+ phOsalNfc_FreeMemory(Hal4Ctxt->psTrcvCtxtInfo);
+ Hal4Ctxt->psTrcvCtxtInfo = NULL;
+ }
+ /*if recv callback is pending*/
+ if(NULL != pUpperRecvCb)
+ {
+ (*pUpperRecvCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ NULL,
+ NFCSTATUS_DESELECTED
+ );
+ }
+ /*if send callback is pending*/
+ else if(NULL != pUpperSendCb)
+ {
+ (*pUpperSendCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ NFCSTATUS_DESELECTED
+ );
+ }
+ /*if CENotification is registered*/
+ else if(NULL != pLibContext->sCeContext.pCeListenerNtfCb)
+ {
+ if(uNotificationInfo.psEventInfo->eventSource==phHal_eISO14443_A_PICC)
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_A_EvtDeActivated,
+ handle,
+ NFCSTATUS_SUCCESS);
+ }
+ else
+ {
+ (*pLibContext->sCeContext.pCeListenerNtfCb)(
+ pLibContext->sCeContext.pCeListenerCtxt,
+ phLibNfc_eCE_B_EvtDeActivated,
+ handle,
+ NFCSTATUS_SUCCESS);
+ }
+ }
+}
+
+/**
+ * Unregister the CE Notification.
+ */
+NFCSTATUS phLibNfc_CE_NtfUnregister(void)
+{
+ NFCSTATUS Status = NFCSTATUS_SUCCESS;
+ pphLibNfc_LibContext_t pLibContext=(pphLibNfc_LibContext_t)gpphLibContext;
+
+ if((NULL == gpphLibContext) ||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ /*Lib Nfc is not initialized*/
+ Status = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ Status = NFCSTATUS_SHUTDOWN;
+ }
+ else
+ {
+ /*Unregister CE event notification with lower layer.
+ even some transaction happens on UICC or Smx will not
+ be notified afterworlds */
+ Status = phHal4Nfc_UnregisterNotification(
+ pLibContext->psHwReference,
+ eRegisterHostCardEmulation,
+ pLibContext);
+ if(Status != NFCSTATUS_SUCCESS)
+ {
+ /*Unregister failed*/
+ Status=NFCSTATUS_FAILED;
+ }
+ pLibContext->sCeContext.pCeListenerNtfCb=NULL;
+ pLibContext->sCeContext.pCeListenerCtxt=NULL;
+ }
+ return Status;
+}
+
+
+/*Timer callback for recv data timer for CE.This timer is used for creating
+ Asynchronous behavior in the scenario where the data is received even before
+ the upper layer calls the phHal4Nfc_receive().*/
+void phHal4Nfc_CE_RecvTimerCb(uint32_t CERecvTimerId, void *pContext)
+{
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)(
+ gpphHal4Nfc_Hwref->hal_context);
+ pphLibNfc_TransceiveCallback_t pUpperRecvCb = NULL;
+ NFCSTATUS RecvDataBufferStatus = NFCSTATUS_PENDING;
+ PHNFC_UNUSED_VARIABLE(pContext);
+
+ phOsalNfc_Timer_Stop(CERecvTimerId);
+ phOsalNfc_Timer_Delete(CERecvTimerId);
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ RecvDataBufferStatus = Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus;
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus = NFCSTATUS_PENDING;
+
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ /*Update state*/
+ Hal4Ctxt->Hal4NextState = (eHal4StateTransaction
+ == Hal4Ctxt->Hal4NextState?eHal4StateInvalid:Hal4Ctxt->Hal4NextState);
+ /*Provide address of received data to upper layer data pointer*/
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData
+ = &(Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData);
+ /*Chk NULL and call recv callback*/
+ if(Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb != NULL)
+ {
+ pUpperRecvCb = (pphLibNfc_TransceiveCallback_t)Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = NULL;
+ (*pUpperRecvCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData,
+ RecvDataBufferStatus
+ );
+ }
+ }
+ return;
+}
+
+
+#endif /* #if defined (HOST_EMULATION) */
+
+
diff --git a/src/phHciNfc_CE.h b/src/phHciNfc_CE.h
new file mode 100755
index 0000000..864066a
--- /dev/null
+++ b/src/phHciNfc_CE.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2010 NXP Semiconductors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*!
+* =========================================================================== *
+* *
+* *
+* \file phHciNfc_CE_A.h *
+* \brief HCI card emulation management routines. *
+* *
+* *
+* Project: NFC-FRI-1.1 *
+* *
+* $Date: Fri Aug 14 17:01:27 2009 $ *
+* $Author: ing04880 $ *
+* $Revision: 1.5 $ *
+* $Aliases: 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 $ *
+* *
+* =========================================================================== *
+*/
+
+
+#ifndef PHHCINFC_CE_H
+#define PHHCINFC_CE_H
+
+/*@}*/
+
+
+/**
+* \name HCI
+*
+* File: \ref phHciNfc_CE_A.h
+*
+*/
+/*@{*/
+#define PHHCINFC_CE_FILEREVISION "$Revision: 1.5 $" /**< \ingroup grp_file_attributes */
+#define PHHCINFC_CE_FILEALIASES "$Aliases: 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 $" /**< \ingroup grp_file_attributes */
+/*@}*/
+
+/*
+***************************** Header File Inclusion ****************************
+*/
+
+#include <phHal4Nfc_Internal.h>
+
+/*
+****************************** Macro Definitions *******************************
+*/
+
+#ifdef _WIN32
+/*Timeout value for recv data timer for CE.This timer is used for creating
+ Asynchronous behavior in the scenario where the data is received even before
+ the upper layer calls the phHal4Nfc_receive().*/
+#define PH_HAL4NFC_CE_RECV_CB_TIMEOUT 100U
+#else
+#define PH_HAL4NFC_CE_RECV_CB_TIMEOUT 0x00U
+#endif/*#ifdef _WIN32*/
+#define CE_MAX_SEND_BUFFER_LEN 257
+
+/*
+******************** Enumeration and Structure Definition **********************
+*/
+
+/* Context for secured element */
+typedef struct phLibNfc_CeCtxt
+{
+ /* Store SE discovery notification callback and its context */
+ pphLibNfc_CE_NotificationCb_t pCeListenerNtfCb;
+ void *pCeListenerCtxt;
+
+}phLibNfc_CeCtxt_t;
+
+
+/*
+*********************** Function Prototype Declaration *************************
+*/
+/*timer callback to send already buffered receive data to upper layer*/
+void phHal4Nfc_CE_RecvTimerCb(uint32_t CERecvTimerId, void *pContext);
+
+/* SE register listner response notification */
+void phLibNfc_CeNotification(void *context,
+ phHal_eNotificationType_t type,
+ phHal4Nfc_NotificationInfo_t info,
+ NFCSTATUS status
+ );
+
+
+/*Activation complete handler*/
+void phHal4Nfc_CEActivateComplete(
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
+ void *pInfo
+ );
+
+/*Deactivation complete handler*/
+void phHal4Nfc_HandleCEDeActivate(
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,
+ void *pInfo
+ );
+#endif /* PHHCINFC_CE_H */
+
+
diff --git a/src/phHciNfc_CE_A.c b/src/phHciNfc_CE_A.c
index 511a3c5..8cb1aca 100644..100755
--- a/src/phHciNfc_CE_A.c
+++ b/src/phHciNfc_CE_A.c
@@ -40,10 +40,16 @@
#include <phHciNfc_Pipe.h>
#include <phHciNfc_Emulation.h>
#include <phOsalNfc.h>
+#include <phLibNfc.h>
+#include <phLibNfc_Internal.h>
+#include <phHal4Nfc_Internal.h>
+#include <phHciNfc_NfcIPMgmt.h>
+#include <phHciNfc_Sequence.h>
/*
****************************** Macro Definitions *******************************
*/
#if defined (HOST_EMULATION)
+#include <phHciNfc_CE.h>
#include <phHciNfc_CE_A.h>
#define CE_A_EVT_NFC_SEND_DATA 0x10U
@@ -87,16 +93,34 @@ phHciNfc_Recv_CE_A_Response(
#endif
);
-#if defined (SEND_DATA_EVENT)
-static
-NFCSTATUS
-phHciNfc_CE_A_ProcessData(
- phHciNfc_sContext_t *psHciContext,
- void *pHwRef,
- uint8_t *pData,
- uint8_t length
- );
-#endif /* #if defined (SEND_DATA_EVENT) */
+/*Set CE config paramater response callback*/
+static
+ void phLibNfc_Mgt_SetCE_A_14443_4_ConfigParams_Cb(
+ void *context,
+ NFCSTATUS status
+ );
+
+
+/* Response callback for Remote Device Receive.*/
+static void phLibNfc_RemoteDev_CE_A_Receive_Cb(
+ void *context,
+ phHal_sRemoteDevInformation_t *ConnectedDevice,
+ phNfc_sData_t *rec_rsp_data,
+ NFCSTATUS status
+ );
+
+/*Response callback for Remote Device Send.*/
+static void phLibNfc_RemoteDev_CE_A_Send_Cb(
+ void *Context,
+ NFCSTATUS status
+ );
+
+static NFCSTATUS
+phHciNfc_CE_A_SendData (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ phHciNfc_XchgInfo_t *sData
+ );
/*
*************************** Function Definitions ***************************
@@ -129,7 +153,7 @@ phHciNfc_CE_A_Init_Resources(
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES);
}
-
+
}
return status;
}
@@ -140,14 +164,15 @@ phHciNfc_CE_A_Initialise(
void *pHwRef
)
{
- /*
- 1. Open Pipe,
- 2. Set all parameters
+ /*
+ 1. Open Pipe,
+ 2. Set all parameters
*/
NFCSTATUS status = NFCSTATUS_SUCCESS;
static uint8_t sak = HOST_CE_A_SAK_DEFAULT;
- static uint8_t atqa_info[] = { NXP_CE_A_ATQA_HIGH,
- NXP_CE_A_ATQA_LOW};
+ static uint8_t atqa_info[] = { NXP_CE_A_ATQA_LOW,
+ NXP_CE_A_ATQA_HIGH
+ };
if ((NULL == psHciContext) || (NULL == pHwRef))
{
@@ -166,7 +191,7 @@ phHciNfc_CE_A_Initialise(
ps_pipe_info = ps_ce_a_info->p_pipe_info;
if(NULL == ps_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_INFORMATION);
}
else
@@ -174,7 +199,7 @@ phHciNfc_CE_A_Initialise(
switch(ps_ce_a_info->current_seq)
{
case HOST_CE_A_PIPE_OPEN:
- {
+ {
status = phHciNfc_Open_Pipe( psHciContext,
pHwRef, ps_pipe_info );
if(status == NFCSTATUS_SUCCESS)
@@ -185,14 +210,14 @@ phHciNfc_CE_A_Initialise(
break;
}
case HOST_CE_A_SAK_SEQ:
- {
+ {
/* HOST Card Emulation A SAK Configuration */
ps_pipe_info->reg_index = HOST_CE_A_SAK_INDEX;
/* Configure the SAK of Host Card Emulation A */
sak = (uint8_t)HOST_CE_A_SAK_DEFAULT;
ps_pipe_info->param_info =(void*)&sak ;
ps_pipe_info->param_length = sizeof(sak) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_pipe_info->pipe.pipe_id,
(uint8_t)ANY_SET_PARAMETER);
if(status == NFCSTATUS_PENDING)
@@ -208,12 +233,12 @@ phHciNfc_CE_A_Initialise(
/* Configure the ATQA of Host Card Emulation A */
ps_pipe_info->param_info = (void*)atqa_info ;
ps_pipe_info->param_length = sizeof(atqa_info) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_pipe_info->pipe.pipe_id,
(uint8_t)ANY_SET_PARAMETER);
if(status == NFCSTATUS_PENDING)
{
- ps_ce_a_info->next_seq = HOST_CE_A_ENABLE_SEQ;
+ ps_ce_a_info->next_seq = HOST_CE_A_ENABLE_SEQ;
}
break;
}
@@ -266,7 +291,7 @@ phHciNfc_CE_A_Release(
ps_pipe_info = ps_ce_a_info->p_pipe_info;
if(NULL == ps_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_NOT_ALLOWED);
}
else
@@ -290,8 +315,9 @@ phHciNfc_CE_A_Release(
pHwRef, ps_pipe_info );
if(status == NFCSTATUS_SUCCESS)
{
- ps_ce_a_info->next_seq = HOST_CE_A_PIPE_DELETE;
- status = NFCSTATUS_PENDING;
+// ps_ce_a_info->next_seq = HOST_CE_A_PIPE_DELETE;
+// status = NFCSTATUS_PENDING;
+ ps_ce_a_info->next_seq = HOST_CE_A_PIPE_OPEN;
}
break;
}
@@ -355,7 +381,7 @@ phHciNfc_CE_A_Update_PipeInfo(
ps_ce_a_info->p_pipe_info = pPipeInfo;
if (NULL != pPipeInfo)
{
- /* Update the Response Receive routine of the card
+ /* Update the Response Receive routine of the card
emulation A Gate */
pPipeInfo->recv_resp = &phHciNfc_Recv_CE_A_Response;
/* Update the event Receive routine of the card emulation A Gate */
@@ -381,7 +407,7 @@ phHciNfc_CE_A_Get_PipeID(
if( (NULL != psHciContext)
&& ( NULL != ppipe_id )
- && ( NULL != psHciContext->p_ce_a_info )
+ && ( NULL != psHciContext->p_ce_a_info )
)
{
phHciNfc_CE_A_Info_t *ps_ce_a_info=NULL;
@@ -389,29 +415,13 @@ phHciNfc_CE_A_Get_PipeID(
psHciContext->p_ce_a_info ;
*ppipe_id = ps_ce_a_info->pipe_id ;
}
- else
+ else
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
}
return status;
}
-#ifdef CE_A_SEND_EVENT
-NFCSTATUS
-phHciNfc_CE_A_SendData_Event(
- void *psContext,
- void *pHwRef,
- uint8_t *pEvent,
- uint8_t length
- )
-{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
- (phHciNfc_sContext_t *)psContext ;
- return status;
-}
-#endif /* #ifdef CE_A_SEND_EVENT */
-
static
NFCSTATUS
phHciNfc_Recv_CE_A_Response(
@@ -426,7 +436,7 @@ phHciNfc_Recv_CE_A_Response(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse)
|| (length == 0))
@@ -445,7 +455,7 @@ phHciNfc_Recv_CE_A_Response(
psHciContext->p_ce_a_info ;
if( NULL == ps_ce_a_info->p_pipe_info)
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
else
@@ -457,7 +467,7 @@ phHciNfc_Recv_CE_A_Response(
{
#if 0
status = phHciNfc_CE_A_InfoUpdate(psHciContext,
- ps_ce_a_info->p_pipe_info->reg_index,
+ ps_ce_a_info->p_pipe_info->reg_index,
&pResponse[HCP_HEADER_LEN],
(length - HCP_HEADER_LEN));
#endif /* #if 0 */
@@ -475,7 +485,7 @@ phHciNfc_Recv_CE_A_Response(
}
case ANY_CLOSE_PIPE:
{
- HCI_PRINT("CE A close pipe complete\n");
+ HCI_PRINT("CE A close pipe complete\n");
break;
}
default:
@@ -486,7 +496,7 @@ phHciNfc_Recv_CE_A_Response(
}
if( NFCSTATUS_SUCCESS == status )
{
- status = phHciNfc_CE_A_Update_Seq(psHciContext,
+ status = phHciNfc_CE_A_Update_Seq(psHciContext,
UPDATE_SEQ);
ps_ce_a_info->p_pipe_info->prev_status = NFCSTATUS_SUCCESS;
}
@@ -510,7 +520,7 @@ phHciNfc_CE_A_Update_Seq(
}
else if( NULL == psHciContext->p_ce_a_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_FEATURE_NOT_SUPPORTED);
}
else
@@ -583,7 +593,7 @@ phHciNfc_CE_A_Mode(
param = (uint8_t)enable_type;
p_pipe_info->param_info =(void*)&param ;
p_pipe_info->param_length = sizeof(param) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_ce_a_info->pipe_id,(uint8_t)ANY_SET_PARAMETER);
}
else
@@ -596,7 +606,7 @@ phHciNfc_CE_A_Mode(
-static
+static
NFCSTATUS
phHciNfc_Recv_CE_A_Event(
void *psContext,
@@ -610,7 +620,7 @@ phHciNfc_Recv_CE_A_Event(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent)
|| (length == 0))
@@ -623,10 +633,15 @@ phHciNfc_Recv_CE_A_Event(
}
else
{
+ phHciNfc_NfcIP_Info_t *p_nfcipinfo= (phHciNfc_NfcIP_Info_t *) psHciContext->p_nfcip_info ;
+ p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = phHal_eISO14443_A_PCD;
phHciNfc_HCP_Packet_t *p_packet = NULL;
phHciNfc_CE_A_Info_t *ps_ce_a_info=NULL;
phHciNfc_HCP_Message_t *message = NULL;
static phHal_sEventInfo_t event_info;
+ static phNfc_sTransactionInfo_t trans_info;
+ void * pInfo = &event_info;
+ uint8_t evt = NFC_NOTIFY_EVENT;
uint8_t instruction=0;
ps_ce_a_info = (phHciNfc_CE_A_Info_t *)
@@ -639,16 +654,19 @@ phHciNfc_Recv_CE_A_Event(
message = &p_packet->msg.message;
/* Get the instruction bits from the Message Header */
instruction = (uint8_t) GET_BITS8( message->msg_header,
- HCP_MSG_INSTRUCTION_OFFSET,
+ HCP_MSG_INSTRUCTION_OFFSET,
HCP_MSG_INSTRUCTION_LEN);
psHciContext->host_rf_type = phHal_eISO14443_A_PICC;
event_info.eventHost = phHal_eHostController;
event_info.eventSource = phHal_eISO14443_A_PICC;
+ event_info.eventInfo.pRemoteDevInfo = &(p_nfcipinfo->rem_nfcip_tgt_info);
switch(instruction)
- {
+ {
case CE_A_EVT_NFC_ACTIVATED:
- {
- event_info.eventType = NFC_EVT_ACTIVATED;
+ {
+ psHciContext->hci_state.cur_state = hciState_Listen;
+ psHciContext->hci_state.next_state = hciState_Unknown;
+ event_info.eventType = NFC_EVT_ACTIVATED;
/* Notify to the HCI Generic layer To Update the FSM */
break;
}
@@ -661,20 +679,23 @@ phHciNfc_Recv_CE_A_Event(
case CE_A_EVT_NFC_SEND_DATA:
{
HCI_PRINT("CE A data is received from the PN544\n");
-#if defined (SEND_DATA_EVENT)
- if(length > HCP_HEADER_LEN)
+
+ if(length > (HCP_HEADER_LEN+1))
{
- status = phHciNfc_CE_A_ProcessData(
- psHciContext, pHwRef,
- &pEvent[HCP_HEADER_LEN],
- (length - HCP_HEADER_LEN));
+ event_info.eventType = NFC_EVT_APDU_RECEIVED;
+ trans_info.status = status;
+ trans_info.type = NFC_NOTIFY_CE_A_RECV_EVENT;
+ trans_info.length = length - HCP_HEADER_LEN - 1;
+ trans_info.buffer = &pEvent[HCP_HEADER_LEN];
+ trans_info.info = &event_info;
+ pInfo = &trans_info;
+ evt = NFC_NOTIFY_CE_A_RECV_EVENT;
}
else
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_RESPONSE);
}
-#endif /* #if defined (SEND_DATA_EVENT) */
break;
}
case CE_A_EVT_NFC_FIELD_ON:
@@ -691,41 +712,1120 @@ phHciNfc_Recv_CE_A_Event(
}
default:
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_INSTRUCTION);
break;
}
}
if(NFCSTATUS_SUCCESS == status)
{
- phHciNfc_Notify_Event(psHciContext, pHwRef,
- NFC_NOTIFY_EVENT,
- &event_info);
+ phHciNfc_Notify_Event(psHciContext, pHwRef,
+ evt,
+ pInfo);
}
}
return status;
}
-#if defined (SEND_DATA_EVENT)
-static
NFCSTATUS
-phHciNfc_CE_A_ProcessData(
- phHciNfc_sContext_t *psHciContext,
- void *pHwRef,
- uint8_t *pData,
- uint8_t length
- )
+phHciNfc_CE_A_SendData (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ phHciNfc_XchgInfo_t *sData
+ )
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- static uint8_t send_data[] = {0x6D, 0x80};
- status = phHciNfc_CE_A_SendData_Event(
- (void *)psHciContext, pHwRef,
- send_data, sizeof(send_data));
+ if( (NULL == psHciContext) || (NULL == pHwRef) ||
+ (NULL == sData) || (0 == sData->tx_length) || (CE_MAX_SEND_BUFFER_LEN < sData->tx_length))
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else if(NULL == psHciContext->p_ce_a_info)
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
+ }
+ else
+ {
+ phHciNfc_CE_A_Info_t *ps_ce_a_info = (phHciNfc_CE_A_Info_t *)
+ psHciContext->p_ce_a_info ;
+ phHciNfc_Pipe_Info_t *p_pipe_info = ps_ce_a_info->p_pipe_info;
+
+ if(NULL == p_pipe_info )
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI,
+ NFCSTATUS_INVALID_HCI_INFORMATION);
+ }
+ else
+ {
+ if (NFCSTATUS_SUCCESS == status)
+ {
+ phHciNfc_HCP_Packet_t *hcp_packet = NULL;
+ phHciNfc_HCP_Message_t *hcp_message = NULL;
+ uint16_t length = HCP_HEADER_LEN;
+ uint8_t pipeid = 0,
+ i = 0;
+ HCI_PRINT_BUFFER("HCI CE Send Data: ", sData->tx_buffer, sData->tx_length);
+
+ psHciContext->tx_total = 0 ;
+ pipeid = p_pipe_info->pipe.pipe_id;
+ hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
+ hcp_message = &(hcp_packet->msg.message);
+
+ /* Construct the HCP Frame */
+ phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
+ (uint8_t) pipeid, (uint8_t)HCP_MSG_TYPE_EVENT,
+ (uint8_t)CE_A_EVT_NFC_SEND_DATA);
+
+ phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
+ i, sData->tx_buffer,
+ sData->tx_length);
+
+ length =(uint16_t)(length + i + sData->tx_length);
+
+ p_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_EVENT;
+ p_pipe_info->prev_msg = CE_A_EVT_NFC_SEND_DATA;
+ psHciContext->tx_total = length;
+ /* Send the Constructed HCP packet to the lower layer */
+ status = phHciNfc_Send_HCP( psHciContext, pHwRef);
+ p_pipe_info->prev_status = status;
+ }
+ }
+ }
return status;
}
-#endif /* #if defined (SEND_DATA_EVENT) */
+
+/**Receive complete handler*/
+void phHal4Nfc_CE_A_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo)
+{
+ pphHal4Nfc_TransceiveCallback_t pUpperRecvCb = NULL;
+ NFCSTATUS RecvStatus = ((phNfc_sTransactionInfo_t *)pInfo)->status;
+ /*allocate TrcvContext if not already allocated.Required since
+ Receive complete can occur before any other send /receive calls.*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo= (pphHal4Nfc_TrcvCtxtInfo_t)
+ phOsalNfc_GetMemory((uint32_t)
+ (sizeof(phHal4Nfc_TrcvCtxtInfo_t)));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo,0,
+ sizeof(phHal4Nfc_TrcvCtxtInfo_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus
+ = NFCSTATUS_PENDING;
+ }
+ }
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ RecvStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else
+ {
+ /*Allocate 4K buffer to copy the received data into*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer
+ = (uint8_t *)phOsalNfc_GetMemory(
+ PH_HAL4NFC_MAX_RECEIVE_BUFFER
+ );
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,
+ 0);
+ RecvStatus = NFCSTATUS_INSUFFICIENT_RESOURCES;
+ }
+ else /*memset*/
+ {
+ (void)memset(
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer,
+ 0,
+ PH_HAL4NFC_MAX_RECEIVE_BUFFER
+ );
+ }
+ }
+
+ if(RecvStatus != NFCSTATUS_INSUFFICIENT_RESOURCES)
+ {
+ /*Copy the data*/
+ (void)memcpy(
+ (Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer
+ + Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength),
+ ((phNfc_sTransactionInfo_t *)pInfo)->buffer,
+ ((phNfc_sTransactionInfo_t *)pInfo)->length
+ );
+ /*Update P2PRecvLength,this also acts as the offset to append more
+ received bytes*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength
+ += ((phNfc_sTransactionInfo_t *)pInfo)->length;
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.length
+ = Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength;
+ }
+
+ if(RecvStatus != NFCSTATUS_MORE_INFORMATION)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength = 0;
+ Hal4Ctxt->Hal4NextState = (eHal4StateTransaction
+ == Hal4Ctxt->Hal4NextState?eHal4StateInvalid:Hal4Ctxt->Hal4NextState);
+ if(NFCSTATUS_PENDING == Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus)
+ {
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb)
+ {
+ pUpperRecvCb = (pphHal4Nfc_TransceiveCallback_t)Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData
+ = &(Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData);
+ (*pUpperRecvCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData,
+ RecvStatus
+ );
+ }
+ else
+ {
+ /*Receive data buffer is complete with data & P2P receive has
+ not yet been called*/
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus
+ = NFCSTATUS_SUCCESS;
+ }
+ }
+ }
+ }
+ return;
+}
+
+/**
+* unblock any pending callback functions.
+*/
+NFCSTATUS
+phLibNfc_Mgt_Unblock_Cb_CE_A_14443_4( )
+{
+ NFCSTATUS RetVal = NFCSTATUS_NOT_INITIALISED;
+ if(gpphLibContext!=NULL && (gpphLibContext->psHwReference)!=NULL && (gpphLibContext->psHwReference->hal_context)!=NULL)
+ {
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ Hal4Ctxt = gpphLibContext->psHwReference->hal_context;
+ if(Hal4Ctxt->rem_dev_list[0]!=NULL &&
+ Hal4Ctxt->rem_dev_list[0]->SessionOpened==TRUE &&
+ Hal4Ctxt->rem_dev_list[0]->RemDevType == phNfc_eISO14443_A_PCD
+ )
+ {
+ phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)(Hal4Ctxt->psHciHandle));
+ phHciNfc_NfcIP_Info_t *p_nfcipinfo= (phHciNfc_NfcIP_Info_t *) psHciContext->p_nfcip_info ;
+ p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = phHal_eISO14443_A_PCD;
+ phHciNfc_CE_A_Info_t *ps_ce_a_info=NULL;
+ static phHal_sEventInfo_t event_info;
+ void * pInfo = &event_info;
+
+ ps_ce_a_info = (phHciNfc_CE_A_Info_t *)psHciContext->p_ce_a_info ;
+
+ /* Variable was set but never used (ARM warning) */
+ PHNFC_UNUSED_VARIABLE(ps_ce_a_info);
+
+ psHciContext->host_rf_type = phHal_eISO14443_A_PICC;
+ event_info.eventHost = phHal_eHostController;
+ event_info.eventSource = phHal_eISO14443_A_PICC;
+ event_info.eventInfo.pRemoteDevInfo = &(p_nfcipinfo->rem_nfcip_tgt_info);
+ event_info.eventType = NFC_EVT_DEACTIVATED;
+ phHciNfc_Notify_Event(psHciContext, gpphLibContext->psHwReference,
+ NFC_NOTIFY_EVENT,
+ pInfo);
+ RetVal = NFCSTATUS_SUCCESS;
+ }
+ }
+ return RetVal;
+}
+
+
+/**
+* Interface to configure Card Emulation configurations.
+*/
+NFCSTATUS
+phLibNfc_Mgt_SetCE_A_14443_4_ConfigParams(
+ uint8_t emulate,
+ pphLibNfc_RspCb_t pConfigRspCb,
+ void* pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /* LibNfc Initialized or not */
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }/* Check for valid parameters */
+ else if((NULL == pConfigRspCb)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if(TRUE == gpphLibContext->status.GenCb_pending_status)
+ { /*Previous callback is pending */
+ RetVal = NFCSTATUS_BUSY;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk !=
+ gpphLibContext->LibNfcState.next_state)
+ {
+ phHal_uConfig_t uConfig;
+ uConfig.emuConfig.emuType = NFC_HOST_CE_A_EMULATION;
+ uConfig.emuConfig.config.hostEmuCfg_A.enableEmulation = emulate;
+ if(emulate==FALSE)
+ {
+ //de-activate any pending commands
+ phLibNfc_Mgt_Unblock_Cb_CE_A_14443_4();
+ }
+ RetVal = phHal4Nfc_ConfigParameters(
+ gpphLibContext->psHwReference,
+ NFC_EMULATION_CONFIG,
+ &uConfig,
+ phLibNfc_Mgt_SetCE_A_14443_4_ConfigParams_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ else
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb= NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* save the context and callback for later use */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb = pConfigRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ /* Next state is configured */
+ gpphLibContext->LibNfcState.next_state =eLibNfcHalStateConfigReady;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+/**
+* Response callback for CE configurations.
+*/
+static void phLibNfc_Mgt_SetCE_A_14443_4_ConfigParams_Cb(void *context,
+ NFCSTATUS status)
+{
+ pphLibNfc_RspCb_t pClientCb=NULL;
+ void *pUpperLayerContext=NULL;
+ /* Check for the context returned by below layer */
+ if((phLibNfc_LibContext_t *)context != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion of this api allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else
+ {
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if(NFCSTATUS_SUCCESS != status)
+ {
+ status = NFCSTATUS_FAILED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /*update the current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ pClientCb = gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx = NULL;
+ if (NULL != pClientCb)
+ {
+ /* Notify to upper layer status of configure operation */
+ pClientCb(pUpperLayerContext, status);
+ }
+ }
+ return;
+}
+
+
+/* Transfer the user data to the another NfcIP device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_A_Receive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psRecvInfo,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pReceiveCallback)
+ ||( NULL == psRecvInfo))
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ /*Following condition gets satisfied only on target side,if receive
+ is not already called*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo= (pphHal4Nfc_TrcvCtxtInfo_t)
+ phOsalNfc_GetMemory((uint32_t)
+ (sizeof(phHal4Nfc_TrcvCtxtInfo_t)));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo,0,
+ sizeof(phHal4Nfc_TrcvCtxtInfo_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus = NFCSTATUS_PENDING;
+ }
+ }
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else /*Store callback & Return status pending*/
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pUpperTranceiveCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = (pphHal4Nfc_ReceiveCallback_t)pReceiveCallback;
+ if(NFCSTATUS_PENDING !=
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus)
+ {
+ /**Create a timer to send received data in the callback*/
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ == PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ PHDBG_INFO("HAL4: Transaction Timer Create for Receive");
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = phOsalNfc_Timer_Create();
+ }
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ == PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else/*start the timer*/
+ {
+ phOsalNfc_Timer_Start(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId,
+ PH_HAL4NFC_CE_RECV_CB_TIMEOUT,
+ phHal4Nfc_CE_RecvTimerCb,
+ NULL
+ );
+ }
+ }
+ }
+ }
+ else/*deactivated*/
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to transceive data from target to reader during CE communication
+*/
+NFCSTATUS
+phLibNfc_RemoteDev_CE_A_Transceive(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_TransceiveCallback_t pTransceive_RspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc stack is initilized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ /*Check application has sent the valid parameters*/
+ else if((NULL == pTransferData)
+ || (NULL == pTransceive_RspCb)
+ || (NULL == pTransferData->buffer)
+ || (0 == pTransferData->length)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or local device is Initiator
+ then don't allow */
+ RetVal = NFCSTATUS_REJECTED;
+ }
+ else if((NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb))
+ {
+ RetVal =NFCSTATUS_BUSY ;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ if(gpphLibContext->psTransInfo!=NULL)
+ {
+ (void)memset(gpphLibContext->psTransInfo,
+ 0,
+ sizeof(phLibNfc_sTransceiveInfo_t));
+
+ gpphLibContext->psTransInfo->addr =UNKNOWN_BLOCK_ADDRESS;
+ /*pointer to send data */
+ gpphLibContext->psTransInfo->sSendData.buffer =
+ pTransferData->buffer;
+ /*size of send data*/
+ gpphLibContext->psTransInfo->sSendData.length =
+ pTransferData->length;
+
+ /*Call Hal4 Send API and register callback with it*/
+ PHDBG_INFO("LibNfc:CE send In Progress");
+ RetVal= phHal4Nfc_CE_A_Transceive(
+ gpphLibContext->psHwReference,
+ &(gpphLibContext->sNfcIp_Context.TransactInfoRole),
+ gpphLibContext->psTransInfo->sSendData,
+ (pphHal4Nfc_TransceiveCallback_t) phLibNfc_RemoteDev_CE_A_Receive_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* Update next state to transaction */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb= (pphLibNfc_Receive_RspCb_t) pTransceive_RspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb= NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = pContext;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/* Transfer the user data to reader device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_A_Transceive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_TransceiveCallback_t pTransceiveCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pTransceiveCallback )
+ || (NULL == psTransferInfo)
+ )
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_FAILED);
+ }
+ /*Check Activated*/
+ else if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pUpperTranceiveCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = (pphHal4Nfc_ReceiveCallback_t)pTransceiveCallback;
+ PHDBG_INFO("NfcIP1 Send");
+ /*allocate buffer to store senddata received from upper layer*/
+ if (NULL == Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData = (phNfc_sData_t *)
+ phOsalNfc_GetMemory(sizeof(phNfc_sData_t));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData, 0,
+ sizeof(phNfc_sData_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->buffer
+ = sTransferData.buffer;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ = sTransferData.length;
+ /*If data size is less than MAX_SEND_LEN ,no chaining is required*/
+ Hal4Ctxt->psTrcvCtxtInfo->
+ XchangeInfo.params.nfc_info.more_info = FALSE;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length
+ = (uint8_t)sTransferData.length;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_buffer
+ = sTransferData.buffer;
+
+ PHDBG_INFO("HAL4:Calling Hci_Send_data()");
+
+ RetStatus = phHciNfc_CE_A_SendData (
+ (phHciNfc_sContext_t *)Hal4Ctxt->psHciHandle,
+ psHwReference,
+ &(Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo)
+ );
+
+ /*check return status*/
+ if (NFCSTATUS_PENDING == RetStatus)
+ {
+ /*Set P2P_Send_In_Progress to defer any disconnect call until
+ Send complete occurs*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = TRUE;
+ Hal4Ctxt->Hal4NextState = eHal4StateTransaction;
+ /*No of bytes remaining for next send*/
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ -= Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length;
+ }
+ }
+ else/*Deactivated*/
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to receive data from initiator at target side during P2P
+* communication.
+*/
+NFCSTATUS phLibNfc_RemoteDev_CE_A_Receive(
+ pphLibNfc_TransceiveCallback_t pReceiveRspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc is initialized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }/*Check application has sent valid parameters*/
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ else if((NULL == pReceiveRspCb)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or if initiator uses this api */
+ RetVal = NFCSTATUS_REJECTED;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ /*Call below layer receive and register the callback with it*/
+ PHDBG_INFO("LibNfc:CE Receive In Progress");
+ RetVal =phHal4Nfc_CE_A_Receive(
+ gpphLibContext->psHwReference,
+ (phHal4Nfc_TransactInfo_t*)gpphLibContext->psTransInfo,
+ (pphHal4Nfc_TransceiveCallback_t)phLibNfc_RemoteDev_CE_A_Receive_Cb,
+ (void *)gpphLibContext
+ );
+ }
+
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /*Update the Next state as Transaction*/
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb= (pphHal4Nfc_ReceiveCallback_t) pReceiveRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/**
+* Response callback for Remote Device Receive.
+*/
+static void phLibNfc_RemoteDev_CE_A_Receive_Cb(
+ void *context,
+ phHal_sRemoteDevInformation_t *ConnectedDevice,
+ phNfc_sData_t *rec_rsp_data,
+ NFCSTATUS status
+ )
+{
+ pphLibNfc_TransceiveCallback_t pClientCb=NULL;
+
+ phLibNfc_LibContext_t *pLibNfc_Ctxt = (phLibNfc_LibContext_t *)context;
+ void *pUpperLayerContext=NULL;
+
+ /* Check for the context returned by below layer */
+ if(pLibNfc_Ctxt != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ pClientCb = (pphLibNfc_TransceiveCallback_t) gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = NULL;
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion of P2P receive allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else if(eLibNfcHalStateRelease == gpphLibContext->LibNfcState.next_state)
+ {
+ status = NFCSTATUS_ABORTED;
+ }
+ else
+ {
+ if((NFCSTATUS_SUCCESS != status) &&
+ (PHNFCSTATUS(status) != NFCSTATUS_MORE_INFORMATION ) )
+ {
+ /*During CE receive operation initiator was removed
+ from RF field of target*/
+ status = NFCSTATUS_DESELECTED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /* Update current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ if (NULL != pClientCb)
+ {
+ /*Notify to upper layer status and No. of bytes
+ actually received */
+ pClientCb(pUpperLayerContext, (uint32_t)ConnectedDevice, rec_rsp_data, status);
+ }
+ }
+ return;
+}
+
+
+/* Transfer the user data to a reader device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_A_Send(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_SendCallback_t pSendCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pSendCallback )
+ || (NULL == psTransferInfo)
+ )
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_FAILED);
+ }
+ /*Check Activated*/
+ else if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = pSendCallback;
+ PHDBG_INFO("NfcIP1 Send");
+ /*allocate buffer to store senddata received from upper layer*/
+ if (NULL == Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData = (phNfc_sData_t *)
+ phOsalNfc_GetMemory(sizeof(phNfc_sData_t));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData, 0,
+ sizeof(phNfc_sData_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->buffer
+ = sTransferData.buffer;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ = sTransferData.length;
+ /*If data size is less than MAX_SEND_LEN ,no chaining is required*/
+ Hal4Ctxt->psTrcvCtxtInfo->
+ XchangeInfo.params.nfc_info.more_info = FALSE;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length
+ = (uint8_t)sTransferData.length;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_buffer
+ = sTransferData.buffer;
+
+ PHDBG_INFO("HAL4:Calling Hci_Send_data()");
+
+ RetStatus = phHciNfc_CE_A_SendData (
+ (phHciNfc_sContext_t *)Hal4Ctxt->psHciHandle,
+ psHwReference,
+ &(Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo)
+ );
+
+ /*check return status*/
+ if (NFCSTATUS_PENDING == RetStatus)
+ {
+ /*Set P2P_Send_In_Progress to defer any disconnect call until
+ Send complete occurs*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = TRUE;
+ Hal4Ctxt->Hal4NextState = eHal4StateTransaction;
+ /*No of bytes remaining for next send*/
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ -= Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length;
+ }
+ }
+ else/*Deactivated*/
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to send data from target to reader during CE communication
+*/
+NFCSTATUS
+phLibNfc_RemoteDev_CE_A_Send(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_RspCb_t pSendRspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc stack is initilized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ /*Check application has sent the valid parameters*/
+ else if((NULL == pTransferData)
+ || (NULL == pSendRspCb)
+ || (NULL == pTransferData->buffer)
+ || (0 == pTransferData->length)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or local device is Initiator
+ then don't allow */
+ RetVal = NFCSTATUS_REJECTED;
+ }/*Check for Discovered initiator handle and handle sent by application */
+ else if((NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb))
+ {
+ RetVal =NFCSTATUS_BUSY ;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ if(gpphLibContext->psTransInfo!=NULL)
+ {
+ (void)memset(gpphLibContext->psTransInfo,
+ 0,
+ sizeof(phLibNfc_sTransceiveInfo_t));
+
+ gpphLibContext->psTransInfo->addr =UNKNOWN_BLOCK_ADDRESS;
+ /*pointer to send data */
+ gpphLibContext->psTransInfo->sSendData.buffer =
+ pTransferData->buffer;
+ /*size of send data*/
+ gpphLibContext->psTransInfo->sSendData.length =
+ pTransferData->length;
+
+ /*Call Hal4 Send API and register callback with it*/
+ PHDBG_INFO("LibNfc:CE send In Progress");
+ RetVal= phHal4Nfc_CE_A_Send(
+ gpphLibContext->psHwReference,
+ &(gpphLibContext->sNfcIp_Context.TransactInfoRole),
+ gpphLibContext->psTransInfo->sSendData,
+ (pphLibNfc_RspCb_t)
+ phLibNfc_RemoteDev_CE_A_Send_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* Update next state to transaction */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb= pSendRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/*
+* Response callback for Remote Device Send.
+*/
+static void phLibNfc_RemoteDev_CE_A_Send_Cb(
+ void *Context,
+ NFCSTATUS status
+ )
+{
+ pphLibNfc_RspCb_t pClientCb=NULL;
+ phLibNfc_LibContext_t *pLibNfc_Ctxt = (phLibNfc_LibContext_t *)Context;
+ void *pUpperLayerContext=NULL;
+
+ /* Check for the context returned by below layer */
+ if(pLibNfc_Ctxt != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion p2p send allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else if(eLibNfcHalStateRelease == gpphLibContext->LibNfcState.next_state)
+ {
+ status = NFCSTATUS_ABORTED;
+ }
+ else
+ {
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if((NFCSTATUS_SUCCESS != status) &&
+ (PHNFCSTATUS(status) != NFCSTATUS_MORE_INFORMATION ) )
+ {
+ /*During p2p send operation initator was not present in RF
+ field of target*/
+ status = NFCSTATUS_DESELECTED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /* Update current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ pClientCb = gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = NULL;
+ if (NULL != pClientCb)
+ {
+ /* Notify to upper layer status and No. of bytes
+ actually written or send to initiator */
+ pClientCb(pUpperLayerContext, status);
+ }
+ }
+ return;
+}
+
+/**Send complete handler*/
+void phHal4Nfc_CE_A_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo)
+{
+ pphHal4Nfc_SendCallback_t pUpperSendCb = NULL;
+ NFCSTATUS SendStatus = ((phNfc_sCompletionInfo_t *)pInfo)->status;
+ pphHal4Nfc_DiscntCallback_t pUpperDisconnectCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = FALSE;
+
+ /*Send status Success or Pending disconnect in HAl4*/
+ if((SendStatus != NFCSTATUS_SUCCESS)
+ ||(NFC_INVALID_RELEASE_TYPE != Hal4Ctxt->sTgtConnectInfo.ReleaseType))
+ {
+ Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
+ /*Update Status*/
+ SendStatus = (NFCSTATUS)(NFC_INVALID_RELEASE_TYPE !=
+ Hal4Ctxt->sTgtConnectInfo.ReleaseType?NFCSTATUS_RELEASED:SendStatus);
+ /*Callback For Target Send*/
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb)
+ {
+ pUpperSendCb = Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = NULL;
+ (*pUpperSendCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ SendStatus
+ );
+ }
+ /*Issue Pending disconnect from HAl4*/
+ if(NFC_INVALID_RELEASE_TYPE != Hal4Ctxt->sTgtConnectInfo.ReleaseType)
+ {
+ SendStatus = phHal4Nfc_Disconnect_Execute(gpphHal4Nfc_Hwref);
+ if((NFCSTATUS_PENDING != SendStatus) &&
+ (NULL != Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb))
+ {
+ pUpperDisconnectCb =
+ Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb;
+ Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb = NULL;
+ (*pUpperDisconnectCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerDisconnectCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ SendStatus
+ );/*Notify disconnect failed to upper layer*/
+ }
+ }
+ }
+ else
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->NumberOfBytesSent = 0;
+ /*Callback For Target Send*/
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb)
+ {
+ pUpperSendCb = Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = NULL;
+ (*pUpperSendCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ SendStatus
+ );
+ }
+ }
+ return;
+}
#endif /* #if defined (HOST_EMULATION) */
diff --git a/src/phHciNfc_CE_A.h b/src/phHciNfc_CE_A.h
index aab5b24..da792e2 100644..100755
--- a/src/phHciNfc_CE_A.h
+++ b/src/phHciNfc_CE_A.h
@@ -83,7 +83,7 @@ typedef enum phHciNfc_CE_A_Seq{
HOST_CE_A_ATQA_SEQ,
HOST_CE_A_ENABLE_SEQ,
HOST_CE_A_DISABLE_SEQ,
- HOST_CE_A_PIPE_CLOSE,
+ HOST_CE_A_PIPE_CLOSE,
HOST_CE_A_PIPE_DELETE
}phHciNfc_CE_A_Seq_t;
@@ -95,7 +95,7 @@ typedef struct phHciNfc_CE_A_Info{
/* Pointer to the card emulation A pipe information */
phHciNfc_Pipe_Info_t *p_pipe_info;
uint8_t pipe_id;
-
+
} phHciNfc_CE_A_Info_t;
/*
@@ -107,7 +107,7 @@ typedef struct phHciNfc_CE_A_Info{
*
* This function Allocates the resources of the card emulation A management
* gate Information Structure.
- *
+ *
*/
extern
NFCSTATUS
@@ -118,7 +118,7 @@ phHciNfc_CE_A_Init_Resources(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_Get_PipeID function gives the pipe id of the card
+* The phHciNfc_CE_A_Get_PipeID function gives the pipe id of the card
* emulation A gate
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -141,13 +141,13 @@ phHciNfc_CE_A_Get_PipeID(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_Update_PipeInfo function updates the pipe_id of the card
+* The phHciNfc_CE_A_Update_PipeInfo function updates the pipe_id of the card
* emulation A gate management Structure.
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
* context Structure.
* \param[in] pipeID pipeID of the card emulation A gate
-* \param[in] pPipeInfo Update the pipe Information of the reader
+* \param[in] pPipeInfo Update the pipe Information of the reader
* A gate
*
* \retval NFCSTATUS_SUCCESS Function execution is successful.
@@ -167,35 +167,6 @@ phHciNfc_CE_A_Update_PipeInfo(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_SendData_Event function sends data to the lo
-*
-* \param[in] psHciContext psHciContext is the pointer to HCI Layer
-* context Structure.
-* \param[in] pHwRef pHwRef is the Information of
-* the Device Interface Link
-* \param[in] pipeID pipeID of the card emulation A gate
-* \param[in] pPipeInfo Update the pipe Information of the reader
-* A gate
-*
-* \retval NFCSTATUS_SUCCESS Function execution is successful.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
-* could not be interpreted properly.
-*
-*/
-#ifdef CE_A_SEND_EVENT
-extern
-NFCSTATUS
-phHciNfc_CE_A_SendData_Event(
- void *psContext,
- void *pHwRef,
- uint8_t *pEvent,
- uint8_t length
- );
-#endif /* #ifdef CE_A_SEND_EVENT */
-
-/**
-* \ingroup grp_hci_nfc
-*
* The phHciNfc_CE_A_Mode function sends data to the set the card emulation mode
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -220,7 +191,7 @@ phHciNfc_CE_A_Mode(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_Initialise function opens the CE A and set all the
+* The phHciNfc_CE_A_Initialise function opens the CE A and set all the
* required parameters for CE A
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -233,7 +204,7 @@ phHciNfc_CE_A_Mode(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_A_Initialise(
phHciNfc_sContext_t *psHciContext,
@@ -243,7 +214,7 @@ phHciNfc_CE_A_Initialise(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_Initialise function close the CE A and reset all the
+* The phHciNfc_CE_A_Initialise function close the CE A and reset all the
* required parameters to default value of CE A
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -256,7 +227,7 @@ phHciNfc_CE_A_Initialise(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_A_Release(
phHciNfc_sContext_t *psHciContext,
@@ -267,12 +238,12 @@ phHciNfc_CE_A_Release(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_A_Update_Seq function to update CE A sequence depending on the
+* The phHciNfc_CE_A_Update_Seq function to update CE A sequence depending on the
* specified \ref seq_type
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
* context Structure.
-* \param[in] seq_type sequence type specified in
+* \param[in] seq_type sequence type specified in
* \ref phHciNfc_eSeqType_t
*
* \retval NFCSTATUS_SUCCESS Function execution is successful.
@@ -280,7 +251,7 @@ phHciNfc_CE_A_Release(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_A_Update_Seq(
phHciNfc_sContext_t *psHciContext,
diff --git a/src/phHciNfc_CE_B.c b/src/phHciNfc_CE_B.c
index 4b985a3..6583160 100644..100755
--- a/src/phHciNfc_CE_B.c
+++ b/src/phHciNfc_CE_B.c
@@ -40,10 +40,16 @@
#include <phHciNfc_Pipe.h>
#include <phHciNfc_Emulation.h>
#include <phOsalNfc.h>
+#include <phLibNfc.h>
+#include <phLibNfc_Internal.h>
+#include <phHal4Nfc_Internal.h>
+#include <phHciNfc_NfcIPMgmt.h>
+#include <phHciNfc_Sequence.h>
/*
****************************** Macro Definitions *******************************
*/
#if defined (HOST_EMULATION)
+#include <phHciNfc_CE.h>
#include <phHciNfc_CE_B.h>
#define CE_B_EVT_NFC_SEND_DATA 0x10U
@@ -87,16 +93,34 @@ phHciNfc_Recv_CE_B_Response(
#endif
);
-#if defined (SEND_DATA_EVENT)
-static
-NFCSTATUS
-phHciNfc_CE_B_ProcessData(
- phHciNfc_sContext_t *psHciContext,
- void *pHwRef,
- uint8_t *pData,
- uint8_t length
- );
-#endif /* #if defined (SEND_DATA_EVENT) */
+/*Set CE config paramater response callback*/
+static
+ void phLibNfc_Mgt_SetCE_B_14443_4_ConfigParams_Cb(
+ void *context,
+ NFCSTATUS status
+ );
+
+
+/* Response callback for Remote Device Receive.*/
+static void phLibNfc_RemoteDev_CE_B_Receive_Cb(
+ void *context,
+ phHal_sRemoteDevInformation_t *ConnectedDevice,
+ phNfc_sData_t *rec_rsp_data,
+ NFCSTATUS status
+ );
+
+/*Response callback for Remote Device Send.*/
+static void phLibNfc_RemoteDev_CE_B_Send_Cb(
+ void *Context,
+ NFCSTATUS status
+ );
+
+static NFCSTATUS
+phHciNfc_CE_B_SendData (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ phHciNfc_XchgInfo_t *sData
+ );
/*
*************************** Function Definitions ***************************
@@ -129,7 +153,7 @@ phHciNfc_CE_B_Init_Resources(
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INSUFFICIENT_RESOURCES);
}
-
+
}
return status;
}
@@ -161,7 +185,7 @@ phHciNfc_CE_B_Initialise(
ps_pipe_info = ps_ce_b_info->p_pipe_info;
if(NULL == ps_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_INFORMATION);
}
else
@@ -169,14 +193,14 @@ phHciNfc_CE_B_Initialise(
switch(ps_ce_b_info->current_seq)
{
case HOST_CE_B_PIPE_OPEN:
- {
+ {
status = phHciNfc_Open_Pipe( psHciContext,
pHwRef, ps_pipe_info );
if(status == NFCSTATUS_SUCCESS)
{
#if defined (CE_B_CONTINUE_SEQ)
ps_ce_b_info->next_seq = HOST_CE_B_PUPI_SEQ;
-#else
+#else
ps_ce_b_info->next_seq = HOST_CE_B_ENABLE_SEQ;
#endif /* #if defined (CE_CONTINUE_SEQ) */
status = NFCSTATUS_PENDING;
@@ -184,13 +208,13 @@ phHciNfc_CE_B_Initialise(
break;
}
case HOST_CE_B_PUPI_SEQ:
- {
+ {
/* HOST Card Emulation B PUPI Configuration */
ps_pipe_info->reg_index = HOST_CE_B_ATQB_INDEX;
-
+
ps_pipe_info->param_info =(void*)&pupi ;
ps_pipe_info->param_length = sizeof(pupi) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_pipe_info->pipe.pipe_id,
(uint8_t)ANY_SET_PARAMETER);
if(status == NFCSTATUS_PENDING)
@@ -206,7 +230,7 @@ phHciNfc_CE_B_Initialise(
/* Configure the ATQA of Host Card Emulation B */
ps_pipe_info->param_info = (void*)atqb_info ;
ps_pipe_info->param_length = sizeof(atqb_info) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_pipe_info->pipe.pipe_id,
(uint8_t)ANY_SET_PARAMETER);
if(status == NFCSTATUS_PENDING)
@@ -261,7 +285,7 @@ phHciNfc_CE_B_Release(
ps_pipe_info = ps_ce_b_info->p_pipe_info;
if(NULL == ps_pipe_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_INFORMATION);
}
else
@@ -285,8 +309,9 @@ phHciNfc_CE_B_Release(
pHwRef, ps_pipe_info );
if(status == NFCSTATUS_SUCCESS)
{
- ps_ce_b_info->next_seq = HOST_CE_B_PIPE_DELETE;
- status = NFCSTATUS_PENDING;
+// ps_ce_b_info->next_seq = HOST_CE_B_PIPE_DELETE;
+// status = NFCSTATUS_PENDING;
+ ps_ce_b_info->next_seq = HOST_CE_B_PIPE_OPEN;
}
break;
}
@@ -347,11 +372,11 @@ phHciNfc_CE_B_Mode(
if (NULL != ps_pipe_info)
{
ps_pipe_info->reg_index = HOST_CE_B_MODE_INDEX;
- /* Enable/Disable Host Card Emulation A */
+ /* Enable/Disable Host Card Emulation B */
param = (uint8_t)enable_type;
ps_pipe_info->param_info =(void*)&param ;
ps_pipe_info->param_length = sizeof(param) ;
- status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
+ status = phHciNfc_Send_Generic_Cmd(psHciContext,pHwRef,
ps_ce_b_info->pipe_id,(uint8_t)ANY_SET_PARAMETER);
}
else
@@ -374,7 +399,7 @@ phHciNfc_CE_B_Get_PipeID(
if( (NULL != psHciContext)
&& ( NULL != ppipe_id )
- && ( NULL != psHciContext->p_ce_b_info )
+ && ( NULL != psHciContext->p_ce_b_info )
)
{
phHciNfc_CE_B_Info_t *ps_ce_b_info=NULL;
@@ -382,7 +407,7 @@ phHciNfc_CE_B_Get_PipeID(
psHciContext->p_ce_b_info ;
*ppipe_id = ps_ce_b_info->pipe_id ;
}
- else
+ else
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
}
@@ -422,7 +447,7 @@ phHciNfc_CE_B_Update_PipeInfo(
ps_ce_b_info->p_pipe_info = pPipeInfo;
if (NULL != pPipeInfo)
{
- /* Update the Response Receive routine of the card
+ /* Update the Response Receive routine of the card
emulation A Gate */
pPipeInfo->recv_resp = &phHciNfc_Recv_CE_B_Response;
/* Update the event Receive routine of the card emulation A Gate */
@@ -438,22 +463,6 @@ phHciNfc_CE_B_Update_PipeInfo(
return status;
}
-#ifdef CE_B_SEND_EVENT
-NFCSTATUS
-phHciNfc_CE_B_SendData_Event(
- void *psContext,
- void *pHwRef,
- uint8_t *pEvent,
- uint8_t length
- )
-{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
- (phHciNfc_sContext_t *)psContext ;
- return status;
-}
-#endif /* #ifdef CE_B_SEND_EVENT */
-
static
NFCSTATUS
phHciNfc_Recv_CE_B_Response(
@@ -468,7 +477,7 @@ phHciNfc_Recv_CE_B_Response(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pResponse)
|| (length == 0))
@@ -487,7 +496,7 @@ phHciNfc_Recv_CE_B_Response(
psHciContext->p_ce_b_info ;
if( NULL == ps_ce_b_info->p_pipe_info)
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_SEQUENCE);
}
else
@@ -499,7 +508,7 @@ phHciNfc_Recv_CE_B_Response(
{
#if 0
status = phHciNfc_CE_B_InfoUpdate(psHciContext,
- ps_ce_b_info->p_pipe_info->reg_index,
+ ps_ce_b_info->p_pipe_info->reg_index,
&pResponse[HCP_HEADER_LEN],
(length - HCP_HEADER_LEN));
#endif /* #if 0 */
@@ -517,19 +526,19 @@ phHciNfc_Recv_CE_B_Response(
}
case ANY_CLOSE_PIPE:
{
- HCI_PRINT("CE B close pipe complete\n");
+ HCI_PRINT("CE B close pipe complete\n");
break;
}
default:
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_RESPONSE);
break;
}
}
if( NFCSTATUS_SUCCESS == status )
{
- status = phHciNfc_CE_B_Update_Seq(psHciContext,
+ status = phHciNfc_CE_B_Update_Seq(psHciContext,
UPDATE_SEQ);
ps_ce_b_info->p_pipe_info->prev_status = NFCSTATUS_SUCCESS;
}
@@ -553,7 +562,7 @@ phHciNfc_CE_B_Update_Seq(
}
else if( NULL == psHciContext->p_ce_b_info )
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_FEATURE_NOT_SUPPORTED);
}
else
@@ -594,7 +603,7 @@ phHciNfc_CE_B_Update_Seq(
}
-static
+static
NFCSTATUS
phHciNfc_Recv_CE_B_Event(
void *psContext,
@@ -608,7 +617,7 @@ phHciNfc_Recv_CE_B_Event(
)
{
NFCSTATUS status = NFCSTATUS_SUCCESS;
- phHciNfc_sContext_t *psHciContext =
+ phHciNfc_sContext_t *psHciContext =
(phHciNfc_sContext_t *)psContext ;
if( (NULL == psHciContext) || (NULL == pHwRef) || (NULL == pEvent)
|| (length == 0))
@@ -621,10 +630,15 @@ phHciNfc_Recv_CE_B_Event(
}
else
{
+ phHciNfc_NfcIP_Info_t *p_nfcipinfo= (phHciNfc_NfcIP_Info_t *) psHciContext->p_nfcip_info ;
+ p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = phHal_eISO14443_B_PCD;
phHciNfc_HCP_Packet_t *p_packet = NULL;
phHciNfc_CE_B_Info_t *ps_ce_b_info=NULL;
phHciNfc_HCP_Message_t *message = NULL;
static phHal_sEventInfo_t event_info;
+ static phNfc_sTransactionInfo_t trans_info;
+ void * pInfo = &event_info;
+ uint8_t evt = NFC_NOTIFY_EVENT;
uint8_t instruction=0;
ps_ce_b_info = (phHciNfc_CE_B_Info_t *)
@@ -637,15 +651,18 @@ phHciNfc_Recv_CE_B_Event(
message = &p_packet->msg.message;
/* Get the instruction bits from the Message Header */
instruction = (uint8_t) GET_BITS8( message->msg_header,
- HCP_MSG_INSTRUCTION_OFFSET,
+ HCP_MSG_INSTRUCTION_OFFSET,
HCP_MSG_INSTRUCTION_LEN);
psHciContext->host_rf_type = phHal_eISO14443_B_PICC;
event_info.eventHost = phHal_eHostController;
event_info.eventSource = phHal_eISO14443_B_PICC;
+ event_info.eventInfo.pRemoteDevInfo = &(p_nfcipinfo->rem_nfcip_tgt_info);
switch(instruction)
- {
+ {
case CE_B_EVT_NFC_ACTIVATED:
{
+ psHciContext->hci_state.cur_state = hciState_Listen;
+ psHciContext->hci_state.next_state = hciState_Unknown;
event_info.eventType = NFC_EVT_ACTIVATED;
/* Notify to the HCI Generic layer To Update the FSM */
break;
@@ -658,27 +675,29 @@ phHciNfc_Recv_CE_B_Event(
}
case CE_B_EVT_NFC_SEND_DATA:
{
-#if defined (SEND_DATA_EVENT)
HCI_PRINT("CE B data is received from the PN544\n");
if(length > HCP_HEADER_LEN)
{
- status = phHciNfc_CE_B_ProcessData(
- psHciContext, pHwRef,
- &pEvent[HCP_HEADER_LEN],
- (length - HCP_HEADER_LEN));
+ event_info.eventType = NFC_EVT_APDU_RECEIVED;
+ trans_info.status = status;
+ trans_info.type = NFC_NOTIFY_CE_B_RECV_EVENT;
+ trans_info.length = length - HCP_HEADER_LEN - 1;
+ trans_info.buffer = &pEvent[HCP_HEADER_LEN];
+ trans_info.info = &event_info;
+ pInfo = &trans_info;
+ evt = NFC_NOTIFY_CE_B_RECV_EVENT;
}
else
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_RESPONSE);
}
-#endif /* #if defined (SEND_DATA_EVENT) */
break;
}
case CE_B_EVT_NFC_FIELD_ON:
{
HCI_PRINT("CE B field on\n");
- event_info.eventType = NFC_EVT_FIELD_ON;
+ event_info.eventType = NFC_EVT_FIELD_ON;
break;
}
case CE_B_EVT_NFC_FIELD_OFF:
@@ -689,41 +708,1120 @@ phHciNfc_Recv_CE_B_Event(
}
default:
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_HCI_INSTRUCTION);
break;
}
}
if(NFCSTATUS_SUCCESS == status)
{
- phHciNfc_Notify_Event(psHciContext, pHwRef,
- NFC_NOTIFY_EVENT,
- &event_info);
+ phHciNfc_Notify_Event(psHciContext, pHwRef,
+ evt,
+ pInfo);
}
}
return status;
}
-#if defined (SEND_DATA_EVENT)
-static
NFCSTATUS
-phHciNfc_CE_B_ProcessData(
- phHciNfc_sContext_t *psHciContext,
- void *pHwRef,
- uint8_t *pData,
- uint8_t length
- )
+phHciNfc_CE_B_SendData (
+ phHciNfc_sContext_t *psHciContext,
+ void *pHwRef,
+ phHciNfc_XchgInfo_t *sData
+ )
{
- NFCSTATUS status = NFCSTATUS_SUCCESS;
+ NFCSTATUS status = NFCSTATUS_SUCCESS;
- static uint8_t send_data[] = {0x6D, 0x80};
- status = phHciNfc_CE_B_SendData_Event(
- (void *)psHciContext, pHwRef,
- send_data, sizeof(send_data));
+ if( (NULL == psHciContext) || (NULL == pHwRef) ||
+ (NULL == sData) || (0 == sData->tx_length) || (CE_MAX_SEND_BUFFER_LEN < sData->tx_length))
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
+ }
+ else if(NULL == psHciContext->p_ce_b_info)
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_FEATURE_NOT_SUPPORTED);
+ }
+ else
+ {
+ phHciNfc_CE_B_Info_t *ps_ce_b_info = (phHciNfc_CE_B_Info_t *)
+ psHciContext->p_ce_b_info ;
+ phHciNfc_Pipe_Info_t *p_pipe_info = ps_ce_b_info->p_pipe_info;
+
+ if(NULL == p_pipe_info )
+ {
+ status = PHNFCSTVAL(CID_NFC_HCI,
+ NFCSTATUS_INVALID_HCI_INFORMATION);
+ }
+ else
+ {
+ if (NFCSTATUS_SUCCESS == status)
+ {
+ phHciNfc_HCP_Packet_t *hcp_packet = NULL;
+ phHciNfc_HCP_Message_t *hcp_message = NULL;
+ uint16_t length = HCP_HEADER_LEN;
+ uint8_t pipeid = 0,
+ i = 0;
+
+ HCI_PRINT_BUFFER("HCI CE Send Data: ", sData->tx_buffer, sData->tx_length);
+
+ psHciContext->tx_total = 0 ;
+ pipeid = p_pipe_info->pipe.pipe_id;
+ hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
+ hcp_message = &(hcp_packet->msg.message);
+
+ /* Construct the HCP Frame */
+ phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
+ (uint8_t) pipeid, (uint8_t)HCP_MSG_TYPE_EVENT,
+ (uint8_t)CE_B_EVT_NFC_SEND_DATA);
+
+ phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
+ i, sData->tx_buffer,
+ sData->tx_length);
+
+ length =(uint16_t)(length + i + sData->tx_length);
+
+ p_pipe_info->sent_msg_type = (uint8_t)HCP_MSG_TYPE_EVENT;
+ p_pipe_info->prev_msg = CE_B_EVT_NFC_SEND_DATA;
+ psHciContext->tx_total = length;
+ /* Send the Constructed HCP packet to the lower layer */
+ status = phHciNfc_Send_HCP( psHciContext, pHwRef);
+ p_pipe_info->prev_status = status;
+ }
+ }
+ }
return status;
}
-#endif /* #if defined (SEND_DATA_EVENT) */
+/**Receive complete handler*/
+void phHal4Nfc_CE_B_RecvCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo)
+{
+ pphHal4Nfc_TransceiveCallback_t pUpperRecvCb = NULL;
+ NFCSTATUS RecvStatus = ((phNfc_sTransactionInfo_t *)pInfo)->status;
+ /*allocate TrcvContext if not already allocated.Required since
+ Receive complete can occur before any other send /receive calls.*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo= (pphHal4Nfc_TrcvCtxtInfo_t)
+ phOsalNfc_GetMemory((uint32_t)
+ (sizeof(phHal4Nfc_TrcvCtxtInfo_t)));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo,0,
+ sizeof(phHal4Nfc_TrcvCtxtInfo_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus
+ = NFCSTATUS_PENDING;
+ }
+ }
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ RecvStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else
+ {
+ /*Allocate 4K buffer to copy the received data into*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer
+ = (uint8_t *)phOsalNfc_GetMemory(
+ PH_HAL4NFC_MAX_RECEIVE_BUFFER
+ );
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,
+ 0);
+ RecvStatus = NFCSTATUS_INSUFFICIENT_RESOURCES;
+ }
+ else /*memset*/
+ {
+ (void)memset(
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer,
+ 0,
+ PH_HAL4NFC_MAX_RECEIVE_BUFFER
+ );
+ }
+ }
+
+ if(RecvStatus != NFCSTATUS_INSUFFICIENT_RESOURCES)
+ {
+ /*Copy the data*/
+ (void)memcpy(
+ (Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.buffer
+ + Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength),
+ ((phNfc_sTransactionInfo_t *)pInfo)->buffer,
+ ((phNfc_sTransactionInfo_t *)pInfo)->length
+ );
+ /*Update P2PRecvLength,this also acts as the offset to append more
+ received bytes*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength
+ += ((phNfc_sTransactionInfo_t *)pInfo)->length;
+ Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData.length
+ = Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength;
+ }
+
+ if(RecvStatus != NFCSTATUS_MORE_INFORMATION)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->P2PRecvLength = 0;
+ Hal4Ctxt->Hal4NextState = (eHal4StateTransaction
+ == Hal4Ctxt->Hal4NextState?eHal4StateInvalid:Hal4Ctxt->Hal4NextState);
+ if(NFCSTATUS_PENDING == Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus)
+ {
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb)
+ {
+ pUpperRecvCb = (pphHal4Nfc_TransceiveCallback_t)Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData
+ = &(Hal4Ctxt->psTrcvCtxtInfo->sLowerRecvData);
+ (*pUpperRecvCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperRecvData,
+ RecvStatus
+ );
+ }
+ else
+ {
+ /*Receive data buffer is complete with data & P2P receive has
+ not yet been called*/
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus
+ = NFCSTATUS_SUCCESS;
+ }
+ }
+ }
+ }
+ return;
+}
+
+/**
+* unblock any pending callback functions.
+*/
+NFCSTATUS
+phLibNfc_Mgt_Unblock_Cb_CE_B_14443_4( )
+{
+ NFCSTATUS RetVal = NFCSTATUS_NOT_INITIALISED;
+ if(gpphLibContext!=NULL && (gpphLibContext->psHwReference)!=NULL && (gpphLibContext->psHwReference->hal_context)!=NULL)
+ {
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ Hal4Ctxt = gpphLibContext->psHwReference->hal_context;
+ if(Hal4Ctxt->rem_dev_list[0]!=NULL &&
+ Hal4Ctxt->rem_dev_list[0]->SessionOpened==TRUE &&
+ Hal4Ctxt->rem_dev_list[0]->RemDevType == phNfc_eISO14443_B_PCD
+ )
+ {
+ phHciNfc_sContext_t *psHciContext = ((phHciNfc_sContext_t *)(Hal4Ctxt->psHciHandle));
+ phHciNfc_NfcIP_Info_t *p_nfcipinfo= (phHciNfc_NfcIP_Info_t *) psHciContext->p_nfcip_info ;
+ p_nfcipinfo->rem_nfcip_tgt_info.RemDevType = phHal_eISO14443_B_PCD;
+ phHciNfc_CE_B_Info_t *ps_ce_b_info=NULL;
+ static phHal_sEventInfo_t event_info;
+ void * pInfo = &event_info;
+
+ ps_ce_b_info = (phHciNfc_CE_B_Info_t *)psHciContext->p_ce_b_info ;
+
+ /* Variable was set but never used (ARM warning) */
+ PHNFC_UNUSED_VARIABLE(ps_ce_b_info);
+
+ psHciContext->host_rf_type = phHal_eISO14443_B_PICC;
+ event_info.eventHost = phHal_eHostController;
+ event_info.eventSource = phHal_eISO14443_B_PICC;
+ event_info.eventInfo.pRemoteDevInfo = &(p_nfcipinfo->rem_nfcip_tgt_info);
+ event_info.eventType = NFC_EVT_DEACTIVATED;
+ phHciNfc_Notify_Event(psHciContext, gpphLibContext->psHwReference,
+ NFC_NOTIFY_EVENT,
+ pInfo);
+ RetVal = NFCSTATUS_SUCCESS;
+ }
+ }
+ return RetVal;
+}
+
+
+/**
+* Interface to configure Card Emulation configurations.
+*/
+NFCSTATUS
+phLibNfc_Mgt_SetCE_B_14443_4_ConfigParams(
+ uint8_t emulate,
+ pphLibNfc_RspCb_t pConfigRspCb,
+ void* pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /* LibNfc Initialized or not */
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }/* Check for valid parameters */
+ else if((NULL == pConfigRspCb)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if(TRUE == gpphLibContext->status.GenCb_pending_status)
+ { /*Previous callback is pending */
+ RetVal = NFCSTATUS_BUSY;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk !=
+ gpphLibContext->LibNfcState.next_state)
+ {
+ phHal_uConfig_t uConfig;
+ uConfig.emuConfig.emuType = NFC_HOST_CE_B_EMULATION;
+ uConfig.emuConfig.config.hostEmuCfg_B.enableEmulation = emulate;
+ if(emulate==FALSE)
+ {
+ //de-activate any pending commands
+ phLibNfc_Mgt_Unblock_Cb_CE_B_14443_4();
+ }
+ RetVal = phHal4Nfc_ConfigParameters(
+ gpphLibContext->psHwReference,
+ NFC_EMULATION_CONFIG,
+ &uConfig,
+ phLibNfc_Mgt_SetCE_B_14443_4_ConfigParams_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ else
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb= NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* save the context and callback for later use */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb = pConfigRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ /* Next state is configured */
+ gpphLibContext->LibNfcState.next_state =eLibNfcHalStateConfigReady;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+/**
+* Response callback for CE configurations.
+*/
+static void phLibNfc_Mgt_SetCE_B_14443_4_ConfigParams_Cb(void *context,
+ NFCSTATUS status)
+{
+ pphLibNfc_RspCb_t pClientCb=NULL;
+ void *pUpperLayerContext=NULL;
+ /* Check for the context returned by below layer */
+ if((phLibNfc_LibContext_t *)context != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion of this api allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else
+ {
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if(NFCSTATUS_SUCCESS != status)
+ {
+ status = NFCSTATUS_FAILED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /*update the current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ pClientCb = gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx = NULL;
+ if (NULL != pClientCb)
+ {
+ /* Notify to upper layer status of configure operation */
+ pClientCb(pUpperLayerContext, status);
+ }
+ }
+ return;
+}
+
+
+/* Transfer the user data to the another NfcIP device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_B_Receive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psRecvInfo,
+ pphHal4Nfc_TransceiveCallback_t pReceiveCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pReceiveCallback)
+ ||( NULL == psRecvInfo))
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ /*Following condition gets satisfied only on target side,if receive
+ is not already called*/
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo= (pphHal4Nfc_TrcvCtxtInfo_t)
+ phOsalNfc_GetMemory((uint32_t)
+ (sizeof(phHal4Nfc_TrcvCtxtInfo_t)));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo,0,
+ sizeof(phHal4Nfc_TrcvCtxtInfo_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus = NFCSTATUS_PENDING;
+ }
+ }
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_NoMemory,0);
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else /*Store callback & Return status pending*/
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pUpperTranceiveCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = (pphHal4Nfc_ReceiveCallback_t)pReceiveCallback;
+ if(NFCSTATUS_PENDING !=
+ Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus)
+ {
+ /**Create a timer to send received data in the callback*/
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ == PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ PHDBG_INFO("HAL4: Transaction Timer Create for Receive");
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = phOsalNfc_Timer_Create();
+ }
+ if(Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ == PH_OSALNFC_INVALID_TIMER_ID)
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,
+ NFCSTATUS_INSUFFICIENT_RESOURCES);
+ }
+ else/*start the timer*/
+ {
+ phOsalNfc_Timer_Start(
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId,
+ PH_HAL4NFC_CE_RECV_CB_TIMEOUT,
+ phHal4Nfc_CE_RecvTimerCb,
+ NULL
+ );
+ }
+ }
+ }
+ }
+ else/*deactivated*/
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to transceive data from target to reader during CE communication
+*/
+NFCSTATUS
+phLibNfc_RemoteDev_CE_B_Transceive(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_TransceiveCallback_t pTransceive_RspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc stack is initilized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ /*Check application has sent the valid parameters*/
+ else if((NULL == pTransferData)
+ || (NULL == pTransceive_RspCb)
+ || (NULL == pTransferData->buffer)
+ || (0 == pTransferData->length)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or local device is Initiator
+ then don't allow */
+ RetVal = NFCSTATUS_REJECTED;
+ }
+ else if((NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb))
+ {
+ RetVal =NFCSTATUS_BUSY ;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ if(gpphLibContext->psTransInfo!=NULL)
+ {
+ (void)memset(gpphLibContext->psTransInfo,
+ 0,
+ sizeof(phLibNfc_sTransceiveInfo_t));
+
+ gpphLibContext->psTransInfo->addr =UNKNOWN_BLOCK_ADDRESS;
+ /*pointer to send data */
+ gpphLibContext->psTransInfo->sSendData.buffer =
+ pTransferData->buffer;
+ /*size of send data*/
+ gpphLibContext->psTransInfo->sSendData.length =
+ pTransferData->length;
+
+ /*Call Hal4 Send API and register callback with it*/
+ PHDBG_INFO("LibNfc:CE send In Progress");
+ RetVal= phHal4Nfc_CE_B_Transceive(
+ gpphLibContext->psHwReference,
+ &(gpphLibContext->sNfcIp_Context.TransactInfoRole),
+ gpphLibContext->psTransInfo->sSendData,
+ (pphHal4Nfc_TransceiveCallback_t) phLibNfc_RemoteDev_CE_B_Receive_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* Update next state to transaction */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb= (pphLibNfc_Receive_RspCb_t) pTransceive_RspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb= NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = pContext;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/* Transfer the user data to reader device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_B_Transceive(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_TransceiveCallback_t pTransceiveCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pTransceiveCallback )
+ || (NULL == psTransferInfo)
+ )
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_FAILED);
+ }
+ /*Check Activated*/
+ else if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pUpperTranceiveCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PRecvCb = (pphHal4Nfc_ReceiveCallback_t)pTransceiveCallback;
+ PHDBG_INFO("NfcIP1 Send");
+ /*allocate buffer to store senddata received from upper layer*/
+ if (NULL == Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData = (phNfc_sData_t *)
+ phOsalNfc_GetMemory(sizeof(phNfc_sData_t));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData, 0,
+ sizeof(phNfc_sData_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->buffer
+ = sTransferData.buffer;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ = sTransferData.length;
+ /*If data size is less than MAX_SEND_LEN ,no chaining is required*/
+ Hal4Ctxt->psTrcvCtxtInfo->
+ XchangeInfo.params.nfc_info.more_info = FALSE;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length
+ = (uint8_t)sTransferData.length;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_buffer
+ = sTransferData.buffer;
+
+ PHDBG_INFO("HAL4:Calling Hci_Send_data()");
+
+ RetStatus = phHciNfc_CE_B_SendData (
+ (phHciNfc_sContext_t *)Hal4Ctxt->psHciHandle,
+ psHwReference,
+ &(Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo)
+ );
+
+ /*check return status*/
+ if (NFCSTATUS_PENDING == RetStatus)
+ {
+ /*Set P2P_Send_In_Progress to defer any disconnect call until
+ Send complete occurs*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = TRUE;
+ Hal4Ctxt->Hal4NextState = eHal4StateTransaction;
+ /*No of bytes remaining for next send*/
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ -= Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length;
+ }
+ }
+ else/*Deactivated*/
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to receive data from initiator at target side during P2P
+* communication.
+*/
+NFCSTATUS phLibNfc_RemoteDev_CE_B_Receive(
+ pphLibNfc_TransceiveCallback_t pReceiveRspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc is initialized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }/*Check application has sent valid parameters*/
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ else if((NULL == pReceiveRspCb)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or if initiator uses this api */
+ RetVal = NFCSTATUS_REJECTED;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ /*Call below layer receive and register the callback with it*/
+ PHDBG_INFO("LibNfc:CE Receive In Progress");
+ RetVal =phHal4Nfc_CE_B_Receive(
+ gpphLibContext->psHwReference,
+ (phHal4Nfc_TransactInfo_t*)gpphLibContext->psTransInfo,
+ (pphHal4Nfc_TransceiveCallback_t)phLibNfc_RemoteDev_CE_B_Receive_Cb,
+ (void *)gpphLibContext
+ );
+ }
+
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /*Update the Next state as Transaction*/
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb= (pphHal4Nfc_ReceiveCallback_t) pReceiveRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/**
+* Response callback for Remote Device Receive.
+*/
+static void phLibNfc_RemoteDev_CE_B_Receive_Cb(
+ void *context,
+ phHal_sRemoteDevInformation_t *ConnectedDevice,
+ phNfc_sData_t *rec_rsp_data,
+ NFCSTATUS status
+ )
+{
+ pphLibNfc_TransceiveCallback_t pClientCb=NULL;
+
+ phLibNfc_LibContext_t *pLibNfc_Ctxt = (phLibNfc_LibContext_t *)context;
+ void *pUpperLayerContext=NULL;
+
+ /* Check for the context returned by below layer */
+ if(pLibNfc_Ctxt != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ pClientCb = (pphLibNfc_TransceiveCallback_t) gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpRxCntx = NULL;
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion of P2P receive allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else if(eLibNfcHalStateRelease == gpphLibContext->LibNfcState.next_state)
+ {
+ status = NFCSTATUS_ABORTED;
+ }
+ else
+ {
+ if((NFCSTATUS_SUCCESS != status) &&
+ (PHNFCSTATUS(status) != NFCSTATUS_MORE_INFORMATION ) )
+ {
+ /*During CE receive operation initiator was removed
+ from RF field of target*/
+ status = NFCSTATUS_DESELECTED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /* Update current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ if (NULL != pClientCb)
+ {
+ /*Notify to upper layer status and No. of bytes
+ actually received */
+ pClientCb(pUpperLayerContext, (uint32_t)ConnectedDevice, rec_rsp_data, status);
+ }
+ }
+ return;
+}
+
+
+/* Transfer the user data to a reader device from the host.
+ * pTransferCallback is called, when all steps in the transfer sequence are
+ * completed.*/
+NFCSTATUS
+phHal4Nfc_CE_B_Send(
+ phHal_sHwReference_t *psHwReference,
+ phHal4Nfc_TransactInfo_t *psTransferInfo,
+ phNfc_sData_t sTransferData,
+ pphHal4Nfc_SendCallback_t pSendCallback,
+ void *pContext
+ )
+{
+ NFCSTATUS RetStatus = NFCSTATUS_PENDING;
+ phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt = NULL;
+ /*NULL checks*/
+ if((NULL == psHwReference)
+ ||( NULL == pSendCallback )
+ || (NULL == psTransferInfo)
+ )
+ {
+ phOsalNfc_RaiseException(phOsalNfc_e_PrecondFailed,1);
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_INVALID_PARAMETER);
+ }
+ /*Check initialised state*/
+ else if((NULL == psHwReference->hal_context)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4CurrentState
+ < eHal4StateOpenAndReady)
+ || (((phHal4Nfc_Hal4Ctxt_t *)
+ psHwReference->hal_context)->Hal4NextState
+ == eHal4StateClosed))
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_NOT_INITIALISED);
+ }
+ else
+ {
+ Hal4Ctxt = (phHal4Nfc_Hal4Ctxt_t *)psHwReference->hal_context;
+ if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
+ {
+ RetStatus= PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_FAILED);
+ }
+ /*Check Activated*/
+ else if(NFC_EVT_ACTIVATED == Hal4Ctxt->sTgtConnectInfo.EmulationState)
+ {
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt = pContext;
+ /*Register upper layer callback*/
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = pSendCallback;
+ PHDBG_INFO("NfcIP1 Send");
+ /*allocate buffer to store senddata received from upper layer*/
+ if (NULL == Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData = (phNfc_sData_t *)
+ phOsalNfc_GetMemory(sizeof(phNfc_sData_t));
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData)
+ {
+ (void)memset(Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData, 0,
+ sizeof(phNfc_sData_t));
+ Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
+ = PH_OSALNFC_INVALID_TIMER_ID;
+ }
+ }
+
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->buffer
+ = sTransferData.buffer;
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ = sTransferData.length;
+ /*If data size is less than MAX_SEND_LEN ,no chaining is required*/
+ Hal4Ctxt->psTrcvCtxtInfo->
+ XchangeInfo.params.nfc_info.more_info = FALSE;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length
+ = (uint8_t)sTransferData.length;
+ Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_buffer
+ = sTransferData.buffer;
+
+ PHDBG_INFO("HAL4:Calling Hci_Send_data()");
+
+ RetStatus = phHciNfc_CE_B_SendData (
+ (phHciNfc_sContext_t *)Hal4Ctxt->psHciHandle,
+ psHwReference,
+ &(Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo)
+ );
+
+ /*check return status*/
+ if (NFCSTATUS_PENDING == RetStatus)
+ {
+ /*Set P2P_Send_In_Progress to defer any disconnect call until
+ Send complete occurs*/
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = TRUE;
+ Hal4Ctxt->Hal4NextState = eHal4StateTransaction;
+ /*No of bytes remaining for next send*/
+ Hal4Ctxt->psTrcvCtxtInfo->psUpperSendData->length
+ -= Hal4Ctxt->psTrcvCtxtInfo->XchangeInfo.tx_length;
+ }
+ }
+ else/*Deactivated*/
+ {
+ RetStatus = PHNFCSTVAL(CID_NFC_HAL ,NFCSTATUS_DESELECTED);
+ }
+ }
+ return RetStatus;
+}
+
+/**
+* Interface used to send data from target to reader during CE communication
+*/
+NFCSTATUS
+phLibNfc_RemoteDev_CE_B_Send(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_RspCb_t pSendRspCb,
+ void *pContext
+ )
+{
+ NFCSTATUS RetVal = NFCSTATUS_FAILED;
+ /*Check Lib Nfc stack is initilized*/
+ if((NULL == gpphLibContext)||
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ {
+ RetVal = NFCSTATUS_NOT_INITIALISED;
+ }
+ else if (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateRelease)
+ {
+ RetVal = NFCSTATUS_DESELECTED;
+ }
+ /*Check application has sent the valid parameters*/
+ else if((NULL == pTransferData)
+ || (NULL == pSendRspCb)
+ || (NULL == pTransferData->buffer)
+ || (0 == pTransferData->length)
+ || (NULL == pContext))
+ {
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
+ }
+ else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
+ {
+ RetVal = NFCSTATUS_SHUTDOWN;
+ }
+ else if((TRUE == gpphLibContext->status.GenCb_pending_status)
+ ||(NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpRxCb))
+ {
+ /*Previous callback is pending or local device is Initiator
+ then don't allow */
+ RetVal = NFCSTATUS_REJECTED;
+ }/*Check for Discovered initiator handle and handle sent by application */
+ else if((NULL!=gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb))
+ {
+ RetVal =NFCSTATUS_BUSY ;
+ }
+ else
+ {
+ if(eLibNfcHalStatePresenceChk ==
+ gpphLibContext->LibNfcState.next_state)
+ {
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ RetVal = NFCSTATUS_PENDING;
+ }
+ else
+ {
+ if(gpphLibContext->psTransInfo!=NULL)
+ {
+ (void)memset(gpphLibContext->psTransInfo,
+ 0,
+ sizeof(phLibNfc_sTransceiveInfo_t));
+
+ gpphLibContext->psTransInfo->addr =UNKNOWN_BLOCK_ADDRESS;
+ /*pointer to send data */
+ gpphLibContext->psTransInfo->sSendData.buffer =
+ pTransferData->buffer;
+ /*size of send data*/
+ gpphLibContext->psTransInfo->sSendData.length =
+ pTransferData->length;
+
+ /*Call Hal4 Send API and register callback with it*/
+ PHDBG_INFO("LibNfc:CE send In Progress");
+ RetVal= phHal4Nfc_CE_B_Send(
+ gpphLibContext->psHwReference,
+ &(gpphLibContext->sNfcIp_Context.TransactInfoRole),
+ gpphLibContext->psTransInfo->sSendData,
+ (pphLibNfc_RspCb_t)
+ phLibNfc_RemoteDev_CE_B_Send_Cb,
+ (void *)gpphLibContext
+ );
+ }
+ }
+ if(NFCSTATUS_PENDING == RetVal)
+ {
+ /* Update next state to transaction */
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb= pSendRspCb;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = pContext;
+ gpphLibContext->status.GenCb_pending_status=TRUE;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
+ }
+ else
+ {
+ RetVal = NFCSTATUS_FAILED;
+ }
+ }
+ return RetVal;
+}
+
+/*
+* Response callback for Remote Device Send.
+*/
+static void phLibNfc_RemoteDev_CE_B_Send_Cb(
+ void *Context,
+ NFCSTATUS status
+ )
+{
+ pphLibNfc_RspCb_t pClientCb=NULL;
+ phLibNfc_LibContext_t *pLibNfc_Ctxt = (phLibNfc_LibContext_t *)Context;
+ void *pUpperLayerContext=NULL;
+
+ /* Check for the context returned by below layer */
+ if(pLibNfc_Ctxt != gpphLibContext)
+ { /*wrong context returned*/
+ phOsalNfc_RaiseException(phOsalNfc_e_InternalErr,1);
+ }
+ else
+ {
+ if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
+ { /*shutdown called before completion p2p send allow
+ shutdown to happen */
+ phLibNfc_Pending_Shutdown();
+ status = NFCSTATUS_SHUTDOWN;
+ }
+ else if(eLibNfcHalStateRelease == gpphLibContext->LibNfcState.next_state)
+ {
+ status = NFCSTATUS_ABORTED;
+ }
+ else
+ {
+ gpphLibContext->status.GenCb_pending_status = FALSE;
+ if((NFCSTATUS_SUCCESS != status) &&
+ (PHNFCSTATUS(status) != NFCSTATUS_MORE_INFORMATION ) )
+ {
+ /*During p2p send operation initator was not present in RF
+ field of target*/
+ status = NFCSTATUS_DESELECTED;
+ }
+ else
+ {
+ status = NFCSTATUS_SUCCESS;
+ }
+ }
+ /* Update current state */
+ phLibNfc_UpdateCurState(status,gpphLibContext);
+
+ pClientCb = gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb;
+ pUpperLayerContext = gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx;
+
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCb = NULL;
+ gpphLibContext->sNfcIp_Context.pClientNfcIpTxCntx = NULL;
+ if (NULL != pClientCb)
+ {
+ /* Notify to upper layer status and No. of bytes
+ actually written or send to initiator */
+ pClientCb(pUpperLayerContext, status);
+ }
+ }
+ return;
+}
+
+/**Send complete handler*/
+void phHal4Nfc_CE_B_SendCompleteHandler(phHal4Nfc_Hal4Ctxt_t *Hal4Ctxt,void *pInfo)
+{
+ pphHal4Nfc_SendCallback_t pUpperSendCb = NULL;
+ NFCSTATUS SendStatus = ((phNfc_sCompletionInfo_t *)pInfo)->status;
+ pphHal4Nfc_DiscntCallback_t pUpperDisconnectCb = NULL;
+ Hal4Ctxt->psTrcvCtxtInfo->P2P_Send_In_Progress = FALSE;
+
+ /*Send status Success or Pending disconnect in HAl4*/
+ if((SendStatus != NFCSTATUS_SUCCESS)
+ ||(NFC_INVALID_RELEASE_TYPE != Hal4Ctxt->sTgtConnectInfo.ReleaseType))
+ {
+ Hal4Ctxt->Hal4NextState = eHal4StateInvalid;
+ /*Update Status*/
+ SendStatus = (NFCSTATUS)(NFC_INVALID_RELEASE_TYPE !=
+ Hal4Ctxt->sTgtConnectInfo.ReleaseType?NFCSTATUS_RELEASED:SendStatus);
+ /*Callback For Target Send*/
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb)
+ {
+ pUpperSendCb = Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = NULL;
+ (*pUpperSendCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ SendStatus
+ );
+ }
+ /*Issue Pending disconnect from HAl4*/
+ if(NFC_INVALID_RELEASE_TYPE != Hal4Ctxt->sTgtConnectInfo.ReleaseType)
+ {
+ SendStatus = phHal4Nfc_Disconnect_Execute(gpphHal4Nfc_Hwref);
+ if((NFCSTATUS_PENDING != SendStatus) &&
+ (NULL != Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb))
+ {
+ pUpperDisconnectCb =
+ Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb;
+ Hal4Ctxt->sTgtConnectInfo.pUpperDisconnectCb = NULL;
+ (*pUpperDisconnectCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerDisconnectCtxt,
+ Hal4Ctxt->sTgtConnectInfo.psConnectedDevice,
+ SendStatus
+ );/*Notify disconnect failed to upper layer*/
+ }
+ }
+ }
+ else
+ {
+ Hal4Ctxt->psTrcvCtxtInfo->NumberOfBytesSent = 0;
+ /*Callback For Target Send*/
+ if(NULL != Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb)
+ {
+ pUpperSendCb = Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb;
+ Hal4Ctxt->psTrcvCtxtInfo->pP2PSendCb = NULL;
+ (*pUpperSendCb)(
+ Hal4Ctxt->sUpperLayerInfo.psUpperLayerCtxt,
+ SendStatus
+ );
+ }
+ }
+ return;
+}
#endif /* #if defined (HOST_EMULATION) */
diff --git a/src/phHciNfc_CE_B.h b/src/phHciNfc_CE_B.h
index e34e2db..9de7526 100644..100755
--- a/src/phHciNfc_CE_B.h
+++ b/src/phHciNfc_CE_B.h
@@ -78,7 +78,7 @@ typedef enum phHciNfc_CE_B_Seq{
HOST_CE_B_ATQB_SEQ,
HOST_CE_B_ENABLE_SEQ,
HOST_CE_B_DISABLE_SEQ,
- HOST_CE_B_PIPE_CLOSE,
+ HOST_CE_B_PIPE_CLOSE,
HOST_CE_B_PIPE_DELETE
}phHciNfc_CE_B_Seq_t;
@@ -89,7 +89,7 @@ typedef struct phHciNfc_CE_B_Info{
/* Pointer to the card emulation B pipe information */
phHciNfc_Pipe_Info_t *p_pipe_info;
uint8_t pipe_id;
-
+
} phHciNfc_CE_B_Info_t;
/*
@@ -101,7 +101,7 @@ typedef struct phHciNfc_CE_B_Info{
*
* This function Allocates the resources of the card emulation B management
* gate Information Structure.
- *
+ *
*/
extern
NFCSTATUS
@@ -112,7 +112,7 @@ phHciNfc_CE_B_Init_Resources(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_B_Get_PipeID function gives the pipe id of the card
+* The phHciNfc_CE_B_Get_PipeID function gives the pipe id of the card
* emulation B gate
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -135,13 +135,13 @@ phHciNfc_CE_B_Get_PipeID(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_B_Update_PipeInfo function updates the pipe_id of the card
+* The phHciNfc_CE_B_Update_PipeInfo function updates the pipe_id of the card
* emulation B gate management Structure.
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
* context Structure.
* \param[in] pipeID pipeID of the card emulation A gate
-* \param[in] pPipeInfo Update the pipe Information of the reader
+* \param[in] pPipeInfo Update the pipe Information of the reader
* A gate
*
* \retval NFCSTATUS_SUCCESS Function execution is successful.
@@ -167,35 +167,6 @@ phHciNfc_CE_B_Update_PipeInfo(
* context Structure.
* \param[in] pHwRef pHwRef is the Information of
* the Device Interface Link
-* \param[in] pipeID pipeID of the card emulation B gate
-* \param[in] pPipeInfo Update the pipe Information of the card
-* emulation B gate
-*
-* \retval NFCSTATUS_SUCCESS Function execution is successful.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
-* could not be interpreted properly.
-*
-*/
-#ifdef CE_B_SEND_EVENT
-extern
-NFCSTATUS
-phHciNfc_CE_B_SendData_Event(
- void *psContext,
- void *pHwRef,
- uint8_t *pEvent,
- uint8_t length
- );
-#endif /* #ifdef CE_B_SEND_EVENT */
-
-/**
-* \ingroup grp_hci_nfc
-*
-* The phHciNfc_CE_B_Mode function sends data to the set the card emulation mode
-*
-* \param[in] psHciContext psHciContext is the pointer to HCI Layer
-* context Structure.
-* \param[in] pHwRef pHwRef is the Information of
-* the Device Interface Link
* \param[in] enable_type type to enable
*
* \retval NFCSTATUS_SUCCESS Function execution is successful.
@@ -203,6 +174,7 @@ phHciNfc_CE_B_SendData_Event(
* could not be interpreted properly.
*
*/
+extern
NFCSTATUS
phHciNfc_CE_B_Mode(
void *psHciHandle,
@@ -213,7 +185,7 @@ phHciNfc_CE_B_Mode(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_B_Initialise function opens the CE B and set all the
+* The phHciNfc_CE_B_Initialise function opens the CE B and set all the
* required parameters for CE B
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -226,7 +198,7 @@ phHciNfc_CE_B_Mode(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_B_Initialise(
phHciNfc_sContext_t *psHciContext,
@@ -236,7 +208,7 @@ phHciNfc_CE_B_Initialise(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_B_Initialise function close the CE B and reset all the
+* The phHciNfc_CE_B_Initialise function close the CE B and reset all the
* required parameters to default value of CE B
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
@@ -249,7 +221,7 @@ phHciNfc_CE_B_Initialise(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_B_Release(
phHciNfc_sContext_t *psHciContext,
@@ -259,12 +231,12 @@ phHciNfc_CE_B_Release(
/**
* \ingroup grp_hci_nfc
*
-* The phHciNfc_CE_B_Update_Seq function to update CE B sequence depending on the
+* The phHciNfc_CE_B_Update_Seq function to update CE B sequence depending on the
* specified \ref seq_type
*
* \param[in] psHciContext psHciContext is the pointer to HCI Layer
* context Structure.
-* \param[in] seq_type sequence type specified in
+* \param[in] seq_type sequence type specified in
* \ref phHciNfc_eSeqType_t
*
* \retval NFCSTATUS_SUCCESS Function execution is successful.
@@ -272,7 +244,7 @@ phHciNfc_CE_B_Release(
* could not be interpreted properly.
*
*/
-extern
+extern
NFCSTATUS
phHciNfc_CE_B_Update_Seq(
phHciNfc_sContext_t *psHciContext,
diff --git a/src/phHciNfc_Generic.c b/src/phHciNfc_Generic.c
index 875e295..6dcc823 100644..100755
--- a/src/phHciNfc_Generic.c
+++ b/src/phHciNfc_Generic.c
@@ -28,7 +28,7 @@
* $Date: Tue Jun 8 09:31:49 2010 $ *
* $Author: ing04880 $ *
* $Revision: 1.108 $ *
-* $Aliases: NFC_FRI1.1_WK1023_R35_1 $
+* $Aliases: NFC_FRI1.1_WK1023_R35_1 $
* *
* =========================================================================== *
*/
@@ -66,12 +66,12 @@ uint32_t nxp_nfc_hci_response_timeout = NXP_NFC_HCI_TIMEOUT;
*/
-#if (NXP_NFC_HCI_TIMER == 1)
+#if (NXP_NFC_HCI_TIMER == 1)
#define NXP_HCI_RESPONSE_TIMEOUT (NXP_NFC_HCI_TIMEOUT)
#include <phOsalNfc_Timer.h>
-/** \internal HCI Response Timer to detect the
+/** \internal HCI Response Timer to detect the
* Stalled HCI Response */
static uint32_t hci_resp_timer_id = NXP_INVALID_TIMER_ID;
static phHciNfc_sContext_t *gpsHciContext= NULL;
@@ -200,7 +200,7 @@ phHciNfc_Process_Command (
static
void
-phHciNfc_Reset_Pipe_MsgInfo(
+phHciNfc_Reset_Pipe_MsgInfo(
phHciNfc_Pipe_Info_t *p_pipe_info
);
@@ -222,7 +222,7 @@ phHciNfc_Build_HCPHeader(
/**
* \ingroup grp_hci_nfc
*
- * The phHciNfc_Receive_HCP function receive the HCI Host Control Packet
+ * The phHciNfc_Receive_HCP function receive the HCI Host Control Packet
* Frames from the device.
*
* \param[in] psHciContext psHciContext is the context of
@@ -282,7 +282,7 @@ phHciNfc_Response_Timeout (
void *p_upper_context =
gpsHciContext->p_upper_context;
phHal_sHwReference_t *pHwRef = gpsHciContext->p_hw_ref;
- uint32_t i = 0;
+ uint32_t i = 0;
HCI_DEBUG(" HCI TIMEOUT: HCI Response Timeout Occurred in %X Timer\n"
@@ -290,15 +290,15 @@ phHciNfc_Response_Timeout (
/* Stop the Response Timer */
phOsalNfc_Timer_Stop( hci_resp_timer_id );
- comp_info.status = PHNFCSTVAL(CID_NFC_HCI,
- NFCSTATUS_BOARD_COMMUNICATION_ERROR);
+ comp_info.status = PHNFCSTVAL(CID_NFC_HCI,
+ NFCSTATUS_BOARD_COMMUNICATION_ERROR);
/* Roll Back to the Select State */
phHciNfc_FSM_Rollback(gpsHciContext);
- for(i=0;i < PHHCINFC_MAX_PIPE; i++)
- {
- phHciNfc_Reset_Pipe_MsgInfo(gpsHciContext->p_pipe_list[i]);
- }
+ for(i=0;i < PHHCINFC_MAX_PIPE; i++)
+ {
+ phHciNfc_Reset_Pipe_MsgInfo(gpsHciContext->p_pipe_list[i]);
+ }
/* Notify the Error/Success Scenario to the upper layer */
phHciNfc_Notify( p_upper_notify, p_upper_context,
@@ -495,7 +495,7 @@ phHciNfc_Response_Timeout (
static
void
-phHciNfc_Reset_Pipe_MsgInfo(
+phHciNfc_Reset_Pipe_MsgInfo(
phHciNfc_Pipe_Info_t *p_pipe_info
)
{
@@ -517,7 +517,7 @@ phHciNfc_Release_Lower(
void *pHwRef
)
{
- phNfc_sLowerIF_t *plower_if =
+ phNfc_sLowerIF_t *plower_if =
&(psHciContext->lower_interface);
NFCSTATUS status = NFCSTATUS_SUCCESS;
@@ -559,7 +559,7 @@ phHciNfc_Release_Lower(
phNfc_sLowerIF_t *plower_if = &(psHciContext->lower_interface);
- if( (NULL != plower_if)
+ if( (NULL != plower_if)
&& (NULL != plower_if->send)
)
{
@@ -571,7 +571,7 @@ phHciNfc_Release_Lower(
#if (NXP_NFC_HCI_TIMER == 1)
- if (
+ if (
(TRUE != psHciContext->tx_hcp_chaining)
&& (TRUE == psHciContext->response_pending)
&& ( NXP_INVALID_TIMER_ID != hci_resp_timer_id )
@@ -624,7 +624,7 @@ phHciNfc_Receive(
{
plower_if = &(psHciContext->lower_interface);
- if( (NULL != plower_if)
+ if( (NULL != plower_if)
&& (NULL != plower_if->receive)
)
{
@@ -675,13 +675,13 @@ phHciNfc_Receive(
psHciContext->tx_hcp_frgmnt_index = HCP_ZERO_LEN ;
chain_bit = HCP_CHAINBIT_BEGIN;
/* Increment the Fragment index to skip the HCP Header */
- psHciContext->tx_hcp_frgmnt_index++;
+ psHciContext->tx_hcp_frgmnt_index++;
psHciContext->tx_hcp_chaining = TRUE ;
tx_length = PHHCINFC_MAX_PACKET_DATA ;
}
else if ( psHciContext->tx_remain > PHHCINFC_MAX_PACKET_DATA )
{
- /* Intermediate Chained HCI Frames */
+ /* Intermediate Chained HCI Frames */
tx_length = PHHCINFC_MAX_PACKET_DATA ;
}
else
@@ -691,11 +691,11 @@ phHciNfc_Receive(
tx_length = psHciContext->tx_remain ;
psHciContext->tx_hcp_chaining = FALSE ;
}
-
+
/* Build the HCP Header to have Chaining Enabled */
phHciNfc_Build_HCPHeader(tx_data, chain_bit , pipe_id );
- phHciNfc_Append_HCPFrame((uint8_t *)tx_data->msg.payload, hcp_index,
+ phHciNfc_Append_HCPFrame((uint8_t *)tx_data->msg.payload, hcp_index,
(&psHciContext->send_buffer[psHciContext->tx_hcp_frgmnt_index])
, tx_length );
}
@@ -708,13 +708,13 @@ phHciNfc_Receive(
psHciContext->tx_remain = tx_length ;
}
-
+
/* Include the Skipped HCP Header Byte */
tx_length++;
status = phHciNfc_Send ( (void *) psHciContext, pHwRef,
(uint8_t *)tx_data, tx_length );
-
+
return status;
}
@@ -757,7 +757,7 @@ phHciNfc_Receive(
{
/* Copy the obtained fragment and receive the next fragment */
phHciNfc_Append_HCPFrame(
- psHciContext->recv_buffer, hcp_index,
+ psHciContext->recv_buffer, hcp_index,
(uint8_t *)&pdata[HCP_MESSAGE_LEN],
(length - HCP_MESSAGE_LEN) );
psHciContext->rx_hcp_frgmnt_index =(uint16_t)
@@ -768,14 +768,14 @@ phHciNfc_Receive(
{
psHciContext->rx_hcp_chaining = TRUE ;
/* Copy the obtained fragment and receive the next fragment */
- phHciNfc_Append_HCPFrame(psHciContext->recv_buffer,
+ phHciNfc_Append_HCPFrame(psHciContext->recv_buffer,
hcp_index, pdata, length);
psHciContext->rx_hcp_frgmnt_index = ( hcp_index + length ) ;
}
status = phHciNfc_Receive ( (void *) psHciContext, pHwRef,
pdata, length);
- }
+ }
else
{
if(TRUE == psHciContext->rx_hcp_chaining)
@@ -784,11 +784,11 @@ phHciNfc_Receive(
psHciContext->rx_hcp_chaining = FALSE ;
/* Copy the Remaining buffer to the RX_BUFFER */
phHciNfc_Append_HCPFrame(
- psHciContext->recv_buffer, hcp_index,
+ psHciContext->recv_buffer, hcp_index,
(uint8_t *)&pdata[HCP_MESSAGE_LEN],
(length - HCP_MESSAGE_LEN) );
/* If there is chaining done the return the same data */
- psHciContext->rx_total =
+ psHciContext->rx_total =
(hcp_index + length - HCP_MESSAGE_LEN);
psHciContext->rx_hcp_frgmnt_index = FALSE ;
}
@@ -838,13 +838,13 @@ phHciNfc_Receive(
}
else
{
- status = phHciNfc_Receive_HCP( psHciContext, pHwRef, pdata, length );
+ status = phHciNfc_Receive_HCP( psHciContext, pHwRef, pdata, length );
}/* End of the Valid Data Handling */
if( NFCSTATUS_SUCCESS == status )
{
packet = (phHciNfc_HCP_Packet_t *)psHciContext->recv_buffer;
- length =
+ length =
#ifdef ONE_BYTE_LEN
(uint8_t)
#endif
@@ -926,7 +926,7 @@ phHciNfc_Receive(
}
#endif /* (NXP_NFC_HCI_TIMER == 1) */
-
+
if (pipe_id >= PHHCINFC_MAX_PIPE )
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_INFORMATION);
@@ -1133,8 +1133,8 @@ static
/* psHciContext->hci_transact_state = NFC_TRANSACT_SEND_COMPLETE;*/
/* Receive the Response Packet */
- status = phHciNfc_Receive( psHciContext, pHwRef,
- (uint8_t *)(&psHciContext->rx_packet),
+ status = phHciNfc_Receive( psHciContext, pHwRef,
+ (uint8_t *)(&psHciContext->rx_packet),
sizeof(phHciNfc_HCP_Packet_t) );
/* HCI_DEBUG("HCI Lower Layer Send Completion After Receive,\
@@ -1142,7 +1142,7 @@ static
}
else
{
- if(
+ if(
/* #define EVENT_NOTIFY */
#ifndef EVENT_NOTIFY
( NFCSTATUS_SUCCESS == status )
@@ -1259,10 +1259,10 @@ phHciNfc_Build_HCPMessage(
phHciNfc_HCP_Message_t *hcp_message = NULL;
hcp_message = &(hcp_packet->msg.message);
- /* Set the type to the provided message type in the HCP Message Header */
+ /* Set the type to the provided message type in the HCP Message Header */
hcp_message->msg_header = (uint8_t) SET_BITS8(hcp_message->msg_header,HCP_MSG_TYPE_OFFSET,
HCP_MSG_TYPE_LEN, msg_type);
- /* Set the instruction to the kind of instruction in the HCP Message Header */
+ /* Set the instruction to the kind of instruction in the HCP Message Header */
hcp_message->msg_header = (uint8_t) SET_BITS8(hcp_message->msg_header,HCP_MSG_INSTRUCTION_OFFSET,
HCP_MSG_INSTRUCTION_LEN, instruction);
/* hcp_message->msg_header = hcp_message->msg_header | temp ; */
@@ -1278,10 +1278,10 @@ phHciNfc_Build_HCPHeader(
uint8_t pipe_id
)
{
- /* Set the Chaining bit to the default type */
+ /* Set the Chaining bit to the default type */
hcp_packet->hcp_header = (uint8_t) SET_BITS8(hcp_packet->hcp_header,
HCP_CHAINBIT_OFFSET, HCP_CHAINBIT_LEN, chainbit);
- /* Populate the Pipe ID to the HCP Header */
+ /* Populate the Pipe ID to the HCP Header */
hcp_packet->hcp_header = (uint8_t) SET_BITS8(hcp_packet->hcp_header,HCP_PIPEID_OFFSET,
HCP_PIPEID_LEN, pipe_id);
@@ -1290,7 +1290,7 @@ phHciNfc_Build_HCPHeader(
/*!
* \brief Builds the HCP Frame Packet.
*
- * This function builds the HCP Frame in the HCP packet format to send to the
+ * This function builds the HCP Frame in the HCP packet format to send to the
* connected reader device.
*/
@@ -1326,9 +1326,9 @@ void
)
{
uint16_t src_index = 0;
- if( (NULL != src_data)
+ if( (NULL != src_data)
/* && (hcp_index >= 0) */
- && (src_len > 0)
+ && (src_len > 0)
)
{
for(src_index=0; src_index < src_len ; src_index++)
@@ -1343,7 +1343,7 @@ void
/*!
* \brief Sends the Generic HCI Commands to the connected reader device.
*
- * This function Sends the Generic HCI Command frames in the HCP packet format to the
+ * This function Sends the Generic HCI Command frames in the HCP packet format to the
* connected reader device.
*/
@@ -1373,7 +1373,7 @@ void
}
else
{
- p_pipe_info = (phHciNfc_Pipe_Info_t *)
+ p_pipe_info = (phHciNfc_Pipe_Info_t *)
psHciContext->p_pipe_list[pipe_id];
psHciContext->tx_total = 0 ;
length += HCP_HEADER_LEN ;
@@ -1381,7 +1381,7 @@ void
{
case ANY_SET_PARAMETER:
{
-
+
hcp_packet = (phHciNfc_HCP_Packet_t *) psHciContext->send_buffer;
/* Construct the HCP Frame */
phHciNfc_Build_HCPFrame(hcp_packet,HCP_CHAINBIT_DEFAULT,
@@ -1469,7 +1469,7 @@ phHciNfc_Set_Param (
p_pipe_info->param_info = (uint8_t *)p_param;
p_pipe_info->param_length = param_length;
p_pipe_info->reg_index = reg_index;
- status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
+ status = phHciNfc_Send_Generic_Cmd( psHciContext, pHwRef,
(uint8_t)p_pipe_info->pipe.pipe_id,
(uint8_t)ANY_SET_PARAMETER);
p_pipe_info->prev_status = status;
@@ -1513,8 +1513,8 @@ phHciNfc_Send_Complete (
HCI_PRINT("HCI Send Completion....\n");
if ( (NULL != psContext)
- && (NULL != pInfo)
- && (NULL != pHwRef)
+ && (NULL != pInfo)
+ && (NULL != pHwRef)
)
{
phHciNfc_sContext_t *psHciContext = (phHciNfc_sContext_t *)psContext;
@@ -1532,8 +1532,8 @@ phHciNfc_Send_Complete (
}
else
{
- HCI_DEBUG("HCI Send Completion... Length = %02X\n", length);
- /* To complete the send complete with the send
+ HCI_DEBUG("HCI Send Completion... Length = %02X\n", length);
+ /* To complete the send complete with the send
* or receive with chaining.
*/
if( (TRUE == psHciContext->tx_hcp_chaining)
@@ -1582,8 +1582,8 @@ phHciNfc_Send_Complete (
/* psHciContext->hci_transact_state = NFC_TRANSACT_SEND_COMPLETE;*/
/* Receive the Response Packet */
- status = phHciNfc_Receive( psHciContext, pHwRef,
- (uint8_t *)(&psHciContext->rx_packet),
+ status = phHciNfc_Receive( psHciContext, pHwRef,
+ (uint8_t *)(&psHciContext->rx_packet),
sizeof(phHciNfc_HCP_Packet_t) );
/* HCI_DEBUG("HCI Lower Layer Send Completion After Receive,\
@@ -1599,8 +1599,8 @@ phHciNfc_Send_Complete (
else
{
status = phHciNfc_Resume_Sequence(psHciContext, pHwRef );
- }
- }
+ }
+ }
} /* End of status != Success */
@@ -1621,8 +1621,8 @@ phHciNfc_Receive_Complete (
HCI_PRINT("HCI Receive Completion....\n");
if ( (NULL != psContext)
- && (NULL != pInfo)
- && (NULL != pHwRef)
+ && (NULL != pInfo)
+ && (NULL != pHwRef)
)
{
phHciNfc_sContext_t *psHciContext = (phHciNfc_sContext_t *)psContext;
@@ -1678,7 +1678,7 @@ phHciNfc_Tag_Notify(
void *pInfo
)
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
pphNfcIF_Notification_CB_t p_upper_notify = psHciContext->p_upper_notify;
void *pcontext = psHciContext->p_upper_context;
@@ -1727,7 +1727,7 @@ phHciNfc_Target_Select_Notify(
void *pInfo
)
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
pphNfcIF_Notification_CB_t p_upper_notify = psHciContext->p_upper_notify;
void *pcontext = psHciContext->p_upper_context;
@@ -1779,7 +1779,7 @@ phHciNfc_Release_Notify(
void *pInfo
)
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
pphNfcIF_Notification_CB_t p_upper_notify = psHciContext->p_upper_notify;
void *pcontext = psHciContext->p_upper_context;
@@ -1801,8 +1801,8 @@ phHciNfc_Notify_Event(
NFCSTATUS status = NFCSTATUS_SUCCESS;
if ( (NULL != psContext)
- && (NULL != pInfo)
- && (NULL != pHwRef)
+ && (NULL != pInfo)
+ && (NULL != pHwRef)
)
{
phHciNfc_sContext_t *psHciContext = (phHciNfc_sContext_t *)psContext;
@@ -1812,7 +1812,7 @@ phHciNfc_Notify_Event(
{
case NFC_NOTIFY_INIT_COMPLETED:
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
if(NFCSTATUS_SUCCESS == psCompInfo->status)
{
@@ -1884,14 +1884,14 @@ phHciNfc_Notify_Event(
if (NFCSTATUS_SUCCESS != status)
{
- status = phHciNfc_ReaderMgmt_Deselect(
- psHciContext, pHwRef, phHal_eISO14443_A_PICC, FALSE);
+ status = phHciNfc_ReaderMgmt_Deselect(
+ psHciContext, pHwRef, phHal_eISO14443_A_PICC, FALSE);
}
}
else
{
#ifdef SW_RELEASE_TARGET
- /*status = phHciNfc_ReaderMgmt_Deselect(
+ /*status = phHciNfc_ReaderMgmt_Deselect(
psHciContext, pHwRef, phHal_eISO14443_A_PICC, FALSE); */
psHciContext->target_release = TRUE;
#else
@@ -1900,29 +1900,42 @@ phHciNfc_Notify_Event(
}
break;
}
- /* To Notify the Target Released Notification
+ /* To Notify the Target Released Notification
* to the Above Layer */
case NFC_NOTIFY_TARGET_RELEASED:
- /* To Notify the NFC Secure Element Transaction
+ /* To Notify the NFC Secure Element Transaction
* Information to the Above Layer */
/* case NFC_NOTIFY_TRANSACTION: */
- /* To Notify the Generic Events To the Upper
+ /* To Notify the Generic Events To the Upper
* Layer */
case NFC_NOTIFY_EVENT:
- /* To Notify the Data Receive Notification
+ /* To Notify the Data Receive Notification
* to the Above Layer */
+ case NFC_NOTIFY_CE_A_RECV_EVENT:
+ case NFC_NOTIFY_CE_B_RECV_EVENT:
case NFC_NOTIFY_RECV_EVENT:
{
- phNfc_sCompletionInfo_t *psCompInfo =
- (phNfc_sCompletionInfo_t *)pInfo;
+ phNfc_sCompletionInfo_t *psCompInfo =
+ (phNfc_sCompletionInfo_t *)pInfo;
- if (((TRUE == psHciContext->event_pending) ||
+ if (((TRUE == psHciContext->event_pending) ||
(NFCSTATUS_RF_TIMEOUT == psCompInfo->status))
&& ( hciState_Transact == psHciContext->hci_state.next_state))
{
/* Rollback due to Transmission Error */
phHciNfc_FSM_Rollback(psHciContext);
}
+ if(((phHal_sEventInfo_t *)pInfo)->eventType == NFC_EVT_DEACTIVATED)
+ {
+ //reset HCI state
+ phHciNfc_FSM_Rollback(psHciContext);
+ }
+ else if(((phHal_sEventInfo_t *)pInfo)->eventType == NFC_EVT_ACTIVATED)
+ {
+ //update the HCI state
+ phHciNfc_FSM_Update(psHciContext,hciState_Transact);
+ }
+
psHciContext->event_pending = FALSE;
phHciNfc_Notify(psHciContext->p_upper_notify,
psHciContext->p_upper_context, pHwRef,
@@ -1951,7 +1964,7 @@ phHciNfc_Notify_Event(
case phHal_eUnknown_DevType:
default:
{
- status = PHNFCSTVAL(CID_NFC_HCI,
+ status = PHNFCSTVAL(CID_NFC_HCI,
NFCSTATUS_INVALID_PARAMETER);
break;
}
@@ -2003,10 +2016,10 @@ phHciNfc_Notify_Event(
}
case NFC_NOTIFY_DEVICE_ERROR:
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
- psCompInfo->status = ( NFCSTATUS_BOARD_COMMUNICATION_ERROR
+ psCompInfo->status = ( NFCSTATUS_BOARD_COMMUNICATION_ERROR
!= PHNFCSTATUS(psCompInfo->status))?
NFCSTATUS_BOARD_COMMUNICATION_ERROR:
psCompInfo->status ;
@@ -2033,13 +2046,13 @@ phHciNfc_Notify_Event(
case NFC_NOTIFY_ERROR:
default:
{
- phNfc_sCompletionInfo_t *psCompInfo =
+ phNfc_sCompletionInfo_t *psCompInfo =
(phNfc_sCompletionInfo_t *)pInfo;
#if (NXP_NFC_HCI_TIMER == 1)
if (( NFCSTATUS_BOARD_COMMUNICATION_ERROR == PHNFCSTATUS(psCompInfo->status))
- && ( NXP_INVALID_TIMER_ID != hci_resp_timer_id ))
+ && ( NXP_INVALID_TIMER_ID != hci_resp_timer_id ))
{
HCI_DEBUG(" HCI : Response Timer Stop, Status:%02X",
psCompInfo->status);
@@ -2049,7 +2062,7 @@ phHciNfc_Notify_Event(
#endif /* (NXP_NFC_HCI_TIMER == 1) */
- phHciNfc_Error_Sequence( psHciContext, pHwRef,
+ phHciNfc_Error_Sequence( psHciContext, pHwRef,
psCompInfo->status, NULL, 0);
break;
}
diff --git a/src/phHciNfc_Pipe.c b/src/phHciNfc_Pipe.c
index e7edc50..0a0d0a5 100644..100755
--- a/src/phHciNfc_Pipe.c
+++ b/src/phHciNfc_Pipe.c
@@ -27,7 +27,7 @@
* $Date: Tue Aug 18 10:12:39 2009 $ *
* $Author: ing04880 $ *
* $Revision: 1.42 $ *
-* $Aliases: 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 $
+* $Aliases: 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 $
* *
* =========================================================================== *
*/
@@ -104,7 +104,7 @@ static phHciNfc_GateID_t host_gate_list[] = {
#endif
phHciNfc_NfcWIMgmtGate,
phHciNfc_SwpMgmtGate,
-#if defined(HOST_EMULATION) && ( NXP_UICC_CE_RIGHTS < 0x01 )
+#if defined(HOST_EMULATION) /*&& ( NXP_UICC_CE_RIGHTS < 0x01 )*/
phHciNfc_CETypeAGate,
phHciNfc_CETypeBGate,
#endif
@@ -158,11 +158,11 @@ phHciNfc_Create_Pipe(
(*ppPipeHandle)->pipe.source.host_id = (uint8_t) phHciNfc_TerminalHostID;
/* The Source Gate is same as the Destination Gate */
- (*ppPipeHandle)->pipe.source.gate_id =
+ (*ppPipeHandle)->pipe.source.gate_id =
((phHciNfc_Gate_Info_t *)destination)->gate_id;
- (*ppPipeHandle)->pipe.dest.host_id =
+ (*ppPipeHandle)->pipe.dest.host_id =
((phHciNfc_Gate_Info_t *)destination)->host_id;
- (*ppPipeHandle)->pipe.dest.gate_id =
+ (*ppPipeHandle)->pipe.dest.gate_id =
((phHciNfc_Gate_Info_t *)destination)->gate_id;
/* if( hciMode_Override == psHciContext->hci_mode ) */
@@ -195,7 +195,7 @@ phHciNfc_Update_Pipe(
NFCSTATUS status = NFCSTATUS_SUCCESS;
- for (pipe_index = 0;
+ for (pipe_index = 0;
(pipe_index + HCI_DYNAMIC_PIPE_ID) <=
(uint8_t)(sizeof(host_gate_list)/sizeof(phHciNfc_GateID_t) );
pipe_index++)
@@ -210,24 +210,24 @@ phHciNfc_Update_Pipe(
p_pipe_info->pipe.source.host_id = (uint8_t) phHciNfc_TerminalHostID;
/* The Source Gate is same as the Destination Gate */
- p_pipe_info->pipe.source.gate_id =
+ p_pipe_info->pipe.source.gate_id =
host_gate_list[pipe_index];
- p_pipe_info->pipe.dest.host_id =
+ p_pipe_info->pipe.dest.host_id =
phHciNfc_HostControllerID;
- p_pipe_info->pipe.dest.gate_id =
+ p_pipe_info->pipe.dest.gate_id =
host_gate_list[pipe_index];
/* The Pipe ID is unknown until it is assigned */
p_pipe_info->pipe.pipe_id = (uint8_t) HCI_UNKNOWN_PIPE_ID;
/* Initialise the Resources for the particular Gate */
- status = phHciNfc_Create_All_Pipes(psHciContext,
+ status = phHciNfc_Create_All_Pipes(psHciContext,
pHwRef, p_pipe_seq );
if( NFCSTATUS_SUCCESS == status )
{
uint8_t pipe_id = (uint8_t)(pipe_index + HCI_DYNAMIC_PIPE_ID);
- status = phHciNfc_Update_PipeInfo( psHciContext, p_pipe_seq ,
+ status = phHciNfc_Update_PipeInfo( psHciContext, p_pipe_seq ,
pipe_id, p_pipe_info );
if( NFCSTATUS_SUCCESS == status )
{
@@ -287,9 +287,9 @@ phHciNfc_Delete_Pipe(
NFCSTATUS status=NFCSTATUS_SUCCESS;
NFCSTATUS cmd_status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
- || (NULL == pHwRef)
- || (NULL == pPipeHandle)
+ if( (NULL == psHciContext)
+ || (NULL == pHwRef)
+ || (NULL == pPipeHandle)
)
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
@@ -422,7 +422,7 @@ phHciNfc_CE_Pipes_OP(
/*!
* \brief Creates the Pipes of all the Supported Gates .
*
- * This function Creates the pipes for all the supported gates
+ * This function Creates the pipes for all the supported gates
*/
NFCSTATUS
@@ -435,7 +435,7 @@ phHciNfc_Create_All_Pipes(
NFCSTATUS status = NFCSTATUS_SUCCESS;
phHciNfc_Pipe_Info_t *p_pipe_info = NULL;
- if( (NULL == psHciContext) || (NULL == pHwRef)
+ if( (NULL == psHciContext) || (NULL == pHwRef)
|| (NULL == p_pipe_seq) )
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
@@ -709,11 +709,57 @@ phHciNfc_Create_All_Pipes(
{
status = phHciNfc_Create_Pipe( psHciContext, pHwRef,
&id_dest, &p_pipe_info);
+#ifndef HOST_EMULATION
status = ((NFCSTATUS_PENDING == status )?
NFCSTATUS_SUCCESS : status);
+#endif
+ }
+ break;
+ }
+#ifdef HOST_EMULATION
+ case PIPE_CARD_A_CREATE:
+ {
+ phHciNfc_Gate_Info_t id_dest;
+
+ id_dest.host_id = (uint8_t)phHciNfc_HostControllerID;
+ id_dest.gate_id = (uint8_t)phHciNfc_CETypeAGate;
+
+ status = phHciNfc_CE_A_Init_Resources ( psHciContext );
+ if((status == NFCSTATUS_SUCCESS)
+#ifdef ESTABLISH_SESSION
+ && (hciMode_Session != psHciContext->hci_mode)
+#endif
+ )
+ {
+ status = phHciNfc_Create_Pipe( psHciContext, pHwRef,
+ &id_dest, &p_pipe_info);
+ /*status = ((NFCSTATUS_PENDING == status )?
+ NFCSTATUS_SUCCESS : status);*/
}
break;
}
+ case PIPE_CARD_B_CREATE:
+ {
+ phHciNfc_Gate_Info_t id_dest;
+
+ id_dest.host_id = (uint8_t)phHciNfc_HostControllerID;
+ id_dest.gate_id = (uint8_t)phHciNfc_CETypeBGate;
+
+ status = phHciNfc_CE_B_Init_Resources ( psHciContext );
+ if((status == NFCSTATUS_SUCCESS)
+#ifdef ESTABLISH_SESSION
+ && (hciMode_Session != psHciContext->hci_mode)
+#endif
+ )
+ {
+ status = phHciNfc_Create_Pipe( psHciContext, pHwRef,
+ &id_dest, &p_pipe_info);
+ status = ((NFCSTATUS_PENDING == status )?
+ NFCSTATUS_SUCCESS : status);
+ }
+ break;
+ }
+ #endif //HOST_EMULATION
/* case PIPE_MGMT_END : */
default:
{
@@ -731,7 +777,7 @@ phHciNfc_Create_All_Pipes(
/*!
* \brief Deletes the Pipes of all the Supported Gates .
*
- * This function Deletes the pipes for all the supported gates
+ * This function Deletes the pipes for all the supported gates
*/
NFCSTATUS
@@ -787,8 +833,8 @@ phHciNfc_Update_PipeInfo(
phHciNfc_GateID_t gate_id = phHciNfc_UnknownGate;
NFCSTATUS status = NFCSTATUS_SUCCESS;
- if(
- (NULL == psHciContext) || (NULL == pPipeSeq)
+ if(
+ (NULL == psHciContext) || (NULL == pPipeSeq)
|| ( NULL == pPipeInfo )
)
{
@@ -806,7 +852,7 @@ phHciNfc_Update_PipeInfo(
pipe_id, pPipeInfo);
if(NFCSTATUS_SUCCESS == status)
{
- *pPipeSeq = PIPE_PN544MGMT_CREATE;
+ *pPipeSeq = PIPE_PN544MGMT_CREATE;
}
break;
}
@@ -853,7 +899,7 @@ phHciNfc_Update_PipeInfo(
#elif defined(ENABLE_P2P)
*pPipeSeq = PIPE_NFC_INITIATOR_CREATE;
/* #if defined(ENABLE_P2P) */
- /*lint -e{91} suppress "Line exceeds"*/
+ /*lint -e{91} suppress "Line exceeds"*/
#elif !defined(TYPE_B) && !defined(TYPE_FELICA) && !defined(TYPE_JEWEL) && !defined(TYPE_ISO15693) && !defined(ENABLE_P2P)
*pPipeSeq = PIPE_WI_CREATE;
#endif
@@ -879,7 +925,7 @@ phHciNfc_Update_PipeInfo(
#elif defined(ENABLE_P2P)
*pPipeSeq = PIPE_NFC_INITIATOR_CREATE;
/* #if defined(ENABLE_P2P) */
- /*lint -e{91} suppress "Line exceeds"*/
+ /*lint -e{91} suppress "Line exceeds"*/
#elif !defined(TYPE_FELICA) && !defined(TYPE_JEWEL) && !defined(TYPE_ISO15693) && !defined(ENABLE_P2P)
*pPipeSeq = PIPE_WI_CREATE;
#endif
@@ -937,7 +983,7 @@ phHciNfc_Update_PipeInfo(
pipe_id, pPipeInfo);
if(NFCSTATUS_SUCCESS == status)
{
-
+
#ifdef ENABLE_P2P
*pPipeSeq = PIPE_NFC_INITIATOR_CREATE;
#else
@@ -987,7 +1033,11 @@ phHciNfc_Update_PipeInfo(
pipe_id, pPipeInfo);
if(NFCSTATUS_SUCCESS == status)
{
+#ifdef HOST_EMULATION
+ *pPipeSeq = PIPE_CARD_A_CREATE;
+#else
*pPipeSeq = PIPE_DELETE_ALL;
+#endif
}
break;
}
@@ -1024,7 +1074,7 @@ phHciNfc_Update_PipeInfo(
{
status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_HCI_GATE_NOT_SUPPORTED );
break;
- }
+ }
/*End of the default Switch Case */
} /*End of the Index Switch */
@@ -1053,7 +1103,7 @@ phHciNfc_Open_Pipe(
NFCSTATUS status = NFCSTATUS_SUCCESS;
NFCSTATUS cmd_status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
+ if( (NULL == psHciContext)
|| ( NULL == pHwRef )
|| ( NULL == pPipeHandle )
)
@@ -1067,7 +1117,7 @@ phHciNfc_Open_Pipe(
if ( pipe_id <= PHHCINFC_MAX_PIPE)
{
- cmd_status = phHciNfc_Send_Generic_Cmd( psHciContext,pHwRef,
+ cmd_status = phHciNfc_Send_Generic_Cmd( psHciContext,pHwRef,
pipe_id, ANY_OPEN_PIPE);
status = ( (cmd_status == NFCSTATUS_PENDING)?
NFCSTATUS_SUCCESS : cmd_status);
@@ -1096,7 +1146,7 @@ phHciNfc_Close_Pipe(
NFCSTATUS status = NFCSTATUS_SUCCESS;
NFCSTATUS cmd_status = NFCSTATUS_SUCCESS;
- if( (NULL == psHciContext)
+ if( (NULL == psHciContext)
|| ( NULL == pHwRef )
|| ( NULL == pPipeHandle )
)
@@ -1111,7 +1161,7 @@ phHciNfc_Close_Pipe(
if( (uint8_t)HCI_UNKNOWN_PIPE_ID > pipe_id)
{
cmd_status = phHciNfc_Send_Generic_Cmd(
- psHciContext, pHwRef, pipe_id,
+ psHciContext, pHwRef, pipe_id,
ANY_CLOSE_PIPE );
status = ((cmd_status == NFCSTATUS_PENDING)?
diff --git a/src/phHciNfc_Sequence.c b/src/phHciNfc_Sequence.c
index 1ef7265..604f9bc 100644..100755
--- a/src/phHciNfc_Sequence.c
+++ b/src/phHciNfc_Sequence.c
@@ -29,7 +29,7 @@
* $Date: Tue Jun 8 09:33:46 2010 $ *
* $Author: ing04880 $ *
* $Revision: 1.85 $ *
-* $Aliases: NFC_FRI1.1_WK1023_R35_1 $
+* $Aliases: NFC_FRI1.1_WK1023_R35_1 $
* *
* =========================================================================== *
*/
@@ -59,6 +59,8 @@
#include <phHciNfc_WI.h>
#include <phOsalNfc.h>
+#include <phHciNfc_CE_A.h>
+#include <phHciNfc_CE_B.h>
/*
################################################################################
****************************** Macro Definitions *******************************
@@ -121,7 +123,7 @@ phHciNfc_Config_Sequence(
/**
* \ingroup grp_hci_nfc
*
- * The phHciNfc_Connect_Sequence function sequence selects the
+ * The phHciNfc_Connect_Sequence function sequence selects the
* discovered target for performing the transaction.
*
* \param[in] psHciContext psHciContext is the context of
@@ -146,7 +148,7 @@ phHciNfc_Transact_Sequence(
/**
* \ingroup grp_hci_nfc
*
- * The phHciNfc_Info_Sequence function sequence selects the
+ * The phHciNfc_Info_Sequence function sequence selects the
* discovered target for performing the transaction.
*
* \param[in] psHciContext psHciContext is the context of
@@ -212,15 +214,15 @@ phHciNfc_Pending_Sequence(
################################################################################
*/
-NFCSTATUS
-phHciNfc_FSM_Validate(
- phHciNfc_sContext_t *psHciContext,
- phHciNfc_eState_t state,
+NFCSTATUS
+phHciNfc_FSM_Validate(
+ phHciNfc_sContext_t *psHciContext,
+ phHciNfc_eState_t state,
uint8_t validate_type
)
{
NFCSTATUS status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_STATE);
- phHciNfc_eState_t cur_state = (phHciNfc_eState_t)
+ phHciNfc_eState_t cur_state = (phHciNfc_eState_t)
psHciContext->hci_state.cur_state;
switch(validate_type)
@@ -244,7 +246,7 @@ phHciNfc_FSM_Validate(
{
/* Specifies the Starting of the init Sequence */
case hciState_Initialise:
- /* Initialise to Perform Test on
+ /* Initialise to Perform Test on
the Antenna/SWP Link */
case hciState_Test:
{
@@ -298,16 +300,16 @@ phHciNfc_FSM_Validate(
{
/* Restart the Wheel */
case hciState_Initialise:
- /* Select the next Tag in the Field or
- * already Selected Tag Again
+ /* Select the next Tag in the Field or
+ * already Selected Tag Again
*/
/* Configuring the Memory */
case hciState_IO:
case hciState_Select:
/* Configuring the Discovery/Emulation */
case hciState_Config:
- /* Re-Activate the Target or
- * Discover the next target
+ /* Re-Activate the Target or
+ * Discover the next target
*/
case hciState_Reactivate:
/* Connect the Discovered Target */
@@ -336,8 +338,8 @@ phHciNfc_FSM_Validate(
/* Configuring the Memory */
case hciState_IO:
case hciState_Config:
- /* Re-Activate the Target or
- * Discover the next target
+ /* Re-Activate the Target or
+ * Discover the next target
*/
case hciState_Reactivate:
/* Intermediate Transceive State */
@@ -363,7 +365,7 @@ phHciNfc_FSM_Validate(
{
/* Releasing from the Emulation/Target Mode */
case hciState_Initialise:
- /* Occurence of the Tag Discovered Event
+ /* Occurence of the Tag Discovered Event
* after the Disconnect Operation
*/
case hciState_Select:
@@ -413,14 +415,14 @@ phHciNfc_FSM_Validate(
{
switch(next_state)
{
- /* Discovery Resume after connect failure
+ /* Discovery Resume after connect failure
after the disconnect */
case hciState_Initialise:
/* Configuring the Memory */
case hciState_IO:
/* Configuring the Discovery/Emulation */
case hciState_Config:
- /* Occurence of the Tag Discovered Event
+ /* Occurence of the Tag Discovered Event
* after the Disconnect Operation
*/
case hciState_Select:
@@ -478,11 +480,11 @@ phHciNfc_FSM_Update(
{
NFCSTATUS status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_STATE);
- HCI_DEBUG(" HCI: Current State --> %02u \n",
+ HCI_DEBUG(" HCI: Current State --> %02u \n",
psHciContext->hci_state.cur_state );
- HCI_DEBUG(" HCI: Transition Before FSM Update --> %02u \n",
+ HCI_DEBUG(" HCI: Transition Before FSM Update --> %02u \n",
psHciContext->hci_state.transition );
- HCI_DEBUG(" HCI: Next State Before FSM Update --> %02u \n",
+ HCI_DEBUG(" HCI: Next State Before FSM Update --> %02u \n",
psHciContext->hci_state.next_state );
status = phHciNfc_FSM_Validate(psHciContext, next_state, NFC_FSM_NEXT );
@@ -491,12 +493,12 @@ phHciNfc_FSM_Update(
psHciContext->hci_state.next_state = (uint8_t) next_state;
psHciContext->hci_state.transition = NFC_FSM_IN_PROGRESS;
psHciContext->response_pending = FALSE;
- HCI_DEBUG(" HCI: Next State After FSM Update --> %02u \n",
+ HCI_DEBUG(" HCI: Next State After FSM Update --> %02u \n",
psHciContext->hci_state.next_state );
}
else
{
- HCI_DEBUG(" HCI: FSM - Invalid next state --> %02u \n",
+ HCI_DEBUG(" HCI: FSM - Invalid next state --> %02u \n",
next_state );
}
@@ -513,19 +515,19 @@ phHciNfc_FSM_Complete(
HCI_DEBUG("HCI: In Function: %s \n", __FUNCTION__);
- HCI_DEBUG(" HCI: Transition Before FSM Complete --> %02u \n",
+ HCI_DEBUG(" HCI: Transition Before FSM Complete --> %02u \n",
psHciContext->hci_state.transition );
-
- HCI_DEBUG(" HCI: Current State Before FSM Complete --> %02u \n",
+
+ HCI_DEBUG(" HCI: Current State Before FSM Complete --> %02u \n",
psHciContext->hci_state.cur_state );
- HCI_DEBUG(" HCI: Next State Before FSM Complete --> %02u \n",
+ HCI_DEBUG(" HCI: Next State Before FSM Complete --> %02u \n",
psHciContext->hci_state.next_state );
if( (NFC_FSM_IN_PROGRESS == psHciContext->hci_state.transition)
)
{
- psHciContext->hci_state.cur_state =
+ psHciContext->hci_state.cur_state =
psHciContext->hci_state.next_state ;
psHciContext->hci_state.transition = NFC_FSM_COMPLETE ;
psHciContext->hci_state.next_state = (uint8_t) hciState_Unknown ;
@@ -535,7 +537,7 @@ phHciNfc_FSM_Complete(
status = NFCSTATUS_SUCCESS;
}
- HCI_DEBUG(" HCI: Current State After FSM Complete --> %02u \n",
+ HCI_DEBUG(" HCI: Current State After FSM Complete --> %02u \n",
psHciContext->hci_state.cur_state );
return status;
@@ -608,7 +610,7 @@ phHciNfc_Pending_Sequence(
if(TRUE == psHciContext->target_release)
{
#ifdef SW_RELEASE_TARGET
- status = phHciNfc_ReaderMgmt_Deselect(
+ status = phHciNfc_ReaderMgmt_Deselect(
psHciContext, pHwRef, phHal_eISO14443_A_PICC, TRUE);
if(NFCSTATUS_PENDING == status )
{
@@ -646,9 +648,9 @@ phHciNfc_Error_Sequence(
HCI_DEBUG ("HCI : Error Status : %04X\n", error_status);
- HCI_DEBUG(" HCI: Current HCI State --> %02u \n",
+ HCI_DEBUG(" HCI: Current HCI State --> %02u \n",
psHciContext->hci_state.cur_state );
- HCI_DEBUG(" HCI: Next HCI State --> %02u \n",
+ HCI_DEBUG(" HCI: Next HCI State --> %02u \n",
psHciContext->hci_state.next_state );
@@ -663,8 +665,8 @@ phHciNfc_Error_Sequence(
phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
phHciNfc_Release_Lower( psHciContext, pHwRef );
- /* Release all the resources and
- * Notify the Receive Error Scenario to the Upper Layer
+ /* Release all the resources and
+ * Notify the Receive Error Scenario to the Upper Layer
*/
comp_info.status = error_status ;
phHciNfc_Release_Notify (psHciContext, pHwRef,
@@ -708,13 +710,13 @@ phHciNfc_Error_Sequence(
}
case hciState_Test:
{
- status = phHciNfc_Test_Sequence( psHciContext, pHwRef , error_status,
+ status = phHciNfc_Test_Sequence( psHciContext, pHwRef , error_status,
(uint8_t *)pdata, length );
break;
}
case hciState_IO:
{
- status = phHciNfc_IO_Sequence( psHciContext, pHwRef , error_status,
+ status = phHciNfc_IO_Sequence( psHciContext, pHwRef , error_status,
(uint8_t *)pdata, length );
break;
}
@@ -749,11 +751,11 @@ phHciNfc_Error_Sequence(
NFC_NOTIFY_DISCOVERY_ERROR, &comp_info);
#if 0
- /* Polling Wheel will be restarted by the upper layer
+ /* Polling Wheel will be restarted by the upper layer
* to Rediscover again */
if(NFCSTATUS_SUCCESS == status)
{
- status = phHciNfc_ReaderMgmt_Deselect(
+ status = phHciNfc_ReaderMgmt_Deselect(
psHciContext, pHwRef, phHal_eISO14443_A_PICC, FALSE);
}
phHciNfc_FSM_Rollback(psHciContext);
@@ -799,7 +801,7 @@ phHciNfc_Error_Sequence(
/* Notify the General failure to the upper layer */
phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
- /* psHciContext->host_rf_type = phHal_eUnknown_DevType;
+ /* psHciContext->host_rf_type = phHal_eUnknown_DevType;
status = phHciNfc_ReaderMgmt_Update_Sequence(
psHciContext, INFO_SEQ );
psHciContext->p_target_info = NULL;
@@ -847,8 +849,8 @@ phHciNfc_Error_Sequence(
phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
phHciNfc_Release_Lower( psHciContext, pHwRef );
- /* Release all the resources and
- * Notify the Receive Error Scenario to the Upper Layer
+ /* Release all the resources and
+ * Notify the Receive Error Scenario to the Upper Layer
*/
comp_info.status = error_status ;
phHciNfc_Release_Notify (psHciContext, pHwRef,
@@ -948,7 +950,7 @@ phHciNfc_Resume_Sequence(
{
phNfc_sCompletionInfo_t comp_info={FALSE,0, NULL};
- /* Update to the Intialise state as the discovery wheel is
+ /* Update to the Intialise state as the discovery wheel is
* restarted.
*/
status = phHciNfc_FSM_Complete(psHciContext);
@@ -997,7 +999,7 @@ phHciNfc_Resume_Sequence(
}
case hciState_Transact:
{
- status = phHciNfc_Transact_Sequence(
+ status = phHciNfc_Transact_Sequence(
psHciContext, pHwRef );
break;
}
@@ -1067,11 +1069,11 @@ phHciNfc_Initialise_Sequence(
#ifdef ESTABLISH_SESSION
if( hciMode_Session == psHciContext->hci_mode)
{
- /* TODO: Initialise Link Management
+ /* TODO: Initialise Link Management
Gate Resources */
NFCSTATUS info_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(info_status);
- info_status = phHciNfc_IDMgmt_Update_Sequence(
+ info_status = phHciNfc_IDMgmt_Update_Sequence(
psHciContext, INFO_SEQ );
if(NFCSTATUS_SUCCESS == info_status)
@@ -1125,7 +1127,7 @@ phHciNfc_Initialise_Sequence(
#if defined( ESTABLISH_SESSION )
NFCSTATUS info_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(info_status);
- info_status = phHciNfc_IDMgmt_Update_Sequence(
+ info_status = phHciNfc_IDMgmt_Update_Sequence(
psHciContext, INFO_SEQ );
if(NFCSTATUS_SUCCESS == info_status)
@@ -1172,7 +1174,7 @@ phHciNfc_Initialise_Sequence(
{
NFCSTATUS reset_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(reset_status);
- reset_status = phHciNfc_EmuMgmt_Update_Seq(
+ reset_status = phHciNfc_EmuMgmt_Update_Seq(
psHciContext, RESET_SEQ );
psHciContext->hci_seq = EMULATION_INIT_SEQ;
}
@@ -1209,7 +1211,7 @@ phHciNfc_Initialise_Sequence(
}
case PL_STOP_SEQ:
{
- status = phHciNfc_ReaderMgmt_Disable_Discovery(
+ status = phHciNfc_ReaderMgmt_Disable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
@@ -1229,8 +1231,8 @@ phHciNfc_Initialise_Sequence(
uint8_t activate_enable = FALSE;
uint8_t rdr_enable = TRUE;
- status = phHciNfc_ReaderA_Update_Info(
- psHciContext, HCI_READER_A_ENABLE,
+ status = phHciNfc_ReaderA_Update_Info(
+ psHciContext, HCI_READER_A_ENABLE,
&rdr_enable);
if(status == NFCSTATUS_SUCCESS)
{
@@ -1257,7 +1259,7 @@ phHciNfc_Initialise_Sequence(
{
NFCSTATUS info_status = NFCSTATUS_SUCCESS;
PHNFC_UNUSED_VARIABLE(info_status);
- info_status = phHciNfc_EmuMgmt_Update_Seq(
+ info_status = phHciNfc_EmuMgmt_Update_Seq(
psHciContext, INFO_SEQ );
if(NFCSTATUS_SUCCESS == info_status)
@@ -1381,11 +1383,11 @@ phHciNfc_Release_Sequence(
{
case PL_STOP_SEQ:
{
- status = phHciNfc_ReaderMgmt_Disable_Discovery(
+ status = phHciNfc_ReaderMgmt_Disable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
- (void)phHciNfc_EmuMgmt_Update_Seq(
+ (void)phHciNfc_EmuMgmt_Update_Seq(
psHciContext, REL_SEQ );
psHciContext->hci_seq = EMULATION_REL_SEQ;
status = NFCSTATUS_PENDING;
@@ -1397,7 +1399,7 @@ phHciNfc_Release_Sequence(
status = phHciNfc_EmuMgmt_Release( psHciContext,pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
- (void)phHciNfc_DevMgmt_Update_Sequence(
+ (void)phHciNfc_DevMgmt_Update_Sequence(
psHciContext, REL_SEQ );
psHciContext->hci_seq = ADMIN_REL_SEQ;
status = NFCSTATUS_PENDING;
@@ -1471,11 +1473,11 @@ phHciNfc_Release_Sequence(
}
case HCI_END_SEQ:
{
- pphNfcIF_Notification_CB_t p_upper_notify =
+ pphNfcIF_Notification_CB_t p_upper_notify =
psHciContext->p_upper_notify;
- phNfc_sLowerIF_t *plower_if =
+ phNfc_sLowerIF_t *plower_if =
&(psHciContext->lower_interface);
- void *pcontext =
+ void *pcontext =
psHciContext->p_upper_context;
phNfc_sCompletionInfo_t comp_info;
@@ -1531,7 +1533,7 @@ phHciNfc_Config_Sequence(
if(TARGET_GENERAL_SEQ == psHciContext->hci_seq)
{
status = phHciNfc_NfcIP_SetATRInfo( psHciContext,
- pHwRef, NFCIP_TARGET,
+ pHwRef, NFCIP_TARGET,
psHciContext->p_config_params);
if( NFCSTATUS_PENDING != status )
{
@@ -1549,7 +1551,7 @@ phHciNfc_Config_Sequence(
if (NFCSTATUS_PENDING != status)
{
/* Roll Back to its Current State as Configuration is Complete */
- phHciNfc_FSM_Rollback(psHciContext);
+ phHciNfc_FSM_Rollback(psHciContext);
HCI_PRINT(" NFC-IP(P2P) Configuration Completed. \n");
comp_info.status = status;
@@ -1567,7 +1569,7 @@ phHciNfc_Config_Sequence(
case SMX_WI_CFG:
{
/* Roll Back to its Current State as Configuration is Complete */
- phHciNfc_FSM_Rollback(psHciContext);
+ phHciNfc_FSM_Rollback(psHciContext);
HCI_DEBUG(" %s Configuration Completed. \n",
((SMX_WI_CFG == psHciContext->config_type)?
@@ -1587,12 +1589,12 @@ phHciNfc_Config_Sequence(
case UICC_SWP_CFG:
#if 0
{
- phHal_sEmulationCfg_t *p_emulation_cfg =
+ phHal_sEmulationCfg_t *p_emulation_cfg =
(phHal_sEmulationCfg_t * )
psHciContext->p_config_params;
if (NULL != p_emulation_cfg)
{
- phHal_sUiccEmuCfg_t *uicc_config =
+ phHal_sUiccEmuCfg_t *uicc_config =
&p_emulation_cfg->config.uiccEmuCfg;
if( TRUE == uicc_config->enableUicc )
{
@@ -1614,11 +1616,11 @@ phHciNfc_Config_Sequence(
}
default:
{
- status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
+ status = PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_HCI_SEQUENCE);
break;
}
}
-
+
return status;
}
@@ -1634,7 +1636,7 @@ phHciNfc_PollLoop_Sequence(
psHciContext->p_config_params;
if (NULL != p_poll_config)
{
- uint8_t speed =
+ uint8_t speed =
p_poll_config->NfcIP_Mode;
uint8_t targetSpeed =
p_poll_config->NfcIP_Target_Mode;
@@ -1653,7 +1655,7 @@ phHciNfc_PollLoop_Sequence(
#elif defined (ENABLE_P2P) && defined (NFCIP_TGT_DISABLE_CFG)
psHciContext->hci_seq = PL_TGT_DISABLE_SEQ;
#else
- psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
+ psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
#endif
status = NFCSTATUS_PENDING;
@@ -1663,11 +1665,11 @@ phHciNfc_PollLoop_Sequence(
#if defined (ENABLE_P2P) && defined (TARGET_SPEED)
case TARGET_SPEED_SEQ:
{
-#define NFCIP_ACTIVE_SHIFT 0x03U
-#define NFCIP_PASSIVE_MASK 0x07U
+#define NFCIP_ACTIVE_SHIFT 0x03U
+#define NFCIP_PASSIVE_MASK 0x07U
uint8_t mode = targetSpeed;
HCI_DEBUG("Setting target mode to 0x%02X", mode);
- status =
+ status =
phHciNfc_NfcIP_SetMode( psHciContext, pHwRef, NFCIP_TARGET,
(uint8_t) mode );
if(NFCSTATUS_PENDING == status)
@@ -1677,7 +1679,7 @@ phHciNfc_PollLoop_Sequence(
#elif defined (NFCIP_TGT_DISABLE_CFG)
psHciContext->hci_seq = PL_TGT_DISABLE_SEQ;
#else
- psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
+ psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
#endif
status = NFCSTATUS_PENDING;
}
@@ -1688,7 +1690,7 @@ phHciNfc_PollLoop_Sequence(
case INITIATOR_SPEED_SEQ:
{
HCI_DEBUG("Setting initiator mode to 0x%02X", speed);
- status =
+ status =
phHciNfc_NfcIP_SetMode( psHciContext, pHwRef, NFCIP_INITIATOR,
(uint8_t) (speed & DEFAULT_NFCIP_INITIATOR_MODE_SUPPORT));
if(NFCSTATUS_PENDING == status)
@@ -1696,7 +1698,7 @@ phHciNfc_PollLoop_Sequence(
#if defined (NFCIP_TGT_DISABLE_CFG)
psHciContext->hci_seq = PL_TGT_DISABLE_SEQ;
#else
- psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
+ psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
#endif
status = NFCSTATUS_PENDING;
}
@@ -1711,7 +1713,7 @@ phHciNfc_PollLoop_Sequence(
(uint8_t)PL_DISABLE_TARGET, &p_poll_config->NfcIP_Tgt_Disable );
if(NFCSTATUS_SUCCESS == status)
{
- psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
+ psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
status = NFCSTATUS_PENDING;
}
break;
@@ -1719,27 +1721,27 @@ phHciNfc_PollLoop_Sequence(
#endif
case PL_CONFIG_PHASE_SEQ:
{
- phHal_sPollDevInfo_t *p_poll_info =
+ phHal_sPollDevInfo_t *p_poll_info =
&(p_poll_config->PollDevInfo.PollCfgInfo);
- p_poll_info->EnableIso14443A =
+ p_poll_info->EnableIso14443A =
( (p_poll_info->EnableIso14443A)
- || ( speed & (uint8_t)phHal_ePassive106 )
+ || ( speed & (uint8_t)phHal_ePassive106 )
);
- p_poll_info->EnableFelica212 =
+ p_poll_info->EnableFelica212 =
( (p_poll_info->EnableFelica212)
- || ( speed & (uint8_t)phHal_ePassive212 )
+ || ( speed & (uint8_t)phHal_ePassive212 )
);
- p_poll_info->EnableFelica424 =
+ p_poll_info->EnableFelica424 =
( (p_poll_info->EnableFelica424)
- || ( speed & (uint8_t)phHal_ePassive424 )
+ || ( speed & (uint8_t)phHal_ePassive424 )
);
/* Configure the Polling Loop Gate Parameters */
status = phHciNfc_PollLoop_Cfg( psHciContext, pHwRef,
(uint8_t)PL_RD_PHASES, NULL );
if(NFCSTATUS_SUCCESS == status)
{
- if(((~(PL_RD_PHASES_DISABLE)) &
+ if(((~(PL_RD_PHASES_DISABLE)) &
p_poll_config->PollDevInfo.PollEnabled)!= 0)
{
psHciContext->hci_seq = READER_ENABLE_SEQ;
@@ -1755,25 +1757,25 @@ phHciNfc_PollLoop_Sequence(
}
case READER_ENABLE_SEQ:
{
- status =
- phHciNfc_ReaderMgmt_Enable_Discovery(
+ status =
+ phHciNfc_ReaderMgmt_Enable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
/* psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ; */
- psHciContext->hci_seq = HCI_END_SEQ;
+ psHciContext->hci_seq = HCI_END_SEQ;
status = NFCSTATUS_PENDING;
}
break;
}
case READER_DISABLE_SEQ:
{
- status = phHciNfc_ReaderMgmt_Disable_Discovery(
+ status = phHciNfc_ReaderMgmt_Disable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
- if((~(PL_RD_PHASES_DISABLE) &
+ if((~(PL_RD_PHASES_DISABLE) &
p_poll_config->PollDevInfo.PollEnabled)!= 0)
{
psHciContext->hci_seq = PL_DURATION_SEQ;
@@ -1785,7 +1787,7 @@ phHciNfc_PollLoop_Sequence(
#elif defined (ENABLE_P2P) && defined (NFCIP_TGT_DISABLE_CFG)
psHciContext->hci_seq = PL_TGT_DISABLE_SEQ;
#else
- psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
+ psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ;
#endif
/* psHciContext->hci_seq = HCI_END_SEQ; */
}
@@ -1802,14 +1804,14 @@ phHciNfc_PollLoop_Sequence(
/* status = phHciNfc_FSM_Complete ( psHciContext );*/
phHciNfc_FSM_Rollback ( psHciContext );
/* Poll Configuration Notification to the Upper Layer */
- if((~(PL_RD_PHASES_DISABLE) &
+ if((~(PL_RD_PHASES_DISABLE) &
p_poll_config->PollDevInfo.PollEnabled)!= 0)
{
comp_info.status = status;
phHciNfc_Notify(psHciContext->p_upper_notify,
psHciContext->p_upper_context, pHwRef,
NFC_NOTIFY_POLL_ENABLED, &comp_info);
- }
+ }
else
{
comp_info.status = status;
@@ -1909,7 +1911,7 @@ phHciNfc_EmulationCfg_Sequence(
#endif
case EMULATION_CONFIG_SEQ:
{
- status = phHciNfc_Emulation_Cfg(psHciContext, pHwRef,
+ status = phHciNfc_Emulation_Cfg(psHciContext, pHwRef,
psHciContext->config_type);
if(NFCSTATUS_SUCCESS == status)
{
@@ -1940,7 +1942,7 @@ phHciNfc_EmulationCfg_Sequence(
psHciContext->hci_seq = HCI_END_SEQ;
if (UICC_SWP_CFG == psHciContext->config_type)
{
- (void)phHciNfc_SWP_Update_Sequence(psHciContext,
+ (void)phHciNfc_SWP_Update_Sequence(psHciContext,
CONFIG_SEQ );
}
status = NFCSTATUS_PENDING;
@@ -1952,7 +1954,7 @@ phHciNfc_EmulationCfg_Sequence(
/* fall through */
case HCI_END_SEQ:
{
- phHciNfc_FSM_Rollback(psHciContext);
+ phHciNfc_FSM_Rollback(psHciContext);
HCI_PRINT(" Emulation Configuration Completed. \n");
@@ -1973,7 +1975,7 @@ phHciNfc_EmulationCfg_Sequence(
NFC_CE_B_CFG; */
}/* End of the Emulation Config info Check */
-
+
return status;
}
@@ -1994,7 +1996,7 @@ phHciNfc_SmartMx_Mode_Sequence(
{
case READER_DISABLE_SEQ:
{
- status = phHciNfc_ReaderMgmt_Disable_Discovery(
+ status = phHciNfc_ReaderMgmt_Disable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
@@ -2006,7 +2008,7 @@ phHciNfc_SmartMx_Mode_Sequence(
}
case EMULATION_CONFIG_SEQ:
{
- status = phHciNfc_WI_Configure_Mode(
+ status = phHciNfc_WI_Configure_Mode(
psHciContext, pHwRef,psHciContext->smx_mode );
if(NFCSTATUS_SUCCESS == status)
{
@@ -2030,13 +2032,13 @@ phHciNfc_SmartMx_Mode_Sequence(
}
case READER_ENABLE_SEQ:
{
- status =
- phHciNfc_ReaderMgmt_Enable_Discovery(
+ status =
+ phHciNfc_ReaderMgmt_Enable_Discovery(
psHciContext, pHwRef );
if(NFCSTATUS_SUCCESS == status)
{
/* psHciContext->hci_seq = PL_CONFIG_PHASE_SEQ; */
- psHciContext->hci_seq = HCI_END_SEQ;
+ psHciContext->hci_seq = HCI_END_SEQ;
status = NFCSTATUS_PENDING;
}
break;
@@ -2055,14 +2057,14 @@ phHciNfc_SmartMx_Mode_Sequence(
psHciContext->p_xchg_info = NULL;
}
/* Poll Configuration Notification to the Upper Layer */
- if((~(PL_RD_PHASES_DISABLE) &
+ if((~(PL_RD_PHASES_DISABLE) &
p_poll_config->PollDevInfo.PollEnabled)!= 0)
{
comp_info.status = status;
phHciNfc_Notify(psHciContext->p_upper_notify,
psHciContext->p_upper_context, pHwRef,
NFC_NOTIFY_POLL_ENABLED, &comp_info);
- }
+ }
else
{
comp_info.status = status;
@@ -2130,7 +2132,7 @@ phHciNfc_Connect_Sequence(
case READER_SELECT_SEQ:
{
/* If the Target is Mifare then it should fall through */
- if(( phHal_eMifare_PICC != target_type )
+ if(( phHal_eMifare_PICC != target_type )
&&(phHal_eISO14443_3A_PICC != target_type)
#ifdef TYPE_B
&& ( phHal_eISO14443_B_PICC != target_type )
@@ -2217,7 +2219,7 @@ phHciNfc_Disconnect_Sequence(
{
case READER_UICC_DISPATCH_SEQ:
{
- status = phHciNfc_ReaderMgmt_UICC_Dispatch(
+ status = phHciNfc_ReaderMgmt_UICC_Dispatch(
psHciContext, pHwRef, target_type );
psHciContext->hci_seq = READER_DESELECT_SEQ;
if(NFCSTATUS_PENDING == status)
@@ -2230,7 +2232,7 @@ phHciNfc_Disconnect_Sequence(
{
re_poll = (uint8_t) ( NULL != psHciContext->p_config_params )?
*((uint8_t *)psHciContext->p_config_params):FALSE;
- status = phHciNfc_ReaderMgmt_Deselect(
+ status = phHciNfc_ReaderMgmt_Deselect(
psHciContext, pHwRef, target_type, re_poll);
if(NFCSTATUS_PENDING == status)
{
@@ -2296,7 +2298,7 @@ phHciNfc_Transact_Sequence(
uint8_t transact_result = NFC_NOTIFY_ERROR;
/* Roll Back to Connect State as Transceive is Complete */
- phHciNfc_FSM_Rollback(psHciContext);
+ phHciNfc_FSM_Rollback(psHciContext);
switch (psHciContext->host_rf_type)
{
@@ -2315,9 +2317,9 @@ phHciNfc_Transact_Sequence(
if(ZERO != psHciContext->rx_index)
{
transact_info.status = NFCSTATUS_SUCCESS;
- transact_info.buffer =
+ transact_info.buffer =
&psHciContext->recv_buffer[psHciContext->rx_index];
- transact_info.length =
+ transact_info.length =
psHciContext->rx_total - psHciContext->rx_index;
transact_result = NFC_NOTIFY_TRANSCEIVE_COMPLETED;
}
@@ -2336,15 +2338,31 @@ phHciNfc_Transact_Sequence(
#endif
{
transact_info.status = NFCSTATUS_SUCCESS;
- transact_info.buffer =
+ transact_info.buffer =
&psHciContext->recv_buffer[psHciContext->rx_index];
- transact_info.length =
+ transact_info.length =
psHciContext->rx_total - psHciContext->rx_index;
transact_result = NFC_NOTIFY_TRANSCEIVE_COMPLETED;
HCI_PRINT(" HCI Transceive operation Completed. \n");
psHciContext->p_xchg_info = NULL ;
break;
}
+#if defined(HOST_EMULATION)
+ case phHal_eISO14443_A_PICC:
+ {
+ HCI_PRINT(" HCI Send operation Completed. \n");
+ transact_info.status = NFCSTATUS_SUCCESS;
+ transact_result = NFC_NOTIFY_SEND_CE_A_COMPLETED;
+ break;
+ }
+ case phHal_eISO14443_B_PICC:
+ {
+ HCI_PRINT(" HCI Send operation Completed. \n");
+ transact_info.status = NFCSTATUS_SUCCESS;
+ transact_result = NFC_NOTIFY_SEND_CE_B_COMPLETED;
+ break;
+ }
+#endif
#if defined(ENABLE_P2P)
case phHal_eNfcIP1_Initiator:
case phHal_eNfcIP1_Target:
@@ -2358,7 +2376,7 @@ phHciNfc_Transact_Sequence(
case phHal_eUnknown_DevType:
default:
{
- transact_info.status =
+ transact_info.status =
PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
break;
}
@@ -2416,7 +2434,7 @@ phHciNfc_Info_Sequence(
case phHal_eUnknown_DevType:
default:
{
- status =
+ status =
PHNFCSTVAL(CID_NFC_HCI, NFCSTATUS_INVALID_PARAMETER);
break;
}
@@ -2452,7 +2470,7 @@ phHciNfc_Test_Sequence(
}
else
{
- status = phHciNfc_DevMgmt_Get_Test_Result(
+ status = phHciNfc_DevMgmt_Get_Test_Result(
psHciContext, &test_result );
}
comp_info.info = &test_result;
diff --git a/src/phLibNfc.h b/src/phLibNfc.h
index 6111a93..51bc73c 100644..100755
--- a/src/phLibNfc.h
+++ b/src/phLibNfc.h
@@ -56,8 +56,8 @@ extern const unsigned char *nxp_nfc_full_version;
/**
*\ingroup grp_lib_nfc
-*
-*\brief Defines Testmode Init configuration values
+*
+*\brief Defines Testmode Init configuration values
*/
typedef enum
@@ -70,8 +70,8 @@ typedef enum
/**
*\ingroup grp_lib_nfc
-*
-*\brief Defines Secure Element configurable states
+*
+*\brief Defines Secure Element configurable states
*/
typedef enum
@@ -99,7 +99,7 @@ typedef enum
*
*\brief Defines Ndef Card Offset.
*/
-typedef enum
+typedef enum
{
phLibNfc_Ndef_EBegin = 0x01, /**< Start from Beginning position */
phLibNfc_Ndef_ECurrent /**< Start from Current position */
@@ -115,8 +115,8 @@ typedef enum
* This mode is also called as card emulation mode.when secure element mode is set
* to this mode,external reader can communicate with this SE.
*
-*\b WiredMode: Wired mode is used to communicate with the Secure Element internally.
-* No RF field is generated. In this mode, PN544 acts as reader and discovers
+*\b WiredMode: Wired mode is used to communicate with the Secure Element internally.
+* No RF field is generated. In this mode, PN544 acts as reader and discovers
* SmartMX as MIFARE tag.External reader cannot access any of the SE's in this mode.
* This mode is applicable to only SmartMX secure element.
*
@@ -144,7 +144,7 @@ typedef enum
typedef enum
{
phLibNfc_SE_LowPowerMode_Off= 0x01, /**< Indicates no SE to be selected in low power mode */
- phLibNfc_SE_LowPowerMode_On = 0x02 /**< Indicates requested SE to be selected in low power mode */
+ phLibNfc_SE_LowPowerMode_On = 0x02 /**< Indicates requested SE to be selected in low power mode */
} phLibNfc_SE_LowPowerMode_t;
@@ -155,24 +155,34 @@ typedef enum
*/
typedef union phLibNfc_uSeEvtInfo
{
- phNfc_sUiccInfo_t UiccEvtInfo; /**< Indicates UICC event info for Evt_Transaction event */
+ phNfc_sUiccInfo_t UiccEvtInfo; /**< Indicates UICC event info for Evt_Transaction event */
}phLibNfc_uSeEvtInfo_t;
/**
* \ingroup grp_lib_nfc
*
+*\brief Defines card emulation event info .
+*/
+typedef union phLibNfc_uCeEvtInfo
+{
+ phNfc_sUiccInfo_t UiccEvtInfo; /**< Indicates UICC event info for Evt_Transaction event */
+}phLibNfc_uCeEvtInfo_t;
+
+/**
+* \ingroup grp_lib_nfc
+*
*\brief Types of SE transaction events sent to SE notification handler .
*/
typedef enum
{
- phLibNfc_eSE_EvtStartTransaction=0x00, /**< Indicates transaction started on
+ phLibNfc_eSE_EvtStartTransaction=0x00, /**< Indicates transaction started on
secure element */
phLibNfc_eSE_EvtEndTransaction=0x01, /**<Indicates transaction ended on secure
element*/
- phLibNfc_eSE_EvtTypeTransaction=0x02, /**<Indicates external reader trying to access secure element */
-
+ phLibNfc_eSE_EvtTypeTransaction=0x02, /**<Indicates external reader trying to access secure element */
+
phLibNfc_eSE_EvtConnectivity, /**<This event notifies the terminal host that it shall
- send a connectivity event from UICC as defined in
+ send a connectivity event from UICC as defined in
ETSI TS 102 622 V7.4.0 */
phLibNfc_eSE_EvtFieldOn, // consider using phLibNfc_eSE_EvtConnectivity
phLibNfc_eSE_EvtFieldOff,
@@ -187,6 +197,25 @@ typedef enum
/**
* \ingroup grp_lib_nfc
*
+*\brief Types of CE transaction events sent to CE notification handler .
+*/
+typedef enum
+{
+ phLibNfc_eCE_A_EvtActivated=0x00, /**< Indicates activation on
+ emulated card */
+ phLibNfc_eCE_A_EvtDeActivated=0x01, /**< Indicates de activation
+ emulated card */
+ phLibNfc_eCE_B_EvtActivated=0x02, /**< Indicates activation on
+ emulated card */
+ phLibNfc_eCE_B_EvtDeActivated=0x03, /**< Indicates de activation
+ emulated card */
+ phLibNfc_eCE_EvtFieldOn, // consider using phLibNfc_eSE_EvtConnectivity
+ phLibNfc_eCE_EvtFieldOff
+} phLibNfc_eCE_EvtType_t;
+
+/**
+* \ingroup grp_lib_nfc
+*
*\brief Defines possible registration details for notifications.
*/
typedef phNfc_sSupProtocol_t phLibNfc_Registry_Info_t;
@@ -211,7 +240,7 @@ typedef phNfc_sData_t phLibNfc_AID;
*
*\brief Remote Device Info definition .
*/
-typedef phNfc_sRemoteDevInformation_t phLibNfc_sRemoteDevInformation_t;
+typedef phNfc_sRemoteDevInformation_t phLibNfc_sRemoteDevInformation_t;
/**
* \ingroup grp_lib_nfc
*/
@@ -226,13 +255,13 @@ typedef phNfc_sTransceiveInfo_t phLibNfc_sTransceiveInfo_t;
/**
* \ingroup grp_lib_nfc
*
-*\brief Automatic Device Discovery Definition.
+*\brief Automatic Device Discovery Definition.
*/
typedef phNfc_sADD_Cfg_t phLibNfc_sADD_Cfg_t;
/**
*\ingroup grp_lib_nfc
*
-*\brief Release mode definition.
+*\brief Release mode definition.
*/
typedef phNfc_eReleaseType_t phLibNfc_eReleaseType_t;
@@ -276,7 +305,7 @@ typedef phLibNfc_sSupportedTagInfo_t phLibNfc_sNDEFMappingInfo_t;
*\brief Defines supported tag types for NDEF formatting feature.
*/
-typedef phLibNfc_sSupportedTagInfo_t phLibNfc_sTagFormattingInfo_t;
+typedef phLibNfc_sSupportedTagInfo_t phLibNfc_sTagFormattingInfo_t;
/**
* \ingroup grp_lib_nfc
@@ -285,7 +314,7 @@ typedef phLibNfc_sSupportedTagInfo_t phLibNfc_sTagFormattingInfo_t;
*/
typedef struct StackCapabilities
-{
+{
phLibNfc_sDeviceCapabilities_t psDevCapabilities;
phLibNfc_sNDEFMappingInfo_t psMappingCapabilities;
phLibNfc_sTagFormattingInfo_t psFormatCapabilities;
@@ -319,7 +348,7 @@ typedef struct phLibNfc_RemoteDev
typedef phNfc_sNfcIPCfg_t phLibNfc_sNfcIPCfg_t;
/**
-*\ingroup grp_lib_nfc
+*\ingroup grp_lib_nfc
*\brief NDEF registration structure definition.
*/
typedef struct phLibNfc_Ndef_SrchType
@@ -330,8 +359,8 @@ typedef struct phLibNfc_Ndef_SrchType
} phLibNfc_Ndef_SrchType_t;
/**
-*\ingroup grp_lib_nfc
-* \brief NDEF information structure definition. \n
+*\ingroup grp_lib_nfc
+* \brief NDEF information structure definition. \n
*/
typedef struct phLibNfc_Ndef_Info
{
@@ -340,20 +369,20 @@ typedef struct phLibNfc_Ndef_Info
uint8_t *pNdefMessage; /**< Pointer to raw NDEF Data buffer */
uint32_t NdefRecordCount; /**< Number of NDEF records pointed by pNdefRecord */
phFriNfc_NdefRecord_t *pNdefRecord; /**< Pointer to the NDEF Records contained within the NDEF message */
-
+
} phLibNfc_Ndef_Info_t;
-/* As per NFC forum specification, the card can be in either of the below mentioned states
- INVALID - means card is NOT NFC forum specified tag. NDEF FORMAT can only be performed for
+/* As per NFC forum specification, the card can be in either of the below mentioned states
+ INVALID - means card is NOT NFC forum specified tag. NDEF FORMAT can only be performed for
the factory cards, other cards may or may not be formatted for NDEF FORMAT function.
- INITIALISED - means card is NFC forum specified tag. But, in this state
- the user has to first call NDEF WRITE, because in INITIALISED state, there
- wont be any data i.e.,ACTUAL NDEF FILE SIZE is 0. After the first
+ INITIALISED - means card is NFC forum specified tag. But, in this state
+ the user has to first call NDEF WRITE, because in INITIALISED state, there
+ wont be any data i.e.,ACTUAL NDEF FILE SIZE is 0. After the first
NDEF WRITE, NDEF READ and WRITE functions can be called any number of times.
- READ WRITE - means card is NFC forum specified tag. User can use both
+ READ WRITE - means card is NFC forum specified tag. User can use both
NDEF READ and WRITE functions
- READ ONLY - means card is NFC forum specified tag. User can only use
- NDEF READ. NDEF WRITE function will not work.
+ READ ONLY - means card is NFC forum specified tag. User can only use
+ NDEF READ. NDEF WRITE function will not work.
*/
#define PHLIBNFC_NDEF_CARD_INVALID 0x00U
#define PHLIBNFC_NDEF_CARD_INITIALISED 0x01U
@@ -369,7 +398,7 @@ typedef struct phLibNfc_ChkNdef_Info
{
uint8_t NdefCardState; /**< Card state information */
uint32_t ActualNdefMsgLength; /**< Indicates Actual length of NDEF Message in Tag */
- uint32_t MaxNdefMsgLength; /**< Indicates Maximum Ndef Message length that Tag can hold*/
+ uint32_t MaxNdefMsgLength; /**< Indicates Maximum Ndef Message length that Tag can hold*/
} phLibNfc_ChkNdef_Info_t;
/**
@@ -391,13 +420,13 @@ typedef phFriNfc_LlcpTransport_sSocketOptions_t phLibNfc_Llcp_sSocketOptions_t;
*
*\brief Response callback for connect request.
*
-* Callback type used to indicate a Connect request Successful or Failure indication to
+* Callback type used to indicate a Connect request Successful or Failure indication to
* LibNfc client.
*
* \param[in] pContext Context passed in the connect request before.
-* \param[in] hRemoteDev Handle to remote device on which connect was requested.
+* \param[in] hRemoteDev Handle to remote device on which connect was requested.
* \param[in] psRemoteDevInfo contains updated remote device details.For few tags
-* like ISO-14443A details like historical bytes gets updated
+* like ISO-14443A details like historical bytes gets updated
* only after connecting to target.Once connect is successful
* \b psRemoteDevInfo gets updated.
*
@@ -409,10 +438,10 @@ typedef phFriNfc_LlcpTransport_sSocketOptions_t phLibNfc_Llcp_sSocketOptions_t;
*
*/
-typedef void (*pphLibNfc_ConnectCallback_t) (void* pContext,
- phLibNfc_Handle hRemoteDev,
+typedef void (*pphLibNfc_ConnectCallback_t) (void* pContext,
+ phLibNfc_Handle hRemoteDev,
phLibNfc_sRemoteDevInformation_t* psRemoteDevInfo,
- NFCSTATUS Status
+ NFCSTATUS Status
);
/**
@@ -420,11 +449,11 @@ typedef void (*pphLibNfc_ConnectCallback_t) (void* pContext,
*
*\brief Response callback for disconnect request.
*
-* Callback type used to provide a disconnect Success or Failure indication to
+* Callback type used to provide a disconnect Success or Failure indication to
* LibNfc client.
*
* \param[in] pContext Context passed in the disconnect request before.
-* \param[in] hRemoteDev Handle to remote device on which disconnect is requested.
+* \param[in] hRemoteDev Handle to remote device on which disconnect is requested.
* \param[in] status Status of the response callback.
*
* \param NFCSTATUS_SUCCESS Disconnect operation successful.
@@ -440,7 +469,7 @@ typedef void (*pphLibNfc_DisconnectCallback_t)(void* pContext,
*
*\brief Response callback for IOCTL request.
*
-* Callback type to inform success or failure of the Ioctl request
+* Callback type to inform success or failure of the Ioctl request
* made by LibNfc client. It may optionally contain response data
* depending on the Ioctl command type issued.
@@ -452,14 +481,14 @@ typedef void (*pphLibNfc_DisconnectCallback_t)(void* pContext,
* \param NFCSTATUS_TARGET_LOST Ioctl operation failed because target is lost.
* \param NFCSTATUS_SHUTDOWN Ioctl operation failed because Shutdown in progress.
*
-*\param[in,out] pOutParam contains Ioctl command specific response buffer and size
-* of the buffer.This buffer address will be same as
+*\param[in,out] pOutParam contains Ioctl command specific response buffer and size
+* of the buffer.This buffer address will be same as
* pOutParam sent in \ref phLibNfc_Mgt_IoCtl.
*
*/
-typedef void (*pphLibNfc_IoctlCallback_t) (void* pContext,
+typedef void (*pphLibNfc_IoctlCallback_t) (void* pContext,
phNfc_sData_t* pOutParam,
NFCSTATUS Status
);
@@ -471,13 +500,13 @@ typedef void (*pphLibNfc_IoctlCallback_t) (void* pContext,
*
*\brief Response callback for Transceive request.
*
-* This callback type is used to provide received data and it's size to the
-* LibNfc client in \ref phNfc_sData_t format ,when LibNfc client has performed
-* a Transceive operation on a tag or when the device acts as an Initiator during a
+* This callback type is used to provide received data and it's size to the
+* LibNfc client in \ref phNfc_sData_t format ,when LibNfc client has performed
+* a Transceive operation on a tag or when the device acts as an Initiator during a
* P2P transactions.
*
* \param[in] pContext LibNfc client context passed in the corresponding request before.
-* \param[in] hRemoteDev Handle to remote device on transceive is performed.
+* \param[in] hRemoteDev Handle to remote device on transceive is performed.
* \param[in] pResBuffer Response buffer of type \ref phNfc_sData_t.
* \param[in] status Status of the response callback.
*
@@ -490,7 +519,7 @@ typedef void (*pphLibNfc_IoctlCallback_t) (void* pContext,
typedef void (*pphLibNfc_TransceiveCallback_t)( void* pContext,
phLibNfc_Handle hRemoteDev,
phNfc_sData_t* pResBuffer,
- NFCSTATUS Status
+ NFCSTATUS Status
);
/**
@@ -500,7 +529,7 @@ typedef void (*pphLibNfc_TransceiveCallback_t)( void* pContext,
*
* Generic callback definition used as callback type in few APIs below.
*
-* \note : Status and error codes for this type of callback are documented in respective APIs
+* \note : Status and error codes for this type of callback are documented in respective APIs
* wherever it is used.
*
* \param[in] pContext LibNfc client context passed in the corresponding request
@@ -515,7 +544,7 @@ typedef void(*pphLibNfc_RspCb_t) (void* pContext,NFCSTATUS Status);
*
* This call back is used by check ndef api.
*
-* \note : Status and error codes for this type of callback are documented in API
+* \note : Status and error codes for this type of callback are documented in API
*
* \param[in] pContext LibNfc client context passed in the corresponding request
* before.
@@ -544,8 +573,8 @@ typedef void(*pphLibNfc_ChkNdefRspCb_t)(void* pContext,
*Subsequent operations on discovered target shall be performed using target specific handle
*\b hTargetDev.
*
-* \param[in] pContext Client context passed in the corresponding
-* request before.The context is handled by client
+* \param[in] pContext Client context passed in the corresponding
+* request before.The context is handled by client
* only.
*
* \param[in] psRemoteDevList Remote Device list contains discovered target details.
@@ -553,8 +582,8 @@ typedef void(*pphLibNfc_ChkNdefRspCb_t)(void* pContext,
* List size depends on no of remote devices discovered.
*
* \param[in] uNofRemoteDev Indicates no of remote devices discovered .
-* In case more than one target discovered,\b psRemoteDevList contains
-* multiple target details.
+* In case more than one target discovered,\b psRemoteDevList contains
+* multiple target details.
*
* \param[in] Status Status of the response callback.
*
@@ -562,11 +591,11 @@ typedef void(*pphLibNfc_ChkNdefRspCb_t)(void* pContext,
* \param NFCSTATUS_MULTIPLE_TARGETS multiple targets found.
* \param NFCSTATUS_MULTI_PROTOCOLS Target found supports multiple protocols.
* \param NFCSTATUS_SHUTDOWN Registration failed because shutdown in progress.
-* \param NFCSTATUS_DESELECTED initiator issued disconnect or intiator
+* \param NFCSTATUS_DESELECTED initiator issued disconnect or intiator
* physically removed from the RF field.
*
-*\note: multiple tag detection is possible only within same technology but not across
-* different technologies.
+*\note: multiple tag detection is possible only within same technology but not across
+* different technologies.
*/
typedef void (*phLibNfc_NtfRegister_RspCb_t)(
void* pContext,
@@ -574,13 +603,13 @@ typedef void (*phLibNfc_NtfRegister_RspCb_t)(
uint8_t uNofRemoteDev,
NFCSTATUS Status
);
-
+
/**
* \ingroup grp_lib_nfc
* \brief Response Callback for secure element mode settings.
*
* This callback type is used to provide information on requested secure element is
-* activated or not to LibNfcClient.
+* activated or not to LibNfcClient.
*
* \param[in] pContext LibNfc client context passed in the activation request.
*
@@ -595,10 +624,10 @@ typedef void (*phLibNfc_NtfRegister_RspCb_t)(
typedef void(*pphLibNfc_SE_SetModeRspCb_t)(
void* pContext,
phLibNfc_Handle hSecureElement,
- NFCSTATUS Status
+ NFCSTATUS Status
);
/**
-* \ingroup grp_lib_nfc
+* \ingroup grp_lib_nfc
* \brief Notification callback for \ref phLibNfc_SE_NtfRegister().
*
* A function of this type is called when external reader tries to access SE.
@@ -625,16 +654,44 @@ typedef void (*pphLibNfc_SE_NotificationCb_t) (void* pCon
NFCSTATUS Status
);
+/**
+* \ingroup grp_lib_nfc
+* \brief Notification callback for \ref phLibNfc_CE_NtfRegister().
+*
+* A function of this type is called when external reader tries to access SE.
+*
+*\param[in] pContext LibNfc client context passed in the SE notification register request.
+* The context is Handled by client only.
+* \param[in] EventType Event type of secure element transaction
+*
+* \param[in] handle to connected device if connected Event type of secure element transaction
+*
+*\param[in] pAppID Application identifier to be accessed on SE .
+* Sent when available from SE otherwise empty.
+*
+*\param[in] Status Indicates API status.
+* \param NFCSTATUS_SUCCESS Notification handler registered sucessfully.
+* \param NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \param NFCSTATUS_FAILED set mode operation failed.
+*
+*
+*/
+typedef void (*pphLibNfc_CE_NotificationCb_t) (void* pContext,
+ phLibNfc_eCE_EvtType_t EventType,
+ uint32_t handle,
+ NFCSTATUS Status
+ );
+
/**
*\ingroup grp_lib_nfc
*\brief Receive callback definition.
*
-* This callback type is used to provide received data and it's size to the
-* LibNfc client in \ref phNfc_sData_t format ,when LibNfc client has performed
-* when the device acts as a Target during P2P communication
+* This callback type is used to provide received data and it's size to the
+* LibNfc client in \ref phNfc_sData_t format ,when LibNfc client has performed
+* when the device acts as a Target during P2P communication
*
-* \param[in] pContext LibNfc client context passed in the corresponding
+* \param[in] pContext LibNfc client context passed in the corresponding
* request before.
* \param[in] pRecvBufferInfo Response buffer of type \ref phNfc_sData_t.
* \param[in] status Status of the response callback.
@@ -647,7 +704,7 @@ typedef void (*pphLibNfc_SE_NotificationCb_t) (void* pCon
* closed and send and receive requests not allowed any more
* unless new session is started.
*/
-typedef void (*pphLibNfc_Receive_RspCb_t)(void* pContext,
+typedef void (*pphLibNfc_Receive_RspCb_t)(void* pContext,
phNfc_sData_t* pRecvBufferInfo,
NFCSTATUS status
);
@@ -660,7 +717,7 @@ typedef void (*pphLibNfc_Receive_RspCb_t)(void* pContext,
*
* \b Note :Once this type callback is notified,discovery wheel is stopped.
*In order to restart discovery process again it is important to disconnect
-*from current tag.LibNfc client shall disconnect explicitly using
+*from current tag.LibNfc client shall disconnect explicitly using
*\ref phLibNfc_RemoteDev_Disconnect() interface.
*
*\param[in] pContext Pointer to context previously provided by the user
@@ -676,11 +733,11 @@ typedef void (*pphLibNfc_Receive_RspCb_t)(void* pContext,
*/
-typedef void (*pphLibNfc_Ndef_Search_RspCb_t) ( void* pContext,
+typedef void (*pphLibNfc_Ndef_Search_RspCb_t) ( void* pContext,
phLibNfc_Ndef_Info_t* psNdefInfo,
phLibNfc_Handle hRemoteDevice,
NFCSTATUS Status
- );
+ );
/**
@@ -796,7 +853,7 @@ typedef void (*pphLibNfc_LlcpSocketSendCb_t) ( void* pContext,
* sends the HANDLE to the caller.
*
* \param[in] psConfig Driver configuration details as provided
- * by the upper layer.
+ * by the upper layer.
* \param[in,out] ppDriverHandle pointer to which valid Handle to driver
* interface is assigned.
*
@@ -824,7 +881,7 @@ NFCSTATUS phLibNfc_Mgt_ConfigureDriver (pphLibNfc_sConfig_t psConfig,
*
* \brief Release configuration for the given driver Interface.
*
- * \copydoc page_reg Release all that has been
+ * \copydoc page_reg Release all that has been
* initialised in \b phLibNfc_Mgt_ConfigureDriver function (Synchronous function).
*
* \param[in] pDriverHandle Link information of the hardware
@@ -838,13 +895,13 @@ NFCSTATUS phLibNfc_Mgt_ConfigureDriver (pphLibNfc_sConfig_t psConfig,
*LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
- *LibNfcClient<-LibNfc [label="pInitCb"];
+ *LibNfcClient<-LibNfc [label="pInitCb"];
*--- [label="Perform feature operations "];
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_DeInitialize()",URL="\ref phLibNfc_Mgt_DeInitialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
- *LibNfcClient<-LibNfc [label="pDeInitCb"];
+ *LibNfcClient<-LibNfc [label="pDeInitCb"];
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_UnConfigureDriver()",URL="\ref phLibNfc_Mgt_UnConfigureDriver"];
- *LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
+ *LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_UnConfigureDriver (void * pDriverHandle
@@ -912,7 +969,7 @@ int phLibNfc_GetMifareRawTimeout();
*
* \retval NFCSTATUS_ALREADY_INITIALISED Stack is already initialized.
* \retval NFCSTATUS_PENDING Init sequence has been successfully
-* started and result will be conveyed via
+* started and result will be conveyed via
* callback notification.
* \retval NFCSTATUS_INVALID_PARAMETER The parameter could not be properly
* interpreted.
@@ -953,10 +1010,10 @@ NFCSTATUS phLibNfc_Mgt_Initialize (void * pDriverHandle,
*
* \retval NFCSTATUS_SUCCESS Device stack is already De-Initialized.
* \retval NFCSTATUS_PENDING De-Initialization sequence has been successfully
-* started and result is conveyed via callback
+* started and result is conveyed via callback
* notification.
*
-* \retval NFCSTATUS_INVALID_PARAMETER The parameter could not be properly
+* \retval NFCSTATUS_INVALID_PARAMETER The parameter could not be properly
* interpreted.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
@@ -968,11 +1025,11 @@ NFCSTATUS phLibNfc_Mgt_Initialize (void * pDriverHandle,
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
-*LibNfcClient<-LibNfc [label="pInitCb"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
*--- [label="Perform feature operations "];
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_DeInitialize()",URL="\ref phLibNfc_Mgt_DeInitialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
-*LibNfcClient<-LibNfc [label="pDeInitCb"];
+*LibNfcClient<-LibNfc [label="pDeInitCb"];
*\endmsc
*/
NFCSTATUS phLibNfc_Mgt_DeInitialize(void * pDriverHandle,
@@ -985,16 +1042,16 @@ NFCSTATUS phLibNfc_Mgt_DeInitialize(void * pDriverHandle,
* \brief Get list of available Secure Elements.
*
* This function retrieves list of secure elements locally connected.
-* during LibNfc initialization these SEs enumerated from lower stack and maintained
+* during LibNfc initialization these SEs enumerated from lower stack and maintained
* in LibNfc library.Once libNfc client queries using this interface,
-* same details exposed to LibNfc client.
+* same details exposed to LibNfc client.
* LibNfc client shall pass empty list of size \ref PHLIBNFC_MAXNO_OF_SE .
-* Once SE list is available, libNfc client can perform operation on specific SE
+* Once SE list is available, libNfc client can perform operation on specific SE
* using SE handle.
* The handle given in the \ref phLibNfc_SE_List_t structure stays valid until
-* shutdown is called.
+* shutdown is called.
*
-*\note In case no SE's found, API still returns \ref NFCSTATUS_SUCCESS with \b uSE_count
+*\note In case no SE's found, API still returns \ref NFCSTATUS_SUCCESS with \b uSE_count
set to zero.Value zero indicates none of the SE's connected to PN544 hardware.
* \param[in,out] pSE_List contains list of SEs with SE details in \ref phLibNfc_SE_List_t format.
@@ -1013,7 +1070,7 @@ set to zero.Value zero indicates none of the SE's connected to PN544 hardware.
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
-*LibNfcClient<-LibNfc [label="pInitCb"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
*--- [label="Now SE list can be retrieved"];
*\endmsc
*/
@@ -1043,17 +1100,17 @@ NFCSTATUS phLibNfc_SE_GetSecureElementList(phLibNfc_SE_List_t* pSE_List,
* 2.When SmartMX SE configured in Wired Mode ,LibNfc client shall restart discovery process.
* SmartMX gets detected as MIFARE tag.
* 3.To exit wired mode ,LibNfc client has to disconnect with release type as "NFC_SMARTMX_RELEASE".
-*
+*
*
*\b c)If mode is \ref phLibNfc_SE_ActModeOff
-*This means SE is off mode .It can not be accessed any more in wired or virtual mode.
+*This means SE is off mode .It can not be accessed any more in wired or virtual mode.
*internal reader any more.communicate with internal reader and only
-*PN544 can communicate in reader mode and external reader can not
+*PN544 can communicate in reader mode and external reader can not
*communicate with it.This mode is applicable both SE types ( UICC and SmartMX)
*
* \param[in] hSE_Handle Secure Element Handle .
* \param[in] eActivation_mode Indicates SE mode to be configured.
-*
+*
*
*
* \param[in] pphLibNfc_SE_setModeRspCb_t pointer to response callback.
@@ -1068,7 +1125,7 @@ NFCSTATUS phLibNfc_SE_GetSecureElementList(phLibNfc_SE_List_t* pSE_List,
* \retval NFCSTATUS_INVALID_HANDLE Invalid Handle.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
-* \retval NFCSTATUS_REJECTED Invalid request.(Ex: If wired mode settings called using
+* \retval NFCSTATUS_REJECTED Invalid request.(Ex: If wired mode settings called using
* UICC SE handle ,this error code seen).
* \retval NFCSTATUS_FAILED Request failed.
*
@@ -1084,9 +1141,9 @@ NFCSTATUS phLibNfc_SE_GetSecureElementList(phLibNfc_SE_List_t* pSE_List,
*LibNfcClient=>LibNfc [label="phLibNfc_SE_SetMode(hSE_Handle,)",URL="\ref phLibNfc_SE_SetMode"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
*LibNfcClient<-LibNfc [label="pSE_SetMode_Rsp_cb"];
-*\endmsc
+*\endmsc
*/
-NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle hSE_Handle,
+NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle hSE_Handle,
phLibNfc_eSE_ActivationMode eActivation_mode,
pphLibNfc_SE_SetModeRspCb_t pSE_SetMode_Rsp_cb,
void * pContext
@@ -1115,7 +1172,7 @@ NFCSTATUS phLibNfc_SE_SetMode ( phLibNfc_Handle hSE_Handle,
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
-*LibNfcClient<-LibNfc [label="pInitCb"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
*--- [label="Perform feature operations "];
*
*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfRegister()",URL="\ref phLibNfc_SE_NtfRegister"];
@@ -1123,17 +1180,58 @@ LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
*--- [label="Registration sucessfull"];
*
*--- [label="In case external reader performs transactions,callback is notified as shown below"];
-*LibNfcClient<-LibNfc [label="pSE_NotificationCb"];
+*LibNfcClient<-LibNfc [label="pSE_NotificationCb"];
*\endmsc
*/
NFCSTATUS phLibNfc_SE_NtfRegister (pphLibNfc_SE_NotificationCb_t pSE_NotificationCb,
void * pContext
);
+
+/**
+* \ingroup grp_lib_nfc
+* \brief Registers notification handler to handle secure element specific events.
+*
+* This function registers handler to report SE specific transaction events.
+* Possible different types of events are as defined in \ref phLibNfc_eSE_EvtType_t.
+
+* \param[in] pSE_NotificationCb pointer to notification callback.
+* \param[in] pContext Client context which will be included in
+* callback when the request is completed.
+*
+*\retval NFCSTATUS_SUCCESS Registration Sucessful.
+*\retval NFSCSTATUS_SHUTDOWN Shutdown in progress.
+*\retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*
+*\msc
+*LibNfcClient,LibNfc;
+*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
+*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
+*--- [label="Perform feature operations "];
+*
+*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfRegister()",URL="\ref phLibNfc_SE_NtfRegister"];
+LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
+*--- [label="Registration sucessfull"];
+*
+*--- [label="In case external reader performs transactions,callback is notified as shown below"];
+*LibNfcClient<-LibNfc [label="pSE_NotificationCb"];
+*\endmsc
+*/
+
+NFCSTATUS phLibNfc_CE_NtfRegister (pphLibNfc_CE_NotificationCb_t pCE_NotificationCb,
+ void * pContext
+ );
+
+
/**
* \ingroup grp_lib_nfc
*\brief This function unregister the registered listener for SE event.
-* This function unregisters the listener which has been registered with \ref
+* This function unregisters the listener which has been registered with \ref
* phLibNfc_SE_NtfRegister.
*
*\retval NFCSTATUS_SUCCESS Unregistration successful.
@@ -1144,7 +1242,7 @@ NFCSTATUS phLibNfc_SE_NtfRegister (pphLibNfc_SE_NotificationCb_t pSE_Notifica
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
-*LibNfcClient<-LibNfc [label="pInitCb"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
*--- [label="Perform feature operations "];
*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfRegister()",URL="\ref phLibNfc_SE_NtfRegister"];
LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
@@ -1152,7 +1250,7 @@ LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
*
*--- [label="In case external reader performs transactions,callback is notified as shown below"];
*
-*LibNfcClient<-LibNfc [label="pSE_NotificationCb"];
+*LibNfcClient<-LibNfc [label="pSE_NotificationCb"];
*--- [label="Unregister SE notification handler in case required "];
*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfUnregister()",URL="\ref phLibNfc_SE_NtfUnregister"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
@@ -1162,42 +1260,73 @@ LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
NFCSTATUS phLibNfc_SE_NtfUnregister(void);
/**
+* \ingroup grp_lib_nfc
+*\brief This function unregister the registered listener for CE event.
+* This function unregisters the listener which has been registered with \ref
+* phLibNfc_SE_NtfRegister.
+*
+*\retval NFCSTATUS_SUCCESS Unregistration successful.
+*\retval NFSCSTATUS_SHUTDOWN Shutdown in progress.
+*\retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+*\retval NFCSTATUS_FAILED Request failed.
+*\msc
+*LibNfcClient,LibNfc;
+*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
+*LibNfcClient<<LibNfc [label="NFCSTATUS_PENDING"];
+*LibNfcClient<-LibNfc [label="pInitCb"];
+*--- [label="Perform feature operations "];
+*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfRegister()",URL="\ref phLibNfc_CE_NtfRegister"];
+LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
+*--- [label="Registration sucessfull"];
+*
+*--- [label="In case external reader performs transactions,callback is notified as shown below"];
+*
+*LibNfcClient<-LibNfc [label="pCE_NotificationCb"];
+*--- [label="Unregister CE notification handler in case required "];
+*LibNfcClient=>LibNfc [label="phLibNfc_SE_NtfUnregister()",URL="\ref phLibNfc_CE_NtfUnregister"];
+*LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
+
+*\endmsc
+*/
+NFCSTATUS phLibNfc_CE_NtfUnregister(void);
+
+/**
*\ingroup grp_lib_nfc
-* \brief IOCTL interface.
+* \brief IOCTL interface.
*
-* The I/O Control function allows the caller to configure specific
-* functionality provided by the lower layer.Each feature is accessible via a
+* The I/O Control function allows the caller to configure specific
+* functionality provided by the lower layer.Each feature is accessible via a
* specific IOCTL Code.
*
* \param[in] pDriverHandle Interface handle.This parameter is valid only for firmware download feature.
* for other IOCTL features this parameter is not relevent.
*
-* \param[in] IoctlCode Control code for the operation.
-* This value identifies the specific
+* \param[in] IoctlCode Control code for the operation.
+* This value identifies the specific
* operation to be performed.For more details on supported
* IOCTL codes refer to \ref grp_lib_ioctl.
-*\param[in,out] pInParam Pointer to any input data structure
-* containing data which is interpreted
-* based on IoCtl code and the length of
+*\param[in,out] pInParam Pointer to any input data structure
+* containing data which is interpreted
+* based on IoCtl code and the length of
* the data.
*
-*\param[in,out] pOutParam Pointer to output buffer details to hold
+*\param[in,out] pOutParam Pointer to output buffer details to hold
* Ioctl specific response buffer and size of
* the buffer.This buffer will be updated and
* sent back as part of of callback details.
-*
-*\param[in] pIoCtl_Rsp_cb Response callback registered by the caller.
-*
+*
+*\param[in] pIoCtl_Rsp_cb Response callback registered by the caller.
+*
* \param[in] pContext Client context which will be included in
* callback when the request is completed.
*
*
*\retval NFCSTATUS_PENDING Update in pending state. RspCB will be
-* called later.
+* called later.
*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
-* could not be properly interpreted.
+* could not be properly interpreted.
*
-\retval NFCSTATUS_BUFFER_TOO_SMALL The buffer supplied by the caller is to
+\retval NFCSTATUS_BUFFER_TOO_SMALL The buffer supplied by the caller is to
*\retval NFSCSTATUS_SHUTDOWN Shutdown in progress.
*\retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
@@ -1217,26 +1346,26 @@ NFCSTATUS phLibNfc_SE_NtfUnregister(void);
*/
NFCSTATUS phLibNfc_Mgt_IoCtl (void* pDriverHandle,
uint16_t IoctlCode,
- phNfc_sData_t* pInParam,
+ phNfc_sData_t* pInParam,
phNfc_sData_t* pOutParam,
pphLibNfc_IoctlCallback_t pIoCtl_Rsp_cb,
- void* pContext
+ void* pContext
);
/**
* \ingroup grp_lib_nfc
* \brief This interface registers notification handler for target discovery.
*
-* This function allows libNfc client to register for notifications based technology
+* This function allows libNfc client to register for notifications based technology
* type it is interested to discover. In case application is interested in multiples technology
* discovery,it can enable respective bits in \b pRegistryInfo . when Registered type target
* is discovered in RF field ,LibNfc notifies registered notification callback.
*
-* \note In case this API is called multiple times ,most recent request registry details will be used
+* \note In case this API is called multiple times ,most recent request registry details will be used
*for registration.
-*
+*
*\param[in] pRegistryInfo structure contains bitwise registry information.
-* Specific technology type discovery can be registered if
+* Specific technology type discovery can be registered if
* corresponding bit is enabled.In case bit is disabled
* it indicates specific technology type unregistered.
*
@@ -1263,7 +1392,7 @@ NFCSTATUS phLibNfc_Mgt_IoCtl (void* pDriverHandle,
*\endmsc
*/
-NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
+NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
phLibNfc_Registry_Info_t* pRegistryInfo,
phLibNfc_NtfRegister_RspCb_t pNotificationHandler,
void* pContext
@@ -1274,17 +1403,17 @@ NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
* \ingroup grp_lib_nfc
* \brief Configure Discovery Modes.
*
-*This function is used to configure ,start and stop the discovery wheel.
-*Configuration includes
+*This function is used to configure ,start and stop the discovery wheel.
+*Configuration includes
*<br><br>a)Enabling/disabling of Reader phases for A,B and F technologies.
*<br>b)Configuring NFC-IP1 Initiator Speed and duration of the Emulation phase .
*
*Discovery wheel configuration based on discovery mode selected is as below.
-*<br><br>1.If discovery Mode is set as \ref NFC_DISCOVERY_CONFIG then previous configurations
+*<br><br>1.If discovery Mode is set as \ref NFC_DISCOVERY_CONFIG then previous configurations
* over written by new configurations passed in \ref phLibNfc_sADD_Cfg_t and Discovery wheel
*restarts with new configurations.
-*<br><br>2.If discovery Mode is set as \ref NFC_DISCOVERY_START or \ref NFC_DISCOVERY_STOP then
-* discovery parameters passed in \ref phLibNfc_sADD_Cfg_t will not be considered and previous
+*<br><br>2.If discovery Mode is set as \ref NFC_DISCOVERY_START or \ref NFC_DISCOVERY_STOP then
+* discovery parameters passed in \ref phLibNfc_sADD_Cfg_t will not be considered and previous
*configurations still holds good.
*<br><br>3.If discovery Mode is set as \ref NFC_DISCOVERY_RESUME discovery mode starts the discovery
*wheel from where it is stopped previously.
@@ -1292,28 +1421,28 @@ NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
*\b Note: Config types \b NFC_DISCOVERY_START, \b NFC_DISCOVERY_STOP and \b NFC_DISCOVERY_RESUME
* are not supported currently. It is for future use.
*
-* \param[in] DiscoveryMode Discovery Mode allows to choose between:
+* \param[in] DiscoveryMode Discovery Mode allows to choose between:
* discovery configuration and start, stop
* discovery and start discovery (with last
-* set configuration).For mode details refer to
-\ref phNfc_eDiscoveryConfigMode_t.
-* \param[in] sADDSetup Includes Enable/Disable discovery for
+* set configuration).For mode details refer to
+\ref phNfc_eDiscoveryConfigMode_t.
+* \param[in] sADDSetup Includes Enable/Disable discovery for
* each protocol A,B and F.
* Details refer to \ref phNfc_sADD_Cfg_t.
-* \param[in] pConfigDiscovery_RspCb is called once the discovery wheel
-* configuration is complete.
+* \param[in] pConfigDiscovery_RspCb is called once the discovery wheel
+* configuration is complete.
* \param[in] pContext Client context which will be included in
* callback when the request is completed.
-*
*
-*\retval NFCSTATUS_PENDING Discovery request is in progress and result
+*
+*\retval NFCSTATUS_PENDING Discovery request is in progress and result
* will be notified via callback later.
-*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
*\retval NFCSTATUS_NOT_INITIALISED Indicates stack is not initialized.
*\retval NFCSTATUS_INSUFFICIENT_RESOURCES Insufficient resource.(Ex: insufficient memory)
*\retval NFCSTATUS_BUSY already discovery in progress
-* or it is already discovered Target and
+* or it is already discovered Target and
* connected.
*\retval NFSCSTATUS_SHUTDOWN Shutdown in progress.
*\retval NFCSTATUS_FAILED Request failed.
@@ -1323,7 +1452,7 @@ NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
* to call \ref phLibNfc_RemoteDev_Connect before any transaction can be performed
* with the discovered target. Even if the LibNfc client is not
* interested in using any of the discovered targets \ref phLibNfc_RemoteDev_Connect
-* and \ref phLibNfc_RemoteDev_Disconnect should be called to restart the Discovery
+* and \ref phLibNfc_RemoteDev_Disconnect should be called to restart the Discovery
* wheel.
* \sa \ref phLibNfc_RemoteDev_Connect, phLibNfc_RemoteDev_Disconnect.
@@ -1331,7 +1460,7 @@ NFCSTATUS phLibNfc_RemoteDev_NtfRegister(
*LibNfcClient,LibNfc;
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_Initialize()",URL="\ref phLibNfc_Mgt_Initialize"];
*LibNfcClient<-LibNfc [label="pInitCb()",URL="\ref pphLibNfc_RspCb_t()"];
-*LibNfcClient=>LibNfc [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref
+*LibNfcClient=>LibNfc [label="phLibNfc_RemoteDev_NtfRegister()",URL="\ref
phLibNfc_RemoteDev_NtfRegister"];
*LibNfcClient<<LibNfc [label="NFCSTATUS_SUCCESS"];
*LibNfcClient=>LibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
@@ -1350,7 +1479,7 @@ phLibNfc_RemoteDev_NtfRegister"];
* \param NFCSTATUS_FAILED Request failed.
*/
-NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t DiscoveryMode,
+NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t DiscoveryMode,
phLibNfc_sADD_Cfg_t sADDSetup,
pphLibNfc_RspCb_t pConfigDiscovery_RspCb,
void* pContext
@@ -1363,10 +1492,10 @@ NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t Disc
*
* This function is called to connect to discovered target.
* Once notification handler notified sucessfully discovered targets will be available in
-* \ref phLibNfc_RemoteDevList_t .Remote device list contains valid handles for discovered
+* \ref phLibNfc_RemoteDevList_t .Remote device list contains valid handles for discovered
* targets .Using this interface LibNfc client can connect to one out of 'n' discovered targets.
* A new session is started after connect operation is successful.The session ends with a
-* successful disconnect operation.Connect operation on an already connected tag Reactivates
+* successful disconnect operation.Connect operation on an already connected tag Reactivates
* the Tag.This Feature is not Valid for Jewel/Topaz Tags ,and hence a second connect if issued
* without disconnecting a Jewel/Topaz tag always Fails.
*
@@ -1374,7 +1503,7 @@ NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t Disc
*
* \param[in] hRemoteDevice Handle of the target device obtained during discovery process.
*
-* \param[in] pNotifyConnect_RspCb Client response callback to be to be
+* \param[in] pNotifyConnect_RspCb Client response callback to be to be
* notified to indicate status of the request.
*
* \param[in] pContext Client context which will be included in
@@ -1382,7 +1511,7 @@ NFCSTATUS phLibNfc_Mgt_ConfigureDiscovery (phLibNfc_eDiscoveryConfigMode_t Disc
*
*\retval NFCSTATUS_PENDING Request initiated, result will be informed via
* callback.
-*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
*\retval NFCSTATUS_TARGET_LOST Indicates target is lost.
*\retval NFSCSTATUS_SHUTDOWN shutdown in progress.
@@ -1421,13 +1550,13 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(phLibNfc_Handle hRemoteDevic
*
* This function is called only if there are more than one remote device is detected.
* Once notification handler notified sucessfully discovered targets will be available in
-* \ref phLibNfc_RemoteDevList_t .Remote device list contains valid handles for discovered
+* \ref phLibNfc_RemoteDevList_t .Remote device list contains valid handles for discovered
* targets .Using this interface LibNfc client can connect to one out of 'n' discovered targets.
* A new session is started after connect operation is successful.
-* Similarly, if the user wants to connect to another handle. Libnfc client can select the handle and
+* Similarly, if the user wants to connect to another handle. Libnfc client can select the handle and
* the previously connected device is replaced by present handle. The session ends with a
-* successful disconnect operation.
-* Re-Connect operation on an already connected tag Reactivates the Tag. This Feature is not
+* successful disconnect operation.
+* Re-Connect operation on an already connected tag Reactivates the Tag. This Feature is not
* Valid for Jewel/Topaz Tags ,and hence a second re-connect if issued
* without disconnecting a Jewel/Topaz tag always Fails.
*
@@ -1435,7 +1564,7 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(phLibNfc_Handle hRemoteDevic
*
* \param[in] hRemoteDevice Handle of the target device obtained during discovery process.
*
-* \param[in] pNotifyReConnect_RspCb Client response callback to be to be
+* \param[in] pNotifyReConnect_RspCb Client response callback to be to be
* notified to indicate status of the request.
*
* \param[in] pContext Client context which will be included in
@@ -1443,7 +1572,7 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(phLibNfc_Handle hRemoteDevic
*
*\retval NFCSTATUS_PENDING Request initiated, result will be informed via
* callback.
-*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
*\retval NFCSTATUS_TARGET_LOST Indicates target is lost.
*\retval NFSCSTATUS_SHUTDOWN shutdown in progress.
@@ -1472,7 +1601,7 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(phLibNfc_Handle hRemoteDevic
*
*\endmsc
*/
-NFCSTATUS
+NFCSTATUS
phLibNfc_RemoteDev_ReConnect (
phLibNfc_Handle hRemoteDevice,
pphLibNfc_ConnectCallback_t pNotifyReConnect_RspCb,
@@ -1484,27 +1613,27 @@ phLibNfc_RemoteDev_ReConnect (
* \ingroup grp_lib_nfc
* \brief This interface allows to perform Read/write operation on remote device.
*
-* This function allows to send data to and receive data
-* from the target selected by libNfc client.It is also used by the
+* This function allows to send data to and receive data
+* from the target selected by libNfc client.It is also used by the
* NFCIP1 Initiator while performing a transaction with the NFCIP1 target.
-* The LibNfc client has to provide the handle of the target and the
+* The LibNfc client has to provide the handle of the target and the
* command in order to communicate with the selected remote device.
*
*
-*\param[in] hRemoteDevice handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
-* \param[in] psTransceiveInfo Information required by transceive is concealed in
-* this structure.It contains send,receive buffers
+* \param[in] psTransceiveInfo Information required by transceive is concealed in
+* this structure.It contains send,receive buffers
* and command specific details.
*
*
-* \param[in] pTransceive_RspCb Callback function for returning the received response
+* \param[in] pTransceive_RspCb Callback function for returning the received response
* or error.
* \param[in] pContext Client context which will be included in
* callback when the request is completed.
*
-* \retval NFCSTATUS_PENDING Request initiated, result will be informed through
+* \retval NFCSTATUS_PENDING Request initiated, result will be informed through
* the callback.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could
* not be properly interpreted or invalid.
@@ -1546,24 +1675,24 @@ NFCSTATUS phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteD
*\ingroup grp_lib_nfc
*\brief Allows to disconnect from already connected target.
*
-* The function allows to disconnect from from already connected target. This
-* function closes the session opened during connect operation.The status of discovery
-* wheel after disconnection is determined by the \ref phLibNfc_eReleaseType_t parameter.
+* The function allows to disconnect from from already connected target. This
+* function closes the session opened during connect operation.The status of discovery
+* wheel after disconnection is determined by the \ref phLibNfc_eReleaseType_t parameter.
* it is also used to switch from wired to virtual mode in case the discovered
-* device is SmartMX in wired mode.
+* device is SmartMX in wired mode.
*
-*\param[in] hRemoteDevice handle of the target device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the target device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
-* \param[in] ReleaseType Release mode to be used while
+* \param[in] ReleaseType Release mode to be used while
* disconnecting from target.Refer \ref phLibNfc_eReleaseType_t
* for possible release types.
-*\param[in] pDscntCallback Client response callback to be to be notified
+*\param[in] pDscntCallback Client response callback to be to be notified
to indicate status of the request.
* \param[in] pContext Client context which will be included in
* callback when the request is completed.
-*\retval NFCSTATUS_PENDING Request initiated, result will be informed through
+*\retval NFCSTATUS_PENDING Request initiated, result will be informed through
the callback.
*\retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not be
* properly interpreted.
@@ -1602,7 +1731,7 @@ NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle hRemote
phLibNfc_eReleaseType_t ReleaseType,
pphLibNfc_DisconnectCallback_t pDscntCallback,
void* pContext
- );
+ );
@@ -1612,7 +1741,7 @@ NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle hRemote
*
* This function unregisters the listener which has been registered with
* phLibNfc_RemoteDev_NtfUnregister() before. After this call the callback
-* function won't be called anymore. If nothing is registered the
+* function won't be called anymore. If nothing is registered the
* function still succeeds
* \retval NFCSTATUS_SUCCESS callback unregistered.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -1641,8 +1770,8 @@ NFCSTATUS phLibNfc_RemoteDev_NtfUnregister(void);
* tag is present in RF field or not.
*
*
-*\param[in] hRemoteDevice handle of the target device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the target device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
* \param[in] pPresenceChk_RspCb callback function called on completion of the
* presence check or in case an error has occurred.
@@ -1699,15 +1828,15 @@ NFCSTATUS phLibNfc_RemoteDev_CheckPresence( phLibNfc_Handle hRemoteDevice,
*\brief Allows to check connected tag is NDEF compliant or not.
* This function allows to validate connected tag is NDEF compliant or not.
*
-*\param[in] hRemoteDevice handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
-*\param[in] pCheckNdef_RspCb Response callback defined by the caller.
+*\param[in] pCheckNdef_RspCb Response callback defined by the caller.
*\param[in] pContext Client context which will be included in
* callback when the request is completed.
*
* \retval NFCSTATUS_PENDING The action has been successfully triggered.
-* \retval NFCSTATUS_INVALID_PARAMETER At least one parameter of the function
+* \retval NFCSTATUS_INVALID_PARAMETER At least one parameter of the function
* is invalid.
* \retval NFCSTATUS_TARGET_LOST Indicates target is lost
* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
@@ -1739,7 +1868,7 @@ NFCSTATUS phLibNfc_RemoteDev_CheckPresence( phLibNfc_Handle hRemoteDevice,
* \param[in] status Status of the response callback.
*
* \param NFCSTATUS_SUCCESS Successful and tag is NDEF compliant .
-* \param NFCSTATUS_TARGET_LOST NDEF check operation is failed because of target is ** lost.
+* \param NFCSTATUS_TARGET_LOST NDEF check operation is failed because of target is ** lost.
* \param NFCSTATUS_SHUTDOWN Shutdown in progress.
* \param NFCSTATUS_ABORTED Aborted due to disconnect operation in between.
* \param NFCSTATUS_FAILED Request failed.
@@ -1752,26 +1881,26 @@ NFCSTATUS phLibNfc_Ndef_CheckNdef(phLibNfc_Handle hRemoteDevice,
/**
* \ingroup grp_lib_nfc
* \brief Read NDEF message from a Tag.
-* This function reads an NDEF message from already connected tag.
-* the NDEF message is read starting after the position of the last read operation
+* This function reads an NDEF message from already connected tag.
+* the NDEF message is read starting after the position of the last read operation
* of the same tag during current session.
* If it's FALSE the NDEF message is read from starting of the NDEF message.
-* If the call returns with NFCSTATUS_PENDING , a response callback pNdefRead_RspCb is
+* If the call returns with NFCSTATUS_PENDING , a response callback pNdefRead_RspCb is
* called ,when the read operation is complete.
*
*\note Before issuing NDEF read operation LibNfc client should perform NDEF check operation
* using \ref phLibNfc_Ndef_CheckNdef interface.
-* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
+* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
-*\param[in] hRemoteDevice handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
* \param[in] psRd Pointer to the read buffer info.
-* \param[in] Offset Reading Offset : phLibNfc_Ndef_EBegin means from the
-* beginning, phLibNfc_Ndef_ECurrent means from the
-* current offset.
-* \param[in] pNdefRead_RspCb Response callback defined by the caller.
+* \param[in] Offset Reading Offset : phLibNfc_Ndef_EBegin means from the
+* beginning, phLibNfc_Ndef_ECurrent means from the
+* current offset.
+* \param[in] pNdefRead_RspCb Response callback defined by the caller.
* \param[in] pContext Client context which will be included in
* callback when the request is completed.
*
@@ -1780,13 +1909,13 @@ NFCSTATUS phLibNfc_Ndef_CheckNdef(phLibNfc_Handle hRemoteDevice,
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress
* \retval NFCSTATUS_INVALID_HANDLE Target handle is invalid
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
* be properly interpreted.
-* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
+* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
* \retval NFCSTATUS_FAILED Read operation failed since tag does not contain NDEF data.
* \retval NFCSTATUS_NON_NDEF_COMPLIANT Tag is not Ndef Compliant.
-* \param NFCSTATUS_REJECTED Rejected due to NDEF read issued on non
-* ,or Ndef check has not been performed
+* \param NFCSTATUS_REJECTED Rejected due to NDEF read issued on non
+* ,or Ndef check has not been performed
* before the readNDEF tag.
*
*\msc
@@ -1830,27 +1959,27 @@ NFCSTATUS phLibNfc_Ndef_Read(phLibNfc_Handle hRemoteDevice,
* \brief Write NDEF data to NFC tag.
*
* This function allows the client to write a NDEF data to already connected NFC tag.
-* Function writes a complete NDEF message to a tag. If a NDEF message already
+* Function writes a complete NDEF message to a tag. If a NDEF message already
* exists in the tag, it will be overwritten. When the transaction is complete,
* a notification callback is notified.
-*
+*
*\note Before issuing NDEF write operation LibNfc client should perform NDEF check operation
* using \ref phLibNfc_Ndef_CheckNdef interface.
*
-*\param[in] hRemoteDevice handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
-*\param[in] psWr Ndef Buffer to write. If NdefMessageLen is set to 0
+*\param[in] psWr Ndef Buffer to write. If NdefMessageLen is set to 0
* and pNdefMessage = NULL, the NFC library will erase
* tag internally.
-*\param[in] pNdefWrite_RspCb Response callback defined by the caller.
+*\param[in] pNdefWrite_RspCb Response callback defined by the caller.
*\param[in] pContext Client context which will be included in
* callback when the request is completed.
*
*\note If \ref phNfc_sData_t.NdefMessageLen is 0 bytes, this function will erase all
*current NDEF data present in the tag. Any non-zero length buffer size
*will attempt to write NEDF data onto the tag.
-* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
+* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
*
@@ -1858,11 +1987,11 @@ NFCSTATUS phLibNfc_Ndef_Read(phLibNfc_Handle hRemoteDevice,
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
* \retval NFCSTATUS_INVALID_HANDLE Target handle is invalid.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
* be properly interpreted.
* \retval NFCSTATUS_NON_NDEF_COMPLIANT Tag is not Ndef Compliant.
-* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
-* \retval NFCSTATUS_REJECTED Rejected due to NDEF write issued without
+* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
+* \retval NFCSTATUS_REJECTED Rejected due to NDEF write issued without
* performing a CheckNdef().
* \retval NFCSTATUS_FAILED operation failed.
*
@@ -1911,21 +2040,21 @@ NFCSTATUS phLibNfc_Ndef_Write (phLibNfc_Handle hRemoteDevice,
* \brief Format target.
*
* This function allows the LibNfc client to perform NDEF formating operation on discovered target.
-This function formats given target
+This function formats given target
*
-*\note
+*\note
* <br>1. Prior to formating it is recommended to perform NDEF check using \ref phLibNfc_Ndef_CheckNdef interface.
* <br>2. formatting feature supported only for MIFARE Std,MIFARE UL and Desfire tag types.
-* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
+* If the call back error code is NFCSTATUS_FAILED then the LIBNFC client has to do the
* phLibNfc_RemoteDev_CheckPresence to find , its communication error or target lost.
*
-*\param[in] hRemoteDevice handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
*\param[in] pScrtKey info containing the secret key data
-* and Secret key buffer length.
+* and Secret key buffer length.
*
-*\param[in] pNdefformat_RspCb Response callback defined by the caller.
+*\param[in] pNdefformat_RspCb Response callback defined by the caller.
*\param[in] pContext Client context which will be included in
* callback when the request is completed.
*
@@ -1934,9 +2063,9 @@ This function formats given target
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
* \retval NFCSTATUS_INVALID_HANDLE Target handle is invalid.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
* be properly interpreted.
-* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
+* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
* \retval NFCSTATUS_FAILED operation failed.
* \retval NFCSTATUS_REJECTED Tag is already formatted one.
*
@@ -1972,7 +2101,7 @@ This function formats given target
*/
NFCSTATUS phLibNfc_RemoteDev_FormatNdef(phLibNfc_Handle hRemoteDevice,
- phNfc_sData_t* pScrtKey,
+ phNfc_sData_t* pScrtKey,
pphLibNfc_RspCb_t pNdefformat_RspCb,
void* pContext
);
@@ -2053,7 +2182,7 @@ NFCSTATUS phLibNfc_ConvertToReadOnlyNdef (phLibNfc_Handle hRemoteDevice,
/**
* \ingroup grp_lib_nfc
* \brief <b>Search for NDEF Record type</b>.
-*
+*
* This function allows LibNfc client to search NDEF content based on TNF value and type \n
*
*This API allows to find NDEF records based on RTD (Record Type Descriptor) info.
@@ -2061,17 +2190,17 @@ NFCSTATUS phLibNfc_ConvertToReadOnlyNdef (phLibNfc_Handle hRemoteDevice,
*In case there is match LibNfc notifies LibNfc client with NDEF information details.
*LibNfc client can search a new NDEF registration type once the previous call is handled.
*
-*\param[in] hRemoteDevice Handle of the remote device.This handle to be
-* same as as handle obtained for specific remote device
+*\param[in] hRemoteDevice Handle of the remote device.This handle to be
+* same as as handle obtained for specific remote device
* during device discovery.
*\param[in] psSrchTypeList List of NDEF records to be looked in based on TNF value and type.
* For NDEF search type refer to \ref phLibNfc_Ndef_SrchType.
* If this set to NULL then it means that libNfc client interested in
* all possible NDEF records.
*
-*\param[in] uNoSrchRecords Indicates no of NDEF records in requested list as mentioned
+*\param[in] uNoSrchRecords Indicates no of NDEF records in requested list as mentioned
* in psSrchTypeList.
-*\param[in] pNdefNtfRspCb Response callback defined by the caller.
+*\param[in] pNdefNtfRspCb Response callback defined by the caller.
*\param[in] pContext Client context which will be included in
* callback when callback is notified.
*
@@ -2080,11 +2209,11 @@ NFCSTATUS phLibNfc_ConvertToReadOnlyNdef (phLibNfc_Handle hRemoteDevice,
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_INVALID_HANDLE Target handle is invalid.
-* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters could not
* be properly interpreted.
-* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
+* \retval NFCSTATUS_TARGET_NOT_CONNECTED The Remote Device is not connected.
* \retval NFCSTATUS_FAILED operation failed.
-* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
*
* \retval NFCSTATUS_ABORTED Aborted due to disconnect request in between.
*\msc
@@ -2111,12 +2240,12 @@ NFCSTATUS phLibNfc_ConvertToReadOnlyNdef (phLibNfc_Handle hRemoteDevice,
* \param[in] status Status of the response callback.
*
*/
-NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
+NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
phLibNfc_Handle hRemoteDevice,
- phLibNfc_Ndef_SrchType_t* psSrchTypeList,
+ phLibNfc_Ndef_SrchType_t* psSrchTypeList,
uint8_t uNoSrchRecords,
- pphLibNfc_Ndef_Search_RspCb_t pNdefNtfRspCb,
- void * pContext
+ pphLibNfc_Ndef_Search_RspCb_t pNdefNtfRspCb,
+ void * pContext
);
@@ -2126,22 +2255,22 @@ NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
* \ingroup grp_lib_nfc
* \brief <b> Interface used to receive data from initiator at target side during P2P communication</b>.
*
-*This function Allows the NFC-IP1 target to retrieve data/commands coming from the
-*Initiator.Once this function is called by LibNfc client on target side it waits for
+*This function Allows the NFC-IP1 target to retrieve data/commands coming from the
+*Initiator.Once this function is called by LibNfc client on target side it waits for
*receiving data from initiator.It is used by libNfc client which acts as target during P2P
*communication.
*
-*\note : Once this API is called,its mandatory to wait for receive
-*\ref pphLibNfc_Receive_RspCb_t callback notification,before calling any other
+*\note : Once this API is called,its mandatory to wait for receive
+*\ref pphLibNfc_Receive_RspCb_t callback notification,before calling any other
*API.Only function allowed is \ref phLibNfc_Mgt_DeInitialize.
*
* \param[in] hRemoteDevice Peer handle obtained during device discovery process.
-*
-* \param[in] pReceiveRspCb Callback function called after receiving
-* the data or in case an error has
+*
+* \param[in] pReceiveRspCb Callback function called after receiving
+* the data or in case an error has
* has occurred.
*
-* \param[in] pContext Upper layer context to be returned
+* \param[in] pContext Upper layer context to be returned
* in the callback.
*
* \retval NFCSTATUS_PENDING Receive operation is in progress.
@@ -2151,13 +2280,13 @@ NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
-* initiator issued disconnect or intiator
+* initiator issued disconnect or intiator
* physically removed from the RF field.
*
*\retval NFCSTATUS_REJECTED Indicates invalid request.
*\retval NFCSTATUS_FAILED Request failed.
*
-*\msc
+*\msc
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref phLibNfc_Mgt_SetP2P_ConfigParams"];
@@ -2167,7 +2296,7 @@ NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
-*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
+*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
@@ -2181,7 +2310,7 @@ NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
*--- [label="On connect target must be immediately ready to receive data from initiator"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_RemoteDev_Receive()",URL="\ref phLibNfc_RemoteDev_Receive"];
*--- [label="Now target waits to receive data from intiator"];
-*--- [label="Send data from initiator now"];
+*--- [label="Send data from initiator now"];
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_RemoteDev_Transceive()",URL="\ref phLibNfc_RemoteDev_Transceive "];
*P2PInitiatorClient<-InitiatorLibNfc [label="pTransceive_RspCb",URL="\ref pphLibNfc_TransceiveCallback_t"];
*--- [label="Now data arrived at target side"];
@@ -2197,19 +2326,131 @@ NFCSTATUS phLibNfc_Ndef_SearchNdefContent(
* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
* or intiator removed physically from the RF field.
* This status code reported,to indicate P2P session
-* closed and send and receive requests not allowed
+* closed and send and receive requests not allowed
* any more unless new session is started.
* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
-* initiator issued disconnect or intiator
+* initiator issued disconnect or intiator
* physically removed from the RF field.
*/
-extern
-NFCSTATUS
+extern
+NFCSTATUS
phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
pphLibNfc_Receive_RspCb_t pReceiveRspCb,
void* pContext
);
+/**
+* \ingroup grp_lib_nfc
+* \brief <b> Interface used to receive data from reader at target side during communication</b>.
+*
+*This function Allows the target to retrieve data/commands coming from the
+*Reader.Once this function is called by LibNfc client on target side it waits for
+*receiving data from initiator.It is used by libNfc client which acts as target during P2P
+*communication.
+*
+*\note : Once this API is called,its mandatory to wait for receive
+*\ref pphLibNfc_Receive_RspCb_t callback notification,before calling any other
+*API.Only function allowed is \ref phLibNfc_Mgt_DeInitialize.
+*
+* \param[in] pReceiveRspCb Callback function called after receiving
+* the data or in case an error has
+* has occurred.
+*
+* \param[in] pContext Upper layer context to be returned
+* in the callback.
+*
+* \retval NFCSTATUS_PENDING Receive operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Receive operation successful.
+* \param NFCSTATUS_SHUTDOWN Receive operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_A_Receive(
+ pphLibNfc_TransceiveCallback_t pReceiveRspCb,
+ void* pContext
+ );
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b> Interface used to receive data from reader at target side during communication</b>.
+*
+*This function Allows the target to retrieve data/commands coming from the
+*Reader.Once this function is called by LibNfc client on target side it waits for
+*receiving data from initiator.It is used by libNfc client which acts as target during P2P
+*communication.
+*
+*\note : Once this API is called,its mandatory to wait for receive
+*\ref pphLibNfc_Receive_RspCb_t callback notification,before calling any other
+*API.Only function allowed is \ref phLibNfc_Mgt_DeInitialize.
+*
+* \param[in] pReceiveRspCb Callback function called after receiving
+* the data or in case an error has
+* has occurred.
+*
+* \param[in] pContext Upper layer context to be returned
+* in the callback.
+*
+* \retval NFCSTATUS_PENDING Receive operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Receive operation successful.
+* \param NFCSTATUS_SHUTDOWN Receive operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_B_Receive(
+ pphLibNfc_TransceiveCallback_t pReceiveRspCb,
+ void* pContext
+ );
+
@@ -2218,20 +2459,20 @@ phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
* \ingroup grp_lib_nfc
* \brief <b>Interface used to send data from target to initiator during P2P communication</b>.
*
-*This function Allows the NFC-IP1 target to send data to Initiator,in response to packet received
-*from initiator during P2P communication.It is must prior to send request target has received
+*This function Allows the NFC-IP1 target to send data to Initiator,in response to packet received
+*from initiator during P2P communication.It is must prior to send request target has received
*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
*
*
* \param[in] hRemoteDevice Peer handle obtained during device discovery process.
*
-* \param[in] pTransferData Data and the length of the data to be
+* \param[in] pTransferData Data and the length of the data to be
* transferred.
-* \param[in] pSendRspCb Callback function called on completion
-* of the NfcIP sequence or in case an
+* \param[in] pSendRspCb Callback function called on completion
+* of the NfcIP sequence or in case an
* error has occurred.
*
-* \param[in] pContext Upper layer context to be returned in
+* \param[in] pContext Upper layer context to be returned in
* the callback.
*
** \retval NFCSTATUS_PENDING Send operation is in progress.
@@ -2240,14 +2481,14 @@ phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
-* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
-* initiator issued disconnect or intiator
+* initiator issued disconnect or intiator
* physically removed from the RF field.
*\retval NFCSTATUS_REJECTED Indicates invalid request.
*\retval NFCSTATUS_FAILED Request failed.
*
-*\msc
+*\msc
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref phLibNfc_Mgt_SetP2P_ConfigParams"];
@@ -2257,7 +2498,7 @@ phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
*P2PInitiatorClient<-InitiatorLibNfc [label="pConfigRspCb()",URL="\ref pphLibNfc_RspCb_t"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
-*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
+*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
@@ -2271,7 +2512,7 @@ phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
*--- [label="On connect target must be immediately ready to receive data from initiator"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_RemoteDev_Receive()",URL="\ref phLibNfc_RemoteDev_Receive"];
*--- [label="Now target waits to receive data from intiator"];
-*--- [label="Send data from initiator now"];
+*--- [label="Send data from initiator now"];
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_RemoteDev_Transceive()",URL="\ref phLibNfc_RemoteDev_Transceive "];
*--- [label="Now data arrived at target side"];
*P2PTargetClient<-P2PTargetLibNfc [label="pReceiveRspCb",URL="\ref pphLibNfc_Receive_RspCb_t"];
@@ -2291,16 +2532,16 @@ phLibNfc_RemoteDev_Receive( phLibNfc_Handle hRemoteDevice,
* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
* or intiator removed physically from the RF field.
* This status code reported,to indicate P2P session
-* closed and send and receive requests not allowed
+* closed and send and receive requests not allowed
* any more unless new session is started.
* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
-* initiator issued disconnect or intiator
+* initiator issued disconnect or intiator
* physically removed from the RF field.
*
*
*/
-extern
-NFCSTATUS
+extern
+NFCSTATUS
phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice,
phNfc_sData_t* pTransferData,
pphLibNfc_RspCb_t pSendRspCb,
@@ -2309,8 +2550,238 @@ phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice,
/**
* \ingroup grp_lib_nfc
+* \brief <b>Interface used to send data from A target to reader during communication</b>.
+*
+*This function Allows the A type target to send data to Initiator,in response to packet received
+*from reader during CE communication.It is must prior to send request target has received
+*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
+*
+*
+* \param[in] pTransferData Data and the length of the data to be
+* transferred.
+* \param[in] pSendRspCb Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+** \retval NFCSTATUS_PENDING Send operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Send operation successful.
+* \param NFCSTATUS_SHUTDOWN Send operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_A_Send(
+ phNfc_sData_t* pTransferData,
+ pphLibNfc_RspCb_t pSendRspCb,
+ void* pContext
+ );
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface used to send data from A target to reader during communication</b>.
+*
+*This function Allows the B type target to send data to Initiator,in response to packet received
+*from reader during CE communication.It is must prior to send request target has received
+*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
+*
+*
+* \param[in] pTransferData Data and the length of the data to be
+* transferred.
+* \param[in] pSendRspCb Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+** \retval NFCSTATUS_PENDING Send operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Send operation successful.
+* \param NFCSTATUS_SHUTDOWN Send operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_B_Send(
+ phNfc_sData_t* pTransferData,
+ pphLibNfc_RspCb_t pSendRspCb,
+ void* pContext
+ );
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface used to transceive data from A target to reader during communication</b>.
+*
+*This function Allows the A type target to send data to Initiator,in response to packet received
+*from reader during CE communication.It is must prior to send request target has received
+*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
+*
+*
+* \param[in] pTransferData Data and the length of the data to be
+* transferred.
+* \param[in] pRecvRspCb Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+** \retval NFCSTATUS_PENDING Send operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Send operation successful.
+* \param NFCSTATUS_SHUTDOWN Send operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_A_Transceive(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_TransceiveCallback_t pTransceive_RspCb,
+ void *pContext
+ );
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface used to transceive data from B target to reader during communication</b>.
+*
+*This function Allows the B type target to send data to Initiator,in response to packet received
+*from reader during CE communication.It is must prior to send request target has received
+*data from initiator using \ref phLibNfc_RemoteDev_Receive interface.
+*
+*
+* \param[in] pTransferData Data and the length of the data to be
+* transferred.
+* \param[in] pRecvRspCb Callback function called on completion
+* of the NfcIP sequence or in case an
+* error has occurred.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+** \retval NFCSTATUS_PENDING Send operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_INVALID_DEVICE The device has been disconnected meanwhile.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*\retval NFCSTATUS_REJECTED Indicates invalid request.
+*\retval NFCSTATUS_FAILED Request failed.
+*
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS Send operation successful.
+* \param NFCSTATUS_SHUTDOWN Send operation failed because Shutdown in progress.
+* \param NFCSTATUS_ABORTED Aborted due to initiator issued disconnect request.
+* or intiator removed physically from the RF field.
+* This status code reported,to indicate P2P session
+* closed and send and receive requests not allowed
+* any more unless new session is started.
+* \param NFCSTATUS_DESELECTED Receive operation is not possible due to
+* initiator issued disconnect or intiator
+* physically removed from the RF field.
+*
+*
+*/
+extern
+NFCSTATUS
+phLibNfc_RemoteDev_CE_B_Transceive(
+ phNfc_sData_t * pTransferData,
+ pphLibNfc_TransceiveCallback_t pTransceive_RspCb,
+ void *pContext
+ );
+/**
+* \ingroup grp_lib_nfc
* \brief <b>Interface to configure P2P and intiator mode configurations</b>.
-* The setting will be typically take effect for the next cycle of the relevant
+* The setting will be typically take effect for the next cycle of the relevant
* phase of discovery. For optional configuration internal defaults will be
* used in case the configuration is not set.
*
@@ -2319,10 +2790,10 @@ phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice,
* \param[in] pConfigInfo Union containing P2P configuration details as
* in \ref phLibNfc_sNfcIPCfg_t.
*
-* \param[in] pConfigRspCb This callback has to be called once LibNfc
+* \param[in] pConfigRspCb This callback has to be called once LibNfc
* completes the Configuration.
*
-* \param[in] pContext Upper layer context to be returned in
+* \param[in] pContext Upper layer context to be returned in
* the callback.
*
*
@@ -2331,9 +2802,9 @@ phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice,
* could not be properly interpreted.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
-* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
*
-*\msc
+*\msc
*P2PInitiatorClient,InitiatorLibNfc,P2PTargetLibNfc,P2PTargetClient;
*--- [label="stack is intialised and P2P notification handler registered alredy"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref phLibNfc_Mgt_SetP2P_ConfigParams"];
@@ -2342,7 +2813,7 @@ phLibNfc_RemoteDev_Send(phLibNfc_Handle hRemoteDevice,
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_Mgt_SetP2P_ConfigParams()",URL="\ref phLibNfc_Mgt_SetP2P_ConfigParams"];
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
*P2PTargetClient=>P2PTargetLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
-*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
+*P2PTargetClient<<P2PTargetLibNfc [label="NFCSTATUS_PENDING"];
*P2PTargetClient<-P2PTargetLibNfc [label="pConfigDiscovery_RspCb",URL="\ref pphLibNfc_RspCb_t"];
*P2PInitiatorClient=>InitiatorLibNfc [label="phLibNfc_Mgt_ConfigureDiscovery()",URL="\ref phLibNfc_Mgt_ConfigureDiscovery"];
*P2PInitiatorClient<<InitiatorLibNfc [label="NFCSTATUS_PENDING"];
@@ -2371,12 +2842,114 @@ extern NFCSTATUS phLibNfc_Mgt_SetP2P_ConfigParams( phLibNfc_sNfcIPCfg_t* pCo
void* pContext
);
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface to break any existing pending callbacks for card emulation</b>.
+* \retval NFCSTATUS_SUCCESS Config operation succeeded.
+* \retval NFCSTATUS_NOT_INITIALISED There was no callback in progress.
+*
+*/
+
+extern NFCSTATUS phLibNfc_Mgt_Unblock_Cb_CE_A_14443_4( );
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface to break any existing pending callbacks for card emulation</b>.
+* \retval NFCSTATUS_SUCCESS Config operation succeeded.
+* \retval NFCSTATUS_NOT_INITIALISED There was no callback in progress.
+*
+*/
+
+extern NFCSTATUS phLibNfc_Mgt_Unblock_Cb_CE_B_14443_4( );
+
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface to configure Card Emulation mode configurations</b>.
+* The setting will be typically take effect for the next cycle of the relevant
+* phase of discovery. For optional configuration internal defaults will be
+* used in case the configuration is not set.
+*
+*\note Currently general bytes configuration supported.
+*
+* \param[in] bool turn on or off (TRUE/FALSE)
+*
+* \param[in] pConfigRspCb This callback has to be called once LibNfc
+* completes the Configuration.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+*
+* \retval NFCSTATUS_PENDING Config operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS configuration operation is successful.
+* \param NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \param NFCSTATUS_FAILED Request failed.
+*
+*/
+extern NFCSTATUS phLibNfc_Mgt_SetCE_A_14443_4_ConfigParams(
+ uint8_t emulate,
+ pphLibNfc_RspCb_t pConfigRspCb,
+ void* pContext
+ );
+/**
+* \ingroup grp_lib_nfc
+* \brief <b>Interface to configure Card Emulation mode configurations</b>.
+* The setting will be typically take effect for the next cycle of the relevant
+* phase of discovery. For optional configuration internal defaults will be
+* used in case the configuration is not set.
+*
+*\note Currently general bytes configuration supported.
+*
+* \param[in] bool turn on or off (TRUE/FALSE)
+*
+* \param[in] pConfigRspCb This callback has to be called once LibNfc
+* completes the Configuration.
+*
+* \param[in] pContext Upper layer context to be returned in
+* the callback.
+*
+*
+* \retval NFCSTATUS_PENDING Config operation is in progress.
+* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
+* could not be properly interpreted.
+* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
+* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \retval NFCSTATUS_BUSY Previous request in progress can not accept new request.
+*
+*\note Response callback parameters details for this interface are as listed below.
+*
+* \param[in] pContext LibNfc client context passed in the corresponding request before.
+* \param[in] status Status of the response callback.
+*
+* \param NFCSTATUS_SUCCESS configuration operation is successful.
+* \param NFCSTATUS_SHUTDOWN Shutdown in progress.
+* \param NFCSTATUS_FAILED Request failed.
+*
+*/
+extern NFCSTATUS phLibNfc_Mgt_SetCE_B_14443_4_ConfigParams(
+ uint8_t emulate,
+ pphLibNfc_RspCb_t pConfigRspCb,
+ void* pContext
+ );
+
/**
* \ingroup grp_lib_nfc
* \brief <b>Interface to stack capabilities</b>.
*
* LibNfc client can query to retrieve stack capabilities.Stack capabilities contains
-* <br><br>a).Device capabilities which contains details like protocols supported,
+* <br><br>a).Device capabilities which contains details like protocols supported,
* Hardware,Firmware and model-id version details .For details refer to \ref phNfc_sDeviceCapabilities_t.
* <br><br>b).NDEF mapping related info. This info helps in identifying supported tags for NDEF mapping feature.
* <br><br>c).NDEF formatting related info. This info helps in identifying supported tags for NDEF formatting feature.
@@ -2384,7 +2957,7 @@ extern NFCSTATUS phLibNfc_Mgt_SetP2P_ConfigParams( phLibNfc_sNfcIPCfg_t* pCo
* \param[in] phLibNfc_StackCapabilities Contains device capabilities and NDEF mapping and formatting feature
support for different tag types.
*
-* \param[in] pContext Upper layer context to be returned in
+* \param[in] pContext Upper layer context to be returned in
* the callback.
*
*
@@ -2488,7 +3061,7 @@ extern NFCSTATUS phLibNfc_Llcp_CheckLlcp( phLibNfc_Handle hRemoteDe
* This function launches the link activation process on a remote LLCP-compliant peer. The link status
* notification will be sent by the corresponding callback given in the phLibNfc_Llcp_CheckLlcp function.
* If the activation fails, the deactivated status will be notified, even if the link is already in a
-* deactivated state.
+* deactivated state.
*
* \param[in] hRemoteDevice Peer handle obtained during device discovery process.
*
@@ -2579,7 +3152,7 @@ extern NFCSTATUS phLibNfc_Llcp_GetRemoteInfo( phLibNfc_Handle
* \ingroup grp_lib_nfc
* \brief <b>Create a socket on a LLCP-connected device</b>.
*
-* This function creates a socket for a given LLCP link. Sockets can be of two types :
+* This function creates a socket for a given LLCP link. Sockets can be of two types :
* connection-oriented and connectionless. If the socket is connection-oriented, the caller
* must provide a working buffer to the socket in order to handle incoming data. This buffer
* must be large enough to fit the receive window (RW * MIU), the remaining space being
@@ -2692,7 +3265,7 @@ extern NFCSTATUS phLibNfc_Llcp_Close( phLibNfc_Handle hSocket );
* \retval NFCSTATUS_SUCCESS Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2717,7 +3290,7 @@ extern NFCSTATUS phLibNfc_Llcp_SocketGetLocalOptions( phLibNfc_Handle
* \retval NFCSTATUS_SUCCESS Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2741,7 +3314,7 @@ extern NFCSTATUS phLibNfc_Llcp_SocketGetRemoteOptions( phLibNfc_Handle
* \retval NFCSTATUS_SUCCESS Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
* could not be properly interpreted.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_ALREADY_REGISTERED The selected SAP is already bound to another
socket.
@@ -2801,7 +3374,7 @@ extern NFCSTATUS phLibNfc_Llcp_Listen( phLibNfc_Handle hSocket,
* \param[in] psWorkingBuffer A working buffer to be used by the library.
* \param[in] pErr_Cb The callback to be called each time the accepted socket
* is in error.
-* \param[in] pAccept_RspCb The callback to be called when the Accept operation
+* \param[in] pAccept_RspCb The callback to be called when the Accept operation
* is completed.
* \param[in] pContext Upper layer context to be returned in the callback.
*
@@ -2832,7 +3405,7 @@ extern NFCSTATUS phLibNfc_Llcp_Accept( phLibNfc_Handle hSocket,
* is implicitly closed when the function is called.
*
* \param[in] hSocket Socket handle obtained in the listening callback.
-* \param[in] pReject_RspCb The callback to be called when the Reject operation
+* \param[in] pReject_RspCb The callback to be called when the Reject operation
* is completed.
* \retval NFCSTATUS_SUCCESS Operation successful.
* \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
@@ -2866,7 +3439,7 @@ extern NFCSTATUS phLibNfc_Llcp_Reject( phLibNfc_Handle hRemoteD
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Connection operation is in progress,
* pConnect_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2899,7 +3472,7 @@ extern NFCSTATUS phLibNfc_Llcp_Connect( phLibNfc_Handle hRemoteD
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Connection operation is in progress,
* pConnect_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2920,7 +3493,7 @@ extern NFCSTATUS phLibNfc_Llcp_ConnectByUri( phLibNfc_Handle hRe
* This function initiates the disconnection of a previously connected socket.
*
* \param[in] hSocket Socket handle obtained during socket creation.
-* \param[in] pDisconnect_RspCb The callback to be called when the
+* \param[in] pDisconnect_RspCb The callback to be called when the
* operation is completed.
* \param[in] pContext Upper layer context to be returned in
* the callback.
@@ -2930,7 +3503,7 @@ extern NFCSTATUS phLibNfc_Llcp_ConnectByUri( phLibNfc_Handle hRe
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Disconnection operation is in progress,
* pDisconnect_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2952,11 +3525,11 @@ extern NFCSTATUS phLibNfc_Llcp_Disconnect( phLibNfc_Handle hR
* are available. If no data is available, the function will be pending until
* more data comes, and the response will be sent by the callback. This function
* can only be called on a connection-oriented socket.
-*
+*
*
* \param[in] hSocket Socket handle obtained during socket creation.
* \param[in] psBuffer The buffer receiving the data.
-* \param[in] pRecv_RspCb The callback to be called when the
+* \param[in] pRecv_RspCb The callback to be called when the
* operation is completed.
* \param[in] pContext Upper layer context to be returned in
* the callback.
@@ -2966,7 +3539,7 @@ extern NFCSTATUS phLibNfc_Llcp_Disconnect( phLibNfc_Handle hR
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Reception operation is in progress,
* pRecv_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -2986,11 +3559,11 @@ extern NFCSTATUS phLibNfc_Llcp_Recv( phLibNfc_Handle hRemoteDevice,
*
* This function is the same as phLibNfc_Llcp_Recv, except that the callback includes
* the source SAP. This functions can only be called on a connectionless socket.
-*
+*
*
* \param[in] hSocket Socket handle obtained during socket creation.
* \param[in] psBuffer The buffer receiving the data.
-* \param[in] pRecv_RspCb The callback to be called when the
+* \param[in] pRecv_RspCb The callback to be called when the
* operation is completed.
* \param[in] pContext Upper layer context to be returned in
* the callback.
@@ -3000,7 +3573,7 @@ extern NFCSTATUS phLibNfc_Llcp_Recv( phLibNfc_Handle hRemoteDevice,
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Reception operation is in progress,
* pRecv_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -3021,11 +3594,11 @@ extern NFCSTATUS phLibNfc_Llcp_RecvFrom( phLibNfc_Handle hRemo
* This function is used to write data on a socket. This function
* can only be called on a connection-oriented socket which is already
* in a connected state.
-*
+*
*
* \param[in] hSocket Socket handle obtained during socket creation.
* \param[in] psBuffer The buffer containing the data to send.
-* \param[in] pSend_RspCb The callback to be called when the
+* \param[in] pSend_RspCb The callback to be called when the
* operation is completed.
* \param[in] pContext Upper layer context to be returned in
* the callback.
@@ -3035,7 +3608,7 @@ extern NFCSTATUS phLibNfc_Llcp_RecvFrom( phLibNfc_Handle hRemo
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Reception operation is in progress,
* pSend_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -3055,12 +3628,12 @@ extern NFCSTATUS phLibNfc_Llcp_Send( phLibNfc_Handle hRemoteDevice,
*
* This function is used to write data on a socket to a given destination SAP.
* This function can only be called on a connectionless socket.
-*
+*
*
* \param[in] hSocket Socket handle obtained during socket creation.
* \param[in] nSap The destination SAP.
* \param[in] psBuffer The buffer containing the data to send.
-* \param[in] pSend_RspCb The callback to be called when the
+* \param[in] pSend_RspCb The callback to be called when the
* operation is completed.
* \param[in] pContext Upper layer context to be returned in
* the callback.
@@ -3070,7 +3643,7 @@ extern NFCSTATUS phLibNfc_Llcp_Send( phLibNfc_Handle hRemoteDevice,
* could not be properly interpreted.
* \retval NFCSTATUS_PENDING Reception operation is in progress,
* pSend_RspCb will be called upon completion.
-* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
+* \retval NFCSTATUS_INVALID_STATE The socket is not in a valid state, or not of
* a valid type to perform the requsted operation.
* \retval NFCSTATUS_NOT_INITIALISED Indicates stack is not yet initialized.
* \retval NFCSTATUS_SHUTDOWN Shutdown in progress.
@@ -3091,14 +3664,14 @@ extern NFCSTATUS phLibNfc_Llcp_SendTo( phLibNfc_Handle hRemoteDevi
* \brief Initializes \ DeInitialize the NFC library for testmode.
*
*
-*\brief This function initializes / DeInitialize NFC library and its underlying layers
+*\brief This function initializes / DeInitialize NFC library and its underlying layers
* in test mode. As part of this interface underlying layers gets configured.
* Once phLibNfc_TstMode_On is successful ,NFC library ready in testmode using IOCTL.
* After using test IOCTLs ,Test mode should be DeInit using phLibNfc_TstMode_Off.
-*\note This API should be used only for test IOCTL codes.
+*\note This API should be used only for test IOCTL codes.
*
* \param[in] pDriverHandle Driver Handle currently application is using.
-* \param[in] pTestModeCb The init callback is called by the LibNfc when
+* \param[in] pTestModeCb The init callback is called by the LibNfc when
* Configure test mode completed or there is an error
* in initialization.
*
@@ -3107,7 +3680,7 @@ extern NFCSTATUS phLibNfc_Llcp_SendTo( phLibNfc_Handle hRemoteDevi
*
* \retval NFCSTATUS_ALREADY_INITIALISED Stack is already initialized.
* \retval NFCSTATUS_PENDING Init sequence has been successfully
-* started and result will be conveyed via
+* started and result will be conveyed via
* callback notification.
* \retval NFCSTATUS_INVALID_PARAMETER The parameter could not be properly
* interpreted.
@@ -3135,7 +3708,7 @@ NFCSTATUS phLibNfc_Mgt_ConfigureTestMode(void *pDriverHandle,
*
* LibNfc client can reset the stack.
*
-* \param[in] pContext Upper layer context to be returned in
+* \param[in] pContext Upper layer context to be returned in
* the callback.
*
*
diff --git a/src/phLibNfc_Internal.h b/src/phLibNfc_Internal.h
index c136032..baf028a 100644..100755
--- a/src/phLibNfc_Internal.h
+++ b/src/phLibNfc_Internal.h
@@ -41,13 +41,14 @@
#include <phFriNfc_LlcpTransport.h>
#include <phOsalNfc_Timer.h>
#include <phLibNfc_SE.h>
+#include <phHciNfc_CE.h>
#include <phFriNfc_NdefReg.h>
#include <phLibNfc.h>
#include <phLibNfc_initiator.h>
#include <phLibNfc_ndef_raw.h>
#include <phNfcLlcpTypes.h>
-/**Maximum number of Records.Presently set to a realistic value of 128
+/**Maximum number of Records.Presently set to a realistic value of 128
Configurable upto 1K*/
#define MAX_NO_OF_RECORDS 128U
#define CHK_NDEF_NOT_DONE 0x02U
@@ -209,6 +210,7 @@ typedef struct phLibNfc_LibContext
Status_t status;
phHal_sEmulationCfg_t sCardEmulCfg;
phLibNfc_SeCtxt_t sSeContext;
+ phLibNfc_CeCtxt_t sCeContext;
phNfc_sState_t LibNfcState;
phHal_sDevInputParam_t *psDevInputParam;
diff --git a/src/phLibNfc_initiator.c b/src/phLibNfc_initiator.c
index 6bd48b8..e666668 100644..100755
--- a/src/phLibNfc_initiator.c
+++ b/src/phLibNfc_initiator.c
@@ -62,7 +62,7 @@
*/
/* Target discvovery notification callback */
-STATIC void phLibNfc_NotificationRegister_Resp_Cb (
+STATIC void phLibNfc_NotificationRegister_Resp_Cb (
void *context,
phHal_eNotificationType_t type,
phHal4Nfc_NotificationInfo_t info,
@@ -71,21 +71,21 @@ STATIC void phLibNfc_NotificationRegister_Resp_Cb (
/*Remote device connect response callback*/
STATIC void phLibNfc_RemoteDev_Connect_Cb(
- void *pContext,
+ void *pContext,
phHal_sRemoteDevInformation_t *pRmtdev_info,
NFCSTATUS status
);
#ifdef RECONNECT_SUPPORT
-STATIC
-void
+STATIC
+void
phLibNfc_config_discovery_con_failure_cb (
void *context,
NFCSTATUS status);
#endif /* #ifdef RECONNECT_SUPPORT */
/*Remote device disconnect response callback*/
-STATIC void phLibNfc_RemoteDev_Disconnect_cb(
+STATIC void phLibNfc_RemoteDev_Disconnect_cb(
void *context,
phHal_sRemoteDevInformation_t *reg_handle,
NFCSTATUS status
@@ -111,7 +111,7 @@ STATIC void phLibNfc_Mgt_SetP2P_ConfigParams_Cb(
* Response to target discovery.
*/
STATIC
-void phLibNfc_NotificationRegister_Resp_Cb (
+void phLibNfc_NotificationRegister_Resp_Cb (
void *context,
phHal_eNotificationType_t type,
phHal4Nfc_NotificationInfo_t info,
@@ -125,8 +125,8 @@ void phLibNfc_NotificationRegister_Resp_Cb (
uint8_t tag_disc_flg = 0;
phLibNfc_NtfRegister_RspCb_t pClientCb=NULL;
pClientCb =gpphLibContext->CBInfo.pClientNtfRegRespCB;
- PHNFC_UNUSED_VARIABLE(context);
-
+ PHNFC_UNUSED_VARIABLE(context);
+
if(( type != NFC_DISCOVERY_NOTIFICATION )
&&(PHNFCSTATUS(status)!=NFCSTATUS_DESELECTED))
@@ -137,184 +137,184 @@ void phLibNfc_NotificationRegister_Resp_Cb (
{
return;
}
- else
- {
- DeviceIndx=0;DeviceIndx1=0;
- while(DeviceIndx < info.psDiscoveryInfo->NumberOfDevices)
- {
- switch(info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx]->RemDevType)
- {
- case phHal_eMifare_PICC:
- {
- /*Mifare Tag discovered*/
- sak_byte = info.psDiscoveryInfo->
- ppRemoteDevInfo[DeviceIndx]->RemoteDevInfo.Iso14443A_Info.Sak;
- if((TRUE == gpphLibContext->RegNtfType.MifareUL)&& (sak_byte==0x00))
- {
- /*Copy the tag related info*/
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
-
- if((TRUE == gpphLibContext->RegNtfType.MifareStd)&&
- (((sak_byte & 0x18)==0x08)||((sak_byte & 0x18)==0x18) ||
+ else
+ {
+ DeviceIndx=0;DeviceIndx1=0;
+ while(DeviceIndx < info.psDiscoveryInfo->NumberOfDevices)
+ {
+ switch(info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx]->RemDevType)
+ {
+ case phHal_eMifare_PICC:
+ {
+ /*Mifare Tag discovered*/
+ sak_byte = info.psDiscoveryInfo->
+ ppRemoteDevInfo[DeviceIndx]->RemoteDevInfo.Iso14443A_Info.Sak;
+ if((TRUE == gpphLibContext->RegNtfType.MifareUL)&& (sak_byte==0x00))
+ {
+ /*Copy the tag related info*/
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+
+ if((TRUE == gpphLibContext->RegNtfType.MifareStd)&&
+ (((sak_byte & 0x18)==0x08)||((sak_byte & 0x18)==0x18) ||
(sak_byte == 0x01)))
- {
- /*Copy the tag related info*/
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1]=
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
-
- }break;
- case phHal_eISO14443_A_PICC:
- {
- /*ISO 14443-A type tag discovered*/
- if(TRUE == gpphLibContext->RegNtfType.ISO14443_4A)
- {
- /*Copy the ISO type A tag info*/
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }break;
- case phHal_eISO14443_3A_PICC:
- {
- /*ISO 14443-A type tag discovered*/
- if(TRUE == gpphLibContext->RegNtfType.MifareUL)
- {
- /*Copy the ISO type A tag info*/
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }break;
- case phHal_eISO14443_B_PICC:
- {
- /*ISO 14443-B type tag Discovered */
- if(TRUE == gpphLibContext->RegNtfType.ISO14443_4B)
- {
- /*Copy the Type B tag info */
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }break;
- case phHal_eFelica_PICC:
- {
- /*Felica Type Tag Discovered */
- if(TRUE == gpphLibContext->RegNtfType.Felica)
- {
- /*Copy the Felica tag info */
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }break;
- case phHal_eJewel_PICC:
- {
- /*Jewel Type Tag Discovered */
- if(TRUE == gpphLibContext->RegNtfType.Jewel)
- {
- /*Copy the Felica tag info */
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }
- break;
- case phHal_eISO15693_PICC:
- {
- /*Jewel Type Tag Discovered */
- if(TRUE == gpphLibContext->RegNtfType.ISO15693)
- {
- /*Copy the Felica tag info */
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }
- break;
- case phHal_eNfcIP1_Target:
- {
- if(TRUE == gpphLibContext->RegNtfType.NFC)
- {
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
- gpphLibContext->Discov_handle[DeviceIndx1] =
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }
- break;
- case phHal_eNfcIP1_Initiator:
- {
- if(TRUE == gpphLibContext->RegNtfType.NFC)
- {
- gpphLibContext->LibNfcState.cur_state=eLibNfcHalStateConnect;
- gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
- info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
- (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo;
- gpphLibContext->sNfcIp_Context.Rem_Initiator_Handle=
- gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
- DeviceIndx1++;
- tag_disc_flg++;
- }
- }
- break;
- default :
- {
- break;
- }
- }
- DeviceIndx++;
- }
- }
+ {
+ /*Copy the tag related info*/
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1]=
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+
+ }break;
+ case phHal_eISO14443_A_PICC:
+ {
+ /*ISO 14443-A type tag discovered*/
+ if(TRUE == gpphLibContext->RegNtfType.ISO14443_4A)
+ {
+ /*Copy the ISO type A tag info*/
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }break;
+ case phHal_eISO14443_3A_PICC:
+ {
+ /*ISO 14443-A type tag discovered*/
+ if(TRUE == gpphLibContext->RegNtfType.MifareUL)
+ {
+ /*Copy the ISO type A tag info*/
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }break;
+ case phHal_eISO14443_B_PICC:
+ {
+ /*ISO 14443-B type tag Discovered */
+ if(TRUE == gpphLibContext->RegNtfType.ISO14443_4B)
+ {
+ /*Copy the Type B tag info */
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }break;
+ case phHal_eFelica_PICC:
+ {
+ /*Felica Type Tag Discovered */
+ if(TRUE == gpphLibContext->RegNtfType.Felica)
+ {
+ /*Copy the Felica tag info */
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }break;
+ case phHal_eJewel_PICC:
+ {
+ /*Jewel Type Tag Discovered */
+ if(TRUE == gpphLibContext->RegNtfType.Jewel)
+ {
+ /*Copy the Felica tag info */
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }
+ break;
+ case phHal_eISO15693_PICC:
+ {
+ /*Jewel Type Tag Discovered */
+ if(TRUE == gpphLibContext->RegNtfType.ISO15693)
+ {
+ /*Copy the Felica tag info */
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }
+ break;
+ case phHal_eNfcIP1_Target:
+ {
+ if(TRUE == gpphLibContext->RegNtfType.NFC)
+ {
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx].psRemoteDevInfo;
+ gpphLibContext->Discov_handle[DeviceIndx1] =
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }
+ break;
+ case phHal_eNfcIP1_Initiator:
+ {
+ if(TRUE == gpphLibContext->RegNtfType.NFC)
+ {
+ gpphLibContext->LibNfcState.cur_state=eLibNfcHalStateConnect;
+ gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo=
+ info.psDiscoveryInfo->ppRemoteDevInfo[DeviceIndx];
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev =
+ (uint32_t)gpphLibContext->psRemoteDevList[DeviceIndx1].psRemoteDevInfo;
+ gpphLibContext->sNfcIp_Context.Rem_Initiator_Handle=
+ gpphLibContext->psRemoteDevList[DeviceIndx1].hTargetDev;
+ DeviceIndx1++;
+ tag_disc_flg++;
+ }
+ }
+ break;
+ default :
+ {
+ break;
+ }
+ }
+ DeviceIndx++;
+ }
+ }
if((tag_disc_flg >0 )&&(status != NFCSTATUS_FAILED))
{
@@ -336,10 +336,10 @@ void phLibNfc_NotificationRegister_Resp_Cb (
if (NULL != pClientCb)
{
pClientCb(
- (void*)gpphLibContext->CBInfo.pClientNtfRegRespCntx,
+ (void*)gpphLibContext->CBInfo.pClientNtfRegRespCntx,
gpphLibContext->psRemoteDevList,
gpphLibContext->dev_cnt,
- status
+ status
);
}
@@ -387,19 +387,19 @@ void phLibNfc_NotificationRegister_Resp_Cb (
/**
* This interface registers notification handler for target discovery.
*/
-NFCSTATUS
-phLibNfc_RemoteDev_NtfRegister(
+NFCSTATUS
+phLibNfc_RemoteDev_NtfRegister(
phLibNfc_Registry_Info_t* pRegistryInfo,
phLibNfc_NtfRegister_RspCb_t pNotificationHandler,
void *pContext
)
{
NFCSTATUS RetVal = NFCSTATUS_SUCCESS;
-
+
/*Check for valid parameters*/
if((NULL == pNotificationHandler)
- || (NULL == pContext)
+ || (NULL == pContext)
||(NULL== pRegistryInfo))
{
RetVal= NFCSTATUS_INVALID_PARAMETER;
@@ -418,32 +418,32 @@ phLibNfc_RemoteDev_NtfRegister(
}
else
{
-
+
PHDBG_INFO("LibNfc:Registering Notification Handler");
-
-
+
+
(void) memcpy(&(gpphLibContext->RegNtfType),pRegistryInfo,
sizeof(phLibNfc_Registry_Info_t));
- /* Register Discovery Notification Handler*/
-
- /*Register for NFCIP1 target type*/
- RetVal = phHal4Nfc_RegisterNotification(
+ /* Register Discovery Notification Handler*/
+
+ /*Register for NFCIP1 target type*/
+ RetVal = phHal4Nfc_RegisterNotification(
gpphLibContext->psHwReference,
eRegisterP2PDiscovery,
phLibNfc_NotificationRegister_Resp_Cb,
(void*)gpphLibContext
);
- /*Register for Tag discovery*/
- RetVal = phHal4Nfc_RegisterNotification(
+ /*Register for Tag discovery*/
+ RetVal = phHal4Nfc_RegisterNotification(
gpphLibContext->psHwReference,
eRegisterTagDiscovery,
phLibNfc_NotificationRegister_Resp_Cb,
(void*)gpphLibContext
- );
+ );
gpphLibContext->CBInfo.pClientNtfRegRespCB = pNotificationHandler;
gpphLibContext->CBInfo.pClientNtfRegRespCntx = pContext;
/*Register notification handler with below layer*/
-
+
}
return RetVal;
}
@@ -474,7 +474,7 @@ NFCSTATUS phLibNfc_RemoteDev_NtfUnregister(void)
eRegisterP2PDiscovery,
gpphLibContext);
- RetVal = phHal4Nfc_UnregisterNotification(
+ RetVal = phHal4Nfc_UnregisterNotification(
gpphLibContext->psHwReference,
eRegisterTagDiscovery,
gpphLibContext);
@@ -488,7 +488,7 @@ NFCSTATUS phLibNfc_RemoteDev_NtfUnregister(void)
#ifdef RECONNECT_SUPPORT
-NFCSTATUS
+NFCSTATUS
phLibNfc_RemoteDev_ReConnect (
phLibNfc_Handle hRemoteDevice,
pphLibNfc_ConnectCallback_t pNotifyReConnect_RspCb,
@@ -498,11 +498,11 @@ phLibNfc_RemoteDev_ReConnect (
NFCSTATUS ret_val = NFCSTATUS_FAILED;
phLibNfc_sRemoteDevInformation_t *psRemoteDevInfo = NULL;
- if ((NULL == gpphLibContext)
- || (eLibNfcHalStateShutdown ==
+ if ((NULL == gpphLibContext)
+ || (eLibNfcHalStateShutdown ==
gpphLibContext->LibNfcState.cur_state))
{
- ret_val = NFCSTATUS_NOT_INITIALISED;
+ ret_val = NFCSTATUS_NOT_INITIALISED;
}
else if ((NULL == pContext)
|| (NULL == pNotifyReConnect_RspCb)
@@ -510,7 +510,7 @@ phLibNfc_RemoteDev_ReConnect (
{
/* Check valid parameters */
ret_val = NFCSTATUS_INVALID_PARAMETER;
- }
+ }
/* Check valid lib nfc State */
else if (gpphLibContext->LibNfcState.next_state
== eLibNfcHalStateShutdown)
@@ -522,22 +522,22 @@ phLibNfc_RemoteDev_ReConnect (
ret_val = NFCSTATUS_TARGET_NOT_CONNECTED;
}
else if ((gpphLibContext->Discov_handle[0] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[1] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[2] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[3] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[4] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[5] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[6] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[7] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[8] != hRemoteDevice)
- && (gpphLibContext->Discov_handle[9] != hRemoteDevice))
+ && (gpphLibContext->Discov_handle[1] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[2] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[3] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[4] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[5] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[6] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[7] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[8] != hRemoteDevice)
+ && (gpphLibContext->Discov_handle[9] != hRemoteDevice))
{
ret_val = NFCSTATUS_INVALID_HANDLE;
}
else
{
psRemoteDevInfo = (phLibNfc_sRemoteDevInformation_t *)hRemoteDevice;
-
+
/* Call the HAL connect*/
ret_val = phHal4Nfc_Connect (gpphLibContext->psHwReference,
psRemoteDevInfo,
@@ -546,17 +546,17 @@ phLibNfc_RemoteDev_ReConnect (
if (NFCSTATUS_PENDING == ret_val)
{
- /* If HAL Connect is pending update the LibNFC state machine
+ /* If HAL Connect is pending update the LibNFC state machine
and store the CB pointer and Context,
mark the General CB pending status is TRUE */
gpphLibContext->CBInfo.pClientConnectCb = pNotifyReConnect_RspCb;
gpphLibContext->CBInfo.pClientConCntx = pContext;
gpphLibContext->status.GenCb_pending_status = TRUE;
- gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
gpphLibContext->Prev_Connected_handle = gpphLibContext->Connected_handle;
- gpphLibContext->Connected_handle = hRemoteDevice;
+ gpphLibContext->Connected_handle = hRemoteDevice;
}
else if (NFCSTATUS_INVALID_REMOTE_DEVICE == PHNFCSTATUS(ret_val))
{
@@ -567,7 +567,7 @@ phLibNfc_RemoteDev_ReConnect (
{
/* Lower layer returns internal error code return NFCSTATUS_FAILED*/
ret_val = NFCSTATUS_FAILED;
- }
+ }
}
return ret_val;
@@ -576,7 +576,7 @@ phLibNfc_RemoteDev_ReConnect (
/**
-* Connect to a single Remote Device
+* Connect to a single Remote Device
*/
NFCSTATUS phLibNfc_RemoteDev_Connect(
phLibNfc_Handle hRemoteDevice,
@@ -587,18 +587,18 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
NFCSTATUS RetVal = NFCSTATUS_FAILED;
phLibNfc_sRemoteDevInformation_t *psRemoteDevInfo;
-
+
if((NULL == gpphLibContext) ||
- (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
+ (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
{
- RetVal = NFCSTATUS_NOT_INITIALISED;
+ RetVal = NFCSTATUS_NOT_INITIALISED;
}/* Check valid parameters*/
else if((NULL == pContext)
|| (NULL == pNotifyConnect_RspCb)
|| (NULL == (void*)hRemoteDevice))
{
RetVal= NFCSTATUS_INVALID_PARAMETER;
- }
+ }
/* Check valid lib nfc State*/
else if(gpphLibContext->LibNfcState.next_state
== eLibNfcHalStateShutdown)
@@ -606,19 +606,19 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
RetVal= NFCSTATUS_SHUTDOWN;
}
else if((gpphLibContext->Discov_handle[0] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[1] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[2] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[3] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[4] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[5] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[6] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[7] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[8] != hRemoteDevice)&&
- (gpphLibContext->Discov_handle[9] != hRemoteDevice))
+ (gpphLibContext->Discov_handle[1] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[2] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[3] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[4] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[5] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[6] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[7] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[8] != hRemoteDevice)&&
+ (gpphLibContext->Discov_handle[9] != hRemoteDevice))
{
RetVal= NFCSTATUS_INVALID_HANDLE;
}
- else if ((hRemoteDevice != gpphLibContext->Connected_handle)
+ else if ((hRemoteDevice != gpphLibContext->Connected_handle)
&& (0 != gpphLibContext->Connected_handle))
{
RetVal = NFCSTATUS_FAILED;
@@ -626,7 +626,7 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
else
{
psRemoteDevInfo = (phLibNfc_sRemoteDevInformation_t*)hRemoteDevice;
-
+
/* Call the HAL connect*/
RetVal = phHal4Nfc_Connect(gpphLibContext->psHwReference,
psRemoteDevInfo,
@@ -634,15 +634,15 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
(void* )gpphLibContext);
if(RetVal== NFCSTATUS_PENDING)
{
- /* If HAL Connect is pending update the LibNFC state machine
+ /* If HAL Connect is pending update the LibNFC state machine
and store the CB pointer and Context,
mark the General CB pending status is TRUE*/
gpphLibContext->CBInfo.pClientConnectCb = pNotifyConnect_RspCb;
gpphLibContext->CBInfo.pClientConCntx = pContext;
gpphLibContext->status.GenCb_pending_status=TRUE;
- gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
gpphLibContext->Prev_Connected_handle = gpphLibContext->Connected_handle;
- gpphLibContext->Connected_handle = hRemoteDevice;
+ gpphLibContext->Connected_handle = hRemoteDevice;
}
else if(PHNFCSTATUS(RetVal) == NFCSTATUS_INVALID_REMOTE_DEVICE)
{
@@ -653,21 +653,21 @@ NFCSTATUS phLibNfc_RemoteDev_Connect(
{
/* Lower layer returns internal error code return NFCSTATUS_FAILED*/
RetVal = NFCSTATUS_FAILED;
- }
+ }
}
return RetVal;
}
#ifdef RECONNECT_SUPPORT
-STATIC
-void
+STATIC
+void
phLibNfc_config_discovery_con_failure_cb (
void *context,
NFCSTATUS status)
{
- if((phLibNfc_LibContext_t *)context == gpphLibContext)
+ if((phLibNfc_LibContext_t *)context == gpphLibContext)
{ /*check for same context*/
- pphLibNfc_ConnectCallback_t ps_client_con_cb =
+ pphLibNfc_ConnectCallback_t ps_client_con_cb =
gpphLibContext->CBInfo.pClientConnectCb;
if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
@@ -713,7 +713,7 @@ phLibNfc_config_discovery_con_failure_cb (
if (NULL != ps_client_con_cb)
{
gpphLibContext->CBInfo.pClientConnectCb = NULL;
- /* Call the upper layer callback*/
+ /* Call the upper layer callback*/
ps_client_con_cb (gpphLibContext->CBInfo.pClientConCntx,
0, NULL, status);
}
@@ -724,7 +724,7 @@ phLibNfc_config_discovery_con_failure_cb (
status = NFCSTATUS_FAILED;
}
-
+
}
#endif /* #ifdef RECONNECT_SUPPORT */
/**
@@ -744,14 +744,14 @@ STATIC void phLibNfc_RemoteDev_Connect_Cb(
/* Mark General Callback pending status as false*/
gpphLibContext->status.GenCb_pending_status = FALSE;
-
+
/* Check the shutdown is called during the lower layer Connect in process,
If yes call shutdown call and return NFCSTATUS_SHUTDOWN */
if((eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state))
- {
+ {
phLibNfc_Pending_Shutdown();
- Connect_status = NFCSTATUS_SHUTDOWN;
-
+ Connect_status = NFCSTATUS_SHUTDOWN;
+
}
else if(PHNFCSTATUS(status)==NFCSTATUS_SUCCESS)
{
@@ -761,7 +761,7 @@ STATIC void phLibNfc_RemoteDev_Connect_Cb(
gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
Connect_status = NFCSTATUS_SUCCESS;
}
- else
+ else
{ /* if(PHNFCSTATUS(status)==NFCSTATUS_INVALID_REMOTE_DEVICE) */
/* If remote device is invalid return as TARGET LOST to upper layer*/
/* If error code is other than SUCCESS return NFCSTATUS_TARGET_LOST */
@@ -771,7 +771,7 @@ STATIC void phLibNfc_RemoteDev_Connect_Cb(
gpphLibContext->ndef_cntx.is_ndef = CHK_NDEF_NOT_DONE;
/* Update the Current Sate*/
phLibNfc_UpdateCurState(Connect_status,(phLibNfc_LibContext_t *)pContext);
- /* Call the upper layer callback*/
+ /* Call the upper layer callback*/
gpphLibContext->CBInfo.pClientConnectCb(
gpphLibContext->CBInfo.pClientConCntx,
(uint32_t)pRmtdev_info,
@@ -802,7 +802,7 @@ NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle hRemote
(gpphLibContext->LibNfcState.cur_state
== eLibNfcHalStateShutdown))
{
- RetVal = NFCSTATUS_NOT_INITIALISED;
+ RetVal = NFCSTATUS_NOT_INITIALISED;
}
else if((NULL == pContext) ||
(NULL == pDscntCallback)||(hRemoteDevice == 0))
@@ -833,17 +833,17 @@ NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle hRemote
||((gpphLibContext->sSeContext.eActivatedMode != phLibNfc_SE_ActModeWired)&&
(ReleaseType == NFC_SMARTMX_RELEASE)))
{ /* Previous disconnect callback is pending */
- RetVal = NFCSTATUS_REJECTED;
+ RetVal = NFCSTATUS_REJECTED;
}
#ifndef LLCP_CHANGES
else if(eLibNfcHalStateTransaction == gpphLibContext->LibNfcState.next_state)
{ /* Previous Transaction is Pending*/
- RetVal = NFCSTATUS_BUSY;
+ RetVal = NFCSTATUS_BUSY;
PHDBG_INFO("LibNfc:Transaction is Pending");
}
#endif /* #ifdef LLCP_CHANGES */
else
- {
+ {
gpphLibContext->ReleaseType = ReleaseType;
psRemoteDevInfo = (phLibNfc_sRemoteDevInformation_t*)hRemoteDevice;
RetVal = phHal4Nfc_Disconnect(gpphLibContext->psHwReference,
@@ -859,15 +859,15 @@ NFCSTATUS phLibNfc_RemoteDev_Disconnect( phLibNfc_Handle hRemote
gpphLibContext->CBInfo.pClientDConCntx = pContext;
/* Mark general callback pending status as TRUE and update the state*/
gpphLibContext->status.GenCb_pending_status=TRUE;
- gpphLibContext->LibNfcState.next_state = eLibNfcHalStateRelease;
-
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateRelease;
+
}
else
{
- /*If lower layer returns other than pending
+ /*If lower layer returns other than pending
(internal error codes) return NFCSTATUS_FAILED */
RetVal = NFCSTATUS_FAILED;
- }
+ }
}
}
return RetVal;
@@ -884,7 +884,7 @@ STATIC void phLibNfc_RemoteDev_Disconnect_cb(
NFCSTATUS DisCnct_status = NFCSTATUS_SUCCESS;
pphLibNfc_DisconnectCallback_t pUpper_NtfCb = NULL;
void *pUpper_Context = NULL;
-
+
/* Copy the upper layer Callback and context*/
pUpper_NtfCb = gpphLibContext->CBInfo.pClientDisConnectCb;
pUpper_Context = gpphLibContext->CBInfo.pClientDConCntx;
@@ -898,10 +898,10 @@ STATIC void phLibNfc_RemoteDev_Disconnect_cb(
else
{
/* Mark the General callback pending status FALSE */
- gpphLibContext->status.GenCb_pending_status = FALSE;
+ gpphLibContext->status.GenCb_pending_status = FALSE;
gpphLibContext->CBInfo.pClientDisConnectCb = NULL;
gpphLibContext->CBInfo.pClientDConCntx = NULL;
-
+
gpphLibContext->ndef_cntx.is_ndef = CHK_NDEF_NOT_DONE;
gpphLibContext->LastTrancvSuccess = FALSE;
/*Reset Connected handle */
@@ -928,21 +928,21 @@ STATIC void phLibNfc_RemoteDev_Disconnect_cb(
phOsalNfc_FreeMemory(gpphLibContext->psBufferedAuth);
gpphLibContext->psBufferedAuth = NULL;
}
- }
+ }
/* Check DeInit is called or not */
if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state)
{
- /*call shutdown and return status as NFCSTATUS_SHUTDOWN */
+ /*call shutdown and return status as NFCSTATUS_SHUTDOWN */
phLibNfc_Pending_Shutdown();
- DisCnct_status = NFCSTATUS_SHUTDOWN;
+ DisCnct_status = NFCSTATUS_SHUTDOWN;
}
else if(NFCSTATUS_SUCCESS == status)
{
- DisCnct_status = NFCSTATUS_SUCCESS;
- gpphLibContext->LibNfcState.next_state = eLibNfcHalStateRelease;
+ DisCnct_status = NFCSTATUS_SUCCESS;
+ gpphLibContext->LibNfcState.next_state = eLibNfcHalStateRelease;
}
else
- {
+ {
DisCnct_status = NFCSTATUS_FAILED;
phLibNfc_UpdateCurState(DisCnct_status,(phLibNfc_LibContext_t *)context);
}
@@ -964,9 +964,9 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
)
{
NFCSTATUS RetVal = NFCSTATUS_SUCCESS;
-
+
/*Check for valid parameter */
-
+
if((NULL == gpphLibContext) ||
(gpphLibContext->LibNfcState.cur_state
== eLibNfcHalStateShutdown))
@@ -980,19 +980,19 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
|| (NULL == psTransceiveInfo->sSendData.buffer)
|| (NULL == pContext))
{
- RetVal= NFCSTATUS_INVALID_PARAMETER;
+ RetVal= NFCSTATUS_INVALID_PARAMETER;
}
/* Check the state for DeInit is called or not,if yes return NFCSTATUS_SHUTDOWN*/
else if(gpphLibContext->LibNfcState.next_state
== eLibNfcHalStateShutdown)
- {
+ {
RetVal= NFCSTATUS_SHUTDOWN;
}/* If there is no handle connected return NFCSTATUS_TARGET_NOT_CONNECTED*/
else if(gpphLibContext->Connected_handle==0)
{
RetVal=NFCSTATUS_TARGET_NOT_CONNECTED;
}/* If the given handle is not the connected handle return NFCSTATUS_INVALID_HANDLE */
- else if(gpphLibContext->Connected_handle!= hRemoteDevice )
+ else if(gpphLibContext->Connected_handle!= hRemoteDevice )
{
RetVal=NFCSTATUS_INVALID_HANDLE;
} /*If the transceive is called before finishing the previous transceive function
@@ -1003,7 +1003,7 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType))
{
RetVal = NFCSTATUS_REJECTED;
- }
+ }
#ifdef LLCP_TRANSACT_CHANGES
else if ((LLCP_STATE_RESET_INIT != gpphLibContext->llcp_cntx.sLlcpContext.state)
&& (LLCP_STATE_CHECKED != gpphLibContext->llcp_cntx.sLlcpContext.state))
@@ -1011,15 +1011,25 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
RetVal= NFCSTATUS_BUSY;
}
#endif /* #ifdef LLCP_TRANSACT_CHANGES */
+#if defined (HOST_EMULATION)
+ else if(((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType == phHal_eISO14443_A_PCD)
+ {
+ RetVal = phLibNfc_RemoteDev_CE_A_Transceive(&psTransceiveInfo->sSendData,pTransceive_RspCb,pContext);
+ }
+ else if(((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType == phHal_eISO14443_B_PCD)
+ {
+ RetVal = phLibNfc_RemoteDev_CE_B_Transceive(&psTransceiveInfo->sSendData,pTransceive_RspCb,pContext);
+ }
+#endif //HOST_EMULATION
else
{
gpphLibContext->ndef_cntx.eLast_Call = RawTrans;
- (void)memcpy((void *)(gpphLibContext->psTransInfo),
- (void *)psTransceiveInfo,
+ (void)memcpy((void *)(gpphLibContext->psTransInfo),
+ (void *)psTransceiveInfo,
sizeof(phLibNfc_sTransceiveInfo_t));
- /* Check the given Mifare command is supported or not ,
+ /* Check the given Mifare command is supported or not ,
If not return NFCSTATUS_COMMAND_NOT_SUPPORTED */
- if( (((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType ==
+ if( (((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType ==
phHal_eMifare_PICC)&&
( gpphLibContext->psTransInfo->cmd.MfCmd != phHal_eMifareRaw ) &&
( gpphLibContext->psTransInfo->cmd.MfCmd != phHal_eMifareAuthentA ) &&
@@ -1035,12 +1045,12 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
( gpphLibContext->psTransInfo->cmd.MfCmd != phHal_eMifareWriteSector ))
{
RetVal = NFCSTATUS_COMMAND_NOT_SUPPORTED;
- }
+ }
if(eLibNfcHalStatePresenceChk !=
gpphLibContext->LibNfcState.next_state)
{
PHDBG_INFO("LibNfc:Transceive In Progress");
- if((((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType ==
+ if((((phHal_sRemoteDevInformation_t*)hRemoteDevice)->RemDevType ==
phHal_eMifare_PICC) && (((phHal_sRemoteDevInformation_t*)
hRemoteDevice)->RemoteDevInfo.Iso14443A_Info.Sak != 0)&&
(phHal_eMifareAuthentA == gpphLibContext->psTransInfo->cmd.MfCmd))
@@ -1060,28 +1070,28 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
phOsalNfc_FreeMemory(gpphLibContext->psBufferedAuth);
}
gpphLibContext->psBufferedAuth
- =(phLibNfc_sTransceiveInfo_t *)
+ =(phLibNfc_sTransceiveInfo_t *)
phOsalNfc_GetMemory(sizeof(phLibNfc_sTransceiveInfo_t));
gpphLibContext->psBufferedAuth->addr = psTransceiveInfo->addr;
gpphLibContext->psBufferedAuth->cmd = psTransceiveInfo->cmd;
- gpphLibContext->psBufferedAuth->sSendData.length
+ gpphLibContext->psBufferedAuth->sSendData.length
= psTransceiveInfo->sSendData.length;
- gpphLibContext->psBufferedAuth->sRecvData.length
- = psTransceiveInfo->sRecvData.length;
+ gpphLibContext->psBufferedAuth->sRecvData.length
+ = psTransceiveInfo->sRecvData.length;
gpphLibContext->psBufferedAuth->sSendData.buffer
= (uint8_t *)
phOsalNfc_GetMemory(
gpphLibContext->psTransInfo->sSendData.length);
-
+
(void)memcpy((void *)
- (gpphLibContext->psBufferedAuth->sSendData.buffer),
- (void *)psTransceiveInfo->sSendData.buffer,
+ (gpphLibContext->psBufferedAuth->sSendData.buffer),
+ (void *)psTransceiveInfo->sSendData.buffer,
psTransceiveInfo->sSendData.length);
-
+
gpphLibContext->psBufferedAuth->sRecvData.buffer
= (uint8_t *)
phOsalNfc_GetMemory(
- gpphLibContext->psTransInfo->sRecvData.length);
+ gpphLibContext->psTransInfo->sRecvData.length);
}
/*Call the lower layer Transceive function */
RetVal = phHal4Nfc_Transceive( gpphLibContext->psHwReference,
@@ -1102,19 +1112,19 @@ phLibNfc_RemoteDev_Transceive(phLibNfc_Handle hRemoteDevice,
/*Update the state machine*/
gpphLibContext->LibNfcState.next_state = eLibNfcHalStateTransaction;
}
- }
+ }
else
{
gpphLibContext->status.GenCb_pending_status = FALSE;
RetVal = NFCSTATUS_FAILED;
- }
+ }
}
return RetVal;
}
/**
* Response for Remote device transceive.
*/
-STATIC
+STATIC
void phLibNfc_RemoteDev_Transceive_Cb(void *context,
phHal_sRemoteDevInformation_t *pRmtdev_info,
phNfc_sData_t *response,
@@ -1144,7 +1154,7 @@ void phLibNfc_RemoteDev_Transceive_Cb(void *context,
trans_status = NFCSTATUS_SHUTDOWN;
}
/* If Disconnect is called return NFCSTATUS_ABORTED */
- else if(eLibNfcHalStateRelease ==
+ else if(eLibNfcHalStateRelease ==
gpphLibContext->LibNfcState.next_state)
{
trans_status = NFCSTATUS_ABORTED;
@@ -1153,15 +1163,15 @@ void phLibNfc_RemoteDev_Transceive_Cb(void *context,
else if( NFCSTATUS_SUCCESS == status)
{
trans_status = NFCSTATUS_SUCCESS;
- }
+ }
else if((PHNFCSTATUS(status) != NFCSTATUS_SUCCESS) &&
- (phHal_eMifare_PICC == pRmtdev_info->RemDevType) &&
+ (phHal_eMifare_PICC == pRmtdev_info->RemDevType) &&
(0x00 != pRmtdev_info->RemoteDevInfo.Iso14443A_Info.Sak))
{
gpphLibContext->LastTrancvSuccess = FALSE;
trans_status = NFCSTATUS_FAILED;
/* card type is mifare 1k/4k, then reconnect */
- trans_status = phHal4Nfc_Connect(gpphLibContext->psHwReference,
+ trans_status = phHal4Nfc_Connect(gpphLibContext->psHwReference,
pRmtdev_info,
(pphHal4Nfc_ConnectCallback_t)
phLibNfc_Reconnect_Mifare_Cb,
@@ -1181,9 +1191,9 @@ void phLibNfc_RemoteDev_Transceive_Cb(void *context,
/*Update the state machine */
phLibNfc_UpdateCurState(status,gpphLibContext);
gpphLibContext->LibNfcState.next_state = eLibNfcHalStateConnect;
- if(NFCSTATUS_PENDING != trans_status)
+ if(NFCSTATUS_PENDING != trans_status)
{
- /* Tranceive over */
+ /* Tranceive over */
PHDBG_INFO("LibNfc:TXRX Callback-Update the Transceive responce");
if (NULL != pUpper_TagNtfCb)
{
@@ -1192,31 +1202,31 @@ void phLibNfc_RemoteDev_Transceive_Cb(void *context,
gpphLibContext->LastTrancvSuccess = TRUE;
pUpper_Context = gpphLibContext->CBInfo.pClientTranseCntx;
trans_resp->buffer = response->buffer;
- trans_resp->length = response->length;
+ trans_resp->length = response->length;
/* Notify the upper layer */
PHDBG_INFO("LibNfc:Transceive Complete");
/* Notify the Transceive Completion to upper layer */
gpphLibContext->CBInfo.pClientTransceiveCb(pUpper_Context,
- (uint32_t)pRmtdev_info,
+ (uint32_t)pRmtdev_info,
trans_resp,
trans_status);
}
else
{
gpphLibContext->LastTrancvSuccess = FALSE;
- pUpper_Context = gpphLibContext->CBInfo.pClientTranseCntx;
- trans_resp->length = 0;
+ pUpper_Context = gpphLibContext->CBInfo.pClientTranseCntx;
+ trans_resp->length = 0;
/* Notify the upper layer */
PHDBG_INFO("LibNfc:Transceive Complete");
/* Notify the Transceive Completion to upper layer */
gpphLibContext->CBInfo.pClientTransceiveCb(pUpper_Context,
- (uint32_t)pRmtdev_info,
+ (uint32_t)pRmtdev_info,
trans_resp,
trans_status);
}
}
}
-
+
}
else
{ /*exception: wrong context pointer returned*/
@@ -1228,15 +1238,15 @@ void phLibNfc_RemoteDev_Transceive_Cb(void *context,
/**
* Interface to configure P2P configurations.
*/
-NFCSTATUS
-phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
- pphLibNfc_RspCb_t pConfigRspCb,
- void* pContext
+NFCSTATUS
+phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
+ pphLibNfc_RspCb_t pConfigRspCb,
+ void* pContext
)
{
NFCSTATUS RetVal = NFCSTATUS_FAILED;
/* LibNfc Initialized or not */
- if((NULL == gpphLibContext)||
+ if((NULL == gpphLibContext)||
(gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown))
{
RetVal = NFCSTATUS_NOT_INITIALISED;
@@ -1249,8 +1259,8 @@ phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
else if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown)
{
RetVal = NFCSTATUS_SHUTDOWN;
- }
- else if(TRUE == gpphLibContext->status.GenCb_pending_status)
+ }
+ else if(TRUE == gpphLibContext->status.GenCb_pending_status)
{ /*Previous callback is pending */
RetVal = NFCSTATUS_BUSY;
}
@@ -1259,7 +1269,7 @@ phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
if(eLibNfcHalStatePresenceChk !=
gpphLibContext->LibNfcState.next_state)
{
- phHal_uConfig_t uConfig;
+ phHal_uConfig_t uConfig;
/* copy General bytes of Max length = 48 bytes */
(void)memcpy((void *)&(uConfig.nfcIPConfig.generalBytes),
(void *)pConfigInfo->generalBytes,
@@ -1267,13 +1277,13 @@ phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
/* also copy the General Bytes length*/
uConfig.nfcIPConfig.generalBytesLength = pConfigInfo->generalBytesLength;
- RetVal = phHal4Nfc_ConfigParameters(
+ RetVal = phHal4Nfc_ConfigParameters(
gpphLibContext->psHwReference,
NFC_P2P_CONFIG,
&uConfig,
phLibNfc_Mgt_SetP2P_ConfigParams_Cb,
(void *)gpphLibContext
- );
+ );
}
else
{
@@ -1287,8 +1297,8 @@ phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
gpphLibContext->sNfcIp_Context.pClientNfcIpCfgCntx = pContext;
gpphLibContext->status.GenCb_pending_status=TRUE;
/* Next state is configured */
- gpphLibContext->LibNfcState.next_state =eLibNfcHalStateConfigReady;
- }
+ gpphLibContext->LibNfcState.next_state =eLibNfcHalStateConfigReady;
+ }
else
{
RetVal = NFCSTATUS_FAILED;
@@ -1302,7 +1312,7 @@ phLibNfc_Mgt_SetP2P_ConfigParams(phLibNfc_sNfcIPCfg_t* pConfigInfo,
STATIC void phLibNfc_Mgt_SetP2P_ConfigParams_Cb(void *context,
NFCSTATUS status)
{
- pphLibNfc_RspCb_t pClientCb=NULL;
+ pphLibNfc_RspCb_t pClientCb=NULL;
void *pUpperLayerContext=NULL;
/* Check for the context returned by below layer */
if((phLibNfc_LibContext_t *)context != gpphLibContext)
@@ -1315,13 +1325,13 @@ STATIC void phLibNfc_Mgt_SetP2P_ConfigParams_Cb(void *context,
{ /*shutdown called before completion of this api allow
shutdown to happen */
phLibNfc_Pending_Shutdown();
- status = NFCSTATUS_SHUTDOWN;
+ status = NFCSTATUS_SHUTDOWN;
}
else
{
gpphLibContext->status.GenCb_pending_status = FALSE;
if(NFCSTATUS_SUCCESS != status)
- {
+ {
status = NFCSTATUS_FAILED;
}
else
@@ -1342,7 +1352,7 @@ STATIC void phLibNfc_Mgt_SetP2P_ConfigParams_Cb(void *context,
/* Notify to upper layer status of configure operation */
pClientCb(pUpperLayerContext, status);
}
- }
+ }
return;
}