Modified the logic of advertisement slot allocation
[platform/core/connectivity/bluetooth-frwk.git] / bt-service-adaptation / services / bt-service-event-receiver.c
1 /*
2  * Bluetooth-frwk
3  *
4  * Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:  Atul Kumar Rai <a.rai@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *              http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <glib.h>
23 #include <string.h>
24 #include <dlog.h>
25 #include <vconf.h>
26 #include <vconf-internal-bt-keys.h>
27
28 #include <oal-event.h>
29
30 #include "bt-service-common.h"
31 #include "bt-service-event-receiver.h"
32 #include "bt-service-battery-monitor.h"
33
34 typedef struct {
35         int type;
36         void *data;
37 } bt_service_oal_event_data_t;
38
39 _bt_service_event_handler_callback adapter_cb;
40 _bt_service_event_handler_callback device_cb;
41 _bt_service_event_handler_callback hid_cb;
42 _bt_service_event_handler_callback socket_cb;
43 _bt_service_event_handler_callback audio_event_cb;
44 _bt_service_event_handler_callback a2dp_source_cb;
45 _bt_service_event_handler_callback a2dp_sink_cb;
46 _bt_service_event_handler_callback ag_cb;
47 _bt_service_event_handler_callback hdp_cb;
48 _bt_service_event_handler_callback avrcp_ctrl_cb;
49 _bt_service_event_handler_callback avrcp_cb;
50 _bt_service_event_handler_callback adapter_le_cb;
51 _bt_service_event_handler_callback adapter_gatt_cb;
52
53 void _bt_service_register_event_handler_callback(
54                 bt_service_module_t module, _bt_service_event_handler_callback cb)
55 {
56         switch (module) {
57         case BT_ADAPTER_MODULE:
58                 BT_INFO("Register BT_ADAPTER_MODULE Callback");
59                 adapter_cb = cb;
60                 break;
61         case BT_DEVICE_MODULE:
62                 BT_INFO("Register BT_DEVICE_MODULE Callback");
63                 device_cb = cb;
64                 break;
65         case BT_HID_MODULE:
66                 BT_INFO("Register BT_HID_MODULE Callback");
67                 hid_cb = cb;
68                 break;
69         case BT_SOCKET_MODULE:
70                 BT_INFO("Register BT_SOCKET_MODULE Callback");
71                 socket_cb = cb;
72                 break;
73         case BT_AUDIO_ALL_MODULE:
74                 BT_INFO("Register BT_AUDIO_ALL_MODULE Callback");
75                 audio_event_cb = cb;
76                 break;
77         case BT_A2DP_SOURCE_MODULE:
78                 BT_INFO("Register BT_A2DP_SOURCE_MODULE Callback");
79                 a2dp_source_cb = cb;
80                 break;
81         case BT_A2DP_SINK_MODULE:
82                 BT_INFO("Register BT_A2DP_SINK_MODULE Callback");
83                 a2dp_sink_cb = cb;
84                 break;
85         case BT_AG_MODULE:
86                 BT_INFO("Register BT_AG_MODULE callback");
87                 ag_cb = cb;
88                 break;
89         case BT_HEALTH_MODULE:
90                 BT_INFO("Register BT_HEALTH_MODULE callback");
91                 hdp_cb = cb;
92                 break;
93         case BT_AVRCP_MODULE:
94                 BT_INFO("Register BT_AVRCP_MODULE callback");
95                 avrcp_cb = cb;
96                 break;
97         case BT_AVRCP_CTRL_MODULE:
98                 BT_INFO("Register BT_AVRCP_CTRL_MODULE callback");
99                 avrcp_ctrl_cb = cb;
100                 break;
101         case BT_ADAPTER_LE_MODULE:
102                 BT_INFO("Register BT_ADAPTER_LE_MODULE callback");
103                 adapter_le_cb = cb;
104                 break;
105         case BT_GATT_MODULE:
106                 BT_INFO("Register BT_GATT_MODULE callback");
107                 adapter_gatt_cb = cb;
108                 break;
109         default:
110                 BT_INFO("Unknown module");
111         }
112 }
113
114 void _bt_service_unregister_event_handler_callback(bt_service_module_t module)
115 {
116         switch (module) {
117         case BT_ADAPTER_MODULE:
118                 BT_INFO("Un-Register BT_ADAPTER_MODULE Callback");
119                 adapter_cb = NULL;
120                 break;
121         case BT_DEVICE_MODULE:
122                 BT_INFO("Un-Register BT_DEVICE_MODULE Callback");
123                 device_cb = NULL;
124                 break;
125         case BT_HID_MODULE:
126                 BT_INFO("Un-Register BT_HID_MODULE Callback");
127                 hid_cb = NULL;
128                 break;
129         case BT_SOCKET_MODULE:
130                 BT_INFO("Un-Register BT_SOCKET_MODULE Callback");
131                 socket_cb = NULL;
132                 break;
133         case BT_A2DP_SINK_MODULE:
134                 BT_INFO("Un-Register BT_A2DP_SINK_MODULE Callback");
135                 a2dp_sink_cb = NULL;
136                 break;
137         case BT_HEALTH_MODULE:
138                 BT_INFO("Un-Register BT_HEALTH_MODULE callback");
139                 hdp_cb = NULL;
140                 break;
141         case BT_AVRCP_MODULE:
142                 BT_INFO("Unregister BT_AVRCP_MODULE callback");
143                 avrcp_cb = NULL;
144                 break;
145         case BT_AVRCP_CTRL_MODULE:
146                 BT_INFO("Un-Register BT_AVRCP_CTRL_MODULE callback");
147                 avrcp_ctrl_cb = NULL;
148                 break;
149         case BT_ADAPTER_LE_MODULE:
150                 BT_INFO("Un-Register BT_ADAPTER_MODULE callback");
151                 adapter_le_cb = NULL;
152                 break;
153         case BT_GATT_MODULE:
154                 BT_INFO("Un-Register BT_GATT_MODULE callback");
155                 adapter_gatt_cb = NULL;
156                 break;
157         default:
158                 BT_INFO("Unknown module");
159         }
160 }
161
162 static gboolean __bt_handle_oal_events(gpointer data)
163 {
164         bt_service_oal_event_data_t *oal_event = data;
165         int event_type = oal_event->type;
166         gpointer event_data = oal_event->data;
167         _bt_bm_event_handler(data);
168
169         switch (event_type) {
170         case OAL_EVENT_ADAPTER_ENABLED:
171         case OAL_EVENT_ADAPTER_DISABLED:
172                 if (audio_event_cb)
173                         audio_event_cb(event_type, event_data);
174                 if (adapter_cb)
175                         adapter_cb(event_type, event_data);
176                 break;
177         case OAL_EVENT_OAL_INITIALISED_SUCCESS:
178         case OAL_EVENT_OAL_INITIALISED_FAILED:
179         case OAL_EVENT_ADAPTER_PROPERTY_ADDRESS:
180         case OAL_EVENT_ADAPTER_PROPERTY_NAME:
181         case OAL_EVENT_ADAPTER_PROPERTY_VERSION:
182         case OAL_EVENT_ADAPTER_PROPERTY_SERVICES:
183         case OAL_EVENT_ADAPTER_BONDED_DEVICE_LIST:
184         case OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE:
185         case OAL_EVENT_ADAPTER_MODE_CONNECTABLE:
186         case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE:
187         case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT:
188         case OAL_EVENT_ADAPTER_INQUIRY_STARTED:
189         case OAL_EVENT_ADAPTER_INQUIRY_FINISHED:
190                 if (adapter_cb)
191                         adapter_cb(event_type, event_data);
192                 break;
193         case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BREDR_ONLY:
194         case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BLE:
195         case OAL_EVENT_DEVICE_BONDING_SUCCESS:
196         case OAL_EVENT_DEVICE_BONDING_REMOVED:
197         case OAL_EVENT_DEVICE_BONDING_FAILED:
198         case OAL_EVENT_DEVICE_ACL_CONNECTED:
199         case OAL_EVENT_DEVICE_ACL_DISCONNECTED:
200         case OAL_EVENT_DEVICE_LE_CONNECTED:
201         case OAL_EVENT_DEVICE_LE_DISCONNECTED:
202         case OAL_EVENT_DEVICE_PIN_REQUEST:
203         case OAL_EVENT_DEVICE_PASSKEY_ENTRY_REQUEST:
204         case OAL_EVENT_DEVICE_PASSKEY_CONFIRMATION_REQUEST:
205         case OAL_EVENT_DEVICE_PASSKEY_DISPLAY:
206         case OAL_EVENT_DEVICE_SSP_CONSENT_REQUEST:
207         case OAL_EVENT_DEVICE_SERVICES:
208         case OAL_EVENT_DEVICE_AUTHORIZE_REQUEST:
209         case OAL_EVENT_DEVICE_TRUSTED:
210         case OAL_EVENT_DEVICE_UNTRUSTED:
211         case OAL_EVENT_DEVICE_NAME:
212         case OAL_EVENT_DEVICE_TRUSTED_PROFILES_CHANGED:
213         case OAL_EVENT_RSSI_MONITORING_ENABLED:
214         case OAL_EVENT_RSSI_MONITORING_DISABLED:
215         case OAL_EVENT_RAW_RSSI_RECEIVED:
216         case OAL_EVENT_RSSI_ALERT_RECEIVED:
217                 if (device_cb)
218                         device_cb(event_type, event_data);
219                 if (adapter_gatt_cb)
220                         adapter_gatt_cb(event_type, event_data);
221                 break;
222         case OAL_EVENT_DEVICE_PROPERTIES:
223                 if (audio_event_cb) {
224                         BT_INFO("Device properties received, Audio callback registered, call it...");
225                         audio_event_cb(event_type, event_data);
226                 }
227 #if 0
228                 if (hid_cb)
229                         hid_cb(event_type, event_data);
230 #endif
231                 if (device_cb)
232                         device_cb(event_type, event_data);
233                 break;
234         case OAL_EVENT_HID_CONNECTED:
235         case OAL_EVENT_HID_DISCONNECTED:
236                 if (hid_cb)
237                         hid_cb(event_type, event_data);
238                 break;
239         case OAL_EVENT_SOCKET_OUTGOING_CONNECTED:
240         case OAL_EVENT_SOCKET_DISCONNECTED:
241         case OAL_EVENT_SOCKET_AUTHORIZE_REQUEST:
242                 if (socket_cb)
243                         socket_cb(event_type, event_data);
244                 break;
245         case OAL_EVENT_AUDIO_CONNECTING:
246         case OAL_EVENT_AUDIO_DISCONNECTING:
247         case OAL_EVENT_AUDIO_CONNECTED:
248         case OAL_EVENT_AUDIO_DISCONNECTED:
249         case OAL_EVENT_AUDIO_STOPPED:
250         case OAL_EVENT_AUDIO_STARTED:
251                 if (a2dp_source_cb)
252                         a2dp_source_cb(event_type, event_data);
253                 break;
254         case OAL_EVENT_A2DP_SINK_DISCONNECTED:
255         case OAL_EVENT_A2DP_SINK_CONNECTED:
256         case OAL_EVENT_A2DP_SINK_DISCONNECTING:
257         case OAL_EVENT_A2DP_SINK_CONNECTING:
258                 if (a2dp_sink_cb)
259                         a2dp_sink_cb(event_type, event_data);
260                 break;
261         case OAL_EVENT_HFP_CONNECTING:
262         case OAL_EVENT_HFP_DISCONNECTING:
263         case OAL_EVENT_HFP_CONNECTED:
264         case OAL_EVENT_HFP_DISCONNECTED:
265         case OAL_EVENT_HFP_AUDIO_CONNECTED:
266         case OAL_EVENT_HFP_AUDIO_DISCONNECTED:
267         case OAL_EVENT_HFP_AUDIO_CONNECTING:
268         case OAL_EVENT_HFP_AUDIO_DISCONNECTING:
269                 if (ag_cb)
270                         ag_cb(event_type, event_data);
271                 break;
272         case OAL_EVENT_HDP_APP_REGISTERED:
273         case OAL_EVENT_HDP_APP_UNREGISTERED:
274         case OAL_EVENT_HDP_CHANNEL_CONNECTED:
275         case OAL_EVENT_HDP_CHANNEL_DESTROYED:
276                 if (hdp_cb)
277                         hdp_cb(event_type, event_data);
278                 break;
279         case OAL_EVENT_AVRCP_CONNECTED:
280         case OAL_EVENT_AVRCP_DISCONNECTED:
281         case OAL_EVENT_AVRCP_REMOTE_FEATURES:
282         case OAL_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
283         case OAL_EVENT_AVRCP_SETTING_REPEAT_STATUS:
284         case OAL_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
285         case OAL_EVENT_AVRCP_SETTING_SCAN_STATUS:
286         case OAL_EVENT_AVRCP_VOLUME_MUTE_CHANGED:
287         case OAL_EVENT_AVRCP_DELAY_CHANGED:
288                 if (avrcp_cb)
289                         avrcp_cb(event_type, event_data);
290                 break;
291         case OAL_EVENT_AVRCP_CT_CONNECTED:
292         case OAL_EVENT_AVRCP_CT_DISCONNECTED:
293         case OAL_EVENT_AVRCP_CT_EQUALIZER_STATUS:
294         case OAL_EVENT_AVRCP_CT_REPEAT_STATUS:
295         case OAL_EVENT_AVRCP_CT_SHUFFLE_STATUS:
296         case OAL_EVENT_AVRCP_CT_SCAN_STATUS:
297         case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_STATUS_CHANGED:
298         case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_POS_CHANGED:
299         case OAL_EVENT_AVRCP_CT_NOTIF_TRACK_CHANGE:
300         case OAL_EVENT_AVRCP_CT_MEDIA_INFO:
301         case OAL_EVENT_AVRCP_CT_PLAY_STATUS:
302         case OAL_EVENT_AVRCP_CT_PASS_CMD_RES:
303         case OAL_EVENT_AVRCP_CT_PLAYER_SETTING_RES:
304         case OAL_EVENT_AVRCP_CT_GET_PROPERTY_RES:
305                 if (avrcp_ctrl_cb)
306                         avrcp_ctrl_cb(event_type, event_data);
307                 break;
308         case OAL_EVENT_BLE_ENABLED:
309         case OAL_EVENT_BLE_DISABLED:
310         case OAL_EVENT_BLE_SERVER_INSTANCE_INITIALISED:
311         case OAL_EVENT_BLE_ADVERTISING_STARTED:
312         case OAL_EVENT_BLE_ADVERTISING_STOPPED:
313         case OAL_EVENT_BLE_MULTI_ADVERTISING_ENABLE:
314         case OAL_EVENT_BLE_MULTI_ADVERTISING_DISABLE:
315         case OAL_EVENT_BLE_MULTI_ADVERTISING_SET_INST_DATA:
316         case OAL_EVENT_BLE_MULTI_ADVERTISING_UPDATE:
317         /* GATT Server Events */
318         case OAL_EVENT_GATTS_SERVICE_ADDED:                     /* gatts Service Added Done */\
319         case OAL_EVENT_GATTS_CHARACTERISTIC_ADDED:              /* gatts Characteristic Added Done */\
320         case OAL_EVENT_GATTS_DESCRIPTOR_ADDED:                  /* gatts Descriptor added done */\
321         case OAL_EVENT_GATTS_SERVICE_STARTED:                   /* gatts Service Started  */\
322         case OAL_EVENT_GATTS_SERVICE_STOPED:                    /* gatts Service Stoped */\
323         case OAL_EVENT_GATTS_SERVICE_DELETED:           /* gatts Service Deleted  */\
324         case OAL_EVENT_GATTS_CONNECTION_COMPLETED:              /* gatts Connection completed */\
325         case OAL_EVENT_GATTS_DISCONNECTION_COMPLETED:           /* gatts Disconnection completed */\
326         case OAL_EVENT_GATTS_REQUEST_READ:                      /* gatts Request Read from client */\
327         case OAL_EVENT_GATTS_REQUEST_WRITE:                     /* gatts Request Write from client */\
328         case OAL_EVENT_GATTS_IND_CONFIRM:                       /* gatts Indicate confirmation from remote client */\
329         case OAL_EVENT_GATTS_REQUEST_ACQUIRE_WRITE:
330         case OAL_EVENT_GATTS_REQUEST_ACQUIRE_NOTIFY:
331         /* Tizen Platform Specific */
332         case OAL_EVENT_GATTS_NOTIFICATION:                      /* gatts Notification changed event */\
333         case OAL_EVENT_GATTS_MTU_CHANGED:                       /* gatts MTU changed event */\
334                 if (adapter_gatt_cb)
335                         adapter_gatt_cb(event_type, event_data);
336                 if (adapter_le_cb)
337                         adapter_le_cb(event_type, event_data);
338                 break;
339 #ifdef TIZEN_GATT_CLIENT
340         case OAL_EVENT_GATTC_DISCONNECTION_COMPLETED:
341         case OAL_EVENT_GATTC_SERVICE_SEARCH_RESULT:
342         case OAL_EVENT_GATTC_SERVICE_SEARCH_DONE:
343         case OAL_EVENT_GATTC_INCL_SRVC_SERACH_RESULT:
344         case OAL_EVENT_GATTC_CHARAC_SERACH_RESULT:
345         case OAL_EVENT_GATTC_DESC_SERACH_RESULT:
346         case OAL_EVENT_GATTC_READ_CHARAC:
347         case OAL_EVENT_GATTC_WRITE_CHARAC:
348         case OAL_EVENT_GATTC_READ_DESCR:
349         case OAL_EVENT_GATTC_WRITE_DESCR:
350         case OAL_EVENT_GATTC_SERVICE_CHANGED_IND:
351         case OAL_EVENT_GATTC_MTU_EXCHANGE_COMPLETED:
352         case OAL_EVENT_GATTC_REMOTE_RSSI:
353         case OAL_EVENT_GATTC_NOTIFICATION_REGISTERED:
354         case OAL_EVENT_GATTC_NOTIFICATION_DEREGISTERED:
355         case OAL_EVENT_GATTC_NOTIFY_DATA:
356         case OAL_EVENT_GATTC_CONNECTION_COMPLETED:
357         case OAL_EVENT_GATTC_REGISTRATION:
358                 if (adapter_gatt_cb)
359                         adapter_gatt_cb(event_type, event_data);
360                 if (adapter_le_cb)
361                         adapter_le_cb(event_type, event_data);
362                 break;
363 #endif
364         case OAL_EVENT_BLE_DISCOVERY_STARTED:
365         case OAL_EVENT_BLE_DISCOVERY_STOPPED:
366         case OAL_EVENT_BLE_REMOTE_DEVICE_FOUND:
367         case OAL_EVENT_BLE_LOCAL_FEATURES:
368                 if (adapter_le_cb)
369                         adapter_le_cb(event_type, event_data);
370                 break;
371         default:
372                 BT_ERR("Unhandled Event: %d", event_type);
373                 break;
374         }
375
376         if (oal_event->data)
377                 g_free(oal_event->data);
378         g_free(oal_event);
379         return FALSE;
380 }
381
382 void _bt_service_oal_event_receiver(int event_type, gpointer event_data, gsize len)
383 {
384         bt_service_oal_event_data_t *oal_event = g_new0(bt_service_oal_event_data_t, 1);
385
386         BT_INFO("event_type: [%d], data size: [%zu]", event_type, len);
387
388         oal_event->type = event_type;
389         if (event_data)
390                 oal_event->data = g_memdup(event_data, len);
391
392         g_idle_add(__bt_handle_oal_events, oal_event);
393 }