I got it working on 2.3.4_r1!!!
The key was enabling discoverability but in card emulation mode. The strange
thing is now I can detect two smart card types with an Arcontia smart card
reader:
- ISO14443A tag CL1 tag (This is the Mifare 4K)
- FELICA RCS-885 424kbs tag (I suppose this is really the Javacard, not a
Felica card)
I managed to write and read a block (4) to the Mifare 4K with default keys.
Next thing will be investigating wheter 2.3.4 adds support by means of
nxp-nfc library to directly send APDUs to the SE. You and Michael Roland
already confirmed it was not possible with prior gingerbread versions.
I post the corrected patch to get card emulation on 2.3.4_r1.
One thing. Card stops being readable from an external reader after screen
goes off and back on. However if you disable NFC and re-enable it (from
settings) card is discoverable again.
Thanks nemik for your work (you can update your patches with these
corretions to work with gingerbread 2.3.4_r1 at your site if you want).
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
diff -urBNp Nfc.orig/jni/com_android_nfc_NativeNfcManager.cpp Nfc/jni/com_android_nfc_NativeNfcManager.cpp
--- Nfc.orig/jni/com_android_nfc_NativeNfcManager.cpp 2011-07-19 12:32:17.545611859 +0200
+++ Nfc/jni/com_android_nfc_NativeNfcManager.cpp 2011-07-18 10:50:27.665620770 +0200
@@ -341,6 +341,7 @@ static int nfc_jni_initialize(struct nfc
/* ====== CONFIGURE DRIVER ======= */
TRACE("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId, gDrvCfg.nLinkType);
+ LOGD("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId, gDrvCfg.nLinkType);
REENTRANCE_LOCK();
status = phLibNfc_Mgt_ConfigureDriver(&gDrvCfg, &gHWRef);
REENTRANCE_UNLOCK();
@@ -364,6 +365,7 @@ static int nfc_jni_initialize(struct nfc
/* ====== INITIALIZE ======= */
TRACE("phLibNfc_Mgt_Initialize()");
+ LOGD("phLibNfc_Mgt_Initialize()");
REENTRANCE_LOCK();
status = phLibNfc_Mgt_Initialize(gHWRef, nfc_jni_init_callback, (void *)&cb_data);
REENTRANCE_UNLOCK();
@@ -373,6 +375,7 @@ static int nfc_jni_initialize(struct nfc
goto clean_and_return;
}
TRACE("phLibNfc_Mgt_Initialize returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
+ LOGD("phLibNfc_Mgt_Initialize returned 0x%04x[%s]", status, nfc_jni_get_status_name(status));
/* Wait for callback response */
if(sem_wait(&cb_data.sem))
@@ -433,6 +436,7 @@ static int nfc_jni_initialize(struct nfc
// Update EEPROM settings
TRACE("****** START EEPROM SETTINGS UPDATE ******");
+ LOGD("****** START EEPROM SETTINGS UPDATE ******");
for (i = 0; i < EEDATA_SETTINGS_NUMBER; i++)
{
gInputParam.buffer = EEDATA_Settings[i];
@@ -440,6 +444,7 @@ static int nfc_jni_initialize(struct nfc
gOutputParam.buffer = resp;
TRACE("> EEPROM SETTING: %d", i);
+ LOGD("> EEPROM SETTING: %d", i);
REENTRANCE_LOCK();
status = phLibNfc_Mgt_IoCtl(gHWRef, NFC_MEM_WRITE, &gInputParam, &gOutputParam, nfc_jni_ioctl_callback, (void *)&cb_data);
REENTRANCE_UNLOCK();
@@ -461,6 +466,7 @@ static int nfc_jni_initialize(struct nfc
}
}
TRACE("****** ALL EEPROM SETTINGS UPDATED ******");
+ LOGD("****** ALL EEPROM SETTINGS UPDATED ******");
/* ====== SECURE ELEMENTS ======= */
@@ -511,6 +517,7 @@ static int nfc_jni_initialize(struct nfc
/* LLCP Params */
TRACE("****** NFC Config Mode NFCIP1 - LLCP ******");
+ LOGD("****** NFC Config Mode NFCIP1 - LLCP ******");
LlcpConfigInfo.miu = nat->miu;
LlcpConfigInfo.lto = nat->lto;
LlcpConfigInfo.wks = nat->wks;
@@ -529,6 +536,8 @@ static int nfc_jni_initialize(struct nfc
}
TRACE("phLibNfc_Mgt_SetLlcp_ConfigParams returned 0x%04x[%s]", status,
nfc_jni_get_status_name(status));
+ LOGD("phLibNfc_Mgt_SetLlcp_ConfigParams returned 0x%04x[%s]", status,
+ nfc_jni_get_status_name(status));
/* Wait for callback response */
if(sem_wait(&cb_data.sem))
@@ -602,6 +611,7 @@ void nfc_jni_restart_discovery_locked(st
struct nfc_jni_callback_data cb_data;
TRACE("Restarting polling loop");
+ LOGD("Restarting polling loop");
/* Create the local semaphore */
if (!nfc_cb_data_init(&cb_data, NULL))
@@ -614,6 +624,7 @@ void nfc_jni_restart_discovery_locked(st
/* Restart Polling loop */
TRACE("****** Start NFC Discovery ******");
+ LOGD("****** Start NFC Discovery ******");
REENTRANCE_LOCK();
ret = phLibNfc_Mgt_ConfigureDiscovery(NFC_DISCOVERY_RESUME,nat->discovery_cfg, nfc_jni_discover_callback, (void *)&cb_data);
REENTRANCE_UNLOCK();
@@ -626,7 +637,16 @@ void nfc_jni_restart_discovery_locked(st
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
nat->discovery_cfg.NfcIP_Mode, nat->discovery_cfg.Duration, ret);
-
+ LOGD("phLibNfc_Mgt_ConfigureDiscovery(%s-%s-%s-%s-%s-%s, %s-%x-%x) returned 0x%08x\n",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443A==TRUE?"3A":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443B==TRUE?"3B":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica212==TRUE?"F2":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica424==TRUE?"F4":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableNfcActive==TRUE?"NFC":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
+ nat->discovery_cfg.NfcIP_Mode, nat->discovery_cfg.Duration, ret);
+
if (ret != NFCSTATUS_PENDING)
{
emergency_recovery(nat);
@@ -712,6 +732,7 @@ static void *nfc_jni_client_thread(void
pthread_setname_np(pthread_self(), "message");
TRACE("NFC client started");
+ LOGD("NFC client started");
nat->running = TRUE;
while(nat->running == TRUE)
{
@@ -739,6 +760,7 @@ static void *nfc_jni_client_thread(void
}
}
TRACE("NFC client stopped");
+ LOGD("NFC client stopped");
nat->vm->DetachCurrentThread();
@@ -775,6 +797,7 @@ static void nfc_jni_llcp_linkStatus_call
nfc_jni_native_monitor * pMonitor = nfc_jni_get_monitor();
TRACE("Callback: nfc_jni_llcp_linkStatus_callback()");
+ LOGD("Callback: nfc_jni_llcp_linkStatus_callback()");
nat->vm->GetEnv( (void **)&e, nat->env_version);
@@ -877,6 +900,7 @@ void nfc_jni_llcp_transport_socket_err_c
PHNFC_UNUSED_VARIABLE(pContext);
TRACE("Callback: nfc_jni_llcp_transport_socket_err_callback()");
+ LOGD("Callback: nfc_jni_llcp_transport_socket_err_callback()");
if(nErrCode == PHFRINFC_LLCP_ERR_FRAME_REJECTED)
{
@@ -939,6 +963,7 @@ static void nfc_jni_Discovery_notificati
{
LOG_CALLBACK("nfc_jni_Discovery_notification_callback", status);
TRACE("Discovered %d tags", uNofRemoteDev);
+ LOGD("Discovered %d tags", uNofRemoteDev);
if((psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Initiator)
|| (psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Target))
@@ -975,6 +1000,7 @@ static void nfc_jni_Discovery_notificati
f = e->GetFieldID(tag_cls, "mGeneralBytes", "[B");
TRACE("General Bytes length =");
+ LOGD("General Bytes length =");
for(i=0;i<psRemoteDevList->psRemoteDevInfo->RemoteDevInfo.NfcIP_Info.ATRInfo_Length;i++)
{
LOGD("%02x ", psRemoteDevList->psRemoteDevInfo->RemoteDevInfo.NfcIP_Info.ATRInfo[i]);
@@ -993,6 +1019,7 @@ static void nfc_jni_Discovery_notificati
f = e->GetFieldID(tag_cls, "mHandle", "I");
e->SetIntField(tag, f,(jint)psRemoteDevList[target_index].hTargetDev);
TRACE("Target handle = 0x%08x",psRemoteDevList[target_index].hTargetDev);
+ LOGD("Target handle = 0x%08x",psRemoteDevList[target_index].hTargetDev);
}
else
{
@@ -1012,6 +1039,7 @@ static void nfc_jni_Discovery_notificati
if(status == NFCSTATUS_MULTIPLE_PROTOCOLS)
{
TRACE("Multiple Protocol TAG detected\n");
+ LOGD("Multiple Protocol TAG detected\n");
multi_protocol = true;
}
else if (status == NFCSTATUS_MULTIPLE_TAGS) {
@@ -1021,8 +1049,10 @@ static void nfc_jni_Discovery_notificati
// return a "complete" tag, and not just one "target", which
// is then either half of the multi-proto tag or the complete
// single-proto.
+ LOGD("Multiple TAG detected (using only one)\n");
target_index = 0;
} else {
+ LOGD("Simple Protocol TAG detected\n");
target_index = 0;
}
@@ -1066,6 +1096,7 @@ static void nfc_jni_Discovery_notificati
/* Notify the service */
TRACE("Notify Nfc Service");
+ LOGD("Notify Nfc Service");
if((psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Initiator)
|| (psRemoteDevList->psRemoteDevInfo->RemDevType == phNfc_eNfcIP1_Target))
{
@@ -1184,6 +1215,7 @@ static void nfc_jni_transaction_callback
}
TRACE("Notify Nfc Service");
+ LOGD("Emulation 1164 Notify Nfc Service");
/* Notify manager that a new event occurred on a SE */
e->CallVoidMethod(nat->manager, cached_NfcManager_notifyTransactionListeners, aid_array);
if(e->ExceptionCheck())
@@ -1258,14 +1290,19 @@ static void nfc_jni_start_card_emu_disco
NFCSTATUS ret;
TRACE("****** NFC Config Mode Card Emulation ******");
+ LOGD("****** NFC Config Mode Card Emulation ******");
/* Register for the card emulation mode */
REENTRANCE_LOCK();
ret = phLibNfc_SE_NtfRegister(nfc_jni_transaction_callback,(void *)nat);
REENTRANCE_UNLOCK();
TRACE("phLibNfc_SE_NtfRegister returned 0x%x\n", ret);
+ LOGD("phLibNfc_SE_NtfRegister returned 0x%x\n", ret);
if(ret != NFCSTATUS_SUCCESS)
- return;
+ {
+ LOGD("1205 BAD card emulatio not working phLibNfc_SE_NtfRegister returned 0x%x\n", ret);
+ return;
+ }
}
@@ -1310,6 +1347,7 @@ static void nfc_jni_start_discovery_lock
nat->registry_info.NFC = TRUE;
nat->registry_info.ISO15693 = TRUE;
TRACE("****** NFC Config Mode Reader ******");
+ LOGD("****** NFC Config Mode Reader ******");
/* Register for the reader mode */
REENTRANCE_LOCK();
@@ -1329,6 +1367,16 @@ static void nfc_jni_start_discovery_lock
nat->registry_info.ISO14443_4B==TRUE?"4B":"",
nat->registry_info.NFC==TRUE?"P2P":"",
nat->registry_info.ISO15693==TRUE?"R":"", ret);
+LOGD("1286 phLibNfc_RemoteDev_NtfRegister(%s-%s-%s-%s-%s-%s-%s-%s) returned 0x%x\n",
+ nat->registry_info.Jewel==TRUE?"J":"",
+ nat->registry_info.MifareUL==TRUE?"UL":"",
+ nat->registry_info.MifareStd==TRUE?"Mi":"",
+ nat->registry_info.Felica==TRUE?"F":"",
+ nat->registry_info.ISO14443_4A==TRUE?"4A":"",
+ nat->registry_info.ISO14443_4B==TRUE?"4B":"",
+ nat->registry_info.NFC==TRUE?"P2P":"",
+ nat->registry_info.ISO15693==TRUE?"R":"", ret);
+
/* Register for the card emulation mode */
@@ -1344,6 +1392,7 @@ static void nfc_jni_start_discovery_lock
/* Start Polling loop */
TRACE("****** Start NFC Discovery ******");
+ LOGD("****** Start NFC Discovery ******");
REENTRANCE_LOCK();
ret = phLibNfc_Mgt_ConfigureDiscovery(NFC_DISCOVERY_CONFIG,nat->discovery_cfg, nfc_jni_discover_callback, (void *)&cb_data);
REENTRANCE_UNLOCK();
@@ -1356,6 +1405,15 @@ static void nfc_jni_start_discovery_lock
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
nat->discovery_cfg.NfcIP_Mode, nat->discovery_cfg.Duration, ret);
+LOGD("phLibNfc_Mgt_ConfigureDiscovery(%s-%s-%s-%s-%s-%s, %s-%x-%x) returned 0x%08x\n",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443A==TRUE?"3A":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443B==TRUE?"3B":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica212==TRUE?"F2":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica424==TRUE?"F4":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableNfcActive==TRUE?"NFC":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
+ nat->discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
+ nat->discovery_cfg.NfcIP_Mode, nat->discovery_cfg.Duration, ret);
if(ret != NFCSTATUS_PENDING)
{
@@ -1393,6 +1451,7 @@ static void nfc_jni_stop_discovery_locke
/* Start Polling loop */
TRACE("****** Stop NFC Discovery ******");
+ LOGD("****** Stop NFC Discovery ******");
REENTRANCE_LOCK();
ret = phLibNfc_Mgt_ConfigureDiscovery(NFC_DISCOVERY_CONFIG,discovery_cfg, nfc_jni_discover_callback, (void *)&cb_data);
REENTRANCE_UNLOCK();
@@ -1405,6 +1464,15 @@ static void nfc_jni_stop_discovery_locke
discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
discovery_cfg.NfcIP_Mode, discovery_cfg.Duration, ret);
+LOGD("phLibNfc_Mgt_ConfigureDiscovery(%s-%s-%s-%s-%s-%s, %s-%x-%x) returned 0x%08x\n",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443A==TRUE?"3A":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443B==TRUE?"3B":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica212==TRUE?"F2":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica424==TRUE?"F4":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableNfcActive==TRUE?"NFC":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693==TRUE?"RFID":"",
+ discovery_cfg.PollDevInfo.PollCfgInfo.DisableCardEmulation==FALSE?"CE":"",
+ discovery_cfg.NfcIP_Mode, discovery_cfg.Duration, ret);
if(ret != NFCSTATUS_PENDING)
{
@@ -1526,6 +1594,7 @@ static jboolean com_android_nfc_NfcManag
jfieldID f;
TRACE("****** Init Native Structure ******");
+ LOGD("****** Init Native Structure ******");
/* Initialize native structure */
nat = (nfc_jni_native_data*)malloc(sizeof(struct nfc_jni_native_data));
@@ -1578,6 +1647,7 @@ static jboolean com_android_nfc_NfcManag
}
TRACE("****** Init Native Structure OK ******");
+ LOGD("****** Init Native Structure OK ******");
return TRUE;
}
@@ -1681,6 +1751,7 @@ static jboolean com_android_nfc_NfcManag
/* Unconfigure driver */
TRACE("phLibNfc_Mgt_UnConfigureDriver()");
+ LOGD("phLibNfc_Mgt_UnConfigureDriver()");
REENTRANCE_LOCK();
status = phLibNfc_Mgt_UnConfigureDriver(gHWRef);
REENTRANCE_UNLOCK();
@@ -1694,6 +1765,7 @@ static jboolean com_android_nfc_NfcManag
}
TRACE("NFC Deinitialized");
+ LOGD("NFC Deinitialized");
return TRUE;
}
@@ -1707,8 +1779,10 @@ static jintArray com_android_nfc_NfcMana
uint8_t i, se_count = PHLIBNFC_MAXNO_OF_SE;
TRACE("****** Get Secure Element List ******");
+ LOGD("****** Get Secure Element List ******");
TRACE("phLibNfc_SE_GetSecureElementList()");
+ LOGD("phLibNfc_SE_GetSecureElementList()");
REENTRANCE_LOCK();
ret = phLibNfc_SE_GetSecureElementList(se_list, &se_count);
REENTRANCE_UNLOCK();
@@ -1718,8 +1792,10 @@ static jintArray com_android_nfc_NfcMana
return list;
}
TRACE("phLibNfc_SE_GetSecureElementList() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_SE_GetSecureElementList() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
TRACE("Nb SE: %d", se_count);
+ LOGD("Nb SE: %d", se_count);
list =e->NewIntArray(se_count);
for(i=0;i<se_count;i++)
{
@@ -1761,8 +1837,10 @@ static void com_android_nfc_NfcManager_d
}
TRACE("****** Select Secure Element ******");
+ LOGD("****** Select Secure Element ******");
TRACE("phLibNfc_SE_SetMode(0x%08x, ...)", seID);
+ LOGD("phLibNfc_SE_SetMode(0x%08x, ...)", seID);
/* Set SE mode - Virtual */
REENTRANCE_LOCK();
ret = phLibNfc_SE_SetMode(seID,phLibNfc_SE_ActModeVirtual, nfc_jni_se_set_mode_callback,(void *)&cb_data);
@@ -1773,6 +1851,7 @@ static void com_android_nfc_NfcManager_d
goto clean_and_return;
}
TRACE("phLibNfc_SE_SetMode() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_SE_SetMode() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Wait for callback response */
if(sem_wait(&cb_data.sem))
@@ -1805,20 +1884,24 @@ static void com_android_nfc_NfcManager_d
}
TRACE("****** Deselect Secure Element ******");
+ LOGD("****** Deselect Secure Element ******");
TRACE("phLibNfc_SE_SetMode(0x%02x, ...)", seID);
+ LOGD("phLibNfc_SE_SetMode(0x%02x, ...)", seID);
/* Set SE mode - Off */
REENTRANCE_LOCK();
ret = phLibNfc_SE_SetMode(seID,phLibNfc_SE_ActModeOff, nfc_jni_se_set_mode_callback,(void *)&cb_data);
REENTRANCE_UNLOCK();
TRACE("phLibNfc_SE_SetMode for SE 0x%02x returned 0x%02x",seID, ret);
+ LOGD("phLibNfc_SE_SetMode for SE 0x%02x returned 0x%02x",seID, ret);
if(ret != NFCSTATUS_PENDING)
{
LOGE("phLibNfc_SE_SetMode() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
goto clean_and_return;
}
TRACE("phLibNfc_SE_SetMode() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_SE_SetMode() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Wait for callback response */
if(sem_wait(&cb_data.sem))
@@ -1858,6 +1941,7 @@ static jboolean com_android_nfc_NfcManag
/* Check LLCP compliancy */
TRACE("phLibNfc_Llcp_CheckLlcp(hLlcpHandle=0x%08x)", hLlcpHandle);
+ LOGD("phLibNfc_Llcp_CheckLlcp(hLlcpHandle=0x%08x)", hLlcpHandle);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_CheckLlcp(hLlcpHandle,
nfc_jni_checkLlcp_callback,
@@ -1873,6 +1957,7 @@ static jboolean com_android_nfc_NfcManag
goto clean_and_return;
}
TRACE("phLibNfc_Llcp_CheckLlcp() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_CheckLlcp() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Wait for callback response */
if(sem_wait(&cb_data->sem))
@@ -1896,12 +1981,14 @@ static jboolean com_android_nfc_NfcManag
{
NFCSTATUS ret;
TRACE("phLibNfc_Llcp_Activate(hRemoteDevice=0x%08x)", hLlcpHandle);
+ LOGD("phLibNfc_Llcp_Activate(hRemoteDevice=0x%08x)", hLlcpHandle);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Activate(hLlcpHandle);
REENTRANCE_UNLOCK();
if(ret == NFCSTATUS_SUCCESS)
{
TRACE("phLibNfc_Llcp_Activate() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Activate() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
return JNI_TRUE;
}
else
@@ -1927,6 +2014,7 @@ static jobject com_android_nfc_NfcManage
/* Create socket */
TRACE("phLibNfc_Llcp_Socket(eType=phFriNfc_LlcpTransport_eConnectionLess, ...)");
+ LOGD("phLibNfc_Llcp_Socket(eType=phFriNfc_LlcpTransport_eConnectionLess, ...)");
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Socket(phFriNfc_LlcpTransport_eConnectionLess,
NULL,
@@ -1943,10 +2031,12 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Bind socket */
TRACE("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
+ LOGD("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Bind(hLlcpSocket,nSap);
REENTRANCE_UNLOCK();
@@ -1961,6 +2051,7 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Create new NativeLlcpConnectionlessSocket object */
@@ -1980,16 +2071,19 @@ static jobject com_android_nfc_NfcManage
f = e->GetFieldID(clsNativeConnectionlessSocket, "mHandle", "I");
e->SetIntField(connectionlessSocket, f,(jint)hLlcpSocket);
TRACE("Connectionless socket Handle = %02x\n",hLlcpSocket);
+ LOGD("Connectionless socket Handle = %02x\n",hLlcpSocket);
/* Set the miu link of the connectionless socket */
f = e->GetFieldID(clsNativeConnectionlessSocket, "mLinkMiu", "I");
e->SetIntField(connectionlessSocket, f,(jint)PHFRINFC_LLCP_MIU_DEFAULT);
TRACE("Connectionless socket Link MIU = %d\n",PHFRINFC_LLCP_MIU_DEFAULT);
+ LOGD("Connectionless socket Link MIU = %d\n",PHFRINFC_LLCP_MIU_DEFAULT);
/* Set socket SAP */
f = e->GetFieldID(clsNativeConnectionlessSocket, "mSap", "I");
e->SetIntField(connectionlessSocket, f,(jint)nSap);
TRACE("Connectionless socket SAP = %d\n",nSap);
+ LOGD("Connectionless socket SAP = %d\n",nSap);
return connectionlessSocket;
}
@@ -2020,6 +2114,7 @@ static jobject com_android_nfc_NfcManage
/* Create socket */
TRACE("phLibNfc_Llcp_Socket(hRemoteDevice=0x%08x, eType=phFriNfc_LlcpTransport_eConnectionOriented, ...)", hLlcpHandle);
+ LOGD("phLibNfc_Llcp_Socket(hRemoteDevice=0x%08x, eType=phFriNfc_LlcpTransport_eConnectionOriented, ...)", hLlcpHandle);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Socket(phFriNfc_LlcpTransport_eConnectionOriented,
&sOptions,
@@ -2036,9 +2131,11 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Bind socket */
TRACE("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
+ LOGD("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Bind(hLlcpSocket,nSap);
REENTRANCE_UNLOCK();
@@ -2051,6 +2148,7 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Service socket */
if (sn == NULL) {
@@ -2062,6 +2160,7 @@ static jobject com_android_nfc_NfcManage
}
TRACE("phLibNfc_Llcp_Listen(hSocket=0x%08x, ...)", hLlcpSocket);
+ LOGD("phLibNfc_Llcp_Listen(hSocket=0x%08x, ...)", hLlcpSocket);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Listen( hLlcpSocket,
&serviceName,
@@ -2080,6 +2179,7 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Listen() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Listen() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Create new NativeLlcpServiceSocket object */
if(nfc_jni_cache_object(e,"com/android/nfc/NativeLlcpServiceSocket",&(serviceSocket)) == -1)
@@ -2100,21 +2200,25 @@ static jobject com_android_nfc_NfcManage
f = e->GetFieldID(clsNativeLlcpServiceSocket, "mHandle", "I");
e->SetIntField(serviceSocket, f,(jint)hLlcpSocket);
TRACE("Service socket Handle = %02x\n",hLlcpSocket);
+ LOGD("Service socket Handle = %02x\n",hLlcpSocket);
/* Set socket linear buffer length */
f = e->GetFieldID(clsNativeLlcpServiceSocket, "mLocalLinearBufferLength", "I");
e->SetIntField(serviceSocket, f,(jint)linearBufferLength);
TRACE("Service socket Linear buffer length = %02x\n",linearBufferLength);
+ LOGD("Service socket Linear buffer length = %02x\n",linearBufferLength);
/* Set socket MIU */
f = e->GetFieldID(clsNativeLlcpServiceSocket, "mLocalMiu", "I");
e->SetIntField(serviceSocket, f,(jint)miu);
TRACE("Service socket MIU = %d\n",miu);
+ LOGD("Service socket MIU = %d\n",miu);
/* Set socket RW */
f = e->GetFieldID(clsNativeLlcpServiceSocket, "mLocalRw", "I");
e->SetIntField(serviceSocket, f,(jint)rw);
TRACE("Service socket RW = %d\n",rw);
+ LOGD("Service socket RW = %d\n",rw);
return serviceSocket;
}
@@ -2143,6 +2247,7 @@ static jobject com_android_nfc_NfcManage
/* Create socket */
TRACE("phLibNfc_Llcp_Socket(eType=phFriNfc_LlcpTransport_eConnectionOriented, ...)");
+ LOGD("phLibNfc_Llcp_Socket(eType=phFriNfc_LlcpTransport_eConnectionOriented, ...)");
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Socket(phFriNfc_LlcpTransport_eConnectionOriented,
&sOptions,
@@ -2159,6 +2264,7 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Socket() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Create new NativeLlcpSocket object */
if(nfc_jni_cache_object(e,"com/android/nfc/NativeLlcpSocket",&(clientSocket)) == -1)
@@ -2180,6 +2286,7 @@ static jobject com_android_nfc_NfcManage
{
/* Bind socket */
TRACE("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
+ LOGD("phLibNfc_Llcp_Bind(hSocket=0x%08x, nSap=0x%02x)", hLlcpSocket, nSap);
REENTRANCE_LOCK();
ret = phLibNfc_Llcp_Bind(hLlcpSocket,nSap);
REENTRANCE_UNLOCK();
@@ -2194,27 +2301,32 @@ static jobject com_android_nfc_NfcManage
return NULL;
}
TRACE("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
+ LOGD("phLibNfc_Llcp_Bind() returned 0x%04x[%s]", ret, nfc_jni_get_status_name(ret));
/* Set socket SAP */
f = e->GetFieldID(clsNativeLlcpSocket, "mSap", "I");
e->SetIntField(clientSocket, f,(jint)nSap);
TRACE("socket SAP = %d\n",nSap);
+ LOGD("socket SAP = %d\n",nSap);
}
/* Set socket handle */
f = e->GetFieldID(clsNativeLlcpSocket, "mHandle", "I");
e->SetIntField(clientSocket, f,(jint)hLlcpSocket);
TRACE("socket Handle = %02x\n",hLlcpSocket);
+ LOGD("socket Handle = %02x\n",hLlcpSocket);
/* Set socket MIU */
f = e->GetFieldID(clsNativeLlcpSocket, "mLocalMiu", "I");
e->SetIntField(clientSocket, f,(jint)miu);
TRACE("socket MIU = %d\n",miu);
+ LOGD("socket MIU = %d\n",miu);
/* Set socket RW */
f = e->GetFieldID(clsNativeLlcpSocket, "mLocalRw", "I");
e->SetIntField(clientSocket, f,(jint)rw);
TRACE("socket RW = %d\n",rw);
+ LOGD("socket RW = %d\n",rw);
return clientSocket;
@@ -2223,6 +2335,7 @@ static jobject com_android_nfc_NfcManage
static jint com_android_nfc_NfcManager_doGetLastError(JNIEnv *e, jobject o)
{
TRACE("Last Error Status = 0x%02x",lastErrorStatus);
+ LOGD("Last Error Status = 0x%02x",lastErrorStatus);
if(lastErrorStatus == NFCSTATUS_BUFFER_TOO_SMALL)
{
@@ -2251,42 +2364,49 @@ static void com_android_nfc_NfcManager_d
case PROPERTY_LLCP_LTO:
{
TRACE("> Set LLCP LTO to %d",value);
+ LOGD("> Set LLCP LTO to %d",value);
nat->lto = value;
}break;
case PROPERTY_LLCP_MIU:
{
TRACE("> Set LLCP MIU to %d",value);
+ LOGD("> Set LLCP MIU to %d",value);
nat->miu = value;
}break;
case PROPERTY_LLCP_WKS:
{
TRACE("> Set LLCP WKS to %d",value);
+ LOGD("> Set LLCP WKS to %d",value);
nat->wks = value;
}break;
case PROPERTY_LLCP_OPT:
{
TRACE("> Set LLCP OPT to %d",value);
+ LOGD("> Set LLCP OPT to %d",value);
nat->opt = value;
}break;
case PROPERTY_NFC_DISCOVERY_A:
{
TRACE("> Set NFC DISCOVERY A to %d",value);
+ LOGD("> Set NFC DISCOVERY A to %d",value);
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443A = value;
}break;
case PROPERTY_NFC_DISCOVERY_B:
{
TRACE("> Set NFC DISCOVERY B to %d",value);
+ LOGD("> Set NFC DISCOVERY B to %d",value);
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso14443B = value;
}break;
case PROPERTY_NFC_DISCOVERY_F:
{
TRACE("> Set NFC DISCOVERY F to %d",value);
+ LOGD("> Set NFC DISCOVERY F to %d",value);
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica212 = value;
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableFelica424 = value;
}break;
@@ -2294,17 +2414,20 @@ static void com_android_nfc_NfcManager_d
case PROPERTY_NFC_DISCOVERY_15693:
{
TRACE("> Set NFC DISCOVERY 15693 to %d",value);
+ LOGD("> Set NFC DISCOVERY 15693 to %d",value);
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableIso15693 = value;
}break;
case PROPERTY_NFC_DISCOVERY_NCFIP:
{
TRACE("> Set NFC DISCOVERY NFCIP to %d",value);
+ LOGD("> Set NFC DISCOVERY 15693 to %d",value);
nat->discovery_cfg.PollDevInfo.PollCfgInfo.EnableNfcActive = value;
}break;
default:
{
TRACE("> Unknown Property ");
+ LOGD("> Unknown Property ");
}break;
}
diff -urBNp Nfc.orig/src/com/android/nfc/NfcService.java Nfc/src/com/android/nfc/NfcService.java
--- Nfc.orig/src/com/android/nfc/NfcService.java 2011-07-19 12:31:58.005609995 +0200
+++ Nfc/src/com/android/nfc/NfcService.java 2011-07-19 11:48:13.396042360 +0200
@@ -85,7 +85,7 @@ import java.util.List;
public class NfcService extends Application {
private static final String ACTION_MASTER_CLEAR_NOTIFICATION = "android.intent.action.MASTER_CLEAR_NOTIFICATION";
- static final boolean DBG = false;
+ static final boolean DBG = true;
private static final String MY_TAG_FILE_NAME = "mytag";
private static final String TEAR_DOWN_SCRIPTS_FILE_NAME = "teardowns";
@@ -178,19 +178,20 @@ public class NfcService extends Applicat
private static final boolean DISCOVERY_A_DEFAULT = true;
private static final String PREF_DISCOVERY_B = "discovery_b";
- private static final boolean DISCOVERY_B_DEFAULT = true;
+ private static final boolean DISCOVERY_B_DEFAULT = false;
private static final String PREF_DISCOVERY_F = "discovery_f";
- private static final boolean DISCOVERY_F_DEFAULT = true;
+ private static final boolean DISCOVERY_F_DEFAULT = false;
private static final String PREF_DISCOVERY_15693 = "discovery_15693";
- private static final boolean DISCOVERY_15693_DEFAULT = true;
+ private static final boolean DISCOVERY_15693_DEFAULT = false;
private static final String PREF_DISCOVERY_NFCIP = "discovery_nfcip";
- private static final boolean DISCOVERY_NFCIP_DEFAULT = true;
+ private static final boolean DISCOVERY_NFCIP_DEFAULT = false;
/** NFC Reader Discovery mode for enableDiscovery() */
private static final int DISCOVERY_MODE_READER = 0;
+ private static final int DISCOVERY_MODE_CARD_EMULATION = 2;
private static final int PROPERTY_LLCP_LTO = 0;
private static final String PROPERTY_LLCP_LTO_VALUE = "llcp.lto";
@@ -242,15 +243,15 @@ public class NfcService extends Applicat
// TODO: none of these appear to be synchronized but are
// read/written from different threads (notably Binder threads)...
private int mGeneratedSocketHandle = 0;
- private volatile boolean mIsNfcEnabled = false;
- private boolean mIsDiscoveryOn = false;
+ private volatile boolean mIsNfcEnabled = true;
+ private boolean mIsDiscoveryOn = true;
// NFC Execution Environment
// fields below are protected by this
private static final int SECURE_ELEMENT_ID = 11259375; //TODO: remove hard-coded value
private NativeNfcSecureElement mSecureElement;
private OpenSecureElement mOpenEe; // null when EE closed
- private int mEeRoutingState; // contactless interface routing
+ private int mEeRoutingState = ROUTE_ON_WHEN_SCREEN_ON; // contactless interface routing
// fields below are used in multiple threads and protected by synchronized(this)
private final HashMap<Integer, Object> mObjectMap = new HashMap<Integer, Object>();
@@ -1904,6 +1905,7 @@ public class NfcService extends Applicat
@Override
public void setCardEmulationRoute(int route) throws RemoteException {
+ Log.d(TAG, "setCardEmulationRoute: old="+mEeRoutingState + ", new="+route);
NfcService.enforceNfceeAdminPerm(mContext);
mEeRoutingState = route;
applyRouting();
@@ -1984,7 +1986,7 @@ public class NfcService extends Applicat
}
if (mIsDiscoveryOn) {
Log.d(TAG, "NFC-C discovery ON");
- mManager.enableDiscovery(DISCOVERY_MODE_READER);
+ mManager.enableDiscovery(DISCOVERY_MODE_CARD_EMULATION);
} else {
Log.d(TAG, "NFC-C discovery OFF");
mManager.disableDiscovery();