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 BLE modules.
27 #ifndef CA_LE_INTERFACE_H_
28 #define CA_LE_INTERFACE_H_
33 #include "caleadapter.h"
41 * @enum CALETransferType_t
42 * @brief Provide info about different mode of data transfer
43 * This enum is used to differentiate between unicast and multicast data transfer.
47 LE_MULTICAST, /**< When this enum is selected, data will be updated to all OIC servers. */
48 LE_UNICAST /**< When this enum is selected, data will be updated to desired OIC Server. */
53 * @brief Initialize the LE adapter layer. This will be invoked from the CA layer.
55 * @return #CA_STATUS_OK or Appropriate error code
56 * @retval #CA_STATUS_OK Successful
57 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
58 * @retval #CA_STATUS_FAILED Operation failed
60 CAResult_t CAInitializeLEAdapter();
63 * @brief Used to get the current state of the LE adapter.
65 * @return #CA_STATUS_OK or Appropriate error code
66 * @retval #CA_STATUS_OK Successful
67 * @retval #CA_ADAPTER_NOT_ENABLED adapter not enabled
68 * @retval #CA_STATUS_FAILED Operation failed
70 CAResult_t CAGetLEAdapterState();
73 * @brief Used to initialize the network monitor layer of the LE adapter. Mutex variables required
74 * to operate in this layer and other paramters can be initialized in this function.
76 * @return #CA_STATUS_OK or Appropriate error code
77 * @retval #CA_STATUS_OK Successful
78 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
79 * @retval #CA_STATUS_FAILED Operation failed
81 CAResult_t CAInitializeLENetworkMonitor();
84 * @brief Used to terminate the network monitor layer of the LE adapter. The variables intialized
85 * in CAInitializeLEAdapterController() must be cleared in this function.
88 void CATerminateLENetworkMonitor();
91 * @brief This function is used to set the callback for the Device state changes in the adapter.
93 * @param callback [IN] Callback to notify the Device state change to the CA Layer
95 * @return #CA_STATUS_OK or Appropriate error code
96 * @retval #CA_STATUS_OK Successful
97 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
98 * @retval #CA_STATUS_FAILED Operation failed
100 CAResult_t CASetLEAdapterStateChangedCb(CALEDeviceStateChangedCallback callback);
103 * @brief Used to initilaze all the mutex variables required to operate the LE network monitor
105 * @return #CA_STATUS_OK or Appropriate error code
106 * @retval #CA_STATUS_OK Successful
107 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
108 * @retval #CA_STATUS_FAILED Operation failed
110 CAResult_t CAInitLENetworkMonitorMutexVariables();
113 * @brief Used to terminate all the mutex variables required to operate the LE network monitor
117 void CATerminateLENetworkMonitorMutexVariables();
120 * @brief Provides the BD address of the local adapter.
121 * @param local_address [OUT] pointer to the location where bd address needs to be stored.
123 * @return #CA_STATUS_OK or Appropriate error code
124 * @retval #CA_STATUS_OK Successful
125 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
126 * @retval #CA_STATUS_FAILED Operation failed
128 CAResult_t CAGetLEAddress(char **local_address);
131 * @brief Used to start Gatt Server thread for service creation and advertise ble service.
133 * @return #CA_STATUS_OK or Appropriate error code
134 * @retval #CA_STATUS_OK Successful
135 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
136 * @retval #CA_STATUS_FAILED Operation failed
138 CAResult_t CAStartLEGattServer();
141 * @brief Used to stop BLE Gatt Service.
143 * @return #CA_STATUS_OK or Appropriate error code
144 * @retval #CA_STATUS_OK Successful
145 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
146 * @retval #CA_STATUS_FAILED Operation failed
148 CAResult_t CAStopLEGattServer();
151 * @brief Used to stop Gatt Server thread and remove service registration, stop advertising.
154 void CATerminateLEGattServer();
157 * @brief Used to store upper layer callback locally which will be used to send the data to
159 * @param callback [IN] Callback function to pass the data to CA layer.
162 void CASetLEReqRespServerCallback(CABLEServerDataReceivedCallback callback);
165 * @brief Used to update characteristics(Read/Write) value that we want to send to particular
168 * @param address [IN] BD address of Gatt client
169 * @param charValue [IN] Data that we want to send to client(unicast)
170 * @param charValueLen [IN] Length of the data.
172 * @return #CA_STATUS_OK or Appropriate error code
173 * @retval #CA_STATUS_OK Successful
174 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
175 * @retval #CA_STATUS_FAILED Operation failed
177 CAResult_t CAUpdateCharacteristicsToGattClient(const char* address, const char *charValue,
178 const uint32_t charValueLen);
181 * @brief Used to update characteristics(Read/Write) value that we want to multicast to all clients
183 * @param charValue [IN] Data that we want to send to clients(multicast)
184 * @param charValueLen [IN] Length of the data.
186 * @return #CA_STATUS_OK or Appropriate error code
187 * @retval #CA_STATUS_OK Successful
188 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
189 * @retval #CA_STATUS_FAILED Operation failed
191 CAResult_t CAUpdateCharacteristicsToAllGattClients(const char *charValue,
192 uint32_t charValueLen);
195 * @brief Used to start CAStartBleGattClientThread for initializing Gatt Client
197 * @return #CA_STATUS_OK or Appropriate error code
198 * @retval #CA_STATUS_OK Successful
199 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
200 * @retval #CA_STATUS_FAILED Operation failed
202 CAResult_t CAStartLEGattClient();
205 * @brief Used to stop Gatt Client gracefully in turn it will call CATerminateBLEGattClient
207 * @return #CA_STATUS_OK or Appropriate error code
208 * @retval #CA_STATUS_OK Successful
209 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
210 * @retval #CA_STATUS_FAILED Operation failed
212 void CAStopLEGattClient();
215 * @brief Used to unset all the callbacks and stop service discovery
218 void CATerminateLEGattClient();
221 * @brief API to read the data from characteristics and invoke notifyCallback.
224 void CACheckLEData();
227 * @brief Sets the value of characteristic and update the value to GATTServer(unicast).
229 * @param remoteAddress [IN] The address of the remote device
230 * @param data [IN] The value of characteristic (byte array)
231 * @param dataLen [IN] The length of value
232 * @param type [IN] Type of the transfer(#CALETransferType_t)
233 * @param position [IN] The unique index of each ble server. Used for multicast feature.
235 * @return #CA_STATUS_OK or Appropriate error code
236 * @retval #CA_STATUS_OK Successful
237 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
238 * @retval #CA_STATUS_FAILED Operation failed
240 CAResult_t CAUpdateCharacteristicsToGattServer(const char *remoteAddress, const char *data,
241 const uint32_t dataLen, CALETransferType_t type,
242 const int32_t position);
245 * @brief Sets the value of characteristic and update the value to all registered
246 * GATTServer -> Multicast
247 * @param data [IN] The value of characteristic (byte array)
248 * @param dataLen [IN] The length of value
250 * @return #CA_STATUS_OK or Appropriate error code
251 * @retval #CA_STATUS_OK Successful
252 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
253 * @retval #CA_STATUS_FAILED Operation failed
255 CAResult_t CAUpdateCharacteristicsToAllGattServers(const char *data, uint32_t dataLen);
258 * @brief Used to store upper layer callback locally which will be used to send the data to
260 * @param callback [IN] Callback function to pass the data to CA layer.
264 void CASetLEReqRespClientCallback(CABLEClientDataReceivedCallback callback);
267 * @brief Used to Set the gThreadPool handle which is required for spawning new thread.
269 * @param handle [IN] Thread pool handle which is given by above layer for using thread
271 * @return #CA_STATUS_OK or Appropriate error code
272 * @retval #CA_STATUS_OK Successful
273 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
274 * @retval #CA_STATUS_FAILED Operation failed
276 void CASetLEServerThreadPoolHandle(ca_thread_pool_t handle);
279 * @brief Used to Set the gThreadPool handle which is required for spawning new thread.
280 * @param handle [IN] Thread pool handle which is given by above layer for using thread creation
284 void CASetLEClientThreadPoolHandle(ca_thread_pool_t handle);
287 * @brief Used to unset the callback of adapter connection state change.
289 * @return #CA_STATUS_OK or Appropriate error code
290 * @retval #CA_STATUS_OK Successful
291 * @retval #CA_STATUS_INVALID_PARAM Invalid input argumets
292 * @retval #CA_STATUS_FAILED Operation failed
294 CAResult_t CAUnSetLEAdapterStateChangedCb();
297 * @brief This will be used to notify errors in BLE adapter
298 * @param remoteAddress [IN] Remote endpoint Address
299 * @param serviceUUID [IN] Service UUID
300 * @param data [IN] Data received
301 * @param dataLength [IN] Length of the data received
302 * @param result [IN] error code as per CAResult_t
305 typedef void (*CABLEErrorHandleCallback)(const char *remoteAddress, const void *data,
306 uint32_t dataLength, CAResult_t result);
308 * @brief sets the error handle callback
309 * @param callback [IN] Callback function to update error to the adapter
312 void CASetBLEClientErrorHandleCallback(CABLEErrorHandleCallback callback);
316 * @brief sets the error handle callback
317 * @param callback [IN] Callback function to update error to the adapter
320 void CASetBLEServerErrorHandleCallback(CABLEErrorHandleCallback callback);
326 #endif /* CA_LE_INTERFACE_H_ */