NFC_GetConfig and NFC_PowerLink command are sent back to back causing JNI to be never notified thus causing NFC service died issue
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index 3d0747a..0aa8e50 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -981,7 +981,20 @@
nfa_ee_cb.p_ee_cback[index] = NULL;
if (p_cback) (*p_cback)(NFA_EE_DEREGISTER_EVT, &evt_data);
}
-
+/*******************************************************************************
+**
+** Function nfa_ee_api_power_link_set
+**
+** Description process power link command request
+**
+** Returns void
+**
+*******************************************************************************/
+void nfa_ee_api_power_link_set(tNFA_EE_MSG* p_data) {
+ tNFA_EE_ECB* p_cb = p_data->cfg_hdr.p_cb;
+ NFC_Nfcee_PwrLinkCtrl(p_data->pwr_lnk_ctrl_set.nfcee_id, p_data->pwr_lnk_ctrl_set.cfg_value);
+ return;
+}
/*******************************************************************************
**
** Function nfa_ee_api_mode_set
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.c
index f54b28c..5c945db 100644
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.c
@@ -307,7 +307,37 @@
return status;
}
+/*******************************************************************************
+**
+** Function NFA_SendPowerLinkCommand
+**
+** Description This function is called to send an NCI Vendor Specific
+** command to NFCC.
+**
+** nfcee_id - The NFCEE id.
+** cfg_value - The config value
+**
+** Returns NFA_STATUS_OK if successfully initiated
+** NFA_STATUS_FAILED otherwise
+**
+*******************************************************************************/
+tNFA_STATUS NFA_SendPowerLinkCommand(uint8_t nfcee_id, uint8_t cfg_value) {
+ tNFA_EE_API_POWER_LINK_EVT* p_msg;
+ NFA_TRACE_API1("NFA_SendPowerLinkCommand() nfcee_id=0x%x", nfcee_id);
+
+ if ((p_msg = (tNFA_EE_API_POWER_LINK_EVT*)GKI_getbuf(sizeof(tNFA_EE_API_POWER_LINK_EVT))) != NULL) {
+ p_msg->hdr.event = NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT;
+ p_msg->nfcee_id= nfcee_id;
+ p_msg->cfg_value = cfg_value;
+
+ nfa_sys_sendmsg(p_msg);
+
+ return (NFA_STATUS_OK);
+ }
+
+ return (NFA_STATUS_FAILED);
+}
/*******************************************************************************
**
** Function NFA_EeModeSet
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index 958a816..da58a54 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -90,6 +90,7 @@
nfa_ee_nci_mode_set_rsp, /* NFA_EE_NCI_MODE_SET_RSP_EVT */
#if (NXP_EXTNS == TRUE)
nfa_ee_nci_set_mode_info, /* NFA_EE_NCI_MODE_SET_INFO*/
+ nfa_ee_api_power_link_set, /* NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT */
nfa_ee_nci_pwr_link_ctrl_rsp, /*NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT*/
#endif
nfa_ee_nci_conn, /* NFA_EE_NCI_CONN_EVT */
@@ -668,6 +669,8 @@
#if (NXP_EXTNS == TRUE)
case NFA_EE_NCI_MODE_SET_INFO:
return "NFA_EE_NCI_MODE_SET_INFO";
+ case NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT:
+ return "NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT,";
case NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT:
if(nfcFL.eseFL._WIRED_MODE_STANDBY) {
return "NCI_PWR_LNK_CTRL";
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 162aed2..787c15f 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -387,7 +387,18 @@
**
*******************************************************************************/
extern tNFA_STATUS NFA_EeDeregister(tNFA_EE_CBACK* p_cback);
-
+/*******************************************************************************
+**
+** Function NFA_SendPowerLinkCommand
+**
+** Description This function sends the power link control command
+**
+** Returns NFA_STATUS_OK if successfully initiated
+** NFA_STATUS_FAILED otherwise
+** NFA_STATUS_INVALID_PARAM If bad parameter
+**
+*******************************************************************************/
+extern tNFA_STATUS NFA_SendPowerLinkCommand(uint8_t nfcee_id, uint8_t cfg_value);
/*******************************************************************************
**
** Function NFA_EeModeSet
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/int/nfa_ee_int.h
index aeaaf97..547dd7a 100644
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/int/nfa_ee_int.h
@@ -85,6 +85,7 @@
NFA_EE_NCI_MODE_SET_RSP_EVT,
#if (NXP_EXTNS == TRUE)
NFA_EE_NCI_MODE_SET_INFO,
+ NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT,
NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT,
#endif
NFA_EE_NCI_CONN_EVT,
@@ -342,6 +343,12 @@
uint8_t nfcee_id;
uint8_t mode;
} tNFA_EE_API_MODE_SET;
+/* data type for NFA_EE_API_POWER_LINK_EVT */
+typedef struct {
+ NFC_HDR hdr;
+ uint8_t nfcee_id;
+ uint8_t cfg_value;
+} tNFA_EE_API_POWER_LINK_EVT;
/* data type for NFA_EE_API_SET_TECH_CFG_EVT */
typedef struct {
@@ -546,6 +553,7 @@
tNFA_EE_NCI_MODE_SET mode_set_rsp;
#if (NXP_EXTNS == TRUE)
tNFA_EE_NCI_SET_MODE_INFO mode_set_info;
+ tNFA_EE_API_POWER_LINK_EVT pwr_lnk_ctrl_set;
tNFA_EE_NCI_PWR_LNK_CTRL pwr_lnk_ctrl_rsp;
#endif
tNFA_EE_NCI_WAIT_RSP wait_rsp;
@@ -697,6 +705,7 @@
void nfa_ee_api_register(tNFA_EE_MSG* p_data);
void nfa_ee_api_deregister(tNFA_EE_MSG* p_data);
void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data);
+void nfa_ee_api_power_link_set(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_tech_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);