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 APIs for EDR adapter - client, server, network monitor
28 #ifndef CA_EDR_INTERFACE_H_
29 #define CA_EDR_INTERFACE_H_
31 #include "caedradapter.h"
38 #ifndef OIC_EDR_SERVICE_ID
39 #define OIC_EDR_SERVICE_ID "12341234-1C25-481F-9DFB-59193D238280"
40 #endif //OIC_EDR_SERVICE_ID
44 STATE_DISCONNECTED, /**< State is Disconnected. */
45 STATE_CONNECTED /**< State is Connected. */
48 typedef struct connected_state
50 uint8_t address[CA_MACADDR_SIZE];
51 CAConnectedState_t state;
55 * Enum for defining different server types.
59 CA_UNICAST_SERVER = 0, /**< Unicast Server. */
60 CA_MULTICAST_SERVER, /**< Multicast Server. */
61 CA_SECURED_UNICAST_SERVER /**< Secured Unicast Server. */
62 } CAAdapterServerType_t;
65 * Structure to maintain the information of data in message queue.
69 CAEndpoint_t *remoteEndpoint; /**< Remote Endpoint. */
70 void *data; /**< Data to be sent. */
71 uint32_t dataLen; /**< Length of the data to be sent. */
75 * Structure to maintain the adapter information and its status.
79 CAEndpoint_t *info; /**< Local Connectivity Information. */
80 CANetworkStatus_t status; /**< Network Status. */
84 * This will be used during the Receiver of network requests and response.
85 * @param[in] remoteAddress EDR address of remote OIC device from which data received.
86 * @param[in] data Data received.
87 * @param[in] dataLength Length of the Data received.
88 * @param[out] sentLength Length of the sent data.
89 * @pre Callback must be registered using CAEDRSetPacketReceivedCallback().
91 typedef void (*CAEDRDataReceivedCallback)(const char *remoteAddress, const void *data,
92 uint32_t dataLength, uint32_t *sentLength);
95 * This will be used during change in network status.
96 * @param[in] status Network Status of the adapter.
98 typedef void (*CAEDRNetworkStatusCallback)(CANetworkStatus_t status);
101 * Callback to notify the error in the EDR adapter.
102 * @param[in] remoteAddress Remote EDR Address.
103 * @param[in] data data containing token, uri and coap data.
104 * @param[in] dataLength length of data.
105 * @param[in] result error code as defined in ::CAResult_t.
106 * @pre Callback must be registered using CAEDRSetPacketReceivedCallback().
108 typedef void (*CAEDRErrorHandleCallback)(const char *remoteAddress, const void *data,
109 uint32_t dataLength, CAResult_t result);
112 * Initialize the network monitor module
113 * @param[in] threadPool Threadpool Handle.
114 * @return ::CA_STATUS_OK or Appropriate error code.
115 * @retval ::CA_STATUS_OK Successful.
116 * @retval ::CA_ADAPTER_NOT_ENABLED Initialization is successful, but
117 * bluetooth adapter is not enabled.
118 * @retval ::CA_STATUS_FAILED Operation failed.
119 * @see CAEDRTerminateNetworkMonitor().
121 CAResult_t CAEDRInitializeNetworkMonitor(const ca_thread_pool_t threadPool);
124 * Deinitialize with bluetooth adapter.
125 * @pre CAEDRInitializeNetworkMonitor() should be invoked before using
127 * @see CAEDRInitializeNetworkMonitor().
129 void CAEDRTerminateNetworkMonitor();
132 * Start Network Monitoring Process.
133 * @return ::CA_STATUS_OK or Appropriate error code.
135 CAResult_t CAEDRStartNetworkMonitor();
138 * Stop Network Monitoring Process.
139 * @return ::CA_STATUS_OK or Appropriate error code.
141 CAResult_t CAEDRStopNetworkMonitor();
144 * Sets the callback and Starts discovery for nearby OIC bluetooth devices.
146 * @return ::CA_STATUS_OK or Appropriate error code.
147 * @retval ::CA_STATUS_OK Successful.
148 * @retval ::CA_STATUS_FAILED Operation failed.
150 CAResult_t CAEDRClientSetCallbacks();
153 * Resetting callbacks with bluetooth framework and stop OIC device discovery.
154 * @pre CAEDRClientSetCallbacks() should be invoked before using this API.
155 * @see CAEDRClientSetCallbacks().
157 void CAEDRClientUnsetCallbacks();
160 * Used to initialize the EDR client module where mutex is initialized.
162 void CAEDRInitializeClient(ca_thread_pool_t handle);
165 * Destroys the Device list and mutex.
167 void CAEDRClientTerminate();
170 * Closes all the client connection to peer bluetooth devices.
172 void CAEDRClientDisconnectAll();
175 * Register callback to send the received packets from remote bluetooth
176 * device to BTAdapter.
178 * @param[in] packetReceivedCallback Callback function to register for
179 * sending network packets to EDR Adapter.
181 void CAEDRSetPacketReceivedCallback(CAEDRDataReceivedCallback packetReceivedCallback);
184 * Register callback for receiving local bluetooth adapter state.
186 * @param[in] networkStateChangeCallback Callback function to register
187 * for receiving local bluetooth adapter status.
189 void CAEDRSetNetworkChangeCallback(CAEDRNetworkStatusCallback networkStateChangeCallback);
192 * set error callback to notify error in EDR adapter.
194 * @param[in] errorHandleCallback Callback function to notify the error
195 * in the EDR adapter.
197 void CAEDRSetErrorHandler(CAEDRErrorHandleCallback errorHandleCallback);
201 * Get the local bluetooth adapter information.
203 * @param[out] info Local bluetooth adapter information.
205 * @return ::CA_STATUS_OK or Appropriate error code.
206 * @retval ::CA_STATUS_OK Successful.
207 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
208 * @retval ::CA_STATUS_FAILED Operation failed.
210 * @see CALocalConnectivity_t
213 CAResult_t CAEDRGetInterfaceInformation(CAEndpoint_t **info);
216 * Start RFCOMM server for given service UUID
218 * @param[in] handle Threadpool Handle.
220 * @return ::CA_STATUS_OK or Appropriate error code.
221 * @retval ::CA_STATUS_OK Successful.
222 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
223 * @retval ::CA_STATUS_FAILED Operation failed.
226 CAResult_t CAEDRServerStart(ca_thread_pool_t handle);
231 * @return ::CA_STATUS_OK or Appropriate error code.
232 * @retval ::CA_STATUS_OK Successful.
233 * @retval ::CA_STATUS_FAILED Operation failed.
235 CAResult_t CAEDRServerStop();
238 * Terminate server for EDR.
240 void CAEDRServerTerminate();
243 * All received data will be notified to upper layer.
245 * @return ::CA_STATUS_OK or Appropriate error code.
246 * @retval ::CA_STATUS_OK Successful.
247 * @retval ::CA_STATUS_FAILED Operation failed.
250 CAResult_t CAEDRManagerReadData();
253 * This function gets bluetooth adapter enable state.
254 * @param[out] state State of the Adapter.
255 * @return ::CA_STATUS_OK or Appropriate error code.
257 CAResult_t CAEDRGetAdapterEnableState(bool *state);
260 * This function sends data to specified remote bluetooth device.
261 * @param[in] remoteAddress Remote EDR Address.
262 * @param[in] data Data to be sent.
263 * @param[in] dataLength Length of the data to be sent.
264 * @return ::CA_STATUS_OK or Appropriate error code.
266 CAResult_t CAEDRClientSendUnicastData(const char *remoteAddress, const void *data,
267 uint32_t dataLength);
270 * This function sends data to all bluetooth devices running OIC service.
271 * @param[in] data Data to be sent.
272 * @param[in] dataLength Length of the data to be sent.
273 * @return ::CA_STATUS_OK or Appropriate error code.
275 CAResult_t CAEDRClientSendMulticastData(const void *data, uint32_t dataLength);
278 * This function gets bonded bluetooth device list
279 * @return ::CA_STATUS_OK or Appropriate error code.
281 CAResult_t CAEDRGetBondedDeviceList();
287 #endif /* CA_EDR_INTERFACE_H_ */