X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_le_adapter%2Ftizen%2Fcalenwmonitor.c;h=577587731864a8560bec0b0b2568d6ccf67c4970;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20171010.063815;hp=2e2156b53c8c30019a93f1d1b91d2a4047c64ac2;hpb=90f488430cd0e99018ec1196b7d030ea887b79f0;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/bt_le_adapter/tizen/calenwmonitor.c b/resource/csdk/connectivity/src/bt_le_adapter/tizen/calenwmonitor.c index 2e2156b..5775877 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/tizen/calenwmonitor.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/tizen/calenwmonitor.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -32,7 +33,7 @@ #include #include -#include "camutex.h" +#include "octhread.h" #include "caleadapter.h" #include "caadapterutils.h" #include "oic_string.h" @@ -43,6 +44,9 @@ */ #define TAG "OIC_CA_LE_MONITOR" +static GMainLoop *g_mainloop = NULL; +static ca_thread_pool_t g_threadPoolHandle = NULL; + /** * Maintains the callback to be notified on device state changed. */ @@ -57,13 +61,13 @@ static CALEConnectionStateChangedCallback g_bleConnectionStateChangedCallback = * Mutex to synchronize access to the deviceStateChanged Callback when the state * of the LE adapter gets change. */ -static ca_mutex g_bleDeviceStateChangedCbMutex = NULL; +static oc_mutex g_bleDeviceStateChangedCbMutex = NULL; /** * Mutex to synchronize access to the ConnectionStateChanged Callback when the state * of the LE adapter gets change. */ -static ca_mutex g_bleConnectionStateChangedCbMutex = NULL; +static oc_mutex g_bleConnectionStateChangedCbMutex = NULL; /** * This is the callback which will be called when the adapter state gets changed. @@ -77,6 +81,11 @@ static ca_mutex g_bleConnectionStateChangedCbMutex = NULL; void CALEAdapterStateChangedCb(int result, bt_adapter_state_e adapter_state, void *user_data); +void CALEMainLoopThread(void *param) +{ + g_main_loop_run(g_mainloop); +} + /** * This is the callback which will be called when the connection state gets changed. * @@ -96,21 +105,21 @@ CAResult_t CAInitializeLENetworkMonitor() if (NULL == g_bleDeviceStateChangedCbMutex) { - g_bleDeviceStateChangedCbMutex = ca_mutex_new(); + g_bleDeviceStateChangedCbMutex = oc_mutex_new(); if (NULL == g_bleDeviceStateChangedCbMutex) { - OIC_LOG(ERROR, TAG, "ca_mutex_new failed"); + OIC_LOG(ERROR, TAG, "oc_mutex_new failed"); return CA_STATUS_FAILED; } } if (NULL == g_bleConnectionStateChangedCbMutex) { - g_bleConnectionStateChangedCbMutex = ca_mutex_new(); + g_bleConnectionStateChangedCbMutex = oc_mutex_new(); if (NULL == g_bleConnectionStateChangedCbMutex) { - OIC_LOG(ERROR, TAG, "ca_mutex_new failed"); - ca_mutex_free(g_bleDeviceStateChangedCbMutex); + OIC_LOG(ERROR, TAG, "oc_mutex_new failed"); + oc_mutex_free(g_bleDeviceStateChangedCbMutex); return CA_STATUS_FAILED; } } @@ -124,10 +133,10 @@ void CATerminateLENetworkMonitor() { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_free(g_bleDeviceStateChangedCbMutex); + oc_mutex_free(g_bleDeviceStateChangedCbMutex); g_bleDeviceStateChangedCbMutex = NULL; - ca_mutex_free(g_bleConnectionStateChangedCbMutex); + oc_mutex_free(g_bleConnectionStateChangedCbMutex); g_bleConnectionStateChangedCbMutex = NULL; OIC_LOG(DEBUG, TAG, "OUT"); @@ -136,6 +145,13 @@ void CATerminateLENetworkMonitor() CAResult_t CAInitializeLEAdapter() { OIC_LOG(DEBUG, TAG, "IN"); + CAResult_t res = ca_thread_pool_init(2, &g_threadPoolHandle); + if (CA_STATUS_OK != res) + { + OIC_LOG(ERROR, TAG, "thread pool initialize error."); + return res; + } + OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -144,6 +160,20 @@ CAResult_t CAStartLEAdapter() { OIC_LOG(DEBUG, TAG, "IN"); + g_mainloop = g_main_loop_new(NULL, 0); + if(!g_mainloop) + { + OIC_LOG(ERROR, TAG, "g_main_loop_new failed\n"); + return CA_STATUS_FAILED; + } + + if (CA_STATUS_OK != ca_thread_pool_add_task(g_threadPoolHandle, CALEMainLoopThread, + (void *) NULL, NULL)) + { + OIC_LOG(ERROR, TAG, "Failed to create thread!"); + return CA_STATUS_FAILED; + } + int ret = bt_initialize(); if (BT_ERROR_NONE != ret) { @@ -187,6 +217,13 @@ CAResult_t CAStopLEAdapter() return CA_STATUS_FAILED; } + if (g_mainloop) + { + g_main_loop_quit(g_mainloop); + } + + ca_thread_pool_free(g_threadPoolHandle); + g_threadPoolHandle = NULL; return CA_STATUS_OK; } @@ -243,9 +280,9 @@ CAResult_t CAGetLEAddress(char **local_address) CAResult_t CASetLEAdapterStateChangedCb(CALEDeviceStateChangedCallback callback) { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_lock(g_bleDeviceStateChangedCbMutex); + oc_mutex_lock(g_bleDeviceStateChangedCbMutex); g_bleDeviceStateChangedCallback = callback; - ca_mutex_unlock(g_bleDeviceStateChangedCbMutex); + oc_mutex_unlock(g_bleDeviceStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -253,9 +290,9 @@ CAResult_t CASetLEAdapterStateChangedCb(CALEDeviceStateChangedCallback callback) CAResult_t CAUnSetLEAdapterStateChangedCb() { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_lock(g_bleDeviceStateChangedCbMutex); + oc_mutex_lock(g_bleDeviceStateChangedCbMutex); g_bleDeviceStateChangedCallback = NULL; - ca_mutex_unlock(g_bleDeviceStateChangedCbMutex); + oc_mutex_unlock(g_bleDeviceStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -263,19 +300,19 @@ CAResult_t CAUnSetLEAdapterStateChangedCb() CAResult_t CASetLENWConnectionStateChangedCb(CALEConnectionStateChangedCallback callback) { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_lock(g_bleConnectionStateChangedCbMutex); + oc_mutex_lock(g_bleConnectionStateChangedCbMutex); g_bleConnectionStateChangedCallback = callback; - ca_mutex_unlock(g_bleConnectionStateChangedCbMutex); + oc_mutex_unlock(g_bleConnectionStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } -CAResult_t CAUnsetLENWConnectionStateChangedCb() +CAResult_t CAUnSetLENWConnectionStateChangedCb() { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_lock(g_bleConnectionStateChangedCbMutex); + oc_mutex_lock(g_bleConnectionStateChangedCbMutex); g_bleConnectionStateChangedCallback = NULL; - ca_mutex_unlock(g_bleConnectionStateChangedCbMutex); + oc_mutex_unlock(g_bleConnectionStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -285,12 +322,12 @@ void CALEAdapterStateChangedCb(int result, bt_adapter_state_e adapter_state, { OIC_LOG(DEBUG, TAG, "IN"); - ca_mutex_lock(g_bleDeviceStateChangedCbMutex); + oc_mutex_lock(g_bleDeviceStateChangedCbMutex); if (NULL == g_bleDeviceStateChangedCallback) { OIC_LOG(ERROR, TAG, "g_bleDeviceStateChangedCallback is NULL!"); - ca_mutex_unlock(g_bleDeviceStateChangedCbMutex); + oc_mutex_unlock(g_bleDeviceStateChangedCbMutex); return; } @@ -298,21 +335,14 @@ void CALEAdapterStateChangedCb(int result, bt_adapter_state_e adapter_state, { OIC_LOG(DEBUG, TAG, "Adapter is disabled"); g_bleDeviceStateChangedCallback(CA_ADAPTER_DISABLED); - ca_mutex_unlock(g_bleDeviceStateChangedCbMutex); + oc_mutex_unlock(g_bleDeviceStateChangedCbMutex); return; } OIC_LOG(DEBUG, TAG, "Adapter is Enabled"); - int ret = bt_adapter_set_visibility(BT_ADAPTER_VISIBILITY_MODE_GENERAL_DISCOVERABLE, 0); - if (BT_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "bt_adapter_set_visibility failed"); - return; - } - g_bleDeviceStateChangedCallback(CA_ADAPTER_ENABLED); - ca_mutex_unlock(g_bleDeviceStateChangedCbMutex); + oc_mutex_unlock(g_bleDeviceStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); } @@ -324,17 +354,17 @@ void CALENWConnectionStateChangedCb(int result, bool connected, VERIFY_NON_NULL_VOID(remoteAddress, TAG, "remote address is NULL"); - ca_mutex_lock(g_bleConnectionStateChangedCbMutex); + oc_mutex_lock(g_bleConnectionStateChangedCbMutex); char *addr = OICStrdup(remoteAddress); if (NULL == addr) { OIC_LOG(ERROR, TAG, "addr is NULL"); - ca_mutex_unlock(g_bleConnectionStateChangedCbMutex); + oc_mutex_unlock(g_bleConnectionStateChangedCbMutex); return; } g_bleConnectionStateChangedCallback(CA_ADAPTER_GATT_BTLE, addr, connected); OICFree(addr); - ca_mutex_unlock(g_bleConnectionStateChangedCbMutex); + oc_mutex_unlock(g_bleConnectionStateChangedCbMutex); OIC_LOG(DEBUG, TAG, "OUT"); }