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)
52 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
54 // Initialize Bluetooth service
55 int err = bt_initialize();
56 if (BT_ERROR_NONE != err)
58 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth initialization failed!, error num [%x]",
60 return CA_STATUS_FAILED;
63 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
67 void CAEDRTerminateNetworkMonitor(void)
69 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
71 g_edrNetworkChangeCallback = NULL;
73 // Terminate Bluetooth service
76 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
79 CAResult_t CAEDRStartNetworkMonitor()
81 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
83 int ret = bt_adapter_set_state_changed_cb(CAEDRAdapterStateChangeCallback, NULL);
84 if(BT_ERROR_NONE != ret)
86 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
87 return CA_STATUS_FAILED;
90 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
94 CAResult_t CAEDRStopNetworkMonitor()
96 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
97 // Unset bluetooth adapter callbacks
98 int ret = bt_adapter_unset_state_changed_cb();
99 if(BT_ERROR_NONE != ret)
101 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "bt_adapter_set_state_changed_cb failed");
102 return CA_STATUS_FAILED;
104 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
108 void CAEDRSetNetworkChangeCallback(
109 CAEDRNetworkStatusCallback networkChangeCallback)
111 g_edrNetworkChangeCallback = networkChangeCallback;
114 CAResult_t CAEDRGetInterfaceInformation(CALocalConnectivity_t **info)
116 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
119 VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null");
121 // Get the bluetooth adapter local address
122 char *localAddress = NULL;
123 int err = bt_adapter_get_address(&localAddress);
124 if (BT_ERROR_NONE != err)
126 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG,
127 "Getting local adapter address failed!, error num [%x]",
129 return CA_STATUS_FAILED;
132 // Create network info
133 *info = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, localAddress, 0);
136 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!");
138 OICFree(localAddress);
139 return CA_MEMORY_ALLOC_FAILED;
142 OICFree(localAddress);
144 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
148 CAResult_t CAEDRGetAdapterEnableState(bool *state)
150 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
153 VERIFY_NON_NULL(state, EDR_ADAPTER_TAG, "state holder is NULL!");
156 bt_adapter_state_e adapterState;
157 int err = bt_adapter_get_state(&adapterState);
158 // Get Bluetooth adapter state
159 if (BT_ERROR_NONE != err)
161 OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth get state failed!, error num [%x]",
164 return CA_STATUS_FAILED;
168 if (BT_ADAPTER_ENABLED == adapterState)
173 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
177 void CAEDRAdapterStateChangeCallback(int result, bt_adapter_state_e adapterState,
180 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
182 if (BT_ADAPTER_ENABLED == adapterState)
184 // Notity to upper layer
185 if (g_edrNetworkChangeCallback)
187 g_edrNetworkChangeCallback(CA_INTERFACE_UP);
190 else if (BT_ADAPTER_DISABLED == adapterState)
192 // Notity to upper layer
193 if (g_edrNetworkChangeCallback)
195 g_edrNetworkChangeCallback(CA_INTERFACE_DOWN);
199 OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");