Add cap_net_raw capability to bt-core
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / include / bt-common.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *              http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18
19 #ifndef _BT_COMMON_H_
20 #define _BT_COMMON_H_
21
22 #include <sys/types.h>
23 #include <libintl.h>
24 #include <dlog.h>
25 #include <glib.h>
26 #include <gio/gio.h>
27
28 #include "bluetooth-api.h"
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif /* __cplusplus */
33
34 #undef LOG_TAG
35 #define LOG_TAG "BLUETOOTH_FRWK_API"
36
37 #ifndef BT_EXPORT_API
38 #define BT_EXPORT_API __attribute__((visibility("default")))
39 #endif
40
41 #define LOG_COLOR_RESET    "\033[0m"
42 #define LOG_COLOR_RED      "\033[31m"
43 #define LOG_COLOR_YELLOW   "\033[33m"
44 #define LOG_COLOR_GREEN         "\033[32m"
45 #define LOG_COLOR_BLUE          "\033[36m"
46 #define LOG_COLOR_PURPLE   "\033[35m"
47
48 #define BT_DBG(fmt, args...) \
49         SLOGD(fmt, ##args)
50 #define BT_INFO(fmt, args...) \
51         SLOGI(fmt, ##args)
52 #define BT_ERR(fmt, args...) \
53         SLOGE(fmt, ##args)
54
55 #define BT_DBG_UUID(uuids, len, i) \
56         BT_DBG("***UUIDs***"); \
57         for (i = 0; i < len; i++) { \
58                 BT_DBG("%s", uuids[i]); \
59         }
60
61 #define BT_INFO_C(fmt, arg...) \
62         SLOGI_IF(TRUE,  LOG_COLOR_GREEN" "fmt" "LOG_COLOR_RESET, ##arg)
63 #define BT_ERR_C(fmt, arg...) \
64         SLOGI_IF(TRUE,  LOG_COLOR_RED" "fmt" "LOG_COLOR_RESET, ##arg)
65
66 #define DBG_SECURE(fmt, args...) SECURE_SLOGD(fmt, ##args)
67 #define ERR_SECURE(fmt, args...) SECURE_SLOGE(fmt, ##args)
68
69 //#define FUNCTION_TRACE
70 #ifdef FUNCTION_TRACE
71 #define FN_START BT_DBG("[ENTER FUNC]")
72 #define FN_END BT_DBG("[EXIT FUNC]")
73 #else
74 #define FN_START
75 #define FN_END
76 #endif
77
78 #define ret_if(expr) \
79         do { \
80                 if (expr) { \
81                         BT_ERR("(%s) return", #expr); \
82                         return; \
83                 } \
84         } while (0)
85
86 #define retv_if(expr, val) \
87         do { \
88                 if (expr) { \
89                         BT_ERR("(%s) return", #expr); \
90                         return (val); \
91                 } \
92         } while (0)
93
94 #define BT_INIT_PARAMS() \
95         GArray *in_param1 = NULL; \
96         GArray *in_param2 = NULL; \
97         GArray *in_param3 = NULL; \
98         GArray *in_param4 = NULL; \
99         GArray *out_param = NULL;
100
101 #define BT_FREE_PARAMS(IP1, IP2, IP3, IP4, OP) \
102         do { \
103                 if (IP1) \
104                         g_array_free(IP1, TRUE); \
105                 if (IP2) \
106                         g_array_free(IP2, TRUE); \
107                 if (IP3) \
108                         g_array_free(IP3, TRUE); \
109                 if (IP4) \
110                         g_array_free(IP4, TRUE); \
111                 if (OP) \
112                         g_array_free(OP, TRUE); \
113         } while (0)
114
115 #define BT_ALLOC_PARAMS(IP1, IP2, IP3, IP4, OP) \
116         do { \
117                 IP1 = g_array_new(TRUE, TRUE, sizeof(gchar));   \
118                 IP2 = g_array_new(TRUE, TRUE, sizeof(gchar));   \
119                 IP3 = g_array_new(TRUE, TRUE, sizeof(gchar));   \
120                 IP4 = g_array_new(TRUE, TRUE, sizeof(gchar)); \
121         } while (0)
122
123 #define BT_INIT_AGENT_PARAMS() \
124         GArray *in_param = NULL; \
125         GArray *out_param = NULL;
126
127 #define BT_FREE_AGENT_PARAMS(IP, OP) \
128         do { \
129                 if (IP) \
130                         g_array_free(IP, TRUE); \
131                 if (OP) \
132                         g_array_free(OP, TRUE); \
133         } while (0)
134
135 #define BT_ALLOC_AGENT_PARAMS(IP, OP) \
136         do { \
137                 IP = g_array_new(FALSE, FALSE, sizeof(gchar));  \
138         } while (0)
139
140 #define BT_CHECK_PARAMETER(arg, func) \
141         do { \
142                 if (arg == NULL) { \
143                         BT_ERR("%s is NULL", #arg); \
144                         func BLUETOOTH_ERROR_INVALID_PARAM; \
145                 } \
146         } while (0)
147
148 #define BT_CHECK_ENABLED(func) \
149         do { \
150                 if (bluetooth_check_adapter() == BLUETOOTH_ADAPTER_DISABLED) { \
151                         BT_ERR("BT BREDR is not enabled"); \
152                         func BLUETOOTH_ERROR_DEVICE_NOT_ENABLED; \
153                 } \
154         } while (0)
155
156 #define BT_CHECK_ENABLED_LE(func) \
157         do { \
158                 if (bluetooth_check_adapter_le() == BLUETOOTH_ADAPTER_LE_DISABLED) { \
159                         BT_ERR("BT LE is not enabled"); \
160                         func BLUETOOTH_ERROR_DEVICE_NOT_ENABLED; \
161                 } \
162         } while (0)
163
164 #define BT_CHECK_ENABLED_ANY(func) \
165         do { \
166                 if (bluetooth_check_adapter() == BLUETOOTH_ADAPTER_DISABLED && \
167                         bluetooth_check_adapter_le() == BLUETOOTH_ADAPTER_LE_DISABLED) { \
168                         BT_ERR("BT is not enabled"); \
169                         func BLUETOOTH_ERROR_DEVICE_NOT_ENABLED; \
170                 } \
171         } while (0)
172
173 #define BT_CHECK_ENABLED_INTERNAL(func) \
174         do { \
175                 if (_bt_check_enabled_internal() == FALSE) { \
176                         BT_ERR("BT BREDR is not enabled"); \
177                         func BLUETOOTH_ERROR_DEVICE_NOT_ENABLED; \
178                 } \
179         } while (0)
180
181 #define BT_ADDRESS_LENGTH_MAX 6
182 #define BT_ADDRESS_STRING_SIZE 18
183 #define BT_ADAPTER_OBJECT_PATH_MAX 50
184 #define BT_RFCOMM_BUFFER_LEN 1024
185 #define BT_L2CAP_LE_BUFFER_LEN 0xFFFF
186
187 #define BT_ACCESS_DENIED_MSG "Rejected send message"
188
189 #define BT_EVENT_FREEDESKTOP "org.freedesktop.DBus"
190 #define BT_FREEDESKTOP_PATH "/org/freedesktop/DBus"
191
192 #define BT_EVENT_MANAGER "org.bluez.Manager"
193 #define BT_MANAGER_PATH "/"
194
195
196 #define BT_MANAGER_INTERFACE "org.freedesktop.DBus.ObjectManager"
197 #define BT_ADAPTER_INTERFACE "org.bluez.Adapter1"
198 #define BT_DEVICE_INTERFACE "org.bluez.Device1"
199 #define BT_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
200
201
202 #define BT_SERIAL_INTERFACE "org.bluez.Serial"
203
204 #define BT_BLUEZ_NAME "org.bluez"
205 #define BT_DBUS_NAME "org.projectx.bt"
206 #define BT_SERVICE_PATH "/org/projectx/bt_service"
207
208 #define BT_AGENT_NAME "org.bluez.frwk_agent"
209 #define BT_AGENT_PATH "/org/bluez/agent/frwk_agent"
210
211 #define BT_AGENT_INTERFACE "org.bluez.Agent1"
212
213 #define BT_ERROR_INTERNAL "InternalError"
214 #define BT_ERROR_NOT_AVAILABLE "NotAvailable"
215 #define BT_ERROR_NOT_CONNECTED "NotConnected"
216 #define BT_ERROR_NOT_CONNECTION_FAILED "ConnectionFailed"
217 #define BT_ERROR_BUSY "InProgress"
218 #define BT_ERROR_INVALID_PARAM "InvalidArguments"
219 #define BT_ERROR_ALREADY_EXIST "AlreadyExists"
220 #define BT_ERROR_DOES_NOT_EXIST "DoesNotExist"
221 #define BT_ERROR_ALREADY_CONNECTED "Already Connected"
222 #define BT_ERROR_NO_MEMORY "No memory"
223 #define BT_ERROR_NO_DATA "No data"
224 #define BT_ERROR_I_O_ERROR "I/O error"
225 #define BT_ERROR_OPERATION_NOT_AVAILABLE "Operation currently not available"
226 #define BT_ERROR_OPERATION_NOT_ALLOWED "Operation not allowed"
227 #define BT_ERROR_OPERATION_NOT_SUPPORTED "Operation not supported"
228 #define BT_ERROR_INVALID_FILE_DESCRIPTOR "Invalid File Descriptor"
229 #define BT_ERROR_ACCESS_DENIED "Rejected send message"
230
231 #define RFKILL_EVENT_SIZE 8
232 #define RFKILL_NODE "/dev/rfkill"
233
234 typedef enum {
235         RFKILL_TYPE_ALL = 0,
236         RFKILL_TYPE_WLAN,
237         RFKILL_TYPE_BLUETOOTH,
238         RFKILL_TYPE_UWB,
239         RFKILL_TYPE_WIMAX,
240         RFKILL_TYPE_WWAN,
241         RFKILL_TYPE_GPS,
242         RFKILL_TYPE_FM,
243         NUM_RFKILL_TYPES,
244 } rfkill_type;
245
246 typedef struct {
247         unsigned int idx;
248         unsigned char type;
249         unsigned char op;
250         unsigned char soft;
251         unsigned char hard;
252 } rfkill_event;
253
254 typedef enum {
255         BT_COMMON = 0x00,
256         BT_HID,
257         BT_AUDIO,
258         BT_AVRCP,
259         BT_HF,
260 #ifndef GATT_DIRECT
261         BT_GATT_SERVER,
262 #endif
263         BT_GATT_CLIENT,
264         BT_MESH,
265         BT_MAX_USER_INFO
266 } bt_user_info_type_t;
267
268 typedef struct {
269         void *cb;
270         void *user_data;
271 } bt_user_info_t;
272
273 typedef struct {
274         int psm;
275         bluetooth_device_address_t device_addr;
276         void *user_data;
277 } bt_l2cap_user_info_t;
278
279 void _bt_set_user_data(int type, void *callback, void *user_data);
280
281 void _bt_print_device_address_t(const bluetooth_device_address_t *addr);
282
283 bt_user_info_t* _bt_get_user_data(int type);
284
285 void _bt_common_event_cb(int event, int result, void *param,
286                                 void *callback, void *user_data);
287
288 void _bt_input_event_cb(int event, int result, void *param,
289                                         void *callback, void *user_data);
290
291 void _bt_headset_event_cb(int event, int result, void *param,
292                                         void *callback, void *user_data);
293
294 void _bt_a2dp_source_event_cb(int event, int result, void *param,
295                                         void *callback, void *user_data);
296
297 void _bt_hf_event_cb(int event, int result, void *param,
298                                         void *callback, void *user_data);
299
300 void _bt_avrcp_event_cb(int event, int result, void *param,
301                                         void *callback, void *user_data);
302
303 void _bt_opp_client_event_cb(int event, int result, void *param,
304                                         void *callback, void *user_data);
305
306 void _bt_map_client_event_cb(int event, int result, void *param,
307                                         void *callback, void *user_data);
308
309 #ifndef GATT_DIRECT
310 void _bt_gatt_server_event_cb(int event, int result, void *param,
311                 void *callback, void *user_data);
312 #endif
313
314 void _bt_gatt_client_event_cb(int event, int result, void *param,
315                 void *callback, void *user_data);
316
317 /*Mesh*/
318 void _bt_mesh_event_cb(int event, int result, void *param,
319                 void *callback, void *user_data);
320
321 void _bt_divide_device_class(bluetooth_device_class_t *device_class,
322                                 unsigned int cod);
323
324 void _bt_convert_addr_string_to_type(unsigned char *addr, const char *address);
325
326 void _bt_convert_addr_string_to_secure_string(char *addr, const char *address);
327
328 void _bt_convert_addr_type_to_string(char *address, unsigned char *addr);
329
330 void _bt_convert_addr_type_to_secure_string(char *address, unsigned char *addr);
331
332 int _bt_common_send_rfcomm_rx_details(unsigned int len);
333
334 int _bt_common_send_rfcomm_tx_details(unsigned int len);
335
336 int _bt_common_send_rfcomm_conn_info(int role, gboolean connected, int client_fd);
337
338 const char *_bt_convert_error_to_string(int error);
339
340 const char *_bt_convert_service_function_to_string(int function);
341
342 int _bt_copy_utf8_string(char *dest, const char *src, unsigned int length);
343
344 gboolean _bt_utf8_validate(char *name);
345
346 void  _bt_convert_uuid_type_to_string(char *str, const unsigned char *uuid);
347
348 typedef struct {
349         char *obj_path;
350         char *uuid;
351         gboolean authentication;
352         gboolean authorization;
353         char *role;
354
355         char *service;
356
357 } bt_register_profile_info_t;
358
359 int _bt_get_adapter_path(GDBusConnection *conn, char *path);
360 char *_bt_get_device_object_path(char *address);
361 void _bt_print_api_caller_name(void);
362 int _bt_connect_profile(char *address, char *uuid, void *cb,
363                                                         gpointer func_data);
364 int _bt_disconnect_profile(char *address, char *uuid, void *cb,
365                                                         gpointer func_data);
366 int _bt_disconnect_ext_profile(char *address, char *path);
367
368 int _bt_cancel_discovers(char *address);
369 int _bt_discover_services(char *address, char *uuid, void *cb,
370                 gpointer func_data);
371 int _bt_discover_service_uuids(char *address, char *remote_uuid);
372 int _bt_get_cod_by_address(char *address, bluetooth_device_class_t *dev_class);
373
374 void _bt_set_le_scan_status(gboolean mode);
375
376 int _bt_register_profile(bt_register_profile_info_t *info, gboolean use_default_rfcomm);
377 int _bt_register_profile_platform(bt_register_profile_info_t *info, gboolean use_default_rfcomm);
378 int _bt_register_profile_ex(bt_register_profile_info_t *info, gboolean use_default_rfcomm, const char *name, const char *path);
379
380 void _bt_unregister_profile(char *path);
381 int __rfcomm_assign_id(void);
382 void __rfcomm_delete_id(int id);
383 void _bt_unregister_gdbus(int object_id);
384 typedef int (*bt_new_connection_cb) (const char *path, int fd,
385                                         bluetooth_device_address_t *address);
386 int _bt_register_new_conn(const char *path, bt_new_connection_cb cb);
387 int _bt_register_new_conn_ex(const char *path, const char *bus_name, bt_new_connection_cb cb);
388 void _bt_swap_addr(unsigned char *dst, const unsigned char *src);
389
390 int _bt_register_osp_server_in_agent(int type, char *uuid, char *path, int fd);
391 int _bt_unregister_osp_server_in_agent(int type, char *uuid);
392
393 int _bt_check_privilege(int service_type, int service_function);
394 int _bt_check_privilege_le(int service_type, int service_function);
395
396 GDBusConnection *_bt_get_system_shared_conn(void);
397 GDBusConnection *_bt_get_system_common_conn(void);
398
399 GVariant *_bt_get_managed_objects(void);
400
401 gboolean _bt_check_enabled_internal(void);
402
403 void _bt_set_adapter_internal_status(gboolean enabled);
404
405 void _bt_convert_device_path_to_addr_type(const char *device_path,
406                                           unsigned char *addr);
407
408 void _bt_convert_device_path_to_address(const char *device_path,
409                                         char *device_address);
410
411 #ifdef TIZEN_FEATURE_BT_RFCOMM_DIRECT
412 void _bt_rfcomm_server_free_all(void);
413
414 void _bt_rfcomm_server_disconnect_all(void);
415
416 void _bt_rfcomm_client_disconnect_all(void);
417
418 gboolean _check_uuid_path(char *path, char *uuid);
419 #endif
420
421 void _bt_rfcomm_server_reset_timer(void);
422
423 void _bt_rfcomm_client_reset_timer(void);
424
425 int _get_l2cap_le_server_id(int psm, gboolean *auto_accept);
426 void _bt_l2cap_le_server_set_pending_conn(int server_id, char *address);
427
428 void _bt_get_fd_list_info(GDBusProxy *proxy, GAsyncResult *res, gpointer user_data,
429                 bluetooth_event_param_t *bt_event, GArray **out_param1,
430                 int *event_type, GUnixFDList **out_fd_list, int *result, gboolean *fail);
431
432 void _bt_reset_battery_monitor_info(void);
433
434 int _bt_hid_device_get_fd(const char *address, int *ctrl, int *intr);
435
436 int _bt_hid_new_connection(bluetooth_device_address_t *addr,
437                                 int ctrl_fd, int intr_fd);
438
439 void _bt_hid_free_hid_info(void);
440
441 int _bt_get_error_value_from_message(const char *error_message);
442
443 char *_bt_print_gio_status(GIOStatus status);
444
445 void _bt_hdp_app_remove_obj_info(unsigned int channe_id);
446 int _bt_hdp_app_acquire_fd(bt_hdp_connected_t *conn_info);
447
448
449 #ifdef __cplusplus
450 }
451 #endif /* __cplusplus */
452 #endif /*_BT_COMMON_H_*/
453