1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
24 * This file provides the APIs for EDR Network Monitor.
28 #include <bluetooth.h>
30 #include "caedrinterface.h"
31 #include "caedrdevicelist.h"
32 #include "caedrutils.h"
33 #include "caadapterutils.h"
34 #include "caqueueingthread.h"
35 #include "caremotehandler.h"
38 * @var g_edrNetworkChangeCallback
39 * @brief Maintains the callback to be notified on local bluetooth adapter status change.
41 static CAEDRNetworkStatusCallback g_edrNetworkChangeCallback = NULL;
44 * @fn CAEDRAdapterStateChangeCallback
45 * @brief This callback is registered to receive bluetooth adapter state changes.
47 static void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
50 CAResult_t CAEDRInitializeNetworkMonitor(const ca_thread_pool_t threadPool)
56 void CAEDRTerminateNetworkMonitor()
58 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
60 g_edrNetworkChangeCallback = NULL;
63 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
66 CAResult_t CAEDRStartNetworkMonitor()
68 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
70 // Initialize Bluetooth service
71 int ret = bt_initialize();
72 if (BT_ERROR_NONE != ret)
74 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth initialization failed!, error num [%x]",
79 ret = bt_adapter_set_state_changed_cb(CAEDRAdapterStateChangeCallback, NULL);
80 if(BT_ERROR_NONE != ret)
82 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
86 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
90 CAResult_t CAEDRStopNetworkMonitor()
92 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
93 // Unset bluetooth adapter callbacks
94 int ret = bt_adapter_unset_state_changed_cb();
95 if(BT_ERROR_NONE != ret)
97 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
98 return CA_STATUS_FAILED;
101 ret = bt_deinitialize();
102 if (BT_ERROR_NONE != ret)
104 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_deinitialize failed");
105 return CA_STATUS_FAILED;
108 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
112 void CAEDRSetNetworkChangeCallback(
113 CAEDRNetworkStatusCallback networkChangeCallback)
115 g_edrNetworkChangeCallback = networkChangeCallback;
118 CAResult_t CAEDRGetInterfaceInformation(CAEndpoint_t **info)
120 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
123 VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null");
125 // Get the bluetooth adapter local address
126 char *localAddress = NULL;
127 int err = bt_adapter_get_address(&localAddress);
128 if (BT_ERROR_NONE != err)
130 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG,
131 "Getting local adapter address failed!, error num [%x]",
133 return CA_STATUS_FAILED;
136 // Create network info
137 *info = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, localAddress, 0);
140 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!");
142 OICFree(localAddress);
143 return CA_MEMORY_ALLOC_FAILED;
146 OICFree(localAddress);
148 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
152 CAResult_t CAEDRGetAdapterEnableState(bool *state)
154 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
157 VERIFY_NON_NULL(state, EDR_ADAPTER_TAG, "state holder is NULL!");
159 bt_adapter_state_e adapterState;
160 int err = bt_adapter_get_state(&adapterState);
161 // Get Bluetooth adapter state
162 if (BT_ERROR_NONE != err)
164 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth get state failed!, error num [%x]",
167 return CA_STATUS_FAILED;
171 if (BT_ADAPTER_ENABLED == adapterState)
176 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
180 void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
183 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
185 if (BT_ADAPTER_ENABLED == adapterState)
187 // Notity to upper layer
188 if (g_edrNetworkChangeCallback)
190 g_edrNetworkChangeCallback(CA_INTERFACE_UP);
193 else if (BT_ADAPTER_DISABLED == adapterState)
195 // Notity to upper layer
196 if (g_edrNetworkChangeCallback)
198 g_edrNetworkChangeCallback(CA_INTERFACE_DOWN);
202 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");