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 util function for LE adapter. This maintains the
25 * list of services an individual GATT Client connected to and operations on
26 * that list, such as getting the service info with BD address or with
27 * position etc. This is mainly useful for the multicast transmission of
28 * data where client needs to have the info of all the services to which it
32 #ifndef TZ_BLE_UTIL_H_
33 #define TZ_BLE_UTIL_H_
35 #include <bluetooth.h>
41 bt_gatt_client_h clientHandle;
42 bt_gatt_h serviceHandle;
48 typedef struct _LEServerInfoList
50 LEServerInfo *serverInfo;
51 struct _LEServerInfoList *next;
54 typedef struct _LEClientInfoList
57 struct _LEClientInfoList *next;
61 * Different characteristics types.
63 * This provides information of different characteristics
64 * which will be added to OIC service.
68 BLE_GATT_WRITE_CHAR = 0, /**< write_char This will be used to get the unicast response. */
69 BLE_GATT_READ_CHAR, /**< read_char This will be used update value to OIC server. */
70 BLE_GATT_NOTIFY_CHAR /**< Reserved char for the time being. */
74 * Used to increment the registered service count.
76 void CAIncrementRegisteredServiceCount();
79 * Used to decrement the registered service count.
81 void CADecrementRegisteredServiceCount();
84 * Used to reset the registered service count.
86 void CAResetRegisteredServiceCount();
89 * Used to get the total registered service count.
90 * @return Total registered service count.
92 int32_t CAGetRegisteredServiceCount();
95 * Used to add the serverListInfo structure to the Server List.
97 * @param[in] serverList Pointer to the ble server list which holds the info of list of
98 * servers registered by the client.
99 * @param[in] leServerInfo Pointer where serverInfo structure needs to be appended with
101 * @return ::CA_STATUS_OK or Appropriate error code.
102 * @retval ::CA_STATUS_OK Successful.
103 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
104 * @retval ::CA_STATUS_FAILED Operation failed.
106 CAResult_t CAAddLEServerInfoToList(LEServerInfoList **serverList,
107 LEServerInfo *leServerInfo);
110 * Used to remove the serverListInfo structure from the Server List.
112 * @param[in,out] serverList Pointer to the ble server list which holds the info of list of
113 * servers registered by the client.
114 * @param[in] remoteAddress Remote address to be removed from the client list.
116 void CARemoveLEServerInfoFromList(LEServerInfoList **serverList,
117 const char *remoteAddress);
120 * Used to get the serviceInfo from the list.
122 * @param[in] serverList Pointer to the ble service list which holds the info of list
123 * of servers registered by the client.
124 * @param[in] leAddress BD address of the device where GATTServer information is required.
125 * @param[out] leServerInfo Info of service and characteristic handle of the given BD address
126 * registered by client.
127 * @return ::CA_STATUS_OK or Appropriate error code.
128 * @retval ::CA_STATUS_OK Successful.
129 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
130 * @retval ::CA_STATUS_FAILED Operation failed.
132 CAResult_t CAGetLEServerInfo(LEServerInfoList *serverList, const char *leAddress,
133 LEServerInfo **leServerInfo);
136 * Used to get the clientInfo from the list by position.
138 * @param[in] serverList Pointer to the ble service list which holds the info of list
139 * of servers registered by the client.
140 * @param[in] position The service information of particular position in the list.
141 * @param[out] leServerInfo Info of service and characteristic handle of the given BD address
142 * registered by client.
143 * @return ::CA_STATUS_OK or Appropriate error code.
144 * @retval ::CA_STATUS_OK Successful.
145 * @retval ::CA_STATUS_INVALID_PARAM Invalid input arguments.
146 * @retval ::CA_STATUS_FAILED Operation failed.
148 CAResult_t CAGetLEServerInfoByPosition(LEServerInfoList *serverList, int32_t position,
149 LEServerInfo **leServerInfo);
152 * Used to clear BLE service list.
154 * @param[in] serverList Pointer to the ble service list which holds the info of list of
155 * servers registered by the client.
157 void CAFreeLEServerList(LEServerInfoList *serverList);
160 * @brief Used to get remove particular BLE service info from list
161 * @param[in] bleServerInfo Pointer to the structure which needs to be cleared.
163 void CAFreeLEServerInfo(LEServerInfo *bleServerInfo);
166 * Used to add the client address to the Client List.
168 * @param[in] clientList Pointer to the ble client list which holds the info of list of
169 * clients connected to the server.
170 * @param[in] clientAddress Client remote address.
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 CAAddLEClientInfoToList(LEClientInfoList **clientList,
177 char *clientAddress);
180 * Used to remove the client address from the Client List.
182 * @param[in,out] clientList Pointer to the ble client list which holds the info of list of
183 * clients connected by the server.
184 * @param[in] clientAddress Remote address to be removed from the client list.
186 void CARemoveLEClientInfoFromList(LEClientInfoList **clientList,
187 const char *clientAddress);
190 * Used to check if client address is present in the list.
192 * @param[in] clientList Pointer to the ble client list which holds the info of list of
193 * clients connected by the server.
194 * @param[in] clientAddress Remote address to be searched in the client list.
195 * @return ::CA_STATUS_OK if client address is found in the list, otherwise CA_STATUS_FAILED.
197 CAResult_t CAIsLEClientInfoInList(LEClientInfoList *clientList,
198 const char *clientAddress);
201 * Used to disconnect all the clients connected to the server.
203 * @param[in,out] clientList Pointer to the ble client list which holds the info of list of
204 * clients connected by the server.
206 void CADisconnectAllClient(LEClientInfoList *clientList);
209 * Used to get the Error message.
210 * @param[in] err Error code(::bt_error_e).
211 * @return Error string corresponding to the BT error code.
213 const char *CALEGetErrorMsg(bt_error_e err);
215 #endif /* TZ_BLE_UTIL_H_ */