4 * Copyright (c) 2015 - 2016 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Atul Kumar Rai <a.rai@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
26 #include <vconf-internal-bt-keys.h>
28 #include <oal-event.h>
30 #include "bt-service-common.h"
31 #include "bt-service-event-receiver.h"
32 #include "bt-service-battery-monitor.h"
37 } bt_service_oal_event_data_t;
39 static _bt_service_event_handler_callback adapter_cb;
40 static _bt_service_event_handler_callback device_cb;
41 static _bt_service_event_handler_callback hid_cb;
42 static _bt_service_event_handler_callback hid_device_cb;
43 static _bt_service_event_handler_callback socket_cb;
44 static _bt_service_event_handler_callback audio_event_cb;
45 static _bt_service_event_handler_callback a2dp_source_cb;
46 static _bt_service_event_handler_callback a2dp_sink_cb;
47 static _bt_service_event_handler_callback ag_cb;
48 static _bt_service_event_handler_callback hdp_cb;
49 static _bt_service_event_handler_callback avrcp_ctrl_cb;
50 static _bt_service_event_handler_callback avrcp_cb;
51 static _bt_service_event_handler_callback adapter_le_cb;
52 static _bt_service_event_handler_callback adapter_gatt_cb;
53 static _bt_service_event_handler_callback hf_client_cb;
54 static _bt_service_event_handler_callback mesh_cb;
55 static _bt_service_event_handler_callback tds_cb;
57 void _bt_service_register_event_handler_callback(
58 bt_service_module_t module, _bt_service_event_handler_callback cb)
61 case BT_ADAPTER_MODULE:
62 BT_INFO("Register BT_ADAPTER_MODULE Callback");
65 case BT_DEVICE_MODULE:
66 BT_INFO("Register BT_DEVICE_MODULE Callback");
70 BT_INFO("Register BT_HID_MODULE Callback");
73 case BT_HID_DEVICE_MODULE:
74 BT_INFO("Register BT_HID_DEVICE_MODULE Callback");
77 case BT_SOCKET_MODULE:
78 BT_INFO("Register BT_SOCKET_MODULE Callback");
81 case BT_AUDIO_ALL_MODULE:
82 BT_INFO("Register BT_AUDIO_ALL_MODULE Callback");
85 case BT_A2DP_SOURCE_MODULE:
86 BT_INFO("Register BT_A2DP_SOURCE_MODULE Callback");
89 case BT_A2DP_SINK_MODULE:
90 BT_INFO("Register BT_A2DP_SINK_MODULE Callback");
94 BT_INFO("Register BT_AG_MODULE callback");
98 BT_INFO("Register BT_HFP_MODULE callback");
101 case BT_HEALTH_MODULE:
102 BT_INFO("Register BT_HEALTH_MODULE callback");
105 case BT_AVRCP_MODULE:
106 BT_INFO("Register BT_AVRCP_MODULE callback");
109 case BT_AVRCP_CTRL_MODULE:
110 BT_INFO("Register BT_AVRCP_CTRL_MODULE callback");
113 case BT_ADAPTER_LE_MODULE:
114 BT_INFO("Register BT_ADAPTER_LE_MODULE callback");
118 BT_INFO("Register BT_GATT_MODULE callback");
119 adapter_gatt_cb = cb;
122 BT_INFO("Register BT_MESH_MODULE callback");
126 BT_INFO("Register BT_TDS_MODULE callback");
130 BT_INFO("Unknown module");
134 void _bt_service_unregister_event_handler_callback(bt_service_module_t module)
137 case BT_ADAPTER_MODULE:
138 BT_INFO("Un-Register BT_ADAPTER_MODULE Callback");
141 case BT_DEVICE_MODULE:
142 BT_INFO("Un-Register BT_DEVICE_MODULE Callback");
146 BT_INFO("Un-Register BT_HID_MODULE Callback");
149 case BT_HID_DEVICE_MODULE:
150 BT_INFO("Un-Register BT_HID_DEVICE_MODULE Callback");
151 hid_device_cb = NULL;
153 case BT_SOCKET_MODULE:
154 BT_INFO("Un-Register BT_SOCKET_MODULE Callback");
157 case BT_A2DP_SINK_MODULE:
158 BT_INFO("Un-Register BT_A2DP_SINK_MODULE Callback");
161 case BT_HEALTH_MODULE:
162 BT_INFO("Un-Register BT_HEALTH_MODULE callback");
165 case BT_AVRCP_MODULE:
166 BT_INFO("Unregister BT_AVRCP_MODULE callback");
169 case BT_AVRCP_CTRL_MODULE:
170 BT_INFO("Un-Register BT_AVRCP_CTRL_MODULE callback");
171 avrcp_ctrl_cb = NULL;
173 case BT_ADAPTER_LE_MODULE:
174 BT_INFO("Un-Register BT_ADAPTER_MODULE callback");
175 adapter_le_cb = NULL;
178 BT_INFO("Un-Register BT_GATT_MODULE callback");
179 adapter_gatt_cb = NULL;
182 BT_INFO("Un-Register BT_MESH_MODULE callback");
186 BT_INFO("Un-Register BT_TDS_MODULE callback");
190 BT_INFO("Unknown module");
194 static gboolean __bt_handle_oal_events(gpointer data)
196 bt_service_oal_event_data_t *oal_event = data;
197 int event_type = oal_event->type;
198 gpointer event_data = oal_event->data;
199 _bt_bm_event_handler(data);
201 switch (event_type) {
202 case OAL_EVENT_ADAPTER_ENABLED:
203 case OAL_EVENT_ADAPTER_DISABLED:
205 audio_event_cb(event_type, event_data);
207 adapter_cb(event_type, event_data);
209 case OAL_EVENT_OAL_INITIALISED_SUCCESS:
210 case OAL_EVENT_OAL_INITIALISED_FAILED:
211 case OAL_EVENT_ADAPTER_PROPERTY_ADDRESS:
212 case OAL_EVENT_ADAPTER_PROPERTY_NAME:
213 case OAL_EVENT_ADAPTER_PROPERTY_VERSION:
214 case OAL_EVENT_ADAPTER_PROPERTY_SERVICES:
215 case OAL_EVENT_ADAPTER_PROPERTY_A2DP_ROLE:
216 case OAL_EVENT_ADAPTER_BONDED_DEVICE_LIST:
217 case OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE:
218 case OAL_EVENT_ADAPTER_MODE_CONNECTABLE:
219 case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE:
220 case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT:
221 case OAL_EVENT_ADAPTER_INQUIRY_STARTED:
222 case OAL_EVENT_ADAPTER_INQUIRY_FINISHED:
223 case OAL_EVENT_CONTROLLER_ERROR_RECEIVED:
224 case OAL_EVENT_ADAPTER_PROFILE_CONNECTED_DEVICES:
226 adapter_cb(event_type, event_data);
228 case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BREDR_ONLY:
229 case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BLE:
230 case OAL_EVENT_DEVICE_BONDING_SUCCESS:
231 case OAL_EVENT_DEVICE_BONDING_REMOVED:
232 case OAL_EVENT_DEVICE_BONDING_FAILED:
233 case OAL_EVENT_DEVICE_ACL_CONNECTED:
234 case OAL_EVENT_DEVICE_ACL_DISCONNECTED:
235 case OAL_EVENT_DEVICE_LE_CONNECTED:
236 case OAL_EVENT_DEVICE_LE_DISCONNECTED:
237 case OAL_EVENT_DEVICE_PIN_REQUEST:
238 case OAL_EVENT_DEVICE_PASSKEY_ENTRY_REQUEST:
239 case OAL_EVENT_DEVICE_PASSKEY_CONFIRMATION_REQUEST:
240 case OAL_EVENT_DEVICE_PASSKEY_DISPLAY:
241 case OAL_EVENT_DEVICE_SSP_CONSENT_REQUEST:
242 case OAL_EVENT_DEVICE_SERVICES:
243 case OAL_EVENT_DEVICE_AUTHORIZE_REQUEST:
244 case OAL_EVENT_DEVICE_TRUSTED:
245 case OAL_EVENT_DEVICE_UNTRUSTED:
246 case OAL_EVENT_DEVICE_NAME:
247 case OAL_EVENT_DEVICE_TRUSTED_PROFILES_CHANGED:
248 case OAL_EVENT_RSSI_MONITORING_ENABLED:
249 case OAL_EVENT_RSSI_MONITORING_DISABLED:
250 case OAL_EVENT_RAW_RSSI_RECEIVED:
251 case OAL_EVENT_RSSI_ALERT_RECEIVED:
252 case OAL_EVENT_DEVICE_DBFW_PLUS_INFO:
254 device_cb(event_type, event_data);
256 adapter_gatt_cb(event_type, event_data);
258 case OAL_EVENT_DEVICE_PROPERTIES:
259 if (audio_event_cb) {
260 BT_INFO("Device properties received, Audio callback registered, call it...");
261 audio_event_cb(event_type, event_data);
264 device_cb(event_type, event_data);
266 case OAL_EVENT_HID_CONNECTED:
267 case OAL_EVENT_HID_DISCONNECTED:
269 hid_cb(event_type, event_data);
271 case OAL_EVENT_HID_DEVICE_CONNECTED:
272 case OAL_EVENT_HID_DEVICE_DISCONNECTED:
274 hid_device_cb(event_type, event_data);
276 case OAL_EVENT_SOCKET_OUTGOING_CONNECTED:
277 case OAL_EVENT_SOCKET_DISCONNECTED:
278 case OAL_EVENT_SOCKET_AUTHORIZE_REQUEST:
280 socket_cb(event_type, event_data);
282 case OAL_EVENT_AUDIO_CONNECTING:
283 case OAL_EVENT_AUDIO_DISCONNECTING:
284 case OAL_EVENT_AUDIO_CONNECTED:
285 case OAL_EVENT_AUDIO_DISCONNECTED:
286 case OAL_EVENT_AUDIO_STOPPED:
287 case OAL_EVENT_AUDIO_STARTED:
289 a2dp_source_cb(event_type, event_data);
291 case OAL_EVENT_A2DP_SINK_DISCONNECTED:
292 case OAL_EVENT_A2DP_SINK_CONNECTED:
293 case OAL_EVENT_A2DP_SINK_DISCONNECTING:
294 case OAL_EVENT_A2DP_SINK_CONNECTING:
296 a2dp_sink_cb(event_type, event_data);
298 case OAL_EVENT_HFP_CONNECTING:
299 case OAL_EVENT_HFP_DISCONNECTING:
300 case OAL_EVENT_HFP_CONNECTED:
301 case OAL_EVENT_HFP_DISCONNECTED:
302 case OAL_EVENT_HFP_AUDIO_CONNECTED:
303 case OAL_EVENT_HFP_AUDIO_DISCONNECTED:
304 case OAL_EVENT_HFP_AUDIO_CONNECTING:
305 case OAL_EVENT_HFP_AUDIO_DISCONNECTING:
307 ag_cb(event_type, event_data);
309 case OAL_EVENT_HF_CLIENT_CONNECTING:
310 case OAL_EVENT_HF_CLIENT_DISCONNECTING:
311 case OAL_EVENT_HF_CLIENT_CONNECTED:
312 case OAL_EVENT_HF_CLIENT_DISCONNECTED:
314 hf_client_cb(event_type, event_data);
316 case OAL_EVENT_HDP_APP_REGISTERED:
317 case OAL_EVENT_HDP_APP_UNREGISTERED:
318 case OAL_EVENT_HDP_CHANNEL_CONNECTED:
319 case OAL_EVENT_HDP_CHANNEL_DESTROYED:
321 hdp_cb(event_type, event_data);
323 case OAL_EVENT_AVRCP_CONNECTED:
324 case OAL_EVENT_AVRCP_DISCONNECTED:
325 case OAL_EVENT_AVRCP_REMOTE_FEATURES:
326 case OAL_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
327 case OAL_EVENT_AVRCP_SETTING_REPEAT_STATUS:
328 case OAL_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
329 case OAL_EVENT_AVRCP_SETTING_SCAN_STATUS:
330 case OAL_EVENT_AVRCP_VOLUME_MUTE_CHANGED:
331 case OAL_EVENT_AVRCP_DELAY_CHANGED:
333 avrcp_cb(event_type, event_data);
335 case OAL_EVENT_AVRCP_CT_CONNECTED:
336 case OAL_EVENT_AVRCP_CT_DISCONNECTED:
337 case OAL_EVENT_AVRCP_CT_EQUALIZER_STATUS:
338 case OAL_EVENT_AVRCP_CT_REPEAT_STATUS:
339 case OAL_EVENT_AVRCP_CT_SHUFFLE_STATUS:
340 case OAL_EVENT_AVRCP_CT_SCAN_STATUS:
341 case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_STATUS_CHANGED:
342 case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_POS_CHANGED:
343 case OAL_EVENT_AVRCP_CT_NOTIF_TRACK_CHANGE:
344 case OAL_EVENT_AVRCP_CT_MEDIA_INFO:
345 case OAL_EVENT_AVRCP_CT_PLAY_STATUS:
346 case OAL_EVENT_AVRCP_CT_PASS_CMD_RES:
347 case OAL_EVENT_AVRCP_CT_PLAYER_SETTING_RES:
348 case OAL_EVENT_AVRCP_CT_GET_PROPERTY_RES:
350 avrcp_ctrl_cb(event_type, event_data);
352 case OAL_EVENT_BLE_ENABLED:
353 case OAL_EVENT_BLE_DISABLED:
354 case OAL_EVENT_BLE_SERVER_INSTANCE_INITIALISED:
355 case OAL_EVENT_BLE_ADVERTISING_STARTED:
356 case OAL_EVENT_BLE_ADVERTISING_STOPPED:
357 case OAL_EVENT_BLE_MULTI_ADVERTISING_ENABLE:
358 case OAL_EVENT_BLE_MULTI_ADVERTISING_DISABLE:
359 case OAL_EVENT_BLE_MULTI_ADVERTISING_SET_INST_DATA:
360 case OAL_EVENT_BLE_MULTI_ADVERTISING_UPDATE:
361 /* GATT Server Events */
362 case OAL_EVENT_GATTS_SERVICE_ADDED: /* gatts Service Added Done */\
363 case OAL_EVENT_GATTS_CHARACTERISTIC_ADDED: /* gatts Characteristic Added Done */\
364 case OAL_EVENT_GATTS_DESCRIPTOR_ADDED: /* gatts Descriptor added done */\
365 case OAL_EVENT_GATTS_SERVICE_STARTED: /* gatts Service Started */\
366 case OAL_EVENT_GATTS_SERVICE_STOPED: /* gatts Service Stoped */\
367 case OAL_EVENT_GATTS_SERVICE_DELETED: /* gatts Service Deleted */\
368 case OAL_EVENT_GATTS_CONNECTION_COMPLETED: /* gatts Connection completed */\
369 case OAL_EVENT_GATTS_DISCONNECTION_COMPLETED: /* gatts Disconnection completed */\
370 case OAL_EVENT_GATTS_REQUEST_READ: /* gatts Request Read from client */\
371 case OAL_EVENT_GATTS_REQUEST_WRITE: /* gatts Request Write from client */\
372 case OAL_EVENT_GATTS_EXEC_REQUEST_WRITE: /* gatts Exec Request Write from client */\
373 case OAL_EVENT_GATTS_IND_CONFIRM: /* gatts Indicate confirmation from remote client */\
374 case OAL_EVENT_GATTS_REQUEST_ACQUIRE_WRITE:
375 case OAL_EVENT_GATTS_REQUEST_ACQUIRE_NOTIFY:
376 /* Tizen Platform Specific */
377 case OAL_EVENT_GATTS_NOTIFICATION: /* gatts Notification changed event */\
378 case OAL_EVENT_GATTS_MTU_CHANGED: /* gatts MTU changed event */\
379 case OAL_EVENT_GATTS_PHY_UPDATED: /* gatts PHY UPDATED event */\
380 case OAL_EVENT_GATTS_PHY_READ: /* gatts PHY READ event */\
382 adapter_gatt_cb(event_type, event_data);
384 adapter_le_cb(event_type, event_data);
386 case OAL_EVENT_GATTC_DISCONNECTION_COMPLETED:
387 case OAL_EVENT_GATTC_SERVICE_SEARCH_RESULT:
388 case OAL_EVENT_GATTC_SERVICE_SEARCH_DONE:
389 case OAL_EVENT_GATTC_INCL_SRVC_SERACH_RESULT:
390 case OAL_EVENT_GATTC_CHARAC_SERACH_RESULT:
391 case OAL_EVENT_GATTC_DESC_SERACH_RESULT:
392 case OAL_EVENT_GATTC_READ_CHARAC:
393 case OAL_EVENT_GATTC_WRITE_CHARAC:
394 case OAL_EVENT_GATTC_READ_DESCR:
395 case OAL_EVENT_GATTC_WRITE_DESCR:
396 case OAL_EVENT_GATTC_SERVICE_CHANGED_IND:
397 case OAL_EVENT_GATTC_MTU_EXCHANGE_COMPLETED:
398 case OAL_EVENT_GATTC_REMOTE_RSSI:
399 case OAL_EVENT_GATTC_NOTIFICATION_REGISTERED:
400 case OAL_EVENT_GATTC_NOTIFICATION_DEREGISTERED:
401 case OAL_EVENT_GATTC_NOTIFY_DATA:
402 case OAL_EVENT_GATTC_CONNECTION_COMPLETED:
403 case OAL_EVENT_GATTC_REGISTRATION:
404 case OAL_EVENT_GATTC_PHY_UPDATED: /* gattc PHY UPDATED event */\
405 case OAL_EVENT_GATTC_PHY_READ: /* gattc PHY READ event */\
407 adapter_gatt_cb(event_type, event_data);
409 adapter_le_cb(event_type, event_data);
411 case OAL_EVENT_BLE_DISCOVERY_STARTED:
412 case OAL_EVENT_BLE_DISCOVERY_STOPPED:
413 case OAL_EVENT_BLE_DISCOVERY_FINISHED:
414 case OAL_EVENT_BLE_REMOTE_DEVICE_FOUND:
415 case OAL_EVENT_BLE_LOCAL_FEATURES:
417 adapter_le_cb(event_type, event_data);
419 case OAL_EVENT_MESH_NETWORK_PROXY_ADDED:
420 case OAL_EVENT_MESH_NETWORK_ATTACHED:
421 case OAL_EVENT_MESH_NETWORK_DESTROYED:
422 case OAL_EVENT_MESH_SCAN_STARTED:
423 case OAL_EVENT_MESH_SCAN_FINISHED:
424 case OAL_EVENT_MESH_SCAN_RESULT:
425 case OAL_EVENT_MESH_PROVISIONING_STARTED:
426 case OAL_EVENT_MESH_PROVISIONING_FAILED:
427 case OAL_EVENT_MESH_PROVISIONING_FINISHED:
428 case OAL_EVENT_MESH_PROVISIONING_DATA_REQUESTED:
429 case OAL_EVENT_MESH_AUTHENTICATION_REQUESTED:
430 case OAL_EVENT_MESH_NETKEY_EXECUTE_EVENT:
431 case OAL_EVENT_MESH_APPKEY_EXECUTE_EVENT:
432 case OAL_EVENT_MESH_DEVKEY_MESSAGE_RECEIVED:
433 case OAL_EVENT_MESH_MODEL_MESSAGE_RECEIVED:
434 BT_INFO("Mesh: Event");
436 mesh_cb(event_type, event_data);
438 case OAL_EVENT_TDS_ACTIVATION_REQUESTED:
439 BT_INFO("TDS: Event");
441 tds_cb(event_type, event_data);
444 BT_ERR("Unhandled Event: %d", event_type);
449 g_free(oal_event->data);
454 void _bt_service_oal_event_receiver(int event_type, gpointer event_data, gsize len)
456 bt_service_oal_event_data_t *oal_event = g_new0(bt_service_oal_event_data_t, 1);
458 BT_DBG("event_type: [%d], data size: [%zu]", event_type, len);
460 oal_event->type = event_type;
462 oal_event->data = g_memdup2(event_data, len);
464 g_idle_add(__bt_handle_oal_events, oal_event);