Rollback changes to submit TIZEN:COMMON project
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-service-event-sender.c
1 /*
2  * bluetooth-frwk
3  *
4  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *              http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <dbus/dbus-glib.h>
21 #include <dbus/dbus.h>
22 #include <glib.h>
23 #include <dlog.h>
24
25 #include "bluetooth-api.h"
26 #include "bt-internal-types.h"
27
28 #include "bt-service-common.h"
29 #include "bt-service-event.h"
30
31 static DBusConnection *event_conn;
32
33 int _bt_send_event(int event_type, int event, int type, ...)
34 {
35         DBusMessage *msg;
36         char *path;
37         char *signal;
38         va_list arguments;
39
40         retv_if(event_conn == NULL, BLUETOOTH_ERROR_INTERNAL);
41
42         switch (event_type) {
43         case BT_ADAPTER_EVENT:
44                 path = BT_ADAPTER_PATH;
45                 break;
46         case BT_DEVICE_EVENT:
47                 path = BT_DEVICE_PATH;
48                 break;
49         case BT_HID_EVENT:
50                 path = BT_HID_PATH;
51                 break;
52         case BT_HEADSET_EVENT:
53                 path = BT_HEADSET_PATH;
54                 break;
55         case BT_AVRCP_EVENT:
56                 path = BT_AVRCP_PATH;
57                 break;
58         case BT_NETWORK_EVENT:
59                 path = BT_NETWORK_PATH;
60                 break;
61         case BT_OPP_CLIENT_EVENT:
62                 path = BT_OPP_CLIENT_PATH;
63                 break;
64         case BT_OPP_SERVER_EVENT:
65                 path = BT_OPP_SERVER_PATH;
66                 break;
67         case BT_RFCOMM_CLIENT_EVENT:
68                 path = BT_RFCOMM_CLIENT_PATH;
69                 break;
70         case BT_RFCOMM_SERVER_EVENT:
71                 path = BT_RFCOMM_SERVER_PATH;
72                 break;
73         default:
74                 BT_ERR("Unknown event");
75                 return BLUETOOTH_ERROR_INTERNAL;
76         }
77
78         switch (event) {
79         case BLUETOOTH_EVENT_ENABLED:
80                 signal = BT_ENABLED;
81                 break;
82         case BLUETOOTH_EVENT_DISABLED:
83                 signal = BT_DISABLED;
84                 break;
85         case BLUETOOTH_EVENT_LOCAL_NAME_CHANGED:
86                 signal = BT_ADAPTER_NAME_CHANGED;
87                 break;
88         case BLUETOOTH_EVENT_DISCOVERABLE_MODE_CHANGED:
89                 signal = BT_DISCOVERABLE_MODE_CHANGED;
90                 break;
91         case BLUETOOTH_EVENT_DISCOVERABLE_TIMEOUT_CHANGED:
92                 signal = BT_DISCOVERABLE_TIMEOUT_CHANGED;
93                 break;
94         case BLUETOOTH_EVENT_DISCOVERY_STARTED:
95                 signal = BT_DISCOVERY_STARTED;
96                 break;
97         case BLUETOOTH_EVENT_REMOTE_DEVICE_FOUND:
98                 signal = BT_DEVICE_FOUND;
99                 break;
100         case BLUETOOTH_EVENT_REMOTE_DEVICE_DISAPPEARED:
101                 signal = BT_DEVICE_DISAPPEARED;
102                 break;
103         case BLUETOOTH_EVENT_DISCOVERY_FINISHED:
104                 signal = BT_DISCOVERY_FINISHED;
105                 break;
106         case BLUETOOTH_EVENT_BONDING_FINISHED:
107                 signal = BT_BOND_CREATED;
108                 break;
109         case BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED:
110                 signal = BT_BOND_DESTROYED;
111                 break;
112         case BLUETOOTH_EVENT_SERVICE_SEARCHED:
113                 signal = BT_SERVICE_SEARCHED;
114                 break;
115         case BLUETOOTH_HID_CONNECTED:
116                 signal = BT_INPUT_CONNECTED;
117                 break;
118         case BLUETOOTH_HID_DISCONNECTED:
119                 signal = BT_INPUT_DISCONNECTED;
120                 break;
121         case BLUETOOTH_EVENT_AG_CONNECTED:
122                 signal = BT_HEADSET_CONNECTED;
123                 break;
124         case BLUETOOTH_EVENT_AG_DISCONNECTED:
125                 signal = BT_HEADSET_DISCONNECTED;
126                 break;
127         case BLUETOOTH_EVENT_AV_CONNECTED:
128                 signal = BT_STEREO_HEADSET_CONNECTED;
129                 break;
130         case BLUETOOTH_EVENT_AV_DISCONNECTED:
131                 signal = BT_STEREO_HEADSET_DISCONNECTED;
132                 break;
133         case BLUETOOTH_EVENT_AG_AUDIO_CONNECTED:
134                 signal = BT_SCO_CONNECTED;
135                 break;
136         case BLUETOOTH_EVENT_AG_AUDIO_DISCONNECTED:
137                 signal = BT_SCO_DISCONNECTED;
138                 break;
139         case BLUETOOTH_EVENT_AG_SPEAKER_GAIN:
140                 signal = BT_SPEAKER_GAIN;
141                 break;
142         case BLUETOOTH_EVENT_AG_MIC_GAIN:
143                 signal = BT_MICROPHONE_GAIN;
144                 break;
145         case BLUETOOTH_EVENT_NETWORK_CONNECTED:
146                 signal = BT_NETWORK_CONNECTED;
147                 break;
148         case BLUETOOTH_EVENT_NETWORK_DISCONNECTED:
149                 signal = BT_NETWORK_DISCONNECTED;
150                 break;
151         case BLUETOOTH_EVENT_NETWORK_SERVER_CONNECTED:
152                 signal = BT_NETWORK_SERVER_CONNECTED;
153                 break;
154         case BLUETOOTH_EVENT_NETWORK_SERVER_DISCONNECTED:
155                 signal = BT_NETWORK_SERVER_DISCONNECTED;
156                 break;
157         case BLUETOOTH_EVENT_OPC_CONNECTED:
158                 signal = BT_OPP_CONNECTED;
159                 break;
160         case BLUETOOTH_EVENT_OPC_DISCONNECTED:
161                 signal = BT_OPP_DISCONNECTED;
162                 break;
163         case BLUETOOTH_EVENT_OPC_TRANSFER_STARTED:
164         case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_STARTED:
165                 signal = BT_TRANSFER_STARTED;
166                 break;
167         case BLUETOOTH_EVENT_OPC_TRANSFER_PROGRESS:
168         case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_PROGRESS:
169                 signal = BT_TRANSFER_PROGRESS;
170                 break;
171         case BLUETOOTH_EVENT_OPC_TRANSFER_COMPLETE:
172         case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_COMPLETED:
173                 signal = BT_TRANSFER_COMPLETED;
174                 break;
175         case BLUETOOTH_EVENT_OBEX_SERVER_TRANSFER_AUTHORIZE:
176                 signal = BT_TRANSFER_AUTHORIZED;
177                 break;
178         case BLUETOOTH_EVENT_OBEX_SERVER_CONNECTION_AUTHORIZE:
179         case BLUETOOTH_EVENT_RFCOMM_AUTHORIZE:
180                 signal = BT_CONNECTION_AUTHORIZED;
181                 break;
182         case BLUETOOTH_EVENT_RFCOMM_CONNECTED:
183                 signal = BT_RFCOMM_CONNECTED;
184                 break;
185         case BLUETOOTH_EVENT_RFCOMM_DISCONNECTED:
186                 signal = BT_RFCOMM_DISCONNECTED;
187                 break;
188         case BLUETOOTH_EVENT_RFCOMM_DATA_RECEIVED:
189                 signal = BT_RFCOMM_DATA_RECEIVED;
190                 break;
191         case BLUETOOTH_EVENT_RFCOMM_SERVER_REMOVED:
192                 signal = BT_RFCOMM_SERVER_REMOVED;
193                 break;
194         case BLUETOOTH_EVENT_DEVICE_CONNECTED:
195                 signal = BT_DEVICE_CONNECTED;
196                 break;
197         case BLUETOOTH_EVENT_DEVICE_DISCONNECTED:
198                 signal = BT_DEVICE_DISCONNECTED;
199                 break;
200         case BLUETOOTH_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
201                 signal = BT_MEDIA_SHUFFLE_STATUS;
202                 break;
203         case BLUETOOTH_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
204                 signal = BT_MEDIA_EQUALIZER_STATUS;
205                 break;
206         case BLUETOOTH_EVENT_AVRCP_SETTING_REPEAT_STATUS:
207                 signal = BT_MEDIA_REPEAT_STATUS;
208                 break;
209         case BLUETOOTH_EVENT_AVRCP_SETTING_SCAN_STATUS:
210                 signal = BT_MEDIA_SCAN_STATUS;
211                 break;
212         default:
213                 BT_ERR("Unknown event");
214                 return BLUETOOTH_ERROR_INTERNAL;
215         }
216
217         msg = dbus_message_new_signal(path, BT_EVENT_SERVICE,
218                                 signal);
219
220         if (msg == NULL) {
221                 BT_ERR("Message is NULL\n");
222                 return BLUETOOTH_ERROR_INTERNAL;
223         }
224
225         if (type) {
226                 /* Set the arguments of the dbus message */
227                 va_start(arguments, type);
228
229                 if (!dbus_message_append_args_valist(msg, type, arguments)) {
230                         dbus_message_unref(msg);
231                         va_end(arguments);
232                         return BLUETOOTH_ERROR_INTERNAL;
233                 }
234
235                 va_end(arguments);
236         }
237
238         if (!dbus_connection_send(event_conn, msg, NULL)) {
239                 BT_ERR("send failed\n");
240                 dbus_message_unref(msg);
241                 return BLUETOOTH_ERROR_INTERNAL;
242         }
243
244         dbus_connection_flush(event_conn);
245         dbus_message_unref(msg);
246
247         return BLUETOOTH_ERROR_NONE;
248 }
249
250
251 /* To send the event from service daemon to application*/
252 int _bt_init_service_event_sender(void)
253 {
254         DBusConnection *conn;
255         DBusError err;
256         int ret;
257
258         if (event_conn) {
259                 BT_ERR("Event handler is already exist");
260                 return BLUETOOTH_ERROR_INTERNAL;
261         }
262
263         conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL);
264         retv_if(conn == NULL, BLUETOOTH_ERROR_INTERNAL);
265
266         dbus_error_init(&err);
267
268         ret = dbus_bus_request_name(conn, BT_EVENT_SERVICE,
269                                 DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
270
271         if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
272                 if (dbus_error_is_set(&err) == TRUE) {
273                         BT_ERR("Event init failed, %s", err.message);
274                         dbus_error_free(&err);
275                 }
276                 return BLUETOOTH_ERROR_INTERNAL;
277         }
278
279         event_conn = conn;
280
281         return BLUETOOTH_ERROR_NONE;
282 }
283
284 void _bt_deinit_service_event_sender(void)
285 {
286         if (event_conn) {
287                 dbus_connection_close(event_conn);
288                 event_conn = NULL;
289         }
290 }
291