Fixed EDR problem related to BT on/off for Android.
authorJaehong Jo <jaehong.jo@samsung.com>
Thu, 10 Dec 2015 07:03:25 +0000 (16:03 +0900)
committerJon A. Cruz <jonc@osg.samsung.com>
Wed, 3 Feb 2016 22:23:11 +0000 (22:23 +0000)
When BT turn off, call Stop EDR Server,
and when BT turn on, call Start EDR Server.

Change-Id: Ife12956568fd631140209472912d3e0fef62f13d
Signed-off-by: Jaehong Jo <jaehong.jo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4487
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: jihwan seo <jihwan.seo@samsung.com>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrnwmonitor.c
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrserver.c

index 37c5a11..de187d8 100644 (file)
@@ -127,7 +127,7 @@ Java_org_iotivity_ca_CaEdrInterface_caEdrStateChangedCallback(JNIEnv *env, jobje
 
     if (NULL == g_networkChangeCb)
     {
-        OIC_LOG(DEBUG, TAG, "gNetworkChangeCb is null");
+        OIC_LOG(DEBUG, TAG, "g_networkChangeCb is null");
         return;
     }
 
@@ -158,14 +158,23 @@ Java_org_iotivity_ca_CaEdrInterface_caEdrStateChangedCallback(JNIEnv *env, jobje
     if (state_on == status)
     {
         CANetworkStatus_t newStatus = CA_INTERFACE_UP;
+
+        CAResult_t res = CAEDRStartUnicastServer(false);
+        if (CA_STATUS_OK != res)
+        {
+            OIC_LOG(ERROR, TAG, "CAEDRStartUnicastServer failed");
+            return;
+        }
         CAEDRServerStartAcceptThread();
         g_networkChangeCb(newStatus);
     }
     else if (state_off == status)
     {
         CANetworkStatus_t newStatus = CA_INTERFACE_DOWN;
+        CAEDRServerStop();
+        CAEDRNativeSocketCloseToAll(env);
+        CAEDRNativeRemoveAllDeviceState();
         CAEDRNativeRemoveAllDeviceSocket(env);
-        CAEDRNativeRemoveAllDeviceState(env);
         g_networkChangeCb(newStatus);
     }
 }
index 8bac747..a330d40 100644 (file)
@@ -154,6 +154,10 @@ static void CAReceiveHandler(void *data)
 
     CAAdapterReceiveThreadContext_t *ctx = (CAAdapterReceiveThreadContext_t *) data;
 
+    ca_mutex_lock(g_mutexUnicastServer);
+    g_stopUnicast = false;
+    ca_mutex_unlock(g_mutexUnicastServer);
+
     while (true != *(ctx->stopFlag))
     {
         // if new socket object is added in socket list after below logic is ran.
@@ -706,6 +710,7 @@ CAResult_t CAEDRNativeReadData(JNIEnv *env, uint32_t id, CAAdapterServerType_t t
 
             // remove socket to list
             CAEDRNativeRemoveDeviceSocket(env, jni_obj_socket);
+            CAEDRNativeRemoveDevice(address);
             (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
 
             (*env)->DeleteLocalRef(env, jni_str_address);
@@ -718,7 +723,6 @@ CAResult_t CAEDRNativeReadData(JNIEnv *env, uint32_t id, CAAdapterServerType_t t
         if (!jni_cid_BTsocket)
         {
             (*env)->DeleteLocalRef(env, jni_str_address);
-
             OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_cid_BTsocket is null");
             return CA_STATUS_FAILED;
         }