diff options
-rw-r--r-- | nci/jni/Mutex.cpp | 4 | ||||
-rwxr-xr-x | nci/jni/NativeNfcManager.cpp | 44 | ||||
-rwxr-xr-x | nci/jni/NativeNfcTag.cpp | 64 | ||||
-rw-r--r-- | nci/jni/PeerToPeer.cpp | 88 | ||||
-rwxr-xr-x | nci/jni/SecureElement.cpp | 2 | ||||
-rw-r--r-- | nci/jni/SyncEvent.h | 4 |
6 files changed, 110 insertions, 96 deletions
diff --git a/nci/jni/Mutex.cpp b/nci/jni/Mutex.cpp index a6b1397..6ccb87b 100644 --- a/nci/jni/Mutex.cpp +++ b/nci/jni/Mutex.cpp @@ -85,7 +85,7 @@ void Mutex::unlock () int res = pthread_mutex_unlock (&mMutex); if (res != 0) { - ALOGE ("Mutex::lock: fail unlock; error=0x%X", res); + ALOGE ("Mutex::unlock: fail unlock; error=0x%X", res); } } @@ -104,7 +104,7 @@ bool Mutex::tryLock () int res = pthread_mutex_trylock (&mMutex); if ((res != 0) && (res != EBUSY)) { - ALOGE ("Mutex::lock: fail try-lock; error=0x%X", res); + ALOGE ("Mutex::tryLock: error=0x%X", res); } return res == 0; } diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp index 9adeed3..69a9c3f 100755 --- a/nci/jni/NativeNfcManager.cpp +++ b/nci/jni/NativeNfcManager.cpp @@ -625,6 +625,7 @@ void nfaDeviceManagementCallback (UINT8 dmEvent, tNFA_DM_CBACK_DATA* eventData) ALOGE("BCM2079x NFC FW version %d.%d", bldInfo->patch.major_ver, bldInfo->patch.minor_ver); } + SyncEventGuard versionGuard (sNfaBuildInfoEvent); sNfaBuildInfoEvent.notifyOne(); } break; @@ -666,26 +667,30 @@ static jboolean nfcManager_doInitialize (JNIEnv* e, jobject o) NfcAdaptation& theInstance = NfcAdaptation::GetInstance(); theInstance.Initialize(); //start GKI, NCI task, NFC task - SyncEventGuard guard (sNfaEnableEvent); + { + SyncEventGuard guard (sNfaEnableEvent); + NFA_Init(); + NFA_BrcmInit (&devInitConfig, nfaBrcmInitCallback); - NFA_Init(); - NFA_BrcmInit (&devInitConfig, nfaBrcmInitCallback); + stat = NFA_Enable (nfaDeviceManagementCallback, nfaConnectionCallback); + if (stat == NFA_STATUS_OK) + { + num = initializeGlobalAppLogLevel (); + CE_SetTraceLevel (num); + LLCP_SetTraceLevel (num); + NFC_SetTraceLevel (num); + NCI_SetTraceLevel (num); + RW_SetTraceLevel (num); + NFA_SetTraceLevel (num); + NFA_ChoSetTraceLevel (num); + NFA_P2pSetTraceLevel (num); + NFA_SnepSetTraceLevel (num); + sNfaEnableEvent.wait(); //wait for NFA command to finish + } + } - stat = NFA_Enable (nfaDeviceManagementCallback, nfaConnectionCallback); if (stat == NFA_STATUS_OK) { - num = initializeGlobalAppLogLevel (); - CE_SetTraceLevel (num); - LLCP_SetTraceLevel (num); - NFC_SetTraceLevel (num); - NCI_SetTraceLevel (num); - RW_SetTraceLevel (num); - NFA_SetTraceLevel (num); - NFA_ChoSetTraceLevel (num); - NFA_P2pSetTraceLevel (num); - NFA_SnepSetTraceLevel (num); - sNfaEnableEvent.wait(); //wait for NFA command to finish - //sIsNfaEnabled indicates whether stack started successfully if (sIsNfaEnabled) { @@ -790,10 +795,10 @@ static void nfcManager_enableDiscovery (JNIEnv* e, jobject o) stat = NFA_EnablePolling (tech_mask); if (stat == NFA_STATUS_OK) { - ALOGD ("%s: Waiting for sNfaEnableDisablePollingEvent", __FUNCTION__); + ALOGD ("%s: wait for enable event", __FUNCTION__); sDiscoveryEnabled = true; sNfaEnableDisablePollingEvent.wait (); //wait for NFA_POLL_START_EVT - ALOGD ("%s: Finished Waiting for sNfaEnableDisablePollingEvent", __FUNCTION__); + ALOGD ("%s: got enabled event", __FUNCTION__); } else { @@ -1592,11 +1597,10 @@ int register_com_android_nfc_NativeNfcManager (JNIEnv *e) *******************************************************************************/ void startRfDiscovery(bool isStart) { - SyncEventGuard guard (sNfaEnableDisablePollingEvent); tNFA_STATUS status = NFA_STATUS_FAILED; ALOGD ("%s: is start=%d", __FUNCTION__, isStart); - + SyncEventGuard guard (sNfaEnableDisablePollingEvent); status = isStart ? NFA_StartRfDiscovery () : NFA_StopRfDiscovery (); if (status == NFA_STATUS_OK) { diff --git a/nci/jni/NativeNfcTag.cpp b/nci/jni/NativeNfcTag.cpp index 25b9826..39ce2b1 100755 --- a/nci/jni/NativeNfcTag.cpp +++ b/nci/jni/NativeNfcTag.cpp @@ -173,7 +173,6 @@ static void switchBackTimerProc (union sigval) ** Returns: None ** *******************************************************************************/ -//called by NFA_READ_CPLT_EVT when NDEF message has been completely read void nativeNfcTag_doReadCompleted (tNFA_STATUS status) { ALOGD ("%s: status=0x%X; is reading=%u", __FUNCTION__, status, sIsReadingNdefMessage); @@ -260,10 +259,12 @@ static jbyteArray nativeNfcTag_doRead (JNIEnv *e, jobject o) if (sCheckNdefCurrentSize > 0) { - SyncEventGuard g (sReadEvent); - sIsReadingNdefMessage = true; - status = NFA_RwReadNDef (); - sReadEvent.wait (); //wait for NFA_READ_CPLT_EVT + { + SyncEventGuard g (sReadEvent); + sIsReadingNdefMessage = true; + status = NFA_RwReadNDef (); + sReadEvent.wait (); //wait for NFA_READ_CPLT_EVT + } sIsReadingNdefMessage = false; if (sReadDataLen > 0) //if stack actually read data from the tag @@ -539,18 +540,20 @@ static int reSelect (tNFA_INTF_TYPE rfInterface) do { - SyncEventGuard g (sReconnectEvent); - gIsTagDeactivating = true; - sGotDeactivate = false; - if (NFA_STATUS_OK != (status = NFA_Deactivate (TRUE))) { - ALOGE ("%s: NFA_Deactivate failed, status = %d", __FUNCTION__, status); - break; - } + SyncEventGuard g (sReconnectEvent); + gIsTagDeactivating = true; + sGotDeactivate = false; + if (NFA_STATUS_OK != (status = NFA_Deactivate (TRUE))) + { + ALOGE ("%s: NFA_Deactivate failed, status = %d", __FUNCTION__, status); + break; + } - if (sReconnectEvent.wait (1000) == false) //if timeout occured - { - ALOGE ("%s: timeout waiting for deactivate", __FUNCTION__); + if (sReconnectEvent.wait (1000) == false) //if timeout occurred + { + ALOGE ("%s: timeout waiting for deactivate", __FUNCTION__); + } } if (! NfcTag::getInstance ().isActivated ()) @@ -561,23 +564,26 @@ static int reSelect (tNFA_INTF_TYPE rfInterface) gIsTagDeactivating = false; - SyncEventGuard g2 (sReconnectEvent); - - sConnectWaitingForComplete = JNI_TRUE; - ALOGD ("%s: NFA_Select()", __FUNCTION__); - gIsSelectingRfInterface = true; - if (NFA_STATUS_OK != (status = NFA_Select (natTag.mTechHandles[0], natTag.mTechLibNfcTypes[0], rfInterface))) { - ALOGE ("%s: NFA_Select failed, status = %d", __FUNCTION__, status); - break; - } + SyncEventGuard g2 (sReconnectEvent); - sConnectOk = false; - if (sReconnectEvent.wait (1000) == false) //if timeout occured - { - ALOGE ("%s: wait response timeout", __FUNCTION__); - break; + sConnectWaitingForComplete = JNI_TRUE; + ALOGD ("%s: NFA_Select()", __FUNCTION__); + gIsSelectingRfInterface = true; + if (NFA_STATUS_OK != (status = NFA_Select (natTag.mTechHandles[0], natTag.mTechLibNfcTypes[0], rfInterface))) + { + ALOGE ("%s: NFA_Select failed, status = %d", __FUNCTION__, status); + break; + } + + sConnectOk = false; + if (sReconnectEvent.wait (1000) == false) //if timeout occured + { + ALOGE ("%s: wait response timeout", __FUNCTION__); + break; + } } + ALOGD("%s: done waiting on NFA_Select() sConnectOk=%d", __FUNCTION__, sConnectOk); if (! NfcTag::getInstance ().isActivated ()) { diff --git a/nci/jni/PeerToPeer.cpp b/nci/jni/PeerToPeer.cpp index 3c46a02..1db7487 100644 --- a/nci/jni/PeerToPeer.cpp +++ b/nci/jni/PeerToPeer.cpp @@ -257,17 +257,19 @@ bool PeerToPeer::registerServer (tBRCM_JNI_HANDLE jniHandle, const char *service if (sSnepServiceName.compare(serviceName) == 0) serverSap = LLCP_SAP_SNEP; //LLCP_SAP_SNEP == 4 - SyncEventGuard guard (pSrv->mRegServerEvent); - stat = NFA_P2pRegisterServer (serverSap, NFA_P2P_DLINK_TYPE, const_cast<char*>(serviceName), nfaServerCallback); - if (stat != NFA_STATUS_OK) { - ALOGE ("%s: fail register p2p server; error=0x%X", fn, stat); - removeServer (jniHandle); - return (false); + SyncEventGuard guard (pSrv->mRegServerEvent); + stat = NFA_P2pRegisterServer (serverSap, NFA_P2P_DLINK_TYPE, const_cast<char*>(serviceName), nfaServerCallback); + if (stat != NFA_STATUS_OK) + { + ALOGE ("%s: fail register p2p server; error=0x%X", fn, stat); + removeServer (jniHandle); + return (false); + } + ALOGD ("%s: wait for listen-completion event", fn); + // Wait for NFA_P2P_REG_SERVER_EVT + pSrv->mRegServerEvent.wait (); } - ALOGD ("%s: wait for listen-completion event", fn); - // Wait for NFA_P2P_REG_SERVER_EVT - pSrv->mRegServerEvent.wait (); if (pSrv->mNfaP2pServerHandle == NFA_HANDLE_INVALID) { @@ -567,9 +569,11 @@ bool PeerToPeer::deregisterServer (tBRCM_JNI_HANDLE jniHandle) return (false); } - // Server does not call NFA_P2pDisconnect(), so unblock the accept() - SyncEventGuard guard (pSrv->mConnRequestEvent); - pSrv->mConnRequestEvent.notifyOne(); + { + // Server does not call NFA_P2pDisconnect(), so unblock the accept() + SyncEventGuard guard (pSrv->mConnRequestEvent); + pSrv->mConnRequestEvent.notifyOne(); + } nfaStat = NFA_P2pDeregister (pSrv->mNfaP2pServerHandle); if (nfaStat != NFA_STATUS_OK) @@ -741,19 +745,20 @@ bool PeerToPeer::connectConnOriented (tBRCM_JNI_HANDLE jniHandle, const char* se // Save JNI Handle and try to connect to SNEP mJniHandleSendingNppViaSnep = jniHandle; - - if (NFA_SnepConnect (mSnepRegHandle, const_cast<char*>("urn:nfc:sn:snep")) == NFA_STATUS_OK) { SyncEventGuard guard (pClient->mSnepEvent); - pClient->mSnepEvent.wait(); - - // If the connect attempt failed, connection handle is invalid - if (pClient->mSnepConnHandle != NFA_HANDLE_INVALID) + if (NFA_SnepConnect (mSnepRegHandle, const_cast<char*>("urn:nfc:sn:snep")) == NFA_STATUS_OK) { - // return true, as if we were connected. - pClient->mClientConn.mRemoteMaxInfoUnit = 248; - pClient->mClientConn.mRemoteRecvWindow = 1; - return (true); + pClient->mSnepEvent.wait(); + + // If the connect attempt failed, connection handle is invalid + if (pClient->mSnepConnHandle != NFA_HANDLE_INVALID) + { + // return true, as if we were connected. + pClient->mClientConn.mRemoteMaxInfoUnit = 248; + pClient->mClientConn.mRemoteRecvWindow = 1; + return (true); + } } } mJniHandleSendingNppViaSnep = 0; @@ -812,22 +817,26 @@ bool PeerToPeer::createDataLinkConn (tBRCM_JNI_HANDLE jniHandle, const char* ser return (false); } - SyncEventGuard guard (pClient->mConnectingEvent); - pClient->mIsConnecting = true; - - if (serviceName) - nfaStat = NFA_P2pConnectByName (pClient->mNfaP2pClientHandle, - const_cast<char*>(serviceName), pClient->mClientConn.mMaxInfoUnit, - pClient->mClientConn.mRecvWindow); - else if (destinationSap) - nfaStat = NFA_P2pConnectBySap (pClient->mNfaP2pClientHandle, destinationSap, - pClient->mClientConn.mMaxInfoUnit, pClient->mClientConn.mRecvWindow); + { + SyncEventGuard guard (pClient->mConnectingEvent); + pClient->mIsConnecting = true; + + if (serviceName) + nfaStat = NFA_P2pConnectByName (pClient->mNfaP2pClientHandle, + const_cast<char*>(serviceName), pClient->mClientConn.mMaxInfoUnit, + pClient->mClientConn.mRecvWindow); + else if (destinationSap) + nfaStat = NFA_P2pConnectBySap (pClient->mNfaP2pClientHandle, destinationSap, + pClient->mClientConn.mMaxInfoUnit, pClient->mClientConn.mRecvWindow); + if (nfaStat == NFA_STATUS_OK) + { + ALOGD ("%s: wait for connected event mConnectingEvent: 0x%p", fn, pClient); + pClient->mConnectingEvent.wait(); + } + } if (nfaStat == NFA_STATUS_OK) { - ALOGD ("%s: wait for connected event mConnectingEvent: 0x%p", fn, pClient); - pClient->mConnectingEvent.wait(); - if (pClient->mClientConn.mNfaConnHandle == NFA_HANDLE_INVALID) { removeConn (jniHandle); @@ -1109,6 +1118,7 @@ bool PeerToPeer::sendViaSnep (tBRCM_JNI_HANDLE jniHandle, UINT8 *buffer, UINT16 { ALOGD ("%s GKI_poolcount(2): %u GKI_poolfreecount(2): %u", fn, GKI_poolcount(2), GKI_poolfreecount(2)); + SyncEventGuard guard (pClient->mSnepEvent); nfaStat = NFA_SnepPut (pClient->mSnepConnHandle, pClient->mSnepNdefBufLen, pClient->mSnepNdefBuf); if (nfaStat != NFA_STATUS_OK) @@ -1119,8 +1129,6 @@ bool PeerToPeer::sendViaSnep (tBRCM_JNI_HANDLE jniHandle, UINT8 *buffer, UINT16 pClient->mSnepNdefBuf = NULL; return (false); } - - SyncEventGuard guard (pClient->mSnepEvent); pClient->mSnepEvent.wait (); free (pClient->mSnepNdefBuf); @@ -1168,6 +1176,7 @@ bool PeerToPeer::receive (tBRCM_JNI_HANDLE jniHandle, UINT8* buffer, UINT16 buff while (pConn->mNfaConnHandle != NFA_HANDLE_INVALID) { + //NFA_P2pReadData() is synchronous stat = NFA_P2pReadData (pConn->mNfaConnHandle, bufferLen, &actualDataLen2, buffer, &isMoreData); if ((stat == NFA_STATUS_OK) && (actualDataLen2 > 0)) //received some data { @@ -1831,8 +1840,8 @@ void PeerToPeer::snepClientCallback (tNFA_SNEP_EVT snepEvent, tNFA_SNEP_EVT_DATA { ALOGD ("%s NFA_SNEP_CONNECTED_EVT mJniHandleSendingNppViaSnep: %u ConnHandle: 0x%04x", fn, sP2p.mJniHandleSendingNppViaSnep, eventData->connect.conn_handle); - pClient->mSnepConnHandle = eventData->connect.conn_handle; SyncEventGuard guard (pClient->mSnepEvent); + pClient->mSnepConnHandle = eventData->connect.conn_handle; pClient->mSnepEvent.notifyOne(); } break; @@ -1863,9 +1872,8 @@ void PeerToPeer::snepClientCallback (tNFA_SNEP_EVT snepEvent, tNFA_SNEP_EVT_DATA else { ALOGD ("%s NFA_SNEP_DISC_EVT mJniHandleSendingNppViaSnep: %u", fn, sP2p.mJniHandleSendingNppViaSnep); - pClient->mSnepConnHandle = NFA_HANDLE_INVALID; - SyncEventGuard guard (pClient->mSnepEvent); + pClient->mSnepConnHandle = NFA_HANDLE_INVALID; pClient->mSnepEvent.notifyOne(); } break; diff --git a/nci/jni/SecureElement.cpp b/nci/jni/SecureElement.cpp index 76955f8..0bc86c8 100755 --- a/nci/jni/SecureElement.cpp +++ b/nci/jni/SecureElement.cpp @@ -1681,11 +1681,11 @@ void SecureElement::nfaHciCallback (tNFA_HCI_EVT event, tNFA_HCI_EVT_DATA* event eventData->registry.status, eventData->registry.pipe, eventData->registry.data_len); if (eventData->registry.data_len >= 19 && ((eventData->registry.pipe == STATIC_PIPE_0x70) || (eventData->registry.pipe == STATIC_PIPE_0x71))) { + SyncEventGuard guard (sSecElem.mVerInfoEvent); // Oberthur OS version is in bytes 16,17, and 18 sSecElem.mVerInfo[0] = eventData->registry.reg_data[16]; sSecElem.mVerInfo[1] = eventData->registry.reg_data[17]; sSecElem.mVerInfo[2] = eventData->registry.reg_data[18]; - SyncEventGuard guard (sSecElem.mVerInfoEvent); sSecElem.mVerInfoEvent.notifyOne (); } break; diff --git a/nci/jni/SyncEvent.h b/nci/jni/SyncEvent.h index 5ab5d43..146b3ce 100644 --- a/nci/jni/SyncEvent.h +++ b/nci/jni/SyncEvent.h @@ -28,7 +28,6 @@ public: *******************************************************************************/ ~SyncEvent () { - mMutex.unlock (); } @@ -59,7 +58,6 @@ public: void wait () { mCondVar.wait (mMutex); - end (); } @@ -76,7 +74,6 @@ public: bool wait (long millisec) { bool retVal = mCondVar.wait (mMutex, millisec); - end (); return retVal; } @@ -93,7 +90,6 @@ public: void notifyOne () { mCondVar.notifyOne (); - end (); } |