Merge "Merge branch 'master' into easysetup" into easysetup
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / bt_le_adapter / tizen / caleclient.h
1 /* ****************************************************************
2 *
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
4 *
5 *
6 *
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
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
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.
18 *
19 ******************************************************************/
20
21 /**
22  * @file
23  *
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.
29  */
30
31 #ifndef TZ_BLE_CLIENT_H_
32 #define TZ_BLE_CLIENT_H_
33
34 #include <bluetooth.h>
35 #include <bluetooth_type.h>
36 #include <bluetooth_type_internal.h>
37 #include <bluetooth_internal.h>
38
39 #include "cacommon.h"
40 #include "caadapterutils.h"
41 #include "caleutil.h"
42 #include "caadapterinterface.h"
43 #include "logger.h"
44 #include "cathreadpool.h"
45 #include "caleinterface.h"
46 #include "oic_malloc.h"
47
48
49 /**
50  * This callback is called when a characteristic value is changed by the GATT server.
51  *
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.
56  */
57 void CALEGattCharacteristicChangedCb(bt_gatt_h characteristic,
58                                      char *value, int valueLen, void *userData);
59 /**
60  * This callback will be called when the client write request is completed.
61  *
62  * @param[in]  result    Result of write value.
63  * @param[in]  reqHandle The request GATT handle.
64  * @param[in]  userData  User context
65  */
66 void CALEGattCharacteristicWriteCb(int result, bt_gatt_h reqHandle, void *userData);
67
68 /**
69  * This is the callback which will be called whenever there is change in gatt connection
70  * with server(Connected/Disconnected)
71  *
72  * @param[in]  result        The result of connection state change.
73  * @param[in]  connected     State of connection
74  * @param[in]  remoteAddress Mac address of the remote device in which we made connection.
75  * @param[in]  userData      The user data passed from the request function
76  */
77 void CALEGattConnectionStateChangedCb(int result, bool connected,
78                                       const char *remoteAddress,void *userData);
79
80 /**
81  * This is the callback which will be called when LE advertisement is found.
82  *
83  * @param[in]  result         The result of Scanning
84  * @param[in]  scanInfo       Remote Device information.
85  * @param[in]  userData       The user data passed from the request function
86  */
87 void CALEAdapterScanResultCb(int result, bt_adapter_le_device_scan_result_info_s *scanInfo,
88                              void *userData);
89
90 /**
91  * This thread will be used to initialize the Gatt Client and start device discovery.
92  * 1. Setting neccessary callbacks for connection, characteristics changed and discovery.
93  * 2. Start device discovery
94  *
95  * @param[in] data Currently it will be NULL(no parameter)
96  */
97 void CAStartLEGattClientThread(void *data);
98
99 /**
100  * This thread will be used to Start the timer for scanning.
101  *
102  * @param[in] data Currently it will be NULL(no parameter)
103  */
104 void CAStartTimerThread(void *data);
105
106 /**
107  * Used to initialize all required mutex variable for Gatt Client implementation.
108  *
109  * @return ::CA_STATUS_OK or Appropriate error code.
110  * @retval ::CA_STATUS_OK  Successful.
111  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
112  * @retval ::CA_STATUS_FAILED Operation failed.
113  */
114 CAResult_t CAInitGattClientMutexVariables();
115
116 /**
117  * Used to terminate all required mutex variable for Gatt Client implementation.
118  */
119 void CATerminateGattClientMutexVariables();
120
121 /**
122  * Used to register required callbacks to LE platform(connection, discovery, etc).
123  *
124  * @return ::CA_STATUS_OK or Appropriate error code.
125  * @retval ::CA_STATUS_OK  Successful.
126  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
127  * @retval ::CA_STATUS_FAILED Operation failed.
128  */
129 CAResult_t CALEGattSetCallbacks();
130
131 /**
132  * Used to unset all the registerd callbacks to BLE platform.
133  */
134 void CALEGattUnSetCallbacks();
135
136 /**
137  * Used to start LE Scanning.
138  *
139  * @return ::CA_STATUS_OK or Appropriate error code.
140  * @retval ::CA_STATUS_OK  Successful.
141  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
142  * @retval ::CA_STATUS_FAILED Operation failed.
143  */
144 CAResult_t CALEGattStartDeviceScanning();
145
146 /**
147  * Used to stop LE discovery for BLE  devices.
148  */
149 void CALEGattStopDeviceScanning();
150
151 /**
152  * This is the thread  which will be used for making gatt connection with
153  * remote devices.
154  * @param[in] remoteAddress MAC address of remote device to connect.
155  */
156 void CAGattConnectThread (void *remoteAddress);
157
158 /**
159  * Used to do connection with remote device.
160  *
161  * @param[in] remoteAddress Remote address inwhich we wants to connect with.
162  *
163  * @return ::CA_STATUS_OK or Appropriate error code.
164  * @retval ::CA_STATUS_OK  Successful.
165  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
166  * @retval ::CA_STATUS_FAILED Operation failed.
167  */
168 CAResult_t CALEGattConnect(const char *remoteAddress);
169
170 /**
171  * Used to do disconnection with remote device.
172  * @param[in] remoteAddress Remote address inwhich we wants to disconnect with.
173  *
174  * @return ::CA_STATUS_OK or Appropriate error code.
175  * @retval ::CA_STATUS_OK  Successful.
176  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
177  * @retval ::CA_STATUS_FAILED Operation failed.
178  */
179 CAResult_t CALEGattDisConnect(const char *remoteAddress);
180
181 /**
182  * This is thread which will be spawned for discovering ble services. Once
183  * called discover api, then it will be terminated.
184  * @param[in] remoteAddress Mac address of the remote device in which we
185  *                           want to search services.
186  */
187 void CADiscoverLEServicesThread (void *remoteAddress);
188
189 /**
190  * Used to discover the services and characteristics that is advertised by Gatt
191  * Server.
192  *
193  * @param[in] remoteAddress MAC address of remote device in which we want to discover
194  *                      the services and characteristics.
195  *
196  * @return ::CA_STATUS_OK or Appropriate error code.
197  * @retval ::CA_STATUS_OK  Successful.
198  * @retval ::CA_STATUS_INVALID_PARAM  Invalid input arguments.
199  * @retval ::CA_STATUS_FAILED Operation failed.
200  */
201 CAResult_t CALEGattDiscoverServices(const char *remoteAddress);
202 #endif /* TZ_BLE_CLIENT_H_ */