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();

Reply via email to