[ug-wifi-direct]Sync with Tizen 2.4
[apps/native/ug-wifi-direct.git] / ug-wifidirect / include / wfd_ug.h
1 /*
2 *  WiFi-Direct UG
3 *
4 * Copyright 2012  Samsung Electronics Co., Ltd
5
6 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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
21 #ifndef __WFD_UG_H__
22 #define __WFD_UG_H__
23
24 #include <dlog.h>
25 #include <notification.h>
26 #include <ui-gadget-module.h>
27
28 #include <tethering.h>
29
30 #include <wifi-direct.h>
31 #include <efl-assist/efl_assist.h>
32
33 #include <glib-object.h>
34 #include <gio/gio.h>
35 #include <glib.h>
36 #include <assert.h>
37
38 #define PACKAGE "ug-setting-wifidirect-efl"
39 #define LOCALEDIR "/usr/share/locale"
40 #define COLOR_TABLE "/usr/apps/setting-wifidirect-efl/shared/res/tables/setting-wifidirect-efl_ChangeableColorTable.xml"
41 #define FONT_TABLE "/usr/apps/setting-wifidirect-efl/shared/res/tables/setting-wifidirect-efl_FontInfoTable.xml"
42
43 #define DIRECT_TAG  "wfd_ug"
44 /* TODO:: To change the log level as LOG_INFO */
45 #define DBG(log_level, format, args...) \
46         LOG(LOG_ERROR, DIRECT_TAG, "[%s()][%d] " format, __FUNCTION__, __LINE__, ##args)
47 #define DBG_SECURE(log_level, format, args...) \
48         SECURE_LOG(LOG_ERROR, DIRECT_TAG, "[%s()][%d] " format, __FUNCTION__, __LINE__, ##args)
49
50 #define MAC2SECSTR(a) (a)[0], (a)[4], (a)[5]
51 #define MACSECSTR "%02x:%02x:%02x"
52 #if 0
53 #define IP2SECSTR(a) (a)[0], (a)[3]
54 #define IPSECSTR "%d..%d"
55 #endif
56
57 #define __FUNC_ENTER__  DBG(LOG_INFO, "+\n")
58 #define __FUNC_EXIT__   DBG(LOG_INFO, "-\n")
59 #if 0
60 #define __FUNC_ENTER__
61 #define __FUNC_EXIT__
62 #endif
63
64 #define VCONF_WFD_APNAME                        "db/setting/device_name"
65
66 #define assertm_if(expr, fmt, arg...) do { \
67         if (expr) { \
68           DBG(LOG_VERBOSE, " ##(%s) -> %s() assert!!## "fmt, #expr, __FUNCTION__, ##arg); \
69                  assert(1); \
70         } \
71 } while (0)
72
73 #define WFD_IF_DEL_OBJ(obj) \
74                 do { \
75                         if(obj) { \
76                                 evas_object_del(obj); \
77                                 obj = NULL; \
78                         } \
79                 } while (0)
80
81 #define WFD_IF_DEL_ITEM(obj) \
82                 do { \
83                         if(obj) { \
84                                 elm_object_item_del(obj); \
85                                 obj = NULL; \
86                         } \
87                 } while (0)
88
89 #define WFD_RET_IF(expr, fmt, args...) \
90                 do { \
91                         if(expr) { \
92                                 DBG(LOG_ERROR, "[%s] Return, message "fmt, #expr, ##args );\
93                                 return; \
94                         } \
95                 } while (0)
96
97 #define WFD_RETV_IF(expr, val, fmt, args...) \
98                 do { \
99                         if(expr) { \
100                                 DBG(LOG_ERROR,"[%s] Return value, message "fmt, #expr, ##args );\
101                                 return (val); \
102                         } \
103                 } while (0)
104
105 #define WFD_IF_FREE_MEM(mem) \
106                 do { \
107                         if(mem) { \
108                                 free(mem); \
109                                 mem = NULL; \
110                         } \
111                 } while (0)
112
113 #define AP_NAME_LENGTH_MAX              32
114 #define AP_PASSWORD_LENGTH_MAX  64
115 #define AP_PASSWORD_LENGTH_MIN  8
116 #define AP_REJECT_CHAR_LIST             "=,"
117
118 #define DEFAULT_DEV_NAME        "ZEQ"
119 #define MAC_LENGTH  18
120 #define SSID_LENGTH 32
121 #define MAX_CONNECTED_PEER_NUM 7
122 #define MAX_PEER_NUM 10
123 #define MAX_POPUP_TEXT_SIZE 256
124 #define MAX_DISPLAY_TIME_OUT 3
125 #define MAX_NO_ACTION_TIME_OUT  300            /*5min*/
126 #define MAX_SCAN_TIME_OUT 0
127
128 #define GENLIST_HEADER_POS 1
129 #define SR_CHECKBOX_ON_MSG "on/off button on"
130 #define SR_CHECKBOX_OFF_MSG "on/off button off"
131 #define SR_BUTTON_MSG "multiple connect button"
132
133 #define _(s)        dgettext(PACKAGE, s)
134 #define N_(s)      dgettext_noop(s)
135 #define S_(s)      dgettext("sys_string", s)
136
137 #define WFD_GLOBALIZATION_STR_LENGTH 256
138
139 typedef enum {
140         WFD_MULTI_CONNECT_MODE_NONE,
141         WFD_MULTI_CONNECT_MODE_IN_PROGRESS,
142         WFD_MULTI_CONNECT_MODE_COMPLETED,
143 } wfd_multi_connect_mode_e;
144
145 typedef enum {
146         PEER_CONN_STATUS_DISCONNECTED,
147         PEER_CONN_STATUS_DISCONNECTING,
148         PEER_CONN_STATUS_CONNECTING = PEER_CONN_STATUS_DISCONNECTING,
149         PEER_CONN_STATUS_CONNECTED,
150         PEER_CONN_STATUS_FAILED_TO_CONNECT,
151         PEER_CONN_STATUS_WAIT_FOR_CONNECT,
152 } conn_status_e;
153
154 typedef enum {
155         WIFI_DIRECT_DISCOVERY_NONE,
156         WIFI_DIRECT_DISCOVERY_SOCIAL_CHANNEL_START,
157         WIFI_DIRECT_DISCOVERY_FULL_SCAN_START,
158         WIFI_DIRECT_DISCOVERY_STOPPED,
159         WIFI_DIRECT_DISCOVERY_BACKGROUND,
160 } discovery_status_e;
161
162
163 typedef struct device_type_s_{
164         char ssid[SSID_LENGTH];
165         unsigned int category;
166         unsigned int sub_category;
167         char mac_addr[MAC_LENGTH];
168         char if_addr[MAC_LENGTH];
169         conn_status_e conn_status;
170         bool is_group_owner;  /** Is an active P2P Group Owner */
171         bool is_persistent_group_owner;  /** Is a stored Persistent GO */
172         bool is_connected;  /** Is peer connected*/
173         bool is_alive;
174         bool dev_sel_state;
175         Elm_Object_Item *gl_item;
176         struct device_type_s_ *next;
177 } device_type_s;
178
179 struct ug_data {
180         Evas_Object *base;
181         ui_gadget_h ug;
182
183         Evas_Object *win;
184         Evas_Object *bg;
185         Evas_Object *layout;
186         Evas_Object *naviframe;
187         Elm_Object_Item *navi_item;
188         Elm_Object_Item *multi_navi_item;
189         Elm_Object_Item *head;
190         Evas_Object *genlist;
191         Evas_Object *multiconn_view_genlist;
192         Evas_Object *multiconn_layout;
193         Evas_Object *popup;
194         Evas_Object *act_popup;
195         Evas_Object *warn_popup;
196         Evas_Object *rename_popup;
197         Evas_Object *ctxpopup;
198         Evas_Object *scan_btn;
199         Evas_Object *disconnect_btn;
200         Evas_Object *toolbar;
201         Evas_Object *rename_entry;
202         Evas_Object *rename_button;
203
204 #ifdef WFD_ON_OFF_GENLIST
205         Evas_Object *on_off_check;
206 #endif
207
208         Evas_Object *scan_toolbar;
209         Evas_Object *multiconn_scan_stop_btn;
210         Evas_Object *multiconn_conn_btn;
211         Evas_Object *select_all_icon;
212
213
214
215         Elm_Object_Item *multi_connect_toolbar_item;
216         Elm_Object_Item *multi_view_connect_toolbar_item;
217
218         Elm_Object_Item *select_all_view_genlist;
219 #ifdef WFD_ON_OFF_GENLIST
220         Elm_Object_Item *item_wifi_onoff;
221 #endif
222         Elm_Object_Item *device_name_item;
223         Elm_Genlist_Item_Class *rename_entry_itc;
224         Elm_Genlist_Item_Class *rename_desc_itc;
225         Elm_Object_Item *multi_connect_sep_item;
226
227         Elm_Object_Item *nodevice_title_item;
228         Elm_Object_Item *nodevice_item;
229
230         Elm_Object_Item *conn_wfd_item;
231         Elm_Object_Item *conn_failed_wfd_item;
232         Elm_Object_Item *avlbl_wfd_item;
233         Elm_Object_Item *busy_wfd_item;
234         Elm_Object_Item *multi_connect_wfd_item;
235
236         Elm_Object_Item *mcview_title_item;
237         Elm_Object_Item *mcview_nodevice_item;
238         Elm_Object_Item *more_btn_multiconnect_item;
239
240         Evas_Object *back_btn;
241
242         // Notify
243         Evas_Object *notify;
244         Evas_Object *notify_layout;
245
246         int head_text_mode;
247
248         char *mac_addr_connecting;
249         char *mac_addr_req;
250
251         //Connection is incoming or not
252         bool is_conn_incoming;
253
254
255         // title mode of device list
256         int title_content_mode;
257
258         // Raw peer data
259         device_type_s raw_connected_peers[MAX_CONNECTED_PEER_NUM];
260         int raw_connected_peer_cnt;
261         GList *raw_discovered_peer_list;
262         int raw_discovered_peer_cnt;
263
264         // Peer data in the Genlist
265         int gl_connected_peer_cnt;
266         device_type_s *gl_conn_peers_start;
267
268         int gl_connected_failed_peer_cnt;
269         device_type_s *gl_failed_peers_start;
270
271         int gl_available_peer_cnt;
272         device_type_s *gl_avlb_peers_start;
273
274         int gl_busy_peer_cnt;
275         device_type_s *gl_busy_peers_start;
276
277         device_type_s raw_multi_selected_peers[MAX_PEER_NUM];
278         int raw_multi_selected_peer_cnt;
279
280         int gl_multi_connect_peer_cnt;
281         device_type_s *gl_mul_conn_peers_start;
282
283         // My status
284         bool I_am_group_owner;
285         bool I_am_connected;
286
287         // Following variables are used at the Multi connect view.
288         wfd_multi_connect_mode_e multi_connect_mode;
289         device_type_s *multi_conn_dev_list_start;
290         int gl_available_dev_cnt_at_multiconn_view;
291         int g_source_multi_connect_next;
292
293 #ifdef WFD_ON_OFF_GENLIST
294         int wfd_onoff;
295 #endif
296         wifi_direct_state_e wfd_status;
297         char *dev_name;
298         char *dev_pass;
299
300         // For connect failed peers
301         int last_display_time;
302         Ecore_Timer *display_timer;
303
304         // Tethering
305         bool is_hotspot_off;
306         bool is_hotspot_locally_disabled;
307         tethering_h hotspot_handle;
308
309         // wfds service
310         char *wfds;
311
312         // Device filter
313         int device_filter;
314
315         // Whether support auto exit after successed connection
316         bool is_auto_exit;
317
318         //Whether support multi connection
319         bool is_multi_connect;
320         bool is_select_all_checked;
321
322         //view type for search
323         char *view_type;
324
325         //Title of UG
326         char *title;
327
328         // The ip address of connected peer
329         char *peer_ip_address;
330
331         // The service name that supported WFDSP
332         char *service_name;
333
334         // Whether initialize wfd-namager ok
335         bool is_init_ok;
336
337         //timer for deleting progress bar
338         int timer_stop_progress_bar;
339
340         //timer for multi connect reset
341         int timer_multi_reset;
342
343         //if all the items are selected or not
344         bool is_multi_check_all_selected;
345
346         //timer for remove not alive peer
347         int timer_delete_not_alive_peer;
348
349         //wifi direct discovery status
350         int wfd_discovery_status;
351
352         bool is_paused;
353
354 #ifdef WFD_DBUS_LAUNCH
355         GCancellable *dbus_cancellable;
356         GDBusConnection *conn;
357 #endif
358 #if defined(EA)
359         Ea_Theme_Color_Table *color_table;
360         Ea_Theme_Font_Table *font_table;
361 #endif
362 };
363
364 extern Elm_Gen_Item_Class device_name_title_itc;
365 #ifdef WFD_ON_OFF_GENLIST
366 extern Elm_Gen_Item_Class wfd_onoff_itc;
367 #endif
368 extern Elm_Gen_Item_Class device_name_itc;
369 extern Elm_Gen_Item_Class title_itc;
370 extern Elm_Gen_Item_Class multi_view_title_itc;
371 extern Elm_Gen_Item_Class peer_itc;
372 extern Elm_Gen_Item_Class title_no_device_itc;
373 extern Elm_Gen_Item_Class noitem_itc;
374 extern Elm_Gen_Item_Class title_available_itc;
375
376 extern Elm_Gen_Item_Class title_conn_itc;
377 extern Elm_Gen_Item_Class peer_conn_itc;
378
379 extern Elm_Gen_Item_Class title_busy_itc;
380 extern Elm_Gen_Item_Class peer_busy_itc;
381
382 extern Elm_Gen_Item_Class title_multi_connect_itc;
383 extern Elm_Gen_Item_Class peer_multi_connect_itc;
384 extern Elm_Gen_Item_Class select_all_multi_connect_itc;
385
386 extern Elm_Gen_Item_Class title_conn_failed_itc;
387 extern Elm_Gen_Item_Class peer_conn_failed_itc;
388
389 /**
390  *      This function let the ug destroy the ug
391  *      @return   void
392  *      @param[in] data the pointer to the main data structure
393  */
394 void wfd_destroy_ug(void *data);
395
396 /**
397  *      This function is called when ON/OFF button is turned ON/OFF
398  *      @return   void
399  *      @param[in] data the pointer to the main data structure
400  *      @param[in] object
401  *      @param[in] event
402  */
403 void _onoff_changed_cb(void *data, Evas_Object *obj, void *event_info);
404 void toolbar_language_changed(void *data, Evas_Object *obj, void *event_info);
405 void ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
406 void wfd_free_nodivice_item(struct ug_data *ugd);
407 void discover_cb(int error_code, wifi_direct_discovery_state_e discovery_state, void *user_data);
408
409
410 #endif  /* __WFD_UG_H__ */