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"
37 * @var g_edrNetworkChangeCallback
38 * @brief Maintains the callback to be notified on local bluetooth adapter status change.
40 static CAEDRNetworkStatusCallback g_edrNetworkChangeCallback = NULL;
43 * @fn CAEDRAdapterStateChangeCallback
44 * @brief This callback is registered to receive bluetooth adapter state changes.
46 static void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
49 CAResult_t CAEDRInitializeNetworkMonitor(const ca_thread_pool_t threadPool)
51 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
53 // Initialize Bluetooth service
54 int err = bt_initialize();
55 if (BT_ERROR_NONE != err)
57 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth initialization failed!, error num [%x]",
59 return CA_STATUS_FAILED;
62 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
66 void CAEDRTerminateNetworkMonitor(void)
68 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
70 g_edrNetworkChangeCallback = NULL;
72 // Terminate Bluetooth service
75 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
78 CAResult_t CAEDRStartNetworkMonitor()
80 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
82 int ret = bt_adapter_set_state_changed_cb(CAEDRAdapterStateChangeCallback, NULL);
83 if(BT_ERROR_NONE != ret)
85 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
86 return CA_STATUS_FAILED;
89 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
93 CAResult_t CAEDRStopNetworkMonitor()
95 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
96 // Unset bluetooth adapter callbacks
97 int ret = bt_adapter_unset_state_changed_cb();
98 if(BT_ERROR_NONE != ret)
100 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
101 return CA_STATUS_FAILED;
103 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
107 void CAEDRSetNetworkChangeCallback(
108 CAEDRNetworkStatusCallback networkChangeCallback)
110 g_edrNetworkChangeCallback = networkChangeCallback;
113 CAResult_t CAEDRGetInterfaceInformation(CALocalConnectivity_t **info)
115 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
118 VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null");
120 // Get the bluetooth adapter local address
121 char *localAddress = NULL;
122 int err = bt_adapter_get_address(&localAddress);
123 if (BT_ERROR_NONE != err)
125 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG,
126 "Getting local adapter address failed!, error num [%x]",
128 return CA_STATUS_FAILED;
131 // Create network info
132 *info = CAAdapterCreateLocalEndpoint(CA_EDR, localAddress);
135 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!");
137 OICFree(localAddress);
138 return CA_MEMORY_ALLOC_FAILED;
141 OICFree(localAddress);
143 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
147 CAResult_t CAEDRGetAdapterEnableState(bool *state)
149 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
152 VERIFY_NON_NULL(state, EDR_ADAPTER_TAG, "state holder is NULL!");
155 bt_adapter_state_e adapterState;
156 int err = bt_adapter_get_state(&adapterState);
157 // Get Bluetooth adapter state
158 if (BT_ERROR_NONE != err)
160 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth get state failed!, error num [%x]",
163 return CA_STATUS_FAILED;
167 if (BT_ADAPTER_ENABLED == adapterState)
172 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
176 void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
179 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
181 if (BT_ADAPTER_ENABLED == adapterState)
183 // Notity to upper layer
184 if (g_edrNetworkChangeCallback)
186 g_edrNetworkChangeCallback(CA_INTERFACE_UP);
189 else if (BT_ADAPTER_DISABLED == adapterState)
191 // Notity to upper layer
192 if (g_edrNetworkChangeCallback)
194 g_edrNetworkChangeCallback(CA_INTERFACE_DOWN);
198 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");