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 contains the functionalities of GATT Client. Functionalities
25 * like LE device discovery, connecting to the LE device with OIC service,
26 * registering to the service and there characteristics, registering to the
27 * change in the charateristics, setting the value of the characteristcs
28 * for the request and response will be done here.
31 #ifndef TZ_BLE_CLIENT_H_
32 #define TZ_BLE_CLIENT_H_
34 #include <bluetooth.h>
35 #include <bluetooth_type.h>
36 #include <bluetooth_type_internal.h>
37 #include <bluetooth_internal.h>
40 #include "caadapterutils.h"
42 #include "caadapterinterface.h"
44 #include "cathreadpool.h"
45 #include "caleinterface.h"
46 #include "oic_malloc.h"
50 * This callback is called when a characteristic value is changed by the GATT server.
52 * @param[in] characteristic The attribute handle of characteristic.
53 * @param[in] value Value of the characteristics of a service.
54 * @param[in] valueLen Length of data.
55 * @param[in] userData The user data passed from the request function.
57 void CALEGattCharacteristicChangedCb(bt_gatt_h characteristic,
58 char *value, int valueLen, void *userData);
60 * This callback will be called when the client write request is completed.
62 * @param[in] result Result of write value.
63 * @param[in] reqHandle The request GATT handle.
64 * @param[in] userData User context
66 void CALEGattCharacteristicWriteCb(int result, bt_gatt_h reqHandle, void *userData);
69 * This is the callback which will be called whenever there is change in gatt connection
70 * with server(Connected/Disconnected)
72 * @param[in] connected State of connection
73 * @param[in] remoteAddress Mac address of the remote device in which we made connection.
75 void CALEGattConnectionStateChanged(bool connected, const char *remoteAddress);
78 * This is the callback which will be called when LE advertisement is found.
80 * @param[in] result The result of Scanning
81 * @param[in] scanInfo Remote Device information.
82 * @param[in] userData The user data passed from the request function
84 void CALEAdapterScanResultCb(int result, bt_adapter_le_device_scan_result_info_s *scanInfo,
88 * This thread will be used to initialize the Gatt Client and start device discovery.
89 * 1. Setting neccessary callbacks for connection, characteristics changed and discovery.
90 * 2. Start device discovery
92 * @param[in] data Currently it will be NULL(no parameter)
94 void CAStartLEGattClientThread(void *data);
97 * This thread will be used to Start the timer for scanning.
99 * @param[in] data Currently it will be NULL(no parameter)
101 void CAStartTimerThread(void *data);
104 * Used to initialize all required mutex variable for Gatt Client implementation.
106 * @return ::CA_STATUS_OK or Appropriate error code.
107 * @retval ::CA_STATUS_OK Successful.
108 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
109 * @retval ::CA_STATUS_FAILED Operation failed.
111 CAResult_t CAInitGattClientMutexVariables();
114 * Used to terminate all required mutex variable for Gatt Client implementation.
116 void CATerminateGattClientMutexVariables();
119 * Used to register required callbacks to LE platform(connection, discovery, etc).
121 * @return ::CA_STATUS_OK or Appropriate error code.
122 * @retval ::CA_STATUS_OK Successful.
123 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
124 * @retval ::CA_STATUS_FAILED Operation failed.
126 CAResult_t CALEGattSetCallbacks();
129 * Used to unset all the registerd callbacks to BLE platform.
131 void CALEGattUnSetCallbacks();
134 * Used to start LE Scanning.
136 * @return ::CA_STATUS_OK or Appropriate error code.
137 * @retval ::CA_STATUS_OK Successful.
138 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
139 * @retval ::CA_STATUS_FAILED Operation failed.
141 CAResult_t CALEGattStartDeviceScanning();
144 * Used to stop LE discovery for BLE devices.
146 void CALEGattStopDeviceScanning();
149 * This is the thread which will be used for making gatt connection with
151 * @param[in] remoteAddress MAC address of remote device to connect.
153 void CAGattConnectThread (void *remoteAddress);
156 * Used to do connection with remote device.
158 * @param[in] remoteAddress Remote address inwhich we wants to connect with.
160 * @return ::CA_STATUS_OK or Appropriate error code.
161 * @retval ::CA_STATUS_OK Successful.
162 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
163 * @retval ::CA_STATUS_FAILED Operation failed.
165 CAResult_t CALEGattConnect(const char *remoteAddress);
168 * Used to do disconnection with remote device.
169 * @param[in] remoteAddress Remote address inwhich we wants to disconnect with.
171 * @return ::CA_STATUS_OK or Appropriate error code.
172 * @retval ::CA_STATUS_OK Successful.
173 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
174 * @retval ::CA_STATUS_FAILED Operation failed.
176 CAResult_t CALEGattDisConnect(const char *remoteAddress);
179 * This is thread which will be spawned for discovering ble services. Once
180 * called discover api, then it will be terminated.
181 * @param[in] remoteAddress Mac address of the remote device in which we
182 * want to search services.
184 void CADiscoverLEServicesThread (void *remoteAddress);
187 * Used to discover the services and characteristics that is advertised by Gatt
190 * @param[in] remoteAddress MAC address of remote device in which we want to discover
191 * the services and characteristics.
193 * @return ::CA_STATUS_OK or Appropriate error code.
194 * @retval ::CA_STATUS_OK Successful.
195 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
196 * @retval ::CA_STATUS_FAILED Operation failed.
198 CAResult_t CALEGattDiscoverServices(const char *remoteAddress);
199 #endif /* TZ_BLE_CLIENT_H_ */