summaryrefslogtreecommitdiffstats
path: root/src/phLibNfc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/phLibNfc.c')
-rw-r--r--src/phLibNfc.c52
1 files changed, 49 insertions, 3 deletions
diff --git a/src/phLibNfc.c b/src/phLibNfc.c
index 9c7db4f..92bdc40 100644
--- a/src/phLibNfc.c
+++ b/src/phLibNfc.c
@@ -31,6 +31,8 @@
************************* Header Files ****************************************
*/
+#define LOG_TAG "NFC"
+
#include <phLibNfc.h>
#include <phDal4Nfc.h>
#include <phHal4Nfc.h>
@@ -45,6 +47,8 @@
*************************** Macro's ******************************************
*/
+extern int dlopen_firmware();
+
#ifndef STATIC_DISABLE
#define STATIC static
#else
@@ -106,6 +110,7 @@ NFCSTATUS phLibNfc_HW_Reset ()
{
NFCSTATUS Status = NFCSTATUS_SUCCESS;
+ Status = phDal4Nfc_Reset(1);
Status = phDal4Nfc_Reset(0);
Status = phDal4Nfc_Reset(1);
@@ -117,6 +122,13 @@ NFCSTATUS phLibNfc_Download_Mode ()
return phDal4Nfc_Download();
}
+int phLibNfc_Load_Firmware_Image ()
+{
+ int status;
+ status = dlopen_firmware();
+ return status;
+}
+
extern uint8_t nxp_nfc_isoxchg_timeout;
NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout) {
@@ -124,12 +136,40 @@ NFCSTATUS phLibNfc_SetIsoXchgTimeout(uint8_t timeout) {
return NFCSTATUS_SUCCESS;
}
+int phLibNfc_GetIsoXchgTimeout() {
+ return nxp_nfc_isoxchg_timeout;
+}
+
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;
}
+int phLibNfc_GetHciTimeout() {
+ return nxp_nfc_hci_response_timeout;
+}
+
+extern uint32_t nxp_nfc_felica_timeout;
+NFCSTATUS phLibNfc_SetFelicaTimeout(uint8_t timeout_in_ms) {
+ nxp_nfc_felica_timeout = timeout_in_ms;
+ return NFCSTATUS_SUCCESS;
+}
+
+int phLibNfc_GetFelicaTimeout() {
+ return nxp_nfc_felica_timeout;
+}
+
+extern uint8_t nxp_nfc_mifareraw_timeout;
+NFCSTATUS phLibNfc_SetMifareRawTimeout(uint8_t timeout) {
+ nxp_nfc_mifareraw_timeout = timeout;
+ return NFCSTATUS_SUCCESS;
+}
+
+int phLibNfc_GetMifareRawTimeout() {
+ return nxp_nfc_mifareraw_timeout;
+}
+
/**
* Initialize the phLibNfc interface.
*/
@@ -580,6 +620,7 @@ NFCSTATUS phLibNfc_Mgt_Reset(void *pContext)
}
/* No device is connected */
gpphLibContext->Connected_handle = 0x00;
+ gpphLibContext->Prev_Connected_handle = 0x00;
gpphLibContext->ReleaseType = NFC_INVALID_RELEASE_TYPE;
gpphLibContext->eLibNfcCfgMode = NFC_DISCOVERY_STOP;
/*Lib Nfc Stack is initilized and in idle state*/
@@ -826,10 +867,15 @@ NFCSTATUS phLibNfc_Mgt_GetstackCapabilities(
gpphLibContext->psHwReference->device_info.model_id;
(void)memcpy(phLibNfc_StackCapabilities->psDevCapabilities.full_version,
gpphLibContext->psHwReference->device_info.full_version,NXP_FULL_VERSION_LEN);
-
/* Check the firmware version */
- phLibNfc_StackCapabilities->psDevCapabilities.firmware_update_info = memcmp(phLibNfc_StackCapabilities->psDevCapabilities.full_version, nxp_nfc_full_version,
- NXP_FULL_VERSION_LEN);
+ if (nxp_nfc_full_version == NULL) {
+ // Couldn't load firmware, just pretend we're up to date.
+ LOGW("Firmware image not available: this device might be running old NFC firmware!");
+ phLibNfc_StackCapabilities->psDevCapabilities.firmware_update_info = 0;
+ } else {
+ phLibNfc_StackCapabilities->psDevCapabilities.firmware_update_info = memcmp(phLibNfc_StackCapabilities->psDevCapabilities.full_version, nxp_nfc_full_version,
+ NXP_FULL_VERSION_LEN);
+ }
if(NFCSTATUS_SUCCESS != RetVal)
{