keep history after reset to GRK39D
diff --git a/jni/com_android_nfc_NativeNfcManager.cpp b/jni/com_android_nfc_NativeNfcManager.cpp
index e724524..cba4691 100644
--- a/jni/com_android_nfc_NativeNfcManager.cpp
+++ b/jni/com_android_nfc_NativeNfcManager.cpp
@@ -26,16 +26,13 @@
#define ERROR_BUFFER_TOO_SMALL -12
#define ERROR_INSUFFICIENT_RESOURCES -9
-#define EEDATA_SETTINGS_NUMBER 29
+#define EEDATA_SETTINGS_NUMBER 28
static phLibNfc_sConfig_t gDrvCfg;
void *gHWRef;
static phNfc_sData_t gInputParam;
static phNfc_sData_t gOutputParam;
-uint8_t device_connected_flag;
-static bool driverConfigured = FALSE;
-
static phLibNfc_Handle hLlcpHandle;
static NFCSTATUS lastErrorStatus = NFCSTATUS_FAILED;
static phLibNfc_Llcp_eLinkStatus_t g_eLinkStatus = phFriNfc_LlcpMac_eLinkDefault;
@@ -49,10 +46,6 @@
static jmethodID cached_NfcManager_notifySeFieldActivated;
static jmethodID cached_NfcManager_notifySeFieldDeactivated;
-static jmethodID cached_NfcManager_notifySeApduReceived;
-static jmethodID cached_NfcManager_notifySeMifareAccess;
-static jmethodID cached_NfcManager_notifySeEmvCardRemoval;
-
namespace android {
phLibNfc_Handle storedHandle = 0;
@@ -109,9 +102,6 @@
// Set NFCT ATQA
,{0x00, 0x98, 0x7D, 0x02}
,{0x00, 0x98, 0x7E, 0x00}
-
- // Enable CEA detection mechanism
- ,{0x00, 0x9F, 0xC8, 0x01}
};
/* Internal functions declaration */
@@ -220,7 +210,7 @@
uint8_t OutputBuffer[1];
uint8_t InputBuffer[1];
struct timespec ts;
- NFCSTATUS status = NFCSTATUS_FAILED;
+ NFCSTATUS status;
phLibNfc_StackCapabilities_t caps;
struct nfc_jni_callback_data cb_data;
@@ -287,21 +277,13 @@
goto clean_and_return;
}
- /* NOTE: we will get NFCSTATUS_FEATURE_NOT_SUPPORTED when we
- try to download an old-style firmware on top of a new-style
- firmware. Hence, this is expected behavior, and not an
- error condition. */
- if(cb_data.status != NFCSTATUS_SUCCESS && cb_data.status != NFCSTATUS_FEATURE_NOT_SUPPORTED)
+ /* Download Status */
+ if(cb_data.status != NFCSTATUS_SUCCESS)
{
status = cb_data.status;
goto clean_and_return;
}
- if(cb_data.status == NFCSTATUS_FEATURE_NOT_SUPPORTED)
- {
- LOGW("Old-style firmware not installed on top of new-style firmware. Using existing firmware in the chip.");
- }
-
reinit:
TRACE("phLibNfc_HW_Reset()");
phLibNfc_HW_Reset();
@@ -341,14 +323,13 @@
}
else
{
- LOGD("NFC capabilities: HAL = %x, FW = %x, HW = %x, Model = %x, HCI = %x, Full_FW = %d, Rev = %d, FW Update Info = %d",
+ LOGD("NFC capabilities: HAL = %x, FW = %x, HW = %x, Model = %x, HCI = %x, Full_FW = %d, FW Update Info = %d",
caps.psDevCapabilities.hal_version,
caps.psDevCapabilities.fw_version,
caps.psDevCapabilities.hw_version,
caps.psDevCapabilities.model_id,
caps.psDevCapabilities.hci_version,
caps.psDevCapabilities.full_version[NXP_FULL_VERSION_LEN-1],
- caps.psDevCapabilities.full_version[NXP_FULL_VERSION_LEN-2],
caps.psDevCapabilities.firmware_update_info);
}
@@ -360,83 +341,20 @@
return status;
}
-static int nfc_jni_configure_driver(struct nfc_jni_native_data *nat)
-{
- char value[PROPERTY_VALUE_MAX];
- int result = FALSE;
- NFCSTATUS status;
-
- /* ====== CONFIGURE DRIVER ======= */
- /* Configure hardware link */
- gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
-
- property_get("ro.nfc.port", value, "unknown");
- gDrvCfg.nLinkType = parseLinkType(value);
-
- TRACE("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId, gDrvCfg.nLinkType);
- REENTRANCE_LOCK();
- status = phLibNfc_Mgt_ConfigureDriver(&gDrvCfg, &gHWRef);
- REENTRANCE_UNLOCK();
- if(status == NFCSTATUS_ALREADY_INITIALISED) {
- LOGW("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
- }
- else if(status != NFCSTATUS_SUCCESS)
- {
- LOGE("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
- goto clean_and_return;
- }
- TRACE("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
-
- if(pthread_create(&(nat->thread), NULL, nfc_jni_client_thread, nat) != 0)
- {
- LOGE("pthread_create failed");
- goto clean_and_return;
- }
-
- driverConfigured = TRUE;
-
-clean_and_return:
- return result;
-}
-
-static int nfc_jni_unconfigure_driver(struct nfc_jni_native_data *nat)
-{
- int result = FALSE;
- NFCSTATUS status;
-
- /* Unconfigure driver */
- TRACE("phLibNfc_Mgt_UnConfigureDriver()");
- REENTRANCE_LOCK();
- status = phLibNfc_Mgt_UnConfigureDriver(gHWRef);
- REENTRANCE_UNLOCK();
- if(status != NFCSTATUS_SUCCESS)
- {
- LOGE("phLibNfc_Mgt_UnConfigureDriver() returned error 0x%04x[%s] -- this should never happen", status, nfc_jni_get_status_name( status));
- }
- else
- {
- LOGD("phLibNfc_Mgt_UnConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
- result = TRUE;
- }
-
- driverConfigured = FALSE;
-
- return result;
-}
-
/* Initialization function */
static int nfc_jni_initialize(struct nfc_jni_native_data *nat) {
struct timespec ts;
uint8_t resp[16];
NFCSTATUS status;
phLibNfc_StackCapabilities_t caps;
+ char value[PROPERTY_VALUE_MAX];
+ int result = FALSE;
phLibNfc_SE_List_t SE_List[PHLIBNFC_MAXNO_OF_SE];
uint8_t i, No_SE = PHLIBNFC_MAXNO_OF_SE, SmartMX_index = 0, SmartMX_detected = 0;
phLibNfc_Llcp_sLinkParameters_t LlcpConfigInfo;
struct nfc_jni_callback_data cb_data;
uint8_t firmware_status;
uint8_t update = TRUE;
- int result = JNI_FALSE;
LOGD("Start Initialization\n");
@@ -446,16 +364,36 @@
goto clean_and_return;
}
- /* Reset device connected handle */
- device_connected_flag = 0;
-
/* Reset stored handle */
storedHandle = 0;
- /* Initialize Driver */
- if(!driverConfigured)
+ /* Configure hardware link */
+ gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
+
+ property_get("ro.nfc.port", value, "unknown");
+ gDrvCfg.nLinkType = parseLinkType(value);
+
+ /* ====== CONFIGURE DRIVER ======= */
+
+ TRACE("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId, gDrvCfg.nLinkType);
+ REENTRANCE_LOCK();
+ status = phLibNfc_Mgt_ConfigureDriver(&gDrvCfg, &gHWRef);
+ REENTRANCE_UNLOCK();
+ if(status == NFCSTATUS_ALREADY_INITIALISED) {
+ LOGW("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+ }
+ else if(status != NFCSTATUS_SUCCESS)
{
- nfc_jni_configure_driver(nat);
+ LOGE("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+ goto clean_and_return;
+ }
+ TRACE("phLibNfc_Mgt_ConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+
+ if(pthread_create(&(nat->thread), NULL, nfc_jni_client_thread,
+ nat) != 0)
+ {
+ LOGE("pthread_create failed");
+ goto clean_and_return;
}
/* ====== INITIALIZE ======= */
@@ -522,7 +460,6 @@
break;
}
LOGW("Firmware update FAILED");
- update = FALSE;
}
if(i>=3)
{
@@ -718,9 +655,6 @@
/* Reset the PN544 ISO XCHG / sw watchdog timeouts */
nfc_jni_reset_timeout_values();
- /* Reset device connected flag */
- device_connected_flag = 0;
-
/* Restart Polling loop */
TRACE("****** Start NFC Discovery ******");
REENTRANCE_LOCK();
@@ -905,15 +839,12 @@
sLinkParams.miu,
sLinkParams.option,
sLinkParams.wks);
- device_connected_flag = 1;
}
}
else if(eLinkStatus == phFriNfc_LlcpMac_eLinkDeactivated)
{
LOGI("LLCP Link deactivated");
free(pContextData);
- /* Reset device connected flag */
- device_connected_flag = 0;
/* Reset incoming socket list */
while (!LIST_EMPTY(&pMonitor->incoming_socket_head))
@@ -1051,10 +982,7 @@
{
LOG_CALLBACK("nfc_jni_Discovery_notification_callback", status);
TRACE("Discovered %d tags", uNofRemoteDev);
-
- /* Reset device connected flag */
- device_connected_flag = 1;
-
+
if((psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Initiator)
|| (psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Target))
{
@@ -1248,11 +1176,9 @@
phLibNfc_uSeEvtInfo_t *evt_info, NFCSTATUS status)
{
JNIEnv *e;
- jobject tmp_array = NULL;
- jobject mifare_block = NULL;
+ jobject aid_array = NULL;
struct nfc_jni_native_data *nat;
phNfc_sData_t *aid;
- phNfc_sData_t *mifare_command;
struct nfc_jni_callback_data *pCallbackData;
int i=0;
@@ -1279,18 +1205,18 @@
{
char aid_str[AID_MAXLEN * 2 + 1];
aid_str[0] = '\0';
- for (i = 0; i < (int) (aid->length) && i < AID_MAXLEN; i++) {
+ for (i = 0; i < (aid->length) && i < AID_MAXLEN; i++) {
snprintf(&aid_str[i*2], 3, "%02x", aid->buffer[i]);
}
LOGD("> AID: %s", aid_str);
- tmp_array = e->NewByteArray(aid->length);
- if (tmp_array == NULL)
+ aid_array = e->NewByteArray(aid->length);
+ if(aid_array == NULL)
{
goto error;
}
- e->SetByteArrayRegion((jbyteArray)tmp_array, 0, aid->length, (jbyte *)aid->buffer);
+ e->SetByteArrayRegion((jbyteArray)aid_array, 0, aid->length, (jbyte *)aid->buffer);
if(e->ExceptionCheck())
{
goto error;
@@ -1303,7 +1229,7 @@
TRACE("Notify Nfc Service");
/* Notify manager that a new event occurred on a SE */
- e->CallVoidMethod(nat->manager, cached_NfcManager_notifyTransactionListeners, tmp_array);
+ e->CallVoidMethod(nat->manager, cached_NfcManager_notifyTransactionListeners, aid_array);
if(e->ExceptionCheck())
{
goto error;
@@ -1315,56 +1241,6 @@
}
}break;
- case phLibNfc_eSE_EvtApduReceived:
- {
- phNfc_sData_t *apdu = &(evt_info->UiccEvtInfo.aid);
- TRACE("> SE EVT_APDU_RECEIVED");
-
- if (apdu != NULL) {
- TRACE(" APDU length=%d", apdu->length);
- tmp_array = e->NewByteArray(apdu->length);
- if (tmp_array == NULL) {
- goto error;
- }
- e->SetByteArrayRegion((jbyteArray)tmp_array, 0, apdu->length, (jbyte *)apdu->buffer);
- if (e->ExceptionCheck()) {
- goto error;
- }
- } else {
- TRACE(" APDU EMPTY");
- }
-
- TRACE("Notify Nfc Service");
- e->CallVoidMethod(nat->manager, cached_NfcManager_notifySeApduReceived, tmp_array);
- }break;
-
- case phLibNfc_eSE_EvtCardRemoval:
- {
- TRACE("> SE EVT_EMV_CARD_REMOVAL");
- TRACE("Notify Nfc Service");
- e->CallVoidMethod(nat->manager, cached_NfcManager_notifySeEmvCardRemoval);
- }break;
-
- case phLibNfc_eSE_EvtMifareAccess:
- {
- TRACE("> SE EVT_MIFARE_ACCESS");
- mifare_command = &(evt_info->UiccEvtInfo.aid);
- TRACE("> MIFARE Block: %d",mifare_command->buffer[1]);
- tmp_array = e->NewByteArray(2);
- if (tmp_array == NULL)
- {
- goto error;
- }
-
- e->SetByteArrayRegion((jbyteArray)tmp_array, 0, 2, (jbyte *)mifare_command->buffer);
- if(e->ExceptionCheck())
- {
- goto error;
- }
- TRACE("Notify Nfc Service");
- e->CallVoidMethod(nat->manager, cached_NfcManager_notifySeMifareAccess, mifare_block);
- }break;
-
case phLibNfc_eSE_EvtFieldOn:
{
TRACE("> SE EVT_FIELD_ON");
@@ -1400,9 +1276,9 @@
e->ExceptionClear();
clean_and_return:
- if(tmp_array != NULL)
+ if(aid_array != NULL)
{
- e->DeleteLocalRef(tmp_array);
+ e->DeleteLocalRef(aid_array);
}
}
@@ -1478,9 +1354,6 @@
/* Reset the PN544 ISO XCHG / sw watchdog timeouts */
nfc_jni_reset_timeout_values();
- /* Reset device connected flag */
- device_connected_flag = 0;
-
#if 0
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443A = TRUE;
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443B = TRUE;
@@ -1581,7 +1454,7 @@
}
discovery_cfg.PollDevInfo.PollEnabled = 0;
- discovery_cfg.Duration = 300000; /* in ms */
+ discovery_cfg.Duration = 0xffffffff;
/*discovery_cfg.NfcIP_Mode = phNfc_eInvalidP2PMode;*/
discovery_cfg.NfcIP_Mode = phNfc_eDefaultP2PMode;
discovery_cfg.NfcIP_Tgt_Disable = TRUE;
@@ -1758,16 +1631,7 @@
"notifySeFieldActivated", "()V");
cached_NfcManager_notifySeFieldDeactivated = e->GetMethodID(cls,
- "notifySeFieldDeactivated", "()V");
-
- cached_NfcManager_notifySeApduReceived= e->GetMethodID(cls,
- "notifySeApduReceived", "([B)V");
-
- cached_NfcManager_notifySeMifareAccess = e->GetMethodID(cls,
- "notifySeMifareAccess", "([B)V");
-
- cached_NfcManager_notifySeEmvCardRemoval = e->GetMethodID(cls,
- "notifySeEmvCardRemoval", "()V");
+ "notifySeFieldDeactivated", "()V");
if(nfc_jni_cache_object(e,"com/android/nfc/NativeNfcTag",&(nat->cached_NfcTag)) == -1)
{
@@ -1780,11 +1644,11 @@
LOGD("Native Structure initialization failed");
return FALSE;
}
- TRACE("****** Init Native Structure OK ******");
+
+ TRACE("****** Init Native Structure OK ******");
return TRUE;
-
}
-
+
/* Init/Deinit method */
static jboolean com_android_nfc_NfcManager_initialize(JNIEnv *e, jobject o)
{
@@ -1823,20 +1687,17 @@
{
struct timespec ts;
NFCSTATUS status;
- int result = JNI_FALSE;
struct nfc_jni_native_data *nat;
int bStackReset = FALSE;
struct nfc_jni_callback_data cb_data;
- CONCURRENCY_LOCK();
-
/* Retrieve native structure address */
- nat = nfc_jni_get_nat(e, o);
+ nat = nfc_jni_get_nat(e, o);
/* Clear previous configuration */
memset(&nat->discovery_cfg, 0, sizeof(phLibNfc_sADD_Cfg_t));
memset(&nat->registry_info, 0, sizeof(phLibNfc_Registry_Info_t));
-
+
/* Create the local semaphore */
if (nfc_cb_data_init(&cb_data, NULL))
{
@@ -1886,12 +1747,22 @@
emergency_recovery(nat);
}
- result = nfc_jni_unconfigure_driver(nat);
+ /* Unconfigure driver */
+ TRACE("phLibNfc_Mgt_UnConfigureDriver()");
+ REENTRANCE_LOCK();
+ status = phLibNfc_Mgt_UnConfigureDriver(gHWRef);
+ REENTRANCE_UNLOCK();
+ if(status != NFCSTATUS_SUCCESS)
+ {
+ LOGE("phLibNfc_Mgt_UnConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+ }
+ else
+ {
+ LOGD("phLibNfc_Mgt_UnConfigureDriver() returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+ }
TRACE("NFC Deinitialized");
- CONCURRENCY_UNLOCK();
-
return TRUE;
}
@@ -2513,123 +2384,14 @@
emergency_recovery(NULL);
}
-static jboolean com_android_nfc_NfcManager_doDownload(JNIEnv *e, jobject o)
-{
- char* firmware_version;
- jboolean result = FALSE;
- int load_result;
- int unconfigure_status;
- bool drive_state = FALSE;
- uint8_t OutputBuffer[1];
- uint8_t InputBuffer[1];
- struct timespec ts;
- NFCSTATUS status = NFCSTATUS_FAILED;
- struct nfc_jni_callback_data cb_data;
- struct nfc_jni_native_data *nat = NULL;
- char value[PROPERTY_VALUE_MAX];
-
- /* Create the local semaphore */
- if (!nfc_cb_data_init(&cb_data, NULL))
- {
- result = FALSE;
- goto clean_and_return;
- }
-
- /* Retrieve native structure address */
- nat = nfc_jni_get_nat(e, o);
-
- CONCURRENCY_LOCK();
-
- /* Initialize Driver */
- if(!driverConfigured)
- {
- result = nfc_jni_configure_driver(nat);
- drive_state = TRUE;
- }
-
- TRACE("com_android_nfc_NfcManager_doDownload()");
-
- TRACE("Go in Download Mode");
- phLibNfc_Download_Mode();
-
- TRACE("Load new Firmware Image");
- load_result = phLibNfc_Load_Firmware_Image();
- if(load_result != 0)
- {
- TRACE("Load new Firmware Image - status = %d",load_result);
- result = FALSE;
- goto clean_and_return;
- }
-
- // Download
- gInputParam.buffer = InputBuffer;
- gInputParam.length = 0x01;
- gOutputParam.buffer = OutputBuffer;
- gOutputParam.length = 0x01;
-
- LOGD("Download new Firmware");
- REENTRANCE_LOCK();
- status = phLibNfc_Mgt_IoCtl(gHWRef,NFC_FW_DOWNLOAD, &gInputParam, &gOutputParam, nfc_jni_ioctl_callback, (void *)&cb_data);
- REENTRANCE_UNLOCK();
- if(status != NFCSTATUS_PENDING)
- {
- LOGE("phLibNfc_Mgt_IoCtl() (download) returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
- result = FALSE;
- goto clean_and_return;
- }
- TRACE("phLibNfc_Mgt_IoCtl() (download) returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
-
- /* Wait for callback response */
- if(sem_wait(&cb_data.sem))
- {
- LOGE("Failed to wait for semaphore (errno=0x%08x)", errno);
- result = FALSE;
- goto clean_and_return;
- }
-
- /* NOTE: we will get NFCSTATUS_FEATURE_NOT_SUPPORTED when we
- try to download an old-style firmware on top of a new-style
- firmware. Hence, this is expected behavior, and not an
- error condition. */
- if(cb_data.status != NFCSTATUS_SUCCESS && cb_data.status != NFCSTATUS_FEATURE_NOT_SUPPORTED)
- {
- TRACE("phLibNfc_Mgt_IoCtl() (download) returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
- result = FALSE;
- goto clean_and_return;
- }
-
- if(cb_data.status == NFCSTATUS_FEATURE_NOT_SUPPORTED)
- {
- LOGW("Old-style firmware not installed on top of new-style firmware. Using existing firmware in the chip.");
- }
-
- /*Download is successful*/
- result = TRUE;
-
-clean_and_return:
- TRACE("phLibNfc_HW_Reset()");
- phLibNfc_HW_Reset();
- /* Deinitialize Driver */
- if(drive_state)
- {
- result = nfc_jni_unconfigure_driver(nat);
- }
- CONCURRENCY_UNLOCK();
- nfc_cb_data_deinit(&cb_data);
- return result;
-}
-
/*
* JNI registration.
*/
static JNINativeMethod gMethods[] =
{
- {"doDownload", "()Z",
- (void *)com_android_nfc_NfcManager_doDownload},
-
{"initializeNativeStructure", "()Z",
(void *)com_android_nfc_NfcManager_init_native_struc},
-
+
{"initialize", "()Z",
(void *)com_android_nfc_NfcManager_initialize},
diff --git a/jni/com_android_nfc_NativeNfcSecureElement.cpp b/jni/com_android_nfc_NativeNfcSecureElement.cpp
index f4a402b..f309122 100755
--- a/jni/com_android_nfc_NativeNfcSecureElement.cpp
+++ b/jni/com_android_nfc_NativeNfcSecureElement.cpp
@@ -24,7 +24,6 @@
static int secureElementHandle;
extern void *gHWRef;
static int SecureElementTech;
-extern uint8_t device_connected_flag;
namespace android {
@@ -205,13 +204,6 @@
TRACE("Open Secure Element");
- /* Check if NFC device is already connected to a tag or P2P peer */
- if (device_connected_flag == 1)
- {
- LOGD("Unable to open SE connection, device already connected to a P2P peer or a Tag");
- goto clean_and_return;
- }
-
/* Test if External RF field is detected */
InParam.buffer = ExternalRFDetected;
InParam.length = 3;
@@ -223,7 +215,6 @@
if(ret!=NFCSTATUS_PENDING)
{
LOGE("IOCTL status error");
- goto clean_and_return;
}
/* Wait for callback response */
diff --git a/jni/com_android_nfc_NativeNfcTag.cpp b/jni/com_android_nfc_NativeNfcTag.cpp
index e724309..566b28e 100644
--- a/jni/com_android_nfc_NativeNfcTag.cpp
+++ b/jni/com_android_nfc_NativeNfcTag.cpp
@@ -25,7 +25,7 @@
uint8_t *nfc_jni_ndef_buf = NULL;
uint32_t nfc_jni_ndef_buf_len = 0;
-extern uint8_t device_connected_flag;
+
namespace android {
@@ -444,12 +444,13 @@
e->ReleaseIntArrayElements(techList, techId, 0);
}
-static jint com_android_nfc_NativeNfcTag_doConnect(JNIEnv *e,
+static jboolean com_android_nfc_NativeNfcTag_doConnect(JNIEnv *e,
jobject o, phLibNfc_Handle handle)
{
jclass cls;
jfieldID f;
- jint status;
+ NFCSTATUS status;
+ jboolean result = JNI_FALSE;
struct nfc_jni_callback_data cb_data;
phLibNfc_sRemoteDevInformation_t* pRemDevInfo = NULL;
@@ -458,7 +459,6 @@
/* Create the local semaphore */
if (!nfc_cb_data_init(&cb_data, &pRemDevInfo))
{
- status = NFCSTATUS_NOT_ENOUGH_MEMORY;
goto clean_and_return;
}
@@ -478,15 +478,11 @@
if(sem_wait(&cb_data.sem))
{
LOGE("Failed to wait for semaphore (errno=0x%08x)", errno);
- status = NFCSTATUS_ABORTED;
goto clean_and_return;
}
-
- status = cb_data.status;
- TRACE("phLibNfc_RemoteDev_Connect() - Status code = %d", status);
-
+
/* Connect Status */
- if(status != NFCSTATUS_SUCCESS)
+ if(cb_data.status != NFCSTATUS_SUCCESS)
{
goto clean_and_return;
}
@@ -495,18 +491,21 @@
set_target_pollBytes(e, o, pRemDevInfo);
set_target_activationBytes(e, o, pRemDevInfo);
+ result = JNI_TRUE;
+
clean_and_return:
nfc_cb_data_deinit(&cb_data);
CONCURRENCY_UNLOCK();
- return status;
+ return result;
}
-static jint com_android_nfc_NativeNfcTag_doHandleReconnect(JNIEnv *e,
+static jboolean com_android_nfc_NativeNfcTag_doHandleReconnect(JNIEnv *e,
jobject o, phLibNfc_Handle handle)
{
jclass cls;
jfieldID f;
- jint status;
+ NFCSTATUS status;
+ jboolean result = JNI_FALSE;
struct nfc_jni_callback_data cb_data;
phLibNfc_sRemoteDevInformation_t* pRemDevInfo = NULL;
CONCURRENCY_LOCK();
@@ -514,7 +513,6 @@
/* Create the local semaphore */
if (!nfc_cb_data_init(&cb_data, &pRemDevInfo))
{
- status = NFCSTATUS_NOT_ENOUGH_MEMORY;
goto clean_and_return;
}
@@ -534,25 +532,24 @@
if(sem_wait(&cb_data.sem))
{
LOGE("Failed to wait for semaphore (errno=0x%08x)", errno);
- status = NFCSTATUS_ABORTED;
goto clean_and_return;
}
- status = cb_data.status;
-
/* Connect Status */
- if(status != NFCSTATUS_SUCCESS)
+ if(cb_data.status != NFCSTATUS_SUCCESS)
{
goto clean_and_return;
}
+ result = JNI_TRUE;
+
clean_and_return:
nfc_cb_data_deinit(&cb_data);
CONCURRENCY_UNLOCK();
- return status;
+ return result;
}
-static jint com_android_nfc_NativeNfcTag_doReconnect(JNIEnv *e,
+static jboolean com_android_nfc_NativeNfcTag_doReconnect(JNIEnv *e,
jobject o)
{
// Reconnect is provided by libnfc by just calling connect again
@@ -566,11 +563,11 @@
return com_android_nfc_NativeNfcTag_doConnect(e, o, handle);
}
else {
- return NFCSTATUS_SUCCESS;
+ return JNI_TRUE;
}
}
else {
- return NFCSTATUS_REJECTED;
+ return JNI_FALSE;
}
}
@@ -642,12 +639,9 @@
{
goto clean_and_return;
}
-
result = JNI_TRUE;
clean_and_return:
- /* Reset device connected flag */
- device_connected_flag = 0;
nfc_cb_data_deinit(&cb_data);
CONCURRENCY_UNLOCK();
return result;
@@ -943,10 +937,11 @@
return ndefType;
}
-static jint com_android_nfc_NativeNfcTag_doCheckNdef(JNIEnv *e, jobject o, jintArray ndefinfo)
+static bool com_android_nfc_NativeNfcTag_doCheckNdef(JNIEnv *e, jobject o, jintArray ndefinfo)
{
phLibNfc_Handle handle = 0;
- jint status;
+ NFCSTATUS status;
+ bool result = JNI_FALSE;
phLibNfc_ChkNdef_Info_t sNdefInfo;
struct nfc_jni_callback_data cb_data;
jint *ndef = e->GetIntArrayElements(ndefinfo, 0);
@@ -957,7 +952,6 @@
/* Create the local semaphore */
if (!nfc_cb_data_init(&cb_data, NULL))
{
- status = NFCSTATUS_NOT_ENOUGH_MEMORY;
goto clean_and_return;
}
cb_data.pContext = &sNdefInfo;
@@ -979,18 +973,16 @@
if(sem_wait(&cb_data.sem))
{
LOGE("Failed to wait for semaphore (errno=0x%08x)", errno);
- status = NFCSTATUS_ABORTED;
goto clean_and_return;
}
- status = cb_data.status;
- TRACE("phLibNfc_Ndef_CheckNdef() - Status code = %d", status);
-
- if (status != NFCSTATUS_SUCCESS)
+ if (cb_data.status != NFCSTATUS_SUCCESS)
{
goto clean_and_return;
}
+ result = JNI_TRUE;
+
ndef[0] = sNdefInfo.MaxNdefMsgLength;
// Translate the card state to know values for the NFC API
switch (sNdefInfo.NdefCardState) {
@@ -1013,7 +1005,7 @@
e->ReleaseIntArrayElements(ndefinfo, ndef, 0);
nfc_cb_data_deinit(&cb_data);
CONCURRENCY_UNLOCK();
- return status;
+ return result;
}
static jboolean com_android_nfc_NativeNfcTag_doPresenceCheck(JNIEnv *e, jobject o)
@@ -1059,7 +1051,6 @@
clean_and_return:
nfc_cb_data_deinit(&cb_data);
-
CONCURRENCY_UNLOCK();
return result;
@@ -1226,19 +1217,19 @@
*/
static JNINativeMethod gMethods[] =
{
- {"doConnect", "(I)I",
+ {"doConnect", "(I)Z",
(void *)com_android_nfc_NativeNfcTag_doConnect},
{"doDisconnect", "()Z",
(void *)com_android_nfc_NativeNfcTag_doDisconnect},
- {"doReconnect", "()I",
+ {"doReconnect", "()Z",
(void *)com_android_nfc_NativeNfcTag_doReconnect},
- {"doHandleReconnect", "(I)I",
+ {"doHandleReconnect", "(I)Z",
(void *)com_android_nfc_NativeNfcTag_doHandleReconnect},
{"doTransceive", "([BZ[I)[B",
(void *)com_android_nfc_NativeNfcTag_doTransceive},
{"doGetNdefType", "(II)I",
(void *)com_android_nfc_NativeNfcTag_doGetNdefType},
- {"doCheckNdef", "([I)I",
+ {"doCheckNdef", "([I)Z",
(void *)com_android_nfc_NativeNfcTag_doCheckNdef},
{"doRead", "()[B",
(void *)com_android_nfc_NativeNfcTag_doRead},
diff --git a/jni/com_android_nfc_NativeP2pDevice.cpp b/jni/com_android_nfc_NativeP2pDevice.cpp
index ed85620..fd9af3e 100644
--- a/jni/com_android_nfc_NativeP2pDevice.cpp
+++ b/jni/com_android_nfc_NativeP2pDevice.cpp
@@ -20,8 +20,6 @@
#include "com_android_nfc.h"
-extern uint8_t device_connected_flag;
-
namespace android {
extern void nfc_jni_restart_discovery_locked(struct nfc_jni_native_data *nat);
@@ -254,12 +252,9 @@
{
goto clean_and_return;
}
-
result = JNI_TRUE;
clean_and_return:
- /* Reset device connected flag */
- device_connected_flag = 0;
nfc_cb_data_deinit(&cb_data);
CONCURRENCY_UNLOCK();
return result;
diff --git a/src/com/android/nfc/NativeNfcManager.java b/src/com/android/nfc/NativeNfcManager.java
index 5938613..3f0f532 100755
--- a/src/com/android/nfc/NativeNfcManager.java
+++ b/src/com/android/nfc/NativeNfcManager.java
@@ -104,8 +104,6 @@
doSetIsoDepTimeout(timeout);
}
- public native boolean doDownload();
-
/**
* Notifies Ndef Message (TODO: rename into notifyTargetDiscovered)
*/
@@ -148,16 +146,4 @@
private void notifySeFieldDeactivated() {
mNfcService.sendMessage(NfcService.MSG_SE_FIELD_DEACTIVATED, null);
}
-
- private void notifySeApduReceived(byte[] apdu) {
- mNfcService.sendMessage(NfcService.MSG_SE_APDU_RECEIVED, apdu);
- }
-
- private void notifySeEmvCardRemoval() {
- mNfcService.sendMessage(NfcService.MSG_SE_EMV_CARD_REMOVAL, null);
- }
-
- private void notifySeMifareAccess(byte[] block) {
- mNfcService.sendMessage(NfcService.MSG_SE_MIFARE_ACCESS, block);
- }
}
diff --git a/src/com/android/nfc/NativeNfcTag.java b/src/com/android/nfc/NativeNfcTag.java
index 1937744..94df1d2 100755
--- a/src/com/android/nfc/NativeNfcTag.java
+++ b/src/com/android/nfc/NativeNfcTag.java
@@ -43,8 +43,6 @@
private int mConnectedTechnology; // Index in mTechList
- private int mLastStatusCode;
-
private final String TAG = "NativeNfcTag";
private boolean mIsPresent; // Whether the tag is known to be still present
@@ -117,12 +115,12 @@
}
}
- private native int doConnect(int handle);
- public synchronized int connect(int technology) {
+ private native boolean doConnect(int handle);
+ public synchronized boolean connect(int technology) {
if (mWatchdog != null) {
mWatchdog.pause();
}
- int status = -1;
+ boolean isSuccess = false;
for (int i = 0; i < mTechList.length; i++) {
if (mTechList[i] == technology) {
// Get the handle and connect, if not already connected
@@ -141,12 +139,12 @@
// allowed.
if (mConnectedTechnology == -1) {
// Not connected yet
- status = doConnect(mTechHandles[i]);
+ isSuccess = doConnect(mTechHandles[i]);
}
else if ((mConnectedTechnology != -1) &&
(mTechHandles[mConnectedTechnology] != mTechHandles[i])) {
// Connect to a tech with a different handle
- status = reconnect(mTechHandles[i]);
+ isSuccess = reconnect(mTechHandles[i]);
}
else {
// Already connected to a tech with the same handle
@@ -154,23 +152,24 @@
// success
if ((technology == TagTechnology.NDEF) ||
(technology == TagTechnology.NDEF_FORMATABLE)) {
- status = 0;
+ isSuccess = true;
} else {
if ((technology != TagTechnology.ISO_DEP) &&
(hasTechOnHandle(TagTechnology.ISO_DEP, mTechHandles[i]))) {
// Don't allow to connect a -4 tag at a different level
// than IsoDep, as this is not supported by
// libNFC.
+ isSuccess = false;
} else {
- status = 0;
+ isSuccess = true;
}
}
}
- if (status == 0) {
+ if (isSuccess) {
mConnectedTechnology = i;
}
} else {
- status = 0; // Already connect to this tech
+ isSuccess = true; // Already connect to this tech
}
break;
}
@@ -178,8 +177,7 @@
if (mWatchdog != null) {
mWatchdog.doResume();
}
- mLastStatusCode = status;
- return status;
+ return isSuccess;
}
public synchronized void startPresenceChecking() {
@@ -221,28 +219,28 @@
return result;
}
- native int doReconnect();
- public synchronized int reconnect() {
+ native boolean doReconnect();
+ public synchronized boolean reconnect() {
if (mWatchdog != null) {
mWatchdog.pause();
}
- int status = doReconnect();
+ boolean result = doReconnect();
if (mWatchdog != null) {
mWatchdog.doResume();
}
- return status;
+ return result;
}
- native int doHandleReconnect(int handle);
- public synchronized int reconnect(int handle) {
+ native boolean doHandleReconnect(int handle);
+ public synchronized boolean reconnect(int handle) {
if (mWatchdog != null) {
mWatchdog.pause();
}
- int status = doHandleReconnect(handle);
+ boolean result = doHandleReconnect(handle);
if (mWatchdog != null) {
mWatchdog.doResume();
}
- return status;
+ return result;
}
private native byte[] doTransceive(byte[] data, boolean raw, int[] returnCode);
@@ -257,17 +255,16 @@
return result;
}
- private native int doCheckNdef(int[] ndefinfo);
- public synchronized int checkNdef(int[] ndefinfo) {
+ private native boolean doCheckNdef(int[] ndefinfo);
+ public synchronized boolean checkNdef(int[] ndefinfo) {
if (mWatchdog != null) {
mWatchdog.pause();
}
- int status = doCheckNdef(ndefinfo);
+ boolean result = doCheckNdef(ndefinfo);
if (mWatchdog != null) {
mWatchdog.doResume();
}
- mLastStatusCode = status;
- return status;
+ return result;
}
private native byte[] doRead();
@@ -351,10 +348,6 @@
private NativeNfcTag() {
}
- public int getLastStatusCode() {
- return mLastStatusCode;
- }
-
public int getHandle() {
// This is just a handle for the clients; it can simply use the first
// technology handle we have.
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index 51cbfa4..283d72d 100755
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -70,7 +70,7 @@
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
-import java.io.File;
+import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -79,7 +79,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -90,7 +89,6 @@
private static final String MY_TAG_FILE_NAME = "mytag";
private static final String SE_RESET_SCRIPT_FILE_NAME = "/system/etc/se-reset-script";
- private static final String NFC_CONTROLLER_FIRMWARE_FILE_NAME = "/system/lib/libpn544_fw.so";
static {
System.loadLibrary("nfc_jni");
@@ -191,9 +189,6 @@
private static final String PREF_DISCOVERY_NFCIP = "discovery_nfcip";
private static final boolean DISCOVERY_NFCIP_DEFAULT = true;
- private static final String PREF_FIRMWARE_MODTIME = "firmware_modtime";
- private static final long FIRMWARE_MODTIME_DEFAULT = -1;
-
/** NFC Reader Discovery mode for enableDiscovery() */
private static final int DISCOVERY_MODE_READER = 0;
@@ -226,11 +221,6 @@
static final int MSG_MOCK_NDEF = 7;
static final int MSG_SE_FIELD_ACTIVATED = 8;
static final int MSG_SE_FIELD_DEACTIVATED = 9;
- static final int MSG_SE_APDU_RECEIVED = 10;
- static final int MSG_SE_EMV_CARD_REMOVAL = 11;
- static final int MSG_SE_MIFARE_ACCESS = 12;
-
- static final int STATUS_CODE_TARGET_LOST = 146;
// Copied from com.android.nfc_extras to avoid library dependency
// Must keep in sync with com.android.nfc_extras
@@ -244,19 +234,6 @@
"com.android.nfc_extras.action.AID_SELECTED";
public static final String EXTRA_AID = "com.android.nfc_extras.extra.AID";
- public static final String ACTION_APDU_RECEIVED =
- "com.android.nfc_extras.action.APDU_RECEIVED";
- public static final String EXTRA_APDU_BYTES =
- "com.android.nfc_extras.extra.APDU_BYTES";
-
- public static final String ACTION_EMV_CARD_REMOVAL =
- "com.android.nfc_extras.action.EMV_CARD_REMOVAL";
-
- public static final String ACTION_MIFARE_ACCESS_DETECTED =
- "com.android.nfc_extras.action.MIFARE_ACCESS_DETECTED";
- public static final String EXTRA_MIFARE_BLOCK =
- "com.android.nfc_extras.extra.MIFARE_BLOCK";
-
// Locked on mNfcAdapter
PendingIntent mDispatchOverrideIntent;
IntentFilter[] mDispatchOverrideFilters;
@@ -279,7 +256,7 @@
private final HashMap<Integer, Object> mObjectMap = new HashMap<Integer, Object>();
private final HashMap<Integer, Object> mSocketMap = new HashMap<Integer, Object>();
private boolean mScreenOn;
- private HashSet<String> mSePackages = new HashSet<String>();
+ private String mSePackageName;
// fields below are final after onCreate()
Context mContext;
@@ -330,7 +307,6 @@
NfcAdapter.ACTION_TECH_DISCOVERED, NfcAdapter.ACTION_TECH_DISCOVERED);
mSecureElement = new NativeNfcSecureElement();
- mEeRoutingState = ROUTE_OFF;
mPrefs = mContext.getSharedPreferences(PREF, Context.MODE_PRIVATE);
mPrefsEditor = mPrefs.edit();
@@ -360,14 +336,9 @@
Thread t = new Thread() {
@Override
public void run() {
- Log.d(TAG,"checking on firmware download");
boolean nfc_on = mPrefs.getBoolean(PREF_NFC_ON, NFC_ON_DEFAULT);
if (nfc_on) {
- Log.d(TAG,"NFC is on. Doing normal stuff");
_enable(false, true);
- } else {
- Log.d(TAG,"NFC is off. Checking firmware version");
- _maybeUpdateFirmware();
}
resetSeOnFirstBoot();
}
@@ -1317,7 +1288,7 @@
// Note that on most tags, all technologies are behind a single
// handle. This means that the connect at the lower levels
// will do nothing, as the tag is already connected to that handle.
- if (tag.connect(technology) == 0) {
+ if (tag.connect(technology)) {
return ErrorCodes.SUCCESS;
} else {
return ErrorCodes.ERROR_DISCONNECT;
@@ -1338,7 +1309,7 @@
/* find the tag in the hmap */
tag = (NativeNfcTag) findObject(nativeHandle);
if (tag != null) {
- if (tag.reconnect() == 0) {
+ if (tag.reconnect()) {
return ErrorCodes.SUCCESS;
} else {
return ErrorCodes.ERROR_DISCONNECT;
@@ -1404,19 +1375,20 @@
@Override
public boolean isNdef(int nativeHandle) throws RemoteException {
NativeNfcTag tag = null;
+ boolean isSuccess = false;
// Check if NFC is enabled
if (!mIsNfcEnabled) {
- return false;
+ return isSuccess;
}
/* find the tag in the hmap */
tag = (NativeNfcTag) findObject(nativeHandle);
int[] ndefInfo = new int[2];
- if (tag == null) {
- return false;
+ if (tag != null) {
+ isSuccess = tag.checkNdef(ndefInfo);
}
- return tag.checkNdef(ndefInfo) == 0;
+ return isSuccess;
}
@Override
@@ -1849,12 +1821,6 @@
} catch (RemoteException e) {
mOpenEe.binderDied();
}
-
- // Add the calling package to the list of packages that have accessed
- // the secure element.
- for (String packageName : getPackageManager().getPackagesForUid(getCallingUid())) {
- mSePackages.add(packageName);
- }
}
}
@@ -1918,8 +1884,17 @@
}
@Override
- public void authenticate(byte[] token) throws RemoteException {
+ public void registerTearDownApdus(String packageName, ApduList apdu) throws RemoteException {
NfcService.enforceNfceeAdminPerm(mContext);
+ Log.w(TAG, "NOP");
+ //TODO: Remove this API
+ }
+
+ @Override
+ public void unregisterTearDownApdus(String packageName) throws RemoteException {
+ NfcService.enforceNfceeAdminPerm(mContext);
+ Log.w(TAG, "NOP");
+ //TODO: Remove this API
}
};
@@ -2007,48 +1982,6 @@
return isSuccess;
}
- // Check that the NFC controller firmware is up to date. This
- // ensures that firmware updates are applied in a timely fashion,
- // and makes it much less likely that the user will have to wait
- // for a firmware download when they enable NFC in the settings
- // app. Firmware download can take some time, so this should be
- // run in a separate thread.
- private void _maybeUpdateFirmware() {
- // check the timestamp of the firmware file
- File firmwareFile;
- int nbRetry = 0;
- try {
- firmwareFile = new File(NFC_CONTROLLER_FIRMWARE_FILE_NAME);
- } catch(NullPointerException npe) {
- Log.e(TAG,"path to firmware file was null");
- return;
- }
-
- long modtime = firmwareFile.lastModified();
-
- long prev_fw_modtime = mPrefs.getLong(PREF_FIRMWARE_MODTIME, FIRMWARE_MODTIME_DEFAULT);
- Log.d(TAG,"prev modtime: " + prev_fw_modtime);
- Log.d(TAG,"new modtime: " + modtime);
- if (prev_fw_modtime == modtime) {
- return;
- }
-
- // FW download.
- while(nbRetry < 5) {
- Log.d(TAG,"Perform Download");
- if(mManager.doDownload()) {
- Log.d(TAG,"Download Success");
- // Now that we've finished updating the firmware, save the new modtime.
- mPrefsEditor.putLong(PREF_FIRMWARE_MODTIME, modtime);
- mPrefsEditor.apply();
- break;
- } else {
- Log.d(TAG,"Download Failed");
- nbRetry++;
- }
- }
- }
-
private class WatchDogThread extends Thread {
boolean mWatchDogCanceled = false;
@Override
@@ -2413,19 +2346,15 @@
int techIndex = 0;
int lastHandleScanned = 0;
boolean ndefFoundAndConnected = false;
- boolean isTargetLost = false;
NdefMessage[] ndefMsgs = null;
boolean foundFormattable = false;
int formattableHandle = 0;
int formattableTechnology = 0;
- int status;
- while ((!ndefFoundAndConnected) && (techIndex < technologies.length) && (!isTargetLost))
- {
+ while ((!ndefFoundAndConnected) && (techIndex < technologies.length)) {
if (handles[techIndex] != lastHandleScanned) {
// We haven't seen this handle yet, connect and checkndef
- status = nativeTag.connect(technologies[techIndex]);
- if (status == 0) {
+ if (nativeTag.connect(technologies[techIndex])) {
// Check if this type is NDEF formatable
if (!foundFormattable) {
if (nativeTag.isNdefFormatable()) {
@@ -2440,8 +2369,7 @@
} // else, already found formattable technology
int[] ndefinfo = new int[2];
- status = nativeTag.checkNdef(ndefinfo);
- if (status == 0) {
+ if (nativeTag.checkNdef(ndefinfo)) {
ndefFoundAndConnected = true;
boolean generateEmptyNdef = false;
@@ -2475,17 +2403,10 @@
supportedNdefLength, cardState);
nativeTag.reconnect();
}
- } else { // else, no NDEF on this tech, continue loop
- Log.d(TAG, "Check NDEF Failed - status = "+ status);
- if (status == STATUS_CODE_TARGET_LOST) {
- isTargetLost = true;
- }
- }
+ } // else, no NDEF on this tech, continue loop
} else {
- Log.d(TAG, "Connect Failed - status = "+ status);
- if (status == STATUS_CODE_TARGET_LOST) {
- isTargetLost = true;
- }
+ // Connect failed, tag maybe lost. Try next handle
+ // anyway.
}
}
lastHandleScanned = handles[techIndex];
@@ -2526,14 +2447,13 @@
dispatchNativeTag(nativeTag, ndefMsgs);
} else {
// No ndef found or connect failed, just try to reconnect and dispatch
- if (nativeTag.getLastStatusCode() != STATUS_CODE_TARGET_LOST) {
- if (nativeTag.reconnect() == 0) {
- nativeTag.startPresenceChecking();
- dispatchNativeTag(nativeTag, null);
- }
- } else {
- nativeTag.disconnect();
- }
+ if (nativeTag.reconnect()) {
+ nativeTag.startPresenceChecking();
+ dispatchNativeTag(nativeTag, null);
+ } else {
+ Log.w(TAG, "Failed to connect to tag");
+ nativeTag.disconnect();
+ }
}
break;
@@ -2544,47 +2464,10 @@
Intent aidIntent = new Intent();
aidIntent.setAction(ACTION_AID_SELECTED);
aidIntent.putExtra(EXTRA_AID, aid);
- if (DBG) Log.d(TAG, "Broadcasting " + ACTION_AID_SELECTED);
+ if (DBG) Log.d(TAG, "Broadcasting ACTION_AID_SELECTED");
mContext.sendBroadcast(aidIntent, NFCEE_ADMIN_PERM);
break;
- case MSG_SE_EMV_CARD_REMOVAL:
- if (DBG) Log.d(TAG, "Card Removal message");
- /* Send broadcast */
- Intent cardRemovalIntent = new Intent();
- cardRemovalIntent.setAction(ACTION_EMV_CARD_REMOVAL);
- if (DBG) Log.d(TAG, "Broadcasting " + ACTION_EMV_CARD_REMOVAL);
- mContext.sendBroadcast(cardRemovalIntent, NFCEE_ADMIN_PERM);
- break;
-
- case MSG_SE_APDU_RECEIVED:
- if (DBG) Log.d(TAG, "APDU Received message");
- byte[] apduBytes = (byte[]) msg.obj;
- /* Send broadcast */
- Intent apduReceivedIntent = new Intent();
- apduReceivedIntent.setAction(ACTION_APDU_RECEIVED);
- if (apduBytes != null && apduBytes.length > 0) {
- apduReceivedIntent.putExtra(EXTRA_APDU_BYTES, apduBytes);
- }
- if (DBG) Log.d(TAG, "Broadcasting " + ACTION_APDU_RECEIVED);
- mContext.sendBroadcast(apduReceivedIntent, NFCEE_ADMIN_PERM);
- break;
-
- case MSG_SE_MIFARE_ACCESS:
- if (DBG) Log.d(TAG, "MIFARE access message");
- /* Send broadcast */
- byte[] mifareCmd = (byte[]) msg.obj;
- Intent mifareAccessIntent = new Intent();
- mifareAccessIntent.setAction(ACTION_MIFARE_ACCESS_DETECTED);
- if (mifareCmd != null && mifareCmd.length > 1) {
- int mifareBlock = mifareCmd[1] & 0xff;
- if (DBG) Log.d(TAG, "Mifare Block=" + mifareBlock);
- mifareAccessIntent.putExtra(EXTRA_MIFARE_BLOCK, mifareBlock);
- }
- if (DBG) Log.d(TAG, "Broadcasting " + ACTION_MIFARE_ACCESS_DETECTED);
- mContext.sendBroadcast(mifareAccessIntent, NFCEE_ADMIN_PERM);
- break;
-
case MSG_LLCP_LINK_ACTIVATION:
NativeP2pDevice device = (NativeP2pDevice) msg.obj;
@@ -3089,9 +2972,8 @@
String packageName = data.getSchemeSpecificPart();
synchronized (NfcService.this) {
- if (mSePackages.contains(packageName)) {
+ if (packageName.equals(mSePackageName)) {
executeSeReset();
- mSePackages.remove(packageName);
}
}
}