Merge remote-tracking branch 'origin/routing-manager'
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / bt_edr_adapter / tizen / caedrnwmonitor.c
index 83caad3..dd3e11d 100644 (file)
@@ -1,4 +1,4 @@
-/* ****************************************************************
+/******************************************************************
  *
  * Copyright 2014 Samsung Electronics All Rights Reserved.
  *
  * This file provides the APIs for EDR Network Monitor.
  */
 
+#include <glib.h>
 #include <string.h>
 #include <bluetooth.h>
+
 #include "caedrinterface.h"
 #include "caedrdevicelist.h"
 #include "caedrutils.h"
 #include "caadapterutils.h"
 #include "caqueueingthread.h"
+#include "caremotehandler.h"
+
+static GMainLoop *g_mainloop = NULL;
+static ca_thread_pool_t g_threadPoolHandle = NULL;
 
 /**
  * @var g_edrNetworkChangeCallback
@@ -45,61 +51,85 @@ static CAEDRNetworkStatusCallback g_edrNetworkChangeCallback = NULL;
 static void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
                                             void *userData);
 
-CAResult_t CAEDRInitializeNetworkMonitor()
+void *GMainLoopThread (void *param)
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
-
-    // Initialize Bluetooth service
-    int err = bt_initialize();
-    if (BT_ERROR_NONE != err)
-    {
-        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth initialization failed!, error num [%x]",
-                  err);
-        return CA_STATUS_FAILED;
-    }
+    g_main_loop_run(g_mainloop);
+    return NULL;
+}
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+CAResult_t CAEDRInitializeNetworkMonitor(const ca_thread_pool_t threadPool)
+{
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
+    g_threadPoolHandle = threadPool;
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 void CAEDRTerminateNetworkMonitor(void)
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
 
     g_edrNetworkChangeCallback = NULL;
 
     // Terminate Bluetooth service
     bt_deinitialize();
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 CAResult_t CAEDRStartNetworkMonitor()
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
+
+    g_mainloop = g_main_loop_new(NULL, 0);
+    if(!g_mainloop)
+    {
+        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "g_main_loop_new failed\n");
+        return CA_STATUS_FAILED;
+    }
+
+    if (CA_STATUS_OK != ca_thread_pool_add_task(g_threadPoolHandle, GMainLoopThread, (void *) NULL))
+    {
+        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create thread!");
+        return CA_STATUS_FAILED;
+    }
+
+    // Initialize Bluetooth service
+    int err = bt_initialize();
+    if (BT_ERROR_NONE != err)
+    {
+        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth initialization failed!, error num [%x]",
+                  err);
+        return CA_STATUS_FAILED;
+    }
 
     int ret = bt_adapter_set_state_changed_cb(CAEDRAdapterStateChangeCallback, NULL);
     if(BT_ERROR_NONE != ret)
     {
-       OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
+       OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
        return CA_STATUS_FAILED;
     }
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 CAResult_t CAEDRStopNetworkMonitor()
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
     // Unset bluetooth adapter callbacks
     int ret = bt_adapter_unset_state_changed_cb();
     if(BT_ERROR_NONE != ret)
     {
-        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
+        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
         return CA_STATUS_FAILED;
     }
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+
+    if (g_mainloop)
+    {
+        g_main_loop_quit(g_mainloop);
+    }
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
@@ -109,9 +139,9 @@ void CAEDRSetNetworkChangeCallback(
     g_edrNetworkChangeCallback = networkChangeCallback;
 }
 
-CAResult_t CAEDRGetInterfaceInformation(CALocalConnectivity_t **info)
+CAResult_t CAEDRGetInterfaceInformation(CAEndpoint_t **info)
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
 
     // Input validation
     VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null");
@@ -128,10 +158,10 @@ CAResult_t CAEDRGetInterfaceInformation(CALocalConnectivity_t **info)
     }
 
     // Create network info
-    *info = CAAdapterCreateLocalEndpoint(CA_EDR, localAddress);
+    *info = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, localAddress, 0);
     if (NULL == *info)
     {
-        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!");
+        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!");
 
         OICFree(localAddress);
         return CA_MEMORY_ALLOC_FAILED;
@@ -139,13 +169,13 @@ CAResult_t CAEDRGetInterfaceInformation(CALocalConnectivity_t **info)
 
     OICFree(localAddress);
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 CAResult_t CAEDRGetAdapterEnableState(bool *state)
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
 
     // Input validation
     VERIFY_NON_NULL(state, EDR_ADAPTER_TAG, "state holder is NULL!");
@@ -168,14 +198,14 @@ CAResult_t CAEDRGetAdapterEnableState(bool *state)
         *state = true;
     }
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
                                      void *userData)
 {
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "IN");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
 
     if (BT_ADAPTER_ENABLED == adapterState)
     {
@@ -194,5 +224,5 @@ void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState
         }
     }
 
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }