summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartijn Coenen <martijn.coenen@nxp.com>2011-01-12 20:44:37 +0100
committerNick Pelly <npelly@google.com>2011-01-18 11:14:26 -0800
commit72854a2c28b99f9ab6aa60c906d5b3c1a36b04d7 (patch)
tree2611ea663501b02ac6b28662b0dff692b9c99b84
parent434eb43979d170509b9b28c0598e5f44e31aa348 (diff)
downloadexternal_libnfc-nxp-72854a2c28b99f9ab6aa60c906d5b3c1a36b04d7.zip
external_libnfc-nxp-72854a2c28b99f9ab6aa60c906d5b3c1a36b04d7.tar.gz
external_libnfc-nxp-72854a2c28b99f9ab6aa60c906d5b3c1a36b04d7.tar.bz2
Implement IsoDep timeout handling (libNFC).
Made the ISO XCHG timer (used for IsoDep transceive's) a configurable setting. When this timer triggers in the hardware, the transaction will be aborted and the connection to the tag is broken. Also made the HCI timer configurable. This timer serves as a software watchdog for any HCI transaction. Change-Id: I927c7755378f793899c6d262a2f23ab5dca3817b
-rw-r--r--src/phHciNfc_Generic.c4
-rw-r--r--src/phHciNfc_RFReader.c3
-rw-r--r--src/phLibNfc.c13
-rw-r--r--src/phLibNfc.h11
4 files changed, 29 insertions, 2 deletions
diff --git a/src/phHciNfc_Generic.c b/src/phHciNfc_Generic.c
index 4433344..45aefdc 100644
--- a/src/phHciNfc_Generic.c
+++ b/src/phHciNfc_Generic.c
@@ -56,6 +56,8 @@
################################################################################
*/
+/* HCI timeout value */
+uint32_t nxp_nfc_hci_response_timeout = NXP_NFC_HCI_TIMEOUT;
/*
################################################################################
@@ -577,7 +579,7 @@ phHciNfc_Release_Lower(
{
/* Start the HCI Response Timer */
phOsalNfc_Timer_Start( hci_resp_timer_id,
- NXP_HCI_RESPONSE_TIMEOUT, phHciNfc_Response_Timeout, NULL);
+ nxp_nfc_hci_response_timeout, phHciNfc_Response_Timeout, NULL );
HCI_DEBUG(" HCI : Timer %X Started \n", hci_resp_timer_id);
}
diff --git a/src/phHciNfc_RFReader.c b/src/phHciNfc_RFReader.c
index 6f53f74..1ecba87 100644
--- a/src/phHciNfc_RFReader.c
+++ b/src/phHciNfc_RFReader.c
@@ -63,6 +63,7 @@
#define NFCIP_ACTIVATE_DELAY 0x05U
+uint8_t nxp_nfc_isoxchg_timeout = NXP_ISO_XCHG_TIMEOUT;
/*
*************************** Structure and Enumeration ***************************
*/
@@ -2328,7 +2329,7 @@ phHciNfc_ReaderMgmt_Release(
(uint8_t) pipe_id, HCP_MSG_TYPE_COMMAND, cmd);
hcp_message = &(hcp_packet->msg.message);
/* Frame Wait Timeout */
- hcp_message->payload[i++] = NXP_ISO_XCHG_TIMEOUT ;
+ hcp_message->payload[i++] = nxp_nfc_isoxchg_timeout ;
phHciNfc_Append_HCPFrame((uint8_t *)hcp_message->payload,
i, p_pipe_info->param_info,
p_pipe_info->param_length);
diff --git a/src/phLibNfc.c b/src/phLibNfc.c
index 008963b..3361f51 100644
--- a/src/phLibNfc.c
+++ b/src/phLibNfc.c
@@ -117,6 +117,19 @@ NFCSTATUS phLibNfc_Download_Mode ()
return phDal4Nfc_Download();
}
+
+extern uint8_t nxp_nfc_isoxchg_timeout;
+NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout) {
+ nxp_nfc_isoxchg_timeout = timeout;
+ return NFCSTATUS_SUCCESS;
+}
+
+extern uint32_t nxp_nfc_hci_response_timeout;
+NFCSTATUS phLibNfc_SetHciTimeout(uint32_t timeout_in_ms) {
+ nxp_nfc_hci_response_timeout = timeout_in_ms;
+ return NFCSTATUS_SUCCESS;
+}
+
/**
* Initialize the phLibNfc interface.
*/
diff --git a/src/phLibNfc.h b/src/phLibNfc.h
index c09815a..bfd3eb7 100644
--- a/src/phLibNfc.h
+++ b/src/phLibNfc.h
@@ -845,6 +845,17 @@ NFCSTATUS phLibNfc_HW_Reset ();
NFCSTATUS phLibNfc_Download_Mode ();
+// timeout is 8 bits
+// bits [0..3] => timeout value, (256*16/13.56*10^6) * 2^value
+// [0] -> 0.0003s
+// ..
+// [14] -> 4.9s
+// [15] -> not allowed
+// bit [4] => timeout enable
+// bit [5..7] => unused
+NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout);
+NFCSTATUS phLibNfc_SetHciTimeout(uint32_t timeout_in_ms);
+
/**
* \ingroup grp_lib_nfc
*