22f582213a1ff4834b10236e6889422851c39378
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / include / bt-service-common.h
1 /*
2  * Bluetooth-frwk
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:  Hocheol Seo <hocheol.seo@samsung.com>
7  *               Girishashok Joshi <girish.joshi@samsung.com>
8  *               Chanyeol Park <chanyeol.park@samsung.com>
9  *
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *              http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  *
22  */
23
24
25 #ifndef _BT_SERVICE_COMMON_H_
26 #define _BT_SERVICE_COMMON_H_
27
28 #include <sys/types.h>
29 #include <dlog.h>
30 #include <dbus/dbus-glib.h>
31 #include <dbus/dbus.h>
32
33 #include "bluetooth-api.h"
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #undef LOG_TAG
40 #define LOG_TAG "BLUETOOTH_FRWK_SERVICE"
41
42 #ifdef FUNCTION_TRACE
43 #define FN_START BT_DBG("[ENTER FUNC]")
44 #define FN_END BT_DBG("[EXIT FUNC]")
45 #else
46 #define FN_START
47 #define FN_END
48 #endif
49
50 #define LOG_COLOR_RESET    "\033[0m"
51 #define LOG_COLOR_RED      "\033[31m"
52 #define LOG_COLOR_YELLOW   "\033[33m"
53 #define LOG_COLOR_GREEN         "\033[32m"
54 #define LOG_COLOR_BLUE          "\033[36m"
55 #define LOG_COLOR_PURPLE   "\033[35m"
56
57 #define BT_DBG(fmt, args...) \
58         SLOGD(fmt, ##args)
59 #define BT_INFO(fmt, args...) \
60         SLOGI(fmt, ##args)
61 #define BT_ERR(fmt, args...) \
62         SLOGE(fmt, ##args)
63
64 #define BT_INFO_C(fmt, arg...) \
65         SLOGI_IF(TRUE,  LOG_COLOR_GREEN" "fmt" "LOG_COLOR_RESET, ##arg)
66 #define BT_ERR_C(fmt, arg...) \
67         SLOGI_IF(TRUE,  LOG_COLOR_RED" "fmt" "LOG_COLOR_RESET, ##arg)
68
69 #define DBG_SECURE(fmt, args...) SECURE_SLOGD(fmt, ##args)
70 #define ERR_SECURE(fmt, args...) SECURE_SLOGE(fmt, ##args)
71
72 #define ret_if(expr) \
73         do { \
74                 if (expr) { \
75                         BT_ERR("(%s) return", #expr); \
76                         return; \
77                 } \
78         } while (0)
79
80 #define retv_if(expr, val) \
81         do { \
82                 if (expr) { \
83                         BT_ERR("(%s) return", #expr); \
84                         return (val); \
85                 } \
86         } while (0)
87
88 #define BT_CHECK_PARAMETER(arg, func) \
89         do { \
90                 if (arg == NULL) \
91                 { \
92                         BT_ERR("INVALID PARAMETER"); \
93                         func BLUETOOTH_ERROR_INVALID_PARAM; \
94                 } \
95         } while (0)
96
97 #define BT_CHANNEL_LENGTH_MAX 5
98 #define BT_ADDRESS_LENGTH_MAX 6
99 #define BT_ADDRESS_STRING_SIZE 18
100 #define BT_RFCOMM_BUFFER_MAX 1024
101 #define BT_LOWER_ADDRESS_LENGTH 9
102
103 #define BT_AGENT_AUTO_PAIR_BLACKLIST_FILE (APP_SYSCONFDIR"/auto-pair-blacklist")
104 #define BT_AGENT_NEW_LINE "\r\n"
105
106 #define BT_MAX_DBUS_TIMEOUT 45000
107 #define BT_ENABLE_TIMEOUT 20000 /* 20 seconds */
108 #define BT_DISCOVERY_FINISHED_DELAY 200
109
110 #define MANAGER_EVENT_MATCH_RULE \
111                         "type='signal'," \
112                         "interface='%s'," \
113                         "member='%s'"
114
115 #define EVENT_MATCH_RULE \
116                         "type='signal'," \
117                         "interface='%s',"
118
119 #define BT_TEMINATING_WAIT_TIME 200
120
121 #define BT_TIMEOUT_MESSAGE "Did not receive a reply. Possible causes include: " \
122                         "the remote application did not send a reply, " \
123                         "the message bus security policy blocked the reply, " \
124                         "the reply timeout expired, or the network connection " \
125                         "was broken."
126
127 #define BT_BLUEZ_NAME "org.bluez"
128
129 #define BT_BLUEZ_PATH "/org/bluez"
130 #define BT_BLUEZ_HCI_PATH "/org/bluez/hci0"
131 #define BT_BLUEZ_HCI_DEV_PATH "/org/bluez/hci0/dev"
132 #define BT_AGENT_NAME "org.bluez.frwk_agent"
133 #define BT_AGENT_PATH "/org/bluez/agent/frwk_agent"
134 #define BT_DEVICE_AGENT_PATH "/org/tizen/device_agent"
135 #define BT_ADAPTER_AGENT_PATH "/org/tizen/adapter_agent"
136 #define BT_MANAGER_PATH "/"
137
138
139 #define BT_MANAGER_INTERFACE "org.freedesktop.DBus.ObjectManager"
140 #define BT_ADAPTER_INTERFACE "org.bluez.Adapter1"
141 #define BT_AGENT_INTERFACE "org.bluez.Agent1"
142 #define BT_AGENT_MANAGER_INTERFACE "org.bluez.AgentManager1"
143 #define BT_DEVICE_INTERFACE "org.bluez.Device1"
144 #define BT_NETWORK_SERVER_INTERFACE "org.bluez.NetworkServer1"
145 #define BT_MEDIA_INTERFACE "org.bluez.Media1"
146 #define BT_MEDIA_PLAYER_INTERFACE "org.mpris.MediaPlayer2.Player"
147 #define BT_MEDIATRANSPORT_INTERFACE "org.bluez.MediaTransport1"
148 #define BT_MEDIA_CONTROL_INTERFACE "org.bluez.MediaControl1"
149 #define BT_PLAYER_CONTROL_INTERFACE "org.bluez.MediaPlayer1"
150
151 #define BT_INPUT_INTERFACE "org.bluez.Input"
152 #define BT_NETWORK_INTERFACE "org.bluez.Network"
153 #define BT_NETWORK_CLIENT_INTERFACE "org.bluez.Network1"
154 #define BT_SERIAL_INTERFACE "org.bluez.Serial"
155 #define BT_SERIAL_MANAGER_INTERFACE "org.bluez.SerialProxyManager"
156 #define BT_SERIAL_PROXY_INTERFACE "org.bluez.SerialProxy"
157 #define BT_HFP_AGENT_INTERFACE "Org.Hfp.App.Interface"
158 #define BT_SINK_INTERFACE "org.bluez.AudioSink"
159 #define BT_AUDIO_INTERFACE "org.bluez.Audio"
160 #define BT_HEADSET_INTERFACE "org.bluez.Headset"
161 #define BT_OOB_INTERFACE "org.bluez.OutOfBand"
162 #define BT_HANDSFREE_GATEWAY_INTERFACE "org.bluez.HandsfreeGateway"
163 #define BT_OBEXD_DBUS_NAME "org.bluez.obex"
164 #define BT_OBEXD_MANAGER_INTERFACE "org.bluez.obex.AgentManager1"
165 #define BT_OBEXD_TRANSFER_INTERFACE "org.bluez.obex.Transfer1"
166
167 #define BT_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
168
169 #define MPRIS_PLAYER_INTERFACE "org.mpris.MediaPlayer2.Player"
170
171 #define BT_OBEX_SERVICE_NAME "org.bluez.obex"
172 #define BT_OBEX_CLIENT_PATH "/org/bluez/obex"
173 #define BT_OBEX_CLIENT_INTERFACE "org.bluez.obex.Client1"
174
175
176
177 #define BT_OBEX_TRANSFER_INTERFACE "org.bluez.obex.Transfer1"
178 #define BT_OBEX_AGENT_INTERFACE "org.bluez.obex.Agent1"
179
180
181
182 #define BT_OBEXD_DBUS_NAME "org.bluez.obex"
183 #define BT_OBEX_OBJECT_PUSH_INTERFACE "org.bluez.obex.ObjectPush1"
184
185
186 #define BT_FREEDESKTOP_INTERFACE "org.freedesktop.DBus"
187 #define BT_FREEDESKTOP_PATH "/org/freedesktop/DBus"
188
189
190 #define BT_INTERFACES_ADDED "InterfacesAdded"
191 #define BT_INTERFACES_REMOVED "InterfacesRemoved"
192 #define BT_NAME_OWNER_CHANGED "NameOwnerChanged"
193 #define BT_PROPERTIES_CHANGED "PropertiesChanged"
194 #define DBUS_INTERFACE_OBJECT_MANAGER "/"
195
196
197
198 #define BT_SESSION_BASEPATH_SERVER "/org/bluez/obex/server"
199 #define BT_SESSION_BASEPATH_CLIENT "/org/bluez/obex/client"
200
201 #define BT_SERVICE_ERR_MSG_NOT_SUPPORTED "Operation is not supported"
202
203 /* UUID */
204 #define GENERIC_AUDIO_UUID      "00001203-0000-1000-8000-00805f9b34fb"
205
206 #define HSP_HS_UUID             "00001108-0000-1000-8000-00805f9b34fb"
207 #define HSP_AG_UUID             "00001112-0000-1000-8000-00805f9b34fb"
208
209 #define HFP_HS_UUID             "0000111e-0000-1000-8000-00805f9b34fb"
210 #define HFP_AG_UUID             "0000111f-0000-1000-8000-00805f9b34fb"
211
212 #define ADVANCED_AUDIO_UUID     "0000110d-0000-1000-8000-00805f9b34fb"
213
214 #define A2DP_SOURCE_UUID        "0000110a-0000-1000-8000-00805f9b34fb"
215 #define A2DP_SINK_UUID          "0000110b-0000-1000-8000-00805f9b34fb"
216
217 #define AVRCP_REMOTE_UUID       "0000110e-0000-1000-8000-00805f9b34fb"
218 #define AVRCP_TARGET_UUID       "0000110c-0000-1000-8000-00805f9b34fb"
219
220 #define HID_UUID                "00001124-0000-1000-8000-00805f9b34fb"
221 #define PNP_UUID                "00001200-0000-1000-8000-00805f9b34fb"
222 #define RFCOMM_UUID_STR         "00000003-0000-1000-8000-00805f9b34fb"
223 #define PANU_UUID               "00001115-0000-1000-8000-00805f9b34fb"
224 #define NAP_UUID                "00001116-0000-1000-8000-00805f9b34fb"
225 #define OBEX_PSE_UUID           "0000112f-0000-1000-8000-00805f9b34fb"
226 #define GATT_UUID               "00001801-0000-1000-8000-00805f9b34fb"
227
228 /* Privilege */
229 #define BT_PRIVILEGE_PUBLIC "bt-service::public"
230 #define BT_PRIVILEGE_PLATFORM "bt-service::platform"
231
232 /* BD Address type */
233 #define BDADDR_BREDR           0x00
234 #define BDADDR_LE_PUBLIC       0x01
235 #define BDADDR_LE_RANDOM       0x02
236
237 /* Advertising report event types */
238 #define BT_LE_ADV_IND           0x00
239 #define BT_LE_ADV_DIRECT_IND    0x01
240 #define BT_LE_ADV_SCAN_IND              0x02
241 #define BT_LE_ADV_NONCONN_IND   0x03
242 #define BT_LE_ADV_SCAN_RSP              0x04
243
244 #define BT_STOP_DISCOVERY_TIMEOUT 1000*15
245
246 /* Profile states matched to btd_service_state_t of bluez service.h */
247 typedef enum {
248         BT_PROFILE_STATE_UNAVAILABLE,
249         BT_PROFILE_STATE_DISCONNECTED,
250         BT_PROFILE_STATE_CONNECTING,
251         BT_PROFILE_STATE_CONNECTED,
252         BT_PROFILE_STATE_DISCONNECTING,
253 } bt_profile_state_t;
254
255 typedef enum {
256         BT_ADV_IND_INFO = 0x00,
257         BT_SCAN_RSP_INFO = 0x01,
258 } bt_le_device_info_type_t;
259
260 typedef enum {
261         BT_PROFILE_CONN_RFCOMM= 0x01,
262         BT_PROFILE_CONN_A2DP= 0x02,
263         BT_PROFILE_CONN_HSP= 0x04,
264         BT_PROFILE_CONN_HID= 0x08,
265         BT_PROFILE_CONN_NAP= 0x10,
266         BT_PROFILE_CONN_HFG= 0x20,
267         BT_PROFILE_CONN_GATT= 0x40,
268         BT_PROFILE_CONN_ALL= 0x80,
269 } bt_profile_type_t;
270
271 typedef struct {
272         char *address;
273         int addr_type;
274         int rssi;
275         int adv_type;
276         bt_le_device_info_type_t dev_type;
277         int adv_data_len;
278         char *adv_data;
279 } bt_remote_le_dev_info_t;
280
281 typedef struct {
282         int rssi;
283         int class;
284         char *address;
285         char *name;
286         char **uuids;
287         int uuid_count;
288         gboolean paired;
289         gboolean connected;
290         gboolean trust;
291         char *manufacturer_data;
292         int manufacturer_data_len;
293         guchar addr_type;
294 #if 0 /* Should match with bt_dev_info_t in bluetooth-api.h */
295         bt_remote_le_dev_info_t le_dev_info;
296 #endif
297 } bt_remote_dev_info_t;
298
299 /* RFCOMM client /server will use this structure*/
300 typedef struct {
301         int fd;
302         GIOChannel *io_channel;
303         guint io_event;
304         char *dev_node;
305         char *address;
306         char *uuid;
307 } bt_rfcomm_info_t;
308
309 typedef struct {
310         int req_id;
311         char *address;
312 } bt_function_data_t;
313
314 DBusConnection *_bt_get_system_conn(void);
315
316 DBusGConnection *_bt_get_system_gconn(void);
317
318 DBusGConnection *_bt_get_session_gconn(void);
319
320 void *_bt_get_net_conn(void);
321
322 DBusGProxy *_bt_get_manager_proxy(void);
323
324 DBusGProxy *_bt_get_adapter_proxy(void);
325
326 DBusGProxy *_bt_get_adapter_properties_proxy(void);
327
328 char *_bt_get_device_object_path(char *address);
329
330 char *_bt_get_profile_uuid128(bt_profile_type_t profile_type);
331
332 char *_bt_convert_error_to_string(int error);
333
334 char * _bt_convert_disc_reason_to_string(int reason);
335
336 void _bt_logging_connection(gboolean connect, int addr_type);
337
338 char *_bt_get_adapter_path(void);
339
340 gboolean _bt_get_adapter_power(void);
341
342 void _bt_deinit_proxys(void);
343
344 void _bt_convert_device_path_to_address(const char *device_path,
345                                                 char *device_address);
346
347 void _bt_convert_addr_string_to_type(unsigned char *addr,
348                                         const char *address);
349
350 void _bt_convert_addr_type_to_string(char *address,
351                                 unsigned char *addr);
352
353 void _bt_print_device_address_t(const bluetooth_device_address_t *addr);
354
355 void _bt_divide_device_class(bluetooth_device_class_t *device_class,
356                                 unsigned int cod);
357
358 void _bt_free_device_info(bt_remote_dev_info_t *dev_info);
359
360 void _bt_free_le_device_info(bt_remote_le_dev_info_t *le_dev_info);
361
362 int _bt_copy_utf8_string(char *dest, const char *src, unsigned int length);
363
364 gboolean _bt_utf8_validate(char *name);
365
366 int _bt_register_osp_server_in_agent(int type, char *uuid, char *path, int fd);
367
368 int _bt_unregister_osp_server_in_agent(int type, char *uuid);
369
370 int _bt_set_socket_non_blocking(int socket_fd);
371
372 int _bt_set_non_blocking_tty(int sk);
373
374 gboolean _bt_is_headset_class(int dev_class);
375
376 char *_bt_get_device_object_path(char *address);
377
378 void _bt_deinit_bluez_proxy(void);
379
380 #ifdef __cplusplus
381 }
382 #endif /* __cplusplus */
383 #endif /*_BT_COMMON_H_*/
384