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"
36 } bt_service_oal_event_data_t;
38 _bt_service_event_handler_callback adapter_cb;
39 _bt_service_event_handler_callback device_cb;
40 _bt_service_event_handler_callback hid_cb;
41 _bt_service_event_handler_callback socket_cb;
42 _bt_service_event_handler_callback audio_event_cb;
43 _bt_service_event_handler_callback a2dp_source_cb;
44 _bt_service_event_handler_callback a2dp_sink_cb;
45 _bt_service_event_handler_callback ag_cb;
46 _bt_service_event_handler_callback hdp_cb;
47 _bt_service_event_handler_callback avrcp_ctrl_cb;
48 _bt_service_event_handler_callback avrcp_cb;
49 _bt_service_event_handler_callback adapter_le_cb;
50 _bt_service_event_handler_callback adapter_gatt_cb;
52 void _bt_service_register_event_handler_callback(
53 bt_service_module_t module, _bt_service_event_handler_callback cb)
56 case BT_ADAPTER_MODULE:
57 BT_INFO("Register BT_ADAPTER_MODULE Callback");
60 case BT_DEVICE_MODULE:
61 BT_INFO("Register BT_DEVICE_MODULE Callback");
65 BT_INFO("Register BT_HID_MODULE Callback");
68 case BT_SOCKET_MODULE:
69 BT_INFO("Register BT_SOCKET_MODULE Callback");
72 case BT_AUDIO_ALL_MODULE:
73 BT_INFO("Register BT_AUDIO_ALL_MODULE Callback");
76 case BT_A2DP_SOURCE_MODULE:
77 BT_INFO("Register BT_A2DP_SOURCE_MODULE Callback");
80 case BT_A2DP_SINK_MODULE:
81 BT_INFO("Register BT_A2DP_SINK_MODULE Callback");
85 BT_INFO("Register BT_AG_MODULE callback");
88 case BT_HEALTH_MODULE:
89 BT_INFO("Register BT_HEALTH_MODULE callback");
93 BT_INFO("Register BT_AVRCP_MODULE callback");
96 case BT_AVRCP_CTRL_MODULE:
97 BT_INFO("Register BT_AVRCP_CTRL_MODULE callback");
100 case BT_ADAPTER_LE_MODULE:
101 BT_INFO("Register BT_ADAPTER_LE_MODULE callback");
105 BT_INFO("Register BT_GATT_MODULE callback");
106 adapter_gatt_cb = cb;
109 BT_INFO("Unknown module");
113 void _bt_service_unregister_event_handler_callback(bt_service_module_t module)
116 case BT_ADAPTER_MODULE:
117 BT_INFO("Un-Register BT_ADAPTER_MODULE Callback");
120 case BT_DEVICE_MODULE:
121 BT_INFO("Un-Register BT_DEVICE_MODULE Callback");
125 BT_INFO("Un-Register BT_HID_MODULE Callback");
128 case BT_SOCKET_MODULE:
129 BT_INFO("Un-Register BT_SOCKET_MODULE Callback");
132 case BT_A2DP_SINK_MODULE:
133 BT_INFO("Un-Register BT_A2DP_SINK_MODULE Callback");
136 case BT_HEALTH_MODULE:
137 BT_INFO("Un-Register BT_HEALTH_MODULE callback");
140 case BT_AVRCP_MODULE:
141 BT_INFO("Unregister BT_AVRCP_MODULE callback");
144 case BT_AVRCP_CTRL_MODULE:
145 BT_INFO("Un-Register BT_AVRCP_CTRL_MODULE callback");
146 avrcp_ctrl_cb = NULL;
148 case BT_ADAPTER_LE_MODULE:
149 BT_INFO("Un-Register BT_ADAPTER_MODULE callback");
150 adapter_le_cb = NULL;
153 BT_INFO("Un-Register BT_GATT_MODULE callback");
154 adapter_gatt_cb = NULL;
157 BT_INFO("Unknown module");
161 static gboolean __bt_handle_oal_events(gpointer data)
163 bt_service_oal_event_data_t *oal_event = data;
164 int event_type = oal_event->type;
165 gpointer event_data = oal_event->data;
167 switch (event_type) {
168 case OAL_EVENT_ADAPTER_ENABLED:
169 case OAL_EVENT_ADAPTER_DISABLED:
171 audio_event_cb(event_type, event_data);
173 adapter_cb(event_type, event_data);
175 case OAL_EVENT_OAL_INITIALISED_SUCCESS:
176 case OAL_EVENT_OAL_INITIALISED_FAILED:
177 case OAL_EVENT_ADAPTER_PROPERTY_ADDRESS:
178 case OAL_EVENT_ADAPTER_PROPERTY_NAME:
179 case OAL_EVENT_ADAPTER_PROPERTY_VERSION:
180 case OAL_EVENT_ADAPTER_PROPERTY_SERVICES:
181 case OAL_EVENT_ADAPTER_BONDED_DEVICE_LIST:
182 case OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE:
183 case OAL_EVENT_ADAPTER_MODE_CONNECTABLE:
184 case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE:
185 case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT:
186 case OAL_EVENT_ADAPTER_INQUIRY_STARTED:
187 case OAL_EVENT_ADAPTER_INQUIRY_FINISHED:
189 adapter_cb(event_type, event_data);
191 case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BREDR_ONLY:
192 case OAL_EVENT_ADAPTER_INQUIRY_RESULT_BLE:
193 case OAL_EVENT_DEVICE_BONDING_SUCCESS:
194 case OAL_EVENT_DEVICE_BONDING_REMOVED:
195 case OAL_EVENT_DEVICE_BONDING_FAILED:
196 case OAL_EVENT_DEVICE_ACL_CONNECTED:
197 case OAL_EVENT_DEVICE_ACL_DISCONNECTED:
198 case OAL_EVENT_DEVICE_LE_CONNECTED:
199 case OAL_EVENT_DEVICE_LE_DISCONNECTED:
200 case OAL_EVENT_DEVICE_PIN_REQUEST:
201 case OAL_EVENT_DEVICE_PASSKEY_ENTRY_REQUEST:
202 case OAL_EVENT_DEVICE_PASSKEY_CONFIRMATION_REQUEST:
203 case OAL_EVENT_DEVICE_PASSKEY_DISPLAY:
204 case OAL_EVENT_DEVICE_SSP_CONSENT_REQUEST:
205 case OAL_EVENT_DEVICE_SERVICES:
206 case OAL_EVENT_DEVICE_AUTHORIZE_REQUEST:
207 case OAL_EVENT_DEVICE_TRUSTED:
208 case OAL_EVENT_DEVICE_UNTRUSTED:
209 case OAL_EVENT_DEVICE_NAME:
210 case OAL_EVENT_DEVICE_TRUSTED_PROFILES_CHANGED:
211 case OAL_EVENT_RSSI_MONITORING_ENABLED:
212 case OAL_EVENT_RSSI_MONITORING_DISABLED:
213 case OAL_EVENT_RAW_RSSI_RECEIVED:
214 case OAL_EVENT_RSSI_ALERT_RECEIVED:
216 device_cb(event_type, event_data);
218 adapter_gatt_cb(event_type, event_data);
220 case OAL_EVENT_DEVICE_PROPERTIES:
221 if (audio_event_cb) {
222 BT_INFO("Device properties received, Audio callback registered, call it...");
223 audio_event_cb(event_type, event_data);
227 hid_cb(event_type, event_data);
230 device_cb(event_type, event_data);
232 case OAL_EVENT_HID_CONNECTED:
233 case OAL_EVENT_HID_DISCONNECTED:
235 hid_cb(event_type, event_data);
237 case OAL_EVENT_SOCKET_OUTGOING_CONNECTED:
238 case OAL_EVENT_SOCKET_DISCONNECTED:
239 case OAL_EVENT_SOCKET_AUTHORIZE_REQUEST:
241 socket_cb(event_type, event_data);
243 case OAL_EVENT_AUDIO_CONNECTING:
244 case OAL_EVENT_AUDIO_DISCONNECTING:
245 case OAL_EVENT_AUDIO_CONNECTED:
246 case OAL_EVENT_AUDIO_DISCONNECTED:
247 case OAL_EVENT_AUDIO_STOPPED:
248 case OAL_EVENT_AUDIO_STARTED:
250 a2dp_source_cb(event_type, event_data);
252 case OAL_EVENT_A2DP_SINK_DISCONNECTED:
253 case OAL_EVENT_A2DP_SINK_CONNECTED:
254 case OAL_EVENT_A2DP_SINK_DISCONNECTING:
255 case OAL_EVENT_A2DP_SINK_CONNECTING:
257 a2dp_sink_cb(event_type, event_data);
259 case OAL_EVENT_HFP_CONNECTING:
260 case OAL_EVENT_HFP_DISCONNECTING:
261 case OAL_EVENT_HFP_CONNECTED:
262 case OAL_EVENT_HFP_DISCONNECTED:
263 case OAL_EVENT_HFP_AUDIO_CONNECTED:
264 case OAL_EVENT_HFP_AUDIO_DISCONNECTED:
265 case OAL_EVENT_HFP_AUDIO_CONNECTING:
266 case OAL_EVENT_HFP_AUDIO_DISCONNECTING:
268 ag_cb(event_type, event_data);
270 case OAL_EVENT_HDP_APP_REGISTERED:
271 case OAL_EVENT_HDP_APP_UNREGISTERED:
272 case OAL_EVENT_HDP_CHANNEL_CONNECTED:
273 case OAL_EVENT_HDP_CHANNEL_DESTROYED:
275 hdp_cb(event_type, event_data);
277 case OAL_EVENT_AVRCP_CONNECTED:
278 case OAL_EVENT_AVRCP_DISCONNECTED:
279 case OAL_EVENT_AVRCP_REMOTE_FEATURES:
280 case OAL_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
281 case OAL_EVENT_AVRCP_SETTING_REPEAT_STATUS:
282 case OAL_EVENT_AVRCP_SETTING_SHUFFLE_STATUS:
283 case OAL_EVENT_AVRCP_SETTING_SCAN_STATUS:
284 case OAL_EVENT_AVRCP_VOLUME_MUTE_CHANGED:
285 case OAL_EVENT_AVRCP_DELAY_CHANGED:
287 avrcp_cb(event_type, event_data);
289 case OAL_EVENT_AVRCP_CT_CONNECTED:
290 case OAL_EVENT_AVRCP_CT_DISCONNECTED:
291 case OAL_EVENT_AVRCP_CT_EQUALIZER_STATUS:
292 case OAL_EVENT_AVRCP_CT_REPEAT_STATUS:
293 case OAL_EVENT_AVRCP_CT_SHUFFLE_STATUS:
294 case OAL_EVENT_AVRCP_CT_SCAN_STATUS:
295 case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_STATUS_CHANGED:
296 case OAL_EVENT_AVRCP_CT_NOTIF_PLAY_POS_CHANGED:
297 case OAL_EVENT_AVRCP_CT_NOTIF_TRACK_CHANGE:
298 case OAL_EVENT_AVRCP_CT_MEDIA_INFO:
299 case OAL_EVENT_AVRCP_CT_PLAY_STATUS:
300 case OAL_EVENT_AVRCP_CT_PASS_CMD_RES:
301 case OAL_EVENT_AVRCP_CT_PLAYER_SETTING_RES:
302 case OAL_EVENT_AVRCP_CT_GET_PROPERTY_RES:
304 avrcp_ctrl_cb(event_type, event_data);
306 case OAL_EVENT_BLE_ENABLED:
307 case OAL_EVENT_BLE_DISABLED:
308 case OAL_EVENT_BLE_SERVER_INSTANCE_INITIALISED:
309 case OAL_EVENT_BLE_ADVERTISING_STARTED:
310 case OAL_EVENT_BLE_ADVERTISING_STOPPED:
311 case OAL_EVENT_BLE_MULTI_ADVERTISING_ENABLE:
312 case OAL_EVENT_BLE_MULTI_ADVERTISING_DISABLE:
313 case OAL_EVENT_BLE_MULTI_ADVERTISING_SET_INST_DATA:
314 case OAL_EVENT_BLE_MULTI_ADVERTISING_UPDATE:
315 /* GATT Server Events */
316 case OAL_EVENT_GATTS_SERVICE_ADDED: /* gatts Service Added Done */\
317 case OAL_EVENT_GATTS_CHARACTERISTIC_ADDED: /* gatts Characteristic Added Done */\
318 case OAL_EVENT_GATTS_DESCRIPTOR_ADDED: /* gatts Descriptor added done */\
319 case OAL_EVENT_GATTS_SERVICE_STARTED: /* gatts Service Started */\
320 case OAL_EVENT_GATTS_SERVICE_STOPED: /* gatts Service Stoped */\
321 case OAL_EVENT_GATTS_SERVICE_DELETED: /* gatts Service Deleted */\
322 case OAL_EVENT_GATTS_CONNECTION_COMPLETED: /* gatts Connection completed */\
323 case OAL_EVENT_GATTS_DISCONNECTION_COMPLETED: /* gatts Disconnection completed */\
324 case OAL_EVENT_GATTS_REQUEST_READ: /* gatts Request Read from client */\
325 case OAL_EVENT_GATTS_REQUEST_WRITE: /* gatts Request Write from client */\
326 case OAL_EVENT_GATTS_IND_CONFIRM: /* gatts Indicate confirmation from remote client */\
327 case OAL_EVENT_GATTS_REQUEST_ACQUIRE_WRITE:
328 case OAL_EVENT_GATTS_REQUEST_ACQUIRE_NOTIFY:
329 /* Tizen Platform Specific */
330 case OAL_EVENT_GATTS_NOTIFICATION: /* gatts Notification changed event */\
331 case OAL_EVENT_GATTS_MTU_CHANGED: /* gatts MTU changed event */\
333 adapter_gatt_cb(event_type, event_data);
335 adapter_le_cb(event_type, event_data);
337 #ifdef TIZEN_GATT_CLIENT
338 case OAL_EVENT_GATTC_DISCONNECTION_COMPLETED:
339 case OAL_EVENT_GATTC_SERVICE_SEARCH_RESULT:
340 case OAL_EVENT_GATTC_SERVICE_SEARCH_DONE:
341 case OAL_EVENT_GATTC_INCL_SRVC_SERACH_RESULT:
342 case OAL_EVENT_GATTC_CHARAC_SERACH_RESULT:
343 case OAL_EVENT_GATTC_DESC_SERACH_RESULT:
344 case OAL_EVENT_GATTC_READ_CHARAC:
345 case OAL_EVENT_GATTC_WRITE_CHARAC:
346 case OAL_EVENT_GATTC_READ_DESCR:
347 case OAL_EVENT_GATTC_WRITE_DESCR:
348 case OAL_EVENT_GATTC_SERVICE_CHANGED_IND:
349 case OAL_EVENT_GATTC_MTU_EXCHANGE_COMPLETED:
350 case OAL_EVENT_GATTC_REMOTE_RSSI:
351 case OAL_EVENT_GATTC_NOTIFICATION_REGISTERED:
352 case OAL_EVENT_GATTC_NOTIFICATION_DEREGISTERED:
353 case OAL_EVENT_GATTC_NOTIFY_DATA:
354 case OAL_EVENT_GATTC_CONNECTION_COMPLETED:
355 case OAL_EVENT_GATTC_REGISTRATION:
357 adapter_gatt_cb(event_type, event_data);
359 adapter_le_cb(event_type, event_data);
362 case OAL_EVENT_BLE_DISCOVERY_STARTED:
363 case OAL_EVENT_BLE_DISCOVERY_STOPPED:
364 case OAL_EVENT_BLE_REMOTE_DEVICE_FOUND:
365 case OAL_EVENT_BLE_LOCAL_FEATURES:
367 adapter_le_cb(event_type, event_data);
370 BT_ERR("Unhandled Event: %d", event_type);
375 g_free(oal_event->data);
380 void _bt_service_oal_event_receiver(int event_type, gpointer event_data, gsize len)
382 bt_service_oal_event_data_t *oal_event = g_new0(bt_service_oal_event_data_t, 1);
384 BT_INFO("event_type: [%d], data size: [%zu]", event_type, len);
386 oal_event->type = event_type;
388 oal_event->data = g_memdup(event_data, len);
390 g_idle_add(__bt_handle_oal_events, oal_event);