Configure nfc device node through .conf file

NXP_NFC_DEV_NODE is used to specify nfc device node name
in libnfc-nxp.conf.

Change-Id: I203249c355504a330891788ae7a4013a431d4cf0
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 55e72ec..4bee853 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -432,6 +432,8 @@
 {
     phOsalNfc_Config_t tOsalConfig;
     phTmlNfc_Config_t tTmlConfig;
+    char *nfc_dev_node = NULL;
+    const uint16_t max_len = 260;
     NFCSTATUS wConfigStatus = NFCSTATUS_SUCCESS;
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     /*NCI_INIT_CMD*/
@@ -468,10 +470,23 @@
     nxpncihal_ctrl.p_nfc_stack_cback = p_cback;
     nxpncihal_ctrl.p_nfc_stack_data_cback = p_data_cback;
 
+    /* Read the nfc device node name */
+    nfc_dev_node = (char*) malloc (max_len * sizeof (char *));
+    if (nfc_dev_node == NULL)
+    {
+        NXPLOG_NCIHAL_E ("malloc of nfc_dev_node failed ");
+        goto clean_and_return;
+    }
+    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, nfc_dev_node, sizeof (nfc_dev_node)))
+    {
+        NXPLOG_NCIHAL_E ("Invalid nfc device node name keeping the default device node /dev/pn54x");
+        strcpy (nfc_dev_node, "/dev/pn54x");
+    }
+
     /* Configure hardware link */
     nxpncihal_ctrl.gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
     nxpncihal_ctrl.gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C;/* For PN54X */
-    tTmlConfig.pDevName = (int8_t *) "/dev/pn54x";
+    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
     tOsalConfig.dwCallbackThreadId
     = (uintptr_t) nxpncihal_ctrl.gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
@@ -487,6 +502,14 @@
         NXPLOG_NCIHAL_E("phTmlNfc_Init Failed");
         goto clean_and_return;
     }
+    else
+    {
+        if (nfc_dev_node != NULL)
+        {
+            free (nfc_dev_node);
+            nfc_dev_node = NULL;
+        }
+    }
 
     /* Create the client thread */
     pthread_attr_t attr;
@@ -613,6 +636,11 @@
 
     clean_and_return:
     CONCURRENCY_UNLOCK();
+    if (nfc_dev_node != NULL)
+    {
+        free (nfc_dev_node);
+        nfc_dev_node = NULL;
+    }
     /* Report error status */
     (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_OPEN_CPLT_EVT,
             HAL_NFC_STATUS_FAILED);
diff --git a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
index b160b11..b383474 100644
--- a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
@@ -18,6 +18,10 @@
 NXPLOG_TML_LOGLEVEL=0x03
 
 ###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn54x"
+
+###############################################################################
 # Extension for Mifare reader enable
 MIFARE_READER_ENABLE=0x01
 
diff --git a/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf b/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf
index eca60d8..637448d 100644
--- a/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN548AD_example.conf
@@ -18,6 +18,10 @@
 NXPLOG_TML_LOGLEVEL=0x03
 
 ###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn54x"
+
+###############################################################################
 # Extension for Mifare reader enable
 MIFARE_READER_ENABLE=0x01
 
diff --git a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
index 21f2c18..a1fec14 100644
--- a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
@@ -18,6 +18,10 @@
 NXPLOG_TML_LOGLEVEL=0x03
 
 ###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn54x"
+
+###############################################################################
 # Extension for Mifare reader enable
 MIFARE_READER_ENABLE=0x01
 
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index c96fbb3..269c49a 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -16,6 +16,9 @@
 NXPLOG_NCIR_LOGLEVEL=0x03
 NXPLOG_FWDNLD_LOGLEVEL=0x03
 NXPLOG_TML_LOGLEVEL=0x03
+###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn54x"
 
 ###############################################################################
 # Extension for Mifare reader enable
diff --git a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
index c45099f..1b180ad 100644
--- a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
+++ b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
@@ -21,6 +21,7 @@
 #include <phNxpLog.h>
 #include <pthread.h>
 #include <phOsalNfc_Timer.h>
+#include <phNxpConfig.h>
 
 #define HAL_WRITE_RSP_TIMEOUT   (2000)   /* Timeout value to wait for response from PN54X */
 #define HAL_WRITE_MAX_RETRY     (10)
@@ -1384,6 +1385,8 @@
 
     phOsalNfc_Config_t tOsalConfig;
     phTmlNfc_Config_t tTmlConfig;
+    char *nfc_dev_node = NULL;
+    const uint16_t max_len = 260;
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     uint16_t read_len = 255;
 
@@ -1401,9 +1404,22 @@
     memset(&tOsalConfig, 0x00, sizeof(tOsalConfig));
     memset(&tTmlConfig, 0x00, sizeof(tTmlConfig));
 
+    /* Read the nfc device node name */
+    nfc_dev_node = (char*) malloc (max_len * sizeof (char*));
+    if (nfc_dev_node == NULL)
+    {
+        NXPLOG_NCIHAL_E ("malloc of nfc_dev_node failed ");
+        goto clean_and_return;
+    }
+    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, nfc_dev_node, sizeof (nfc_dev_node)))
+    {
+        NXPLOG_NCIHAL_E ("Invalid nfc device node name keeping the default device node /dev/pn54x");
+        strcpy (nfc_dev_node, "/dev/pn54x");
+    }
+
     gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
     gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C;/* For PN54X */
-    tTmlConfig.pDevName = (int8_t *) "/dev/pn54x";
+    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
     tOsalConfig.dwCallbackThreadId = (uintptr_t) gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
     tTmlConfig.dwGetMsgThreadId = (uintptr_t) gDrvCfg.nClientId;
@@ -1416,6 +1432,14 @@
         NXPLOG_NCIHAL_E("phTmlNfc_Init Failed");
         goto clean_and_return;
     }
+    else
+    {
+        if (nfc_dev_node != NULL)
+        {
+            free (nfc_dev_node);
+            nfc_dev_node = NULL;
+        }
+    }
 
     pthread_attr_t attr;
     pthread_attr_init(&attr);
@@ -1443,8 +1467,13 @@
     return NFCSTATUS_SUCCESS;
 
 clean_and_return:
-    CONCURRENCY_UNLOCK();
-    phNxpNciHal_cleanup_monitor();
+    CONCURRENCY_UNLOCK ();
+    if (nfc_dev_node != NULL)
+    {
+        free (nfc_dev_node);
+        nfc_dev_node = NULL;
+    }
+    phNxpNciHal_cleanup_monitor ();
     return NFCSTATUS_FAILED;
 }
 
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 45c1ecd..f733501 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -64,6 +64,7 @@
 
 #define NAME_MIFARE_READER_ENABLE    "MIFARE_READER_ENABLE"
 #define NAME_FW_STORAGE              "FW_STORAGE"
+#define NAME_NXP_NFC_DEV_NODE        "NXP_NFC_DEV_NODE"
 #define NAME_NXP_FW_PROTECION_OVERRIDE "NXP_FW_PROTECION_OVERRIDE"
 #define NAME_NXP_SYS_CLK_SRC_SEL     "NXP_SYS_CLK_SRC_SEL"
 #define NAME_NXP_SYS_CLK_FREQ_SEL    "NXP_SYS_CLK_FREQ_SEL"