4d7b030cee2860cae17ee2ef26e76000d30521eb
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / include / oal-event.h
1 /*
2  * Open Adaptation Layer (OAL)
3  *
4  * Copyright (c) 2014-2015 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 <stdint.h>
21
22 #ifndef _OAL_EVENT_H_
23 #define _OAL_EVENT_H_
24
25 #include <glib.h>
26 #include <sys/types.h>
27
28 #include <oal-manager.h>
29 #include <oal-gatt.h>
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 #define FOREACH_EVENT(EVENT) \
36         EVENT(OAL_EVENT_ADAPTER_ENABLED)        \
37         EVENT(OAL_EVENT_ADAPTER_DISABLED)       \
38         EVENT(OAL_EVENT_ADAPTER_HARDWARE_ERROR) \
39         EVENT(OAL_EVENT_ADAPTER_PROPERTY_ADDRESS)                       /* bt_address_t */      \
40         EVENT(OAL_EVENT_ADAPTER_PROPERTY_NAME)                          /* char string */\
41         EVENT(OAL_EVENT_ADAPTER_PROPERTY_VERSION)                       /* char string */\
42         EVENT(OAL_EVENT_ADAPTER_PROPERTY_SERVICES)                      /* event_adapter_services_t */\
43         EVENT(OAL_EVENT_ADAPTER_MODE_NON_CONNECTABLE)   \
44         EVENT(OAL_EVENT_ADAPTER_MODE_CONNECTABLE)       \
45         EVENT(OAL_EVENT_ADAPTER_MODE_DISCOVERABLE)      \
46         EVENT(OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT)      /* uint32_t */\
47         EVENT(OAL_EVENT_ADAPTER_BONDED_DEVICE_LIST)             /* event_device_list_t */\
48         EVENT(OAL_EVENT_ADAPTER_INQUIRY_STARTED)        \
49         EVENT(OAL_EVENT_ADAPTER_INQUIRY_RESULT_BREDR_ONLY)      /* event_dev_found_t */\
50         EVENT(OAL_EVENT_ADAPTER_INQUIRY_RESULT_BLE)             /* event_ble_dev_found_t */\
51         EVENT(OAL_EVENT_ADAPTER_INQUIRY_FINISHED)       \
52         EVENT(OAL_EVENT_DEVICE_PROPERTIES)                                      /* remote_device_t */\
53         EVENT(OAL_EVENT_DEVICE_NAME)                                            /* remote_device_t */\
54         EVENT(OAL_EVENT_DEVICE_VIDPID)                                          /* remote_device_t */\
55         EVENT(OAL_EVENT_DEVICE_SERVICES)                                        /* event_dev_services_t */\
56         EVENT(OAL_EVENT_DEVICE_PIN_REQUEST)                             /* remote_device_t */\
57         EVENT(OAL_EVENT_DEVICE_PASSKEY_ENTRY_REQUEST)           /* remote_device_t */\
58         EVENT(OAL_EVENT_DEVICE_PASSKEY_CONFIRMATION_REQUEST)/* event_dev_passkey_t */\
59         EVENT(OAL_EVENT_DEVICE_PASSKEY_DISPLAY)                 /* event_dev_passkey_t */\
60         EVENT(OAL_EVENT_DEVICE_SSP_CONSENT_REQUEST)             /* remote_device_t */\
61         EVENT(OAL_EVENT_DEVICE_BONDING_SUCCESS)                 /* bt_address_t */\
62         EVENT(OAL_EVENT_DEVICE_BONDING_REMOVED)                 /* bt_address_t */\
63         EVENT(OAL_EVENT_DEVICE_BONDING_FAILED)                          /* event_dev_bond_failed_t */\
64         EVENT(OAL_EVENT_DEVICE_AUTHORIZE_REQUEST)                       /* event_dev_authorize_req_t */\
65         EVENT(OAL_EVENT_SOCKET_AUTHORIZE_REQUEST)                       /* event_socket_authorize_req_t */\
66         EVENT(OAL_EVENT_DEVICE_ACL_CONNECTED)                           /* bt_address_t */\
67         EVENT(OAL_EVENT_DEVICE_ACL_DISCONNECTED)                        /* bt_address_t */\
68         EVENT(OAL_EVENT_DEVICE_LE_CONNECTED)                            /* bt_address_t */\
69         EVENT(OAL_EVENT_DEVICE_LE_DISCONNECTED)                 /* bt_address_t */\
70         EVENT(OAL_EVENT_DEVICE_TRUSTED)                 /* Remote Device is Trusted */\
71         EVENT(OAL_EVENT_DEVICE_UNTRUSTED)                       /* Remote Device is UnTrusted */\
72         EVENT(OAL_EVENT_DEVICE_TRUSTED_PROFILES_CHANGED)                /* event_device_trusted_profiles_t */\
73         EVENT(OAL_EVENT_RSSI_MONITORING_ENABLED)        /* event_dev_rssi_info_t */\
74         EVENT(OAL_EVENT_RSSI_MONITORING_DISABLED)       /* event_dev_rssi_info_t */\
75         EVENT(OAL_EVENT_RSSI_ALERT_RECEIVED)            /* event_dev_rssi_info_t */\
76         EVENT(OAL_EVENT_RAW_RSSI_RECEIVED)              /* */\
77         EVENT(OAL_EVENT_OAL_INITIALISED_SUCCESS)                /* OAL Initialisation event */  \
78         EVENT(OAL_EVENT_OAL_INITIALISED_FAILED)                 /* OAL Initialisation event */  \
79         EVENT(OAL_EVENT_HID_CONNECTED)                                          /* event_hid_conn_t */\
80         EVENT(OAL_EVENT_HID_DISCONNECTED)                                       /* event_hid_conn_t */\
81         EVENT(OAL_EVENT_SOCKET_OUTGOING_CONNECTED)                 /* RFCOMM */  \
82         EVENT(OAL_EVENT_SOCKET_DISCONNECTED)            /* RFCOMM */  \
83         EVENT(OAL_EVENT_AUDIO_CONNECTING)                   /* bt_address_t */ \
84         EVENT(OAL_EVENT_AUDIO_DISCONNECTING)                /* bt_address_t*/ \
85         EVENT(OAL_EVENT_AUDIO_CONNECTED)                                        /* bt_address_t*/ \
86         EVENT(OAL_EVENT_AUDIO_DISCONNECTED)                             /* bt_address_t*/  \
87         EVENT(OAL_EVENT_AUDIO_STOPPED)                                          /* bt_address_t*/  \
88         EVENT(OAL_EVENT_AUDIO_STARTED)                                          /* bt_address_t*/  \
89         EVENT(OAL_EVENT_A2DP_SINK_DISCONNECTED)                                 /* bt_address_t*/  \
90         EVENT(OAL_EVENT_A2DP_SINK_CONNECTED)                                    /* bt_address_t*/  \
91         EVENT(OAL_EVENT_A2DP_SINK_DISCONNECTING)                                /* bt_address_t*/  \
92         EVENT(OAL_EVENT_A2DP_SINK_CONNECTING)                                   /* bt_address_t*/ \
93         EVENT(OAL_EVENT_HFP_DISCONNECTED)                /* bt_address_t*/ \
94         EVENT(OAL_EVENT_HFP_CONNECTING)                /* bt_address_t*/ \
95         EVENT(OAL_EVENT_HFP_CONNECTED)                /* bt_address_t*/ \
96         EVENT(OAL_EVENT_HFP_DISCONNECTING)                /* bt_address_t*/ \
97         EVENT(OAL_EVENT_HFP_AUDIO_DISCONNECTED)                /* bt_address_t*/ \
98         EVENT(OAL_EVENT_HFP_AUDIO_CONNECTING)                /* bt_address_t*/ \
99         EVENT(OAL_EVENT_HFP_AUDIO_CONNECTED)                /* bt_address_t*/ \
100         EVENT(OAL_EVENT_HFP_AUDIO_DISCONNECTING)                /* bt_address_t*/ \
101         EVENT(OAL_EVENT_AVRCP_CONNECTED)                        /* AVRCP Target connected */ \
102         EVENT(OAL_EVENT_AVRCP_DISCONNECTED)                     /* AVRCP Target disconnected */ \
103         EVENT(OAL_EVENT_AVRCP_REMOTE_FEATURES)                  /* AVRCP FATURE INFO*/  \
104         EVENT(OAL_EVENT_AVRCP_SETTING_EQUALIZER_STATUS)         /* bt_address_t*/  \
105         EVENT(OAL_EVENT_AVRCP_SETTING_REPEAT_STATUS)            /* bt_address_t*/  \
106         EVENT(OAL_EVENT_AVRCP_SETTING_SHUFFLE_STATUS)           /* bt_address_t*/  \
107         EVENT(OAL_EVENT_AVRCP_SETTING_SCAN_STATUS)                      /* bt_address_t*/  \
108         EVENT(OAL_EVENT_AVRCP_VOLUME_MUTE_CHANGED)\
109         EVENT(OAL_EVENT_AVRCP_DELAY_CHANGED)\
110         EVENT(OAL_EVENT_AVRCP_CT_CONNECTED)                   /* bt_address_t*/ \
111         EVENT(OAL_EVENT_AVRCP_CT_DISCONNECTED)                /* bt_address_t*/ \
112         EVENT(OAL_EVENT_AVRCP_CT_EQUALIZER_STATUS)            /* property_value*/ \
113         EVENT(OAL_EVENT_AVRCP_CT_REPEAT_STATUS)               /* property_value*/ \
114         EVENT(OAL_EVENT_AVRCP_CT_SHUFFLE_STATUS)              /* property_value*/ \
115         EVENT(OAL_EVENT_AVRCP_CT_SCAN_STATUS)                 /* property_value*/ \
116         EVENT(OAL_EVENT_AVRCP_CT_NOTIF_PLAY_STATUS_CHANGED)   /* property_value*/ \
117         EVENT(OAL_EVENT_AVRCP_CT_NOTIF_PLAY_POS_CHANGED)         /* property_value*/ \
118         EVENT(OAL_EVENT_AVRCP_CT_NOTIF_TRACK_CHANGE)          /* trak_info*/ \
119         EVENT(OAL_EVENT_AVRCP_CT_MEDIA_INFO)                    /* trak_info response*/ \
120         EVENT(OAL_EVENT_AVRCP_CT_PLAY_STATUS)                                           \
121         EVENT(OAL_EVENT_AVRCP_CT_PASS_CMD_RES)          /* pass through command response*/ \
122         EVENT(OAL_EVENT_AVRCP_CT_PLAYER_SETTING_RES)            /* palyer setting response*/ \
123         EVENT(OAL_EVENT_AVRCP_CT_GET_PROPERTY_RES)            /* get propery response*/ \
124         EVENT(OAL_EVENT_HDP_APP_REGISTERED)                     /* HDP APP registered */ \
125         EVENT(OAL_EVENT_HDP_APP_UNREGISTERED)                   /* HDP APP un-registered */ \
126         EVENT(OAL_EVENT_HDP_CHANNEL_CONNECTED)                  /* HDP channel connected */ \
127         EVENT(OAL_EVENT_HDP_CHANNEL_DESTROYED)                  /* HDP channel destroyed */ \
128         EVENT(OAL_EVENT_BLE_SERVER_INSTANCE_INITIALISED)    /*event_ble_adv_status */ \
129                 EVENT(OAL_EVENT_BLE_ENABLED)                    /*ble adapter enable */ \
130                 EVENT(OAL_EVENT_BLE_DISABLED)                   /*ble adapter disable */ \
131         EVENT(OAL_EVENT_BLE_ADVERTISING_STARTED)                        /* NULL */\
132         EVENT(OAL_EVENT_BLE_ADVERTISING_STOPPED)                        /* NULL*/\
133         EVENT(OAL_EVENT_BLE_MULTI_ADVERTISING_ENABLE)           /* NULL*/\
134         EVENT(OAL_EVENT_BLE_MULTI_ADVERTISING_DISABLE)          /* NULL*/\
135         EVENT(OAL_EVENT_BLE_MULTI_ADVERTISING_SET_INST_DATA)            /* NULL*/\
136         EVENT(OAL_EVENT_BLE_MULTI_ADVERTISING_UPDATE)           /* NULL*/\
137         EVENT(OAL_EVENT_GATTC_REGISTRATION)                     /* gattc Registration Confirmed */\
138         EVENT(OAL_EVENT_BLE_DISCOVERY_STARTED)                          /* NULL */\
139         EVENT(OAL_EVENT_BLE_DISCOVERY_STOPPED)                          /* NULL */\
140         EVENT(OAL_EVENT_BLE_REMOTE_DEVICE_FOUND)                /* event_ble_scan_result_info */\
141         EVENT(OAL_EVENT_GATTS_SERVICE_ADDED)                /* gatts Service Added */\
142         EVENT(OAL_EVENT_GATTS_INCLUDED_SERVICE_ADDED)       /* gatts Included Service Added */\
143         EVENT(OAL_EVENT_GATTS_SERVICE_STARTED)              /* gatts Service Started */\
144         EVENT(OAL_EVENT_GATTS_SERVICE_STOPED)               /* gatts Service Stoped */\
145         EVENT(OAL_EVENT_GATTS_SERVICE_DELETED)              /* gatts Service Deleted  */\
146         EVENT(OAL_EVENT_GATTS_CHARACTERISTIC_ADDED)         /* gatts Characteristic Added*/\
147         EVENT(OAL_EVENT_GATTS_DESCRIPTOR_ADDED)             /* gatts Descriptor added */\
148         EVENT(OAL_EVENT_GATTS_CONNECTION_COMPLETED)         /* gatts Connection completed */\
149         EVENT(OAL_EVENT_GATTS_DISCONNECTION_COMPLETED)      /* gatts DisConnection completed */\
150         EVENT(OAL_EVENT_GATTS_REQUEST_READ)                 /* gatts Request Read from client */\
151         EVENT(OAL_EVENT_GATTS_REQUEST_WRITE)                /* gatts Request Write from client */\
152         EVENT(OAL_EVENT_GATTS_RESPONSE_CONFIRMED)           /* gatts Response confirmation */\
153         EVENT(OAL_EVENT_GATTS_IND_CONFIRM)                  /* gatts Indiction confirmation from remote client */\
154         EVENT(OAL_EVENT_GATTS_NOTIFICATION)                 /* gatts Notification from remote client */\
155         EVENT(OAL_EVENT_GATTS_MTU_CHANGED)                  /* gatts MTU changed */\
156         EVENT(OAL_EVENT_END)                                /* End of event*/\
157
158
159 #define GENERATE_ENUM(ENUM) ENUM,
160 #define GENERATE_STRING(STRING) #STRING,
161
162 typedef enum EVENT_ENUM {
163         FOREACH_EVENT(GENERATE_ENUM)
164 } oal_event_t;
165
166 #ifdef _OAL_EVENT_DISPATCHER_C_
167 const char *str_event[] = {
168         FOREACH_EVENT(GENERATE_STRING)
169 };
170 #else
171 extern const char *str_event[];
172 #endif
173
174 /*********Datastructures for Local Adapter events ******************/
175 typedef struct {
176         int num;
177         bt_address_t devices[0];
178 } event_device_list_t;
179
180 typedef struct {
181         remote_device_t device_info;
182         uint8_t adv_data[62];
183         int adv_len;
184 } event_ble_dev_found_t;
185
186 typedef struct {
187         remote_device_t device_info;
188 } event_dev_found_t;
189
190 typedef struct {
191         int num;
192         service_uuid_t service_list[0];
193 } event_adapter_services_t;
194
195 typedef struct {
196         remote_device_t device_info;
197         uint8_t adv_data[62];
198         int adv_len;
199 } event_dev_properties_t;
200
201 /*********Datastructures for Remote Device events ******************/
202 typedef struct {
203         bt_address_t address;
204         int num;
205         service_uuid_t service_list[0];
206 } event_dev_services_t;
207
208 typedef struct {
209         remote_device_t device_info;
210         uint32_t pass_key;
211 } event_dev_passkey_t;
212
213 typedef struct {
214         bt_address_t address;
215         oal_service_t service_id;
216 } event_dev_authorize_req_t;
217
218 typedef struct {
219         bt_address_t address;
220         oal_uuid_t uuid;
221 } event_socket_authorize_req_t;
222
223 typedef struct {
224         bt_address_t address;
225         oal_status_t status;
226 } event_dev_trust_t;
227
228 typedef struct {
229         bt_address_t address;
230         oal_status_t status;
231 } event_dev_conn_status_t;
232
233 typedef event_dev_conn_status_t event_dev_bond_failed_t;
234
235 typedef struct {
236         bt_address_t address;
237         unsigned int trust_val;
238 } event_device_trusted_profiles_t;
239
240 typedef struct {
241         bt_address_t address;
242         int link_type;
243         int alert_type;
244         int rssi;
245 } event_dev_rssi_info_t;
246
247 /*********Datastructures for HID callback******************/
248 /* HID :: connection state callback response data */
249 typedef struct {
250         bt_address_t address;
251         oal_status_t status;
252 } event_hid_conn_t;
253
254 /********* Datastructures for Socket event ******************/
255 /* SOCKET:: socket outgoing client connection event data */
256 typedef struct {
257         int fd;                 /**< FD of Outgoing client */
258         int sock_type;          /**< Type of socket */
259         bt_address_t address;   /**< Address of remote server */
260 } event_socket_client_conn_t;
261
262 /*********Datastructures for HDP callback******************/
263 /* HDP: App registration event data */
264 typedef struct {
265         int app_id;
266         oal_status_t status;
267 } event_hdp_app_reg_t;
268
269 /* HDP: Channel connection event data */
270 typedef struct {
271         int fd;
272         int app_id;
273         int channel_id;
274         int ch_type;
275         bt_address_t address;
276 } event_hdp_channel_conn_t;
277
278 typedef struct {
279         int server_inst;
280         oal_uuid_t server_uuid;
281 } event_gatts_register_t;
282
283 typedef struct {
284         int conn_id;
285         int mtu_size;
286 } event_gatts_mtu_changed_t;
287
288 typedef struct {
289         int server_inst;
290 } event_ble_adv_status;
291
292 typedef struct {
293         int server_inst;
294         int status;
295 } event_ble_multiadv_status;
296
297 /*GATT:: connection state callback response data*/
298 typedef struct {
299         int server_inst;
300         int conn_id;
301         bt_address_t address;
302 } event_gatts_conn_t;
303
304 typedef struct {
305         int server_inst;
306         int servic_hndl;
307         oal_status_t status;
308 } event_gatts_srvc_t;
309
310 typedef struct {
311         event_gatts_srvc_t gatt_srvc_stat;
312         oal_gatt_srvc_id_t gatt_srvc_id;
313 } event_gatts_srvc_prm_t;
314
315 typedef struct {
316         event_gatts_srvc_t gatt_srvc_stat;
317         int incl_srvc_hndl;
318 } event_gatts_incld_srvc_t;
319
320 typedef struct {
321         event_gatts_srvc_t gatt_srvc_stat;
322         int descrptr_hndl;
323         oal_uuid_t descrptr_uuid;
324 } event_gatts_srvc_descr_t;
325
326 typedef struct {
327         event_gatts_srvc_t gatt_srvc_stat;
328         int charctr_hndl;
329         oal_uuid_t charctr_uuid;
330 } event_gatts_srvc_charctr_t;
331
332 typedef struct {
333         int conn_id;
334         int trans_id;
335         int attr_handle;
336         int offset;
337 } gatts_trans_attr_t;
338
339 typedef struct {
340         gatts_trans_attr_t attr_trans;
341         bt_address_t address;
342         uint8_t is_long;
343 } event_gatts_srvc_read_attr_t;
344
345 typedef struct {
346         gatts_trans_attr_t attr_trans;
347         int length;
348         bt_address_t address;
349         uint8_t value[OAL_GATT_MAX_ATTR_LEN];
350         uint8_t need_rsp;
351         uint8_t is_prep;
352 } event_gatts_srvc_write_attr_t;
353
354 typedef struct {
355         int hndl;
356         oal_status_t status;
357 } event_gatts_respons_t;
358
359 typedef struct {
360         int conn_id;
361         int trans_id;
362         int attr_handle;
363         bt_address_t address;
364 } event_gatts_ind_cnfrm_t;
365
366 typedef struct {
367         int conn_id;
368         int trans_id;
369         int attr_handle;
370         uint8_t notify;
371         bt_address_t address;
372 } event_gatts_notif_t;
373
374 /* BLE: Scan Result Callback data */
375 typedef struct {
376         int rssi;
377         bt_address_t address;
378         uint8_t adv_data[BLE_ADV_DATA_LENGTH];
379 } event_ble_scan_result_info;
380
381 typedef struct {
382         oal_status_t status;
383         int client_if;
384         oal_uuid_t client_uuid;
385 } event_gattc_register_t;
386
387 /********* AVRCP CT role callback data structures ******************/
388 #define MEDIA_ATTIRBUTE_STRING_LENGTH 100
389 typedef struct {
390         uint8_t title_info[MEDIA_ATTIRBUTE_STRING_LENGTH];
391         uint8_t artist_info[MEDIA_ATTIRBUTE_STRING_LENGTH];
392         uint8_t album_info[MEDIA_ATTIRBUTE_STRING_LENGTH];
393         uint64_t playing_time;
394         uint8_t genre_info[MEDIA_ATTIRBUTE_STRING_LENGTH];
395         uint64_t total_track;
396         uint64_t track_number;
397 } event_avrcp_ct_media_info_t;
398
399 typedef enum {
400         OAL_PLAY_STATUS_STOPPED = 0x00,
401         OAL_PLAY_STATUS_PLAYING = 0x01,
402         OAL_PLAY_STATUS_PAUSED = 0x02,
403         OAL_PLAY_STATUS_FWD_SEEK = 0x03,
404         OAL_PLAY_STATUS_REV_SEEK = 0x04,
405         OAL_PLAY_STATUS_ERROR = 0xFF,
406 } notif_event_avrcp_ct_play_status_t;
407
408 #define BTRCC_UID_SIZE  8
409 typedef uint8_t notif_event_avrcp_ct_track_id[BTRCC_UID_SIZE];
410
411 typedef uint32_t notif_event_avrcp_ct_song_pos;
412
413 typedef union {
414         notif_event_avrcp_ct_play_status_t play_status;
415         notif_event_avrcp_ct_track_id track_id;
416         notif_event_avrcp_ct_song_pos song_pos;
417 } event_notif_avrcp_ct_notif_info_t;
418
419 typedef struct {
420         uint8_t song_len;
421         uint8_t song_pos;
422         notif_event_avrcp_ct_play_status_t play_status;
423 } event_avrcp_ct_play_status_t;
424
425 #ifdef __cplusplus
426 }
427 #endif /* __cplusplus */
428 #endif /*_OAL_EVENT_H_*/