2 * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 * @brief Vehicles Sample APP
11 * Vehicles information is displayed.
16 #include <Elementary.h>
19 #include <dbus/dbus.h>
25 #include "ico_dbus_amb_efl.h"
27 /*============================================================================*/
28 /* Define fixed parameters */
29 /*============================================================================*/
30 #define STATUS_BAR_HEIGHT (64)
31 #define CTRL_BAR_HEIGHT (128)
32 #define BAR_HEIGHT (STATUS_BAR_HEIGHT + CTRL_BAR_HEIGHT)
33 #define WIDTH (1080) /* Base Background width */
34 #define HEIGHT (1920 - BAR_HEIGHT) /* Base Background height */
49 #define FONT_FAMILY (char *)"Sans" /* Mono, Sans, Serif */
52 #define TEXT_BUTTON (char *)"button"
53 #define TEXT_LIST_ITEM (char *)"list_item"
54 #define TEXT_LABEL (char *)"label"
56 /* max size of vehicle information */
57 #define MAX_PARA_NUM 32
59 /* vehicle information ID */
60 #define VEHICLESPEED 0
61 #define ACCELERATIONX 1
62 #define SHIFTPOSITION 2
66 #define GEARPOSITION 6
70 #define WHEELBRAKEPRESSURE 10
71 #define LEFTTURNLIGHT 11
72 #define RIGHTTURNLIGHT 12
73 #define BRAKESIGNAL 13
74 #define ACCELERATIONY 14
75 #define ACCELERATIONZ 15
76 #define EXTERIORBRIGHTNESS 16
78 #define ENGINECOOLANTTEMPERATURE 18
79 #define STEERINGWHEELANGLE 19
81 #define PARKINGLIGHT 21
83 /* maximum categories */
84 #define MAX_CATEGORY_NUM 8
86 /* vehicle information Parameter Category */
87 #define DRIVINGSAFETY 0
88 #define ELECTRICVEHICLE 1
92 #define PERSONALIZATION 5
93 #define RUNNINGSTATUS 6
96 /* Definition of files */
97 #define BASE_DIR "/usr/apps/org.tizen.ico.app-vicsample"
98 #define IMAGE_DIR BASE_DIR"/res/images"
99 #define CONFIG_FILE BASE_DIR"/res/vicsample_config.txt"
100 #define BG_IMAGE_FILE IMAGE_DIR"/vicinfo_bg.png"
103 #define MODULE_NAME "org.tizen.ico.app-vicsample"
105 #define DMY_DATA "000000000000000"
106 #define DIGIT_NUM_OVER_DATA "############"
107 #define MAX_DRAW_VAL_LEM 15
108 #define MAX_NAME_LEM 32
110 /*============================================================================*/
111 /* Define data types */
112 /*============================================================================*/
120 char name[MAX_NAME_LEM];
121 char objpath_name[MAX_NAME_LEM];
122 char property_name[MAX_NAME_LEM];
125 struct vic_key_data_t
130 char name[MAX_NAME_LEM];
133 struct vic_category_data_t
136 char name[MAX_NAME_LEM];
141 Evas_Object *win; //main window
145 Evas_Object *ctg_bx2;
146 Evas_Object *ctg_btn[MAX_CATEGORY_NUM];
147 Evas_Object *vic_ini_li;
148 Evas_Object *vic_li[MAX_CATEGORY_NUM];
149 Evas_Object *vic_val_text[MAX_PARA_NUM];
150 Evas_Object *vic_val_dmy_text[MAX_CATEGORY_NUM];
153 /*============================================================================*/
154 /* Function prototype for static(internal) functions */
155 /*============================================================================*/
156 static void on_ctg_mousedown(void *data, Evas_Object *obj, void *event_info);
157 static void amb_get_property_cb(const char *objectname, const char *property,
159 union dbus_value_variant value,
161 static void amb_subscribe_property_cb(const char *objectname,
162 const char *property, dbus_type type,
163 union dbus_value_variant value,
164 int sequence, struct timeval tv,
166 static void set_vic_text_data(Evas_Object *obj, const char *text);
167 static void set_vic_data(union dbus_value_variant value, void *user_data);
168 static int amb_get_property(int key);
169 static int amb_subscribe_property(int key);
170 static Eina_Bool amb_init(void);
171 static int get_config(void);
172 static void win_del(void *data, Evas_Object *obj, void *event_info);
173 static void elmListCreate(void);
174 static void winCreate(void);
175 static Evas_Object *create_win(const char *name);
177 /*============================================================================*/
178 /* Tables and Valiables */
179 /*============================================================================*/
180 static struct vic_data_t vic_data[MAX_PARA_NUM];
181 static int property_num = 0;
182 static int ListDispSts = -1;
183 static struct appdata_t Ad;
185 const struct vic_category_data_t vic_category_data[MAX_CATEGORY_NUM] = {
186 {DRIVINGSAFETY, "Driving safety"},
187 {ELECTRICVEHICLE, "Electric Vehicle"},
188 {ENVIRONMENT, "Environment"},
189 {MAINTENANCE, "Maintenance"},
190 {PARKING, "Parking"},
191 {PERSONALIZATION, "Personalization"},
192 {RUNNINGSTATUS, "Running Status"},
193 {VEHICLEINFO, "Vehicle Info"}
196 const struct vic_key_data_t vic_key_data[] = {
197 {VEHICLESPEED, RUNNINGSTATUS, DBUS_TYPE_UINT16, "VehicleSpeed"},
198 {ACCELERATIONX, RUNNINGSTATUS, DBUS_TYPE_UINT16, "AccelerationX"},
199 {SHIFTPOSITION, RUNNINGSTATUS, DBUS_TYPE_INT32, "ShiftPosition"},
200 {ENGINESPEED, RUNNINGSTATUS, DBUS_TYPE_UINT16, "EngineSpeed"},
201 {LATITUDE, RUNNINGSTATUS, DBUS_TYPE_DOUBLE, "Latitude"},
202 {ALTITUDE, RUNNINGSTATUS, DBUS_TYPE_DOUBLE, "Altitude"},
203 {GEARPOSITION, RUNNINGSTATUS, DBUS_TYPE_INT32, "GearPosition"},
204 {LONGITUDE, RUNNINGSTATUS, DBUS_TYPE_DOUBLE, "Longitude"},
205 {MODE, RUNNINGSTATUS, DBUS_TYPE_INT32, "Mode"},
206 {DIRECTION, RUNNINGSTATUS, DBUS_TYPE_UINT16, "Direction"},
207 {WHEELBRAKEPRESSURE, RUNNINGSTATUS, DBUS_TYPE_UINT16,
208 "WheelBrakePressure"},
209 {LEFTTURNLIGHT, RUNNINGSTATUS, DBUS_TYPE_BOOLEAN, "LeftTurnLight"},
210 {RIGHTTURNLIGHT, RUNNINGSTATUS, DBUS_TYPE_BOOLEAN, "RightTurnLight"},
211 {BRAKESIGNAL, RUNNINGSTATUS, DBUS_TYPE_BOOLEAN, "BrakeSignal"},
212 {ACCELERATIONY, RUNNINGSTATUS, DBUS_TYPE_UINT16, "AccelerationY"},
213 {ACCELERATIONZ, RUNNINGSTATUS, DBUS_TYPE_UINT16, "AccelerationZ"},
214 {EXTERIORBRIGHTNESS, ENVIRONMENT, DBUS_TYPE_UINT16, "ExteriorBrightness"},
215 {TURNSIGNAL, RUNNINGSTATUS, DBUS_TYPE_INT32, "TurnSignal"},
216 {ENGINECOOLANTTEMPERATURE, RUNNINGSTATUS, DBUS_TYPE_INT32,
217 "EngineCoolantTemperature"},
218 {STEERINGWHEELANGLE, RUNNINGSTATUS, DBUS_TYPE_UINT16,
219 "SteeringWheelAngle"},
220 {HEADLIGHT, RUNNINGSTATUS, DBUS_TYPE_BOOLEAN, "HeadLight"},
221 {PARKINGLIGHT, RUNNINGSTATUS, DBUS_TYPE_BOOLEAN, "ParkingLight"},
225 /*============================================================================*/
227 /*============================================================================*/
229 * @brief on_ctg_mousedown
231 static void on_ctg_mousedown(void *data, Evas_Object *obj, void *event_info)
233 ICO_DBG("on_ctg_mousedown Enter");
237 category = *((int *) data);
240 if ((category != -1) && (category != ListDispSts)) {
241 if (ListDispSts != -1) {
242 evas_object_color_set(Ad.ctg_btn[ListDispSts], 255, 255, 255,
244 evas_object_hide(Ad.vic_li[ListDispSts]);
247 evas_object_hide(Ad.vic_ini_li);
248 elm_list_clear(Ad.vic_ini_li);
250 evas_object_color_set(Ad.ctg_btn[category], 0, 255, 255, 255);
251 elm_list_go(Ad.vic_li[category]);
252 evas_object_show(Ad.vic_li[category]);
253 ListDispSts = category;
256 ICO_DBG("on_ctg_mousedown Leave");
261 * @brief amb_get_property_cb
263 static void amb_get_property_cb(const char *objectname, const char *property,
265 union dbus_value_variant value,
268 ICO_DBG("amb_get_property_cb Enter");
270 if (user_data == NULL) {
271 ICO_ERR("No user data");
275 set_vic_data(value, user_data);
277 ICO_DBG("amb_get_property_cb Leave");
282 * @brief amb_subscribe_property_cb
284 static void amb_subscribe_property_cb(const char *objectname,
285 const char *property, dbus_type type,
286 union dbus_value_variant value,
287 int sequence, struct timeval tv,
290 ICO_DBG("amb_subscribe_property_cb Enter");
292 if (user_data == NULL) {
293 ICO_ERR("No user data");
297 set_vic_data(value, user_data);
299 ICO_DBG("amb_subscribe_property_cb Leave");
304 * @brief set_vic_text_data
306 static void set_vic_text_data(Evas_Object *obj, const char *text)
308 ICO_PRF("CHG_VIC_INF set_vic_text_data Enter");
311 ICO_ERR("Parameter NG obj NULL");
316 ICO_ERR("Parameter NG text NULL");
320 if (strlen(text) <= MAX_DRAW_VAL_LEM) {
321 elm_object_text_set(obj, text);
324 elm_object_text_set(obj, DIGIT_NUM_OVER_DATA);
327 ICO_PRF("CHG_VIC_INF set_vic_text_data Leave");
332 * @brief set_vic_data
334 static void set_vic_data(union dbus_value_variant value, void *user_data)
336 ICO_PRF("CHG_VIC_INF set_vic_data Enter");
341 if (user_data == NULL) {
342 ICO_ERR("No user data");
346 idx = *((int *) (user_data));
348 if (idx < 0 || idx > property_num) {
349 ICO_ERR("Inaccurate user data :idx = %d", idx);
353 switch (vic_data[idx].property) {
358 case ENGINECOOLANTTEMPERATURE:
359 ICO_PRF("CHG_VIC_INF %s(D-bus I/F Result) = %d", vic_data[idx].name,
361 sprintf(vic_str, "%d", value.i32val);
362 set_vic_text_data(Ad.vic_val_text[idx], vic_str);
371 case WHEELBRAKEPRESSURE:
372 case EXTERIORBRIGHTNESS:
373 case STEERINGWHEELANGLE:
374 ICO_PRF("CHG_VIC_INF %s(D-bus I/F Result) = %d", vic_data[idx].name,
376 sprintf(vic_str, "%d", value.ui16val);
377 set_vic_text_data(Ad.vic_val_text[idx], vic_str);
381 // ICO_PRF("CHG_VIC_INF %s(D-bus I/F Result) = %d", vic_data[idx].name,
383 // sprintf(vic_str, "%d", value.yval);
384 // set_vic_text_data(Ad.vic_val_text[idx], vic_str);
390 ICO_PRF("CHG_VIC_INF %s(D-bus I/F Result) = %f", vic_data[idx].name,
392 sprintf(vic_str, "%f", value.dval);
393 set_vic_text_data(Ad.vic_val_text[idx], vic_str);
401 ICO_PRF("CHG_VIC_INF %s(D-bus I/F Result) = %d", vic_data[idx].name,
403 if (value.bval == TRUE) {
404 sprintf(vic_str, "%s", "true");
407 sprintf(vic_str, "%s", "false");
409 set_vic_text_data(Ad.vic_val_text[idx], vic_str);
413 ICO_ERR("Err no property : vic_data[%d]property = %d", idx,
414 vic_data[idx].property);
418 ICO_PRF("CHG_VIC_INF set_vic_data Leave");
423 * @brief amb_get_property
425 static int amb_get_property(int key)
427 ICO_DBG("amb_get_property Enter");
431 result = ico_dbus_amb_get(vic_data[key].objpath_name,
432 vic_data[key].property_name,
436 (void *) (&(vic_data[key].idx))
440 ICO_ERR("Can't make dbus get message.");
444 ICO_DBG("amb_get_property Leave");
449 * @brief amb_subscribe_property
451 static int amb_subscribe_property(int key)
453 ICO_DBG("amb_subscribe_property Enter");
457 result = ico_dbus_amb_subscribe(vic_data[key].objpath_name,
458 vic_data[key].property_name,
461 amb_subscribe_property_cb,
462 (void *) (&(vic_data[key].idx))
466 ICO_ERR("Can't make dbus subscribe message.");
470 ICO_DBG("amb_subscribe_property Leave");
477 static Eina_Bool amb_init(void)
479 ICO_DBG("amb_init Enter");
484 result = ico_dbus_amb_start();
486 ICO_ERR("Can't get dbus bus.");
490 /* First get properties */
491 for (i = 0; i < property_num; i++) {
492 result = amb_get_property(i);
494 ICO_ERR("amb_get_property : get ng [%s]", vic_data[i].name);
498 /* Signal registration */
499 for (i = 0; i < property_num; i++) {
500 result = amb_subscribe_property(i);
502 ICO_ERR("amb_subscribe_property : subscribe ng [%s]",
507 ICO_DBG("amb_init Leave");
514 /* Read configuration file */
515 static int get_config(void)
517 ICO_DBG("get_config Enter");
527 fp = fopen(CONFIG_FILE, "r");
529 ICO_ERR("File open error");
533 for (m = 0; k < MAX_PARA_NUM; m++) {
534 if (fgets(buff, sizeof(buff) - 2, fp) == NULL) {
535 ICO_DBG("vicsample_config.txt The end of data reading");
539 tp = strtok(buff, clm);
541 ICO_DBG("vicsample_config.txt Line:%d Comment out Null line",
547 ICO_DBG("vicsample_config.txt Line:%d Comment out '#'Discovery",
552 for (j = 0; vic_key_data[j].id != -1; j++) {
553 if (strcmp(tp, vic_key_data[j].name) == 0) {
555 vic_data[k].property = vic_key_data[j].id;
556 vic_data[k].category = vic_key_data[j].category;
557 vic_data[k].type = vic_key_data[j].type;
558 strcpy(vic_data[k].name, tp);
559 strcpy(vic_data[k].objpath_name, strtok(NULL, clm));
560 strcpy(vic_data[k].property_name, strtok(NULL, clm));
561 vic_data[k].zone = atoi(strtok(NULL, clm));
563 ICO_DBG("vic_data[%d].idx=%d", k, vic_data[k].idx);
564 ICO_DBG("vic_data[%d].property=%d", k, vic_data[k].property);
565 ICO_DBG("vic_data[%d].category=%d", k, vic_data[k].category);
566 ICO_DBG("vic_data[%d].type=%d", k, vic_data[k].type);
567 ICO_DBG("vic_data[%d].zone=%d", k, vic_data[k].zone);
568 ICO_DBG("vic_data[%d].name=%s", k, vic_data[k].name);
569 ICO_DBG("vic_data[%d].objpath_name=%s", k,
570 vic_data[k].objpath_name);
571 ICO_DBG("vic_data[%d].property_name=%s", k,
572 vic_data[k].property_name);
578 if (vic_key_data[j].id == -1) {
579 ICO_ERR("Err vicsample_config.txt Line:%d Unregistered"
580 " parameter name", m + 1);
587 if (property_num == 0) {
588 ICO_ERR("vicsample_config.txt No valid data");
592 ICO_DBG("get_config Leave");
599 static void win_del(void *data, Evas_Object *obj, void *event_info)
601 ICO_DBG("win_del Enter");
605 ICO_DBG("win_del Leave");
610 * @brief app_terminate
612 static void app_terminate(void *data)
614 ICO_DBG("app_terminate Enter");
616 // Release all resources
621 evas_object_del(Ad.win);
626 evas_object_del(Ad.bg);
631 evas_object_del(Ad.ctg_bx);
636 evas_object_del(Ad.ctg_bx2);
640 for (i = 0; i < MAX_CATEGORY_NUM; i++) {
642 evas_object_del(Ad.ctg_btn[i]);
643 Ad.ctg_btn[i] = NULL;
647 evas_object_del(Ad.vic_li[i]);
651 if (Ad.vic_val_dmy_text[i]) {
652 evas_object_del(Ad.vic_val_dmy_text[i]);
653 Ad.vic_val_dmy_text[i] = NULL;
658 evas_object_del(Ad.vic_ini_li);
659 Ad.vic_ini_li = NULL;
662 for (i = 0; i < MAX_PARA_NUM; i++) {
663 if (Ad.vic_val_text[i]) {
664 evas_object_del(Ad.vic_val_text[i]);
665 Ad.vic_val_text[i] = NULL;
669 for (i = 0; i < property_num; i++) {
671 ico_dbus_amb_unsubscribe(vic_data[i].objpath_name,
672 vic_data[i].property_name,
677 ICO_ERR("Valid vehicle information name is not entered.");
679 else if (result == -2) {
680 ICO_ERR("property is not subscribe.");
684 result = ico_dbus_amb_end();
686 ICO_DBG("app_terminate Leave");
691 * @brief elmListCreate
693 static void elmListCreate(void)
695 ICO_DBG("elmListCreate Enter");
699 if (NULL == Ad.win) {
700 ICO_ERR("main window is un-creating.");
704 for (i = 0; i < property_num; i++) {
705 Ad.vic_val_text[i] = elm_label_add(Ad.win);
706 elm_list_item_append(Ad.vic_li[vic_data[i].category],
707 vic_data[i].name, NULL, Ad.vic_val_text[i], NULL,
712 for (i = 0; i < MAX_CATEGORY_NUM; i++) {
713 Ad.vic_val_dmy_text[i] = elm_label_add(Ad.win);
714 elm_object_text_set(Ad.vic_val_dmy_text[i], DMY_DATA);
715 evas_object_color_set(Ad.vic_val_dmy_text[i], 255, 255, 255, 0);
716 elm_list_item_append(Ad.vic_li[i], NULL, NULL, Ad.vic_val_dmy_text[i],
720 ICO_DBG("elmListCreate Leave");
727 static void winCreate(void)
729 ICO_DBG("winCreate Enter");
733 if (NULL == Ad.win) {
734 ICO_ERR("main window is un-creating.");
738 Ad.ctg_bx = elm_box_add(Ad.win);
739 evas_object_resize(Ad.ctg_bx, CTG_BX_W, CTG_BX_H);
740 evas_object_move(Ad.ctg_bx, CTG_BX_X, CTG_BX_Y);
741 evas_object_show(Ad.ctg_bx);
743 Ad.ctg_bx2 = elm_box_add(Ad.win);
744 evas_object_resize(Ad.ctg_bx2, CTG_BX_W, CTG_BX_H);
745 evas_object_move(Ad.ctg_bx2, (CTG_BX_X + CTG_BX_W), CTG_BX_Y);
746 evas_object_show(Ad.ctg_bx2);
748 for (i = 0; i < MAX_CATEGORY_NUM; i++) {
749 /* category buttn create */
750 Ad.ctg_btn[i] = elm_button_add(Ad.win);
751 elm_object_text_set(Ad.ctg_btn[i], vic_category_data[i].name);
752 if (i < (MAX_CATEGORY_NUM / 2)) {
753 elm_box_pack_end(Ad.ctg_bx, Ad.ctg_btn[i]);
756 elm_box_pack_end(Ad.ctg_bx2, Ad.ctg_btn[i]);
759 /* The present category to support "Running Status" "Eenvironment" */
760 if ((vic_category_data[i].category == RUNNINGSTATUS)
761 || (vic_category_data[i].category == ENVIRONMENT)) {
762 evas_object_smart_callback_add(Ad.ctg_btn[i], "clicked",
764 &(vic_category_data[i].category));
767 /* Unsupported Grayout */
768 evas_object_color_set(Ad.ctg_btn[i], 128, 128, 128, 255);
771 evas_object_size_hint_weight_set(Ad.ctg_btn[i], EVAS_HINT_EXPAND, 0);
772 evas_object_size_hint_align_set(Ad.ctg_btn[i], EVAS_HINT_FILL, 0);
773 evas_object_show(Ad.ctg_btn[i]);
776 Ad.vic_li[i] = elm_list_add(Ad.win);
777 elm_list_select_mode_set(Ad.vic_li[i], ELM_OBJECT_SELECT_MODE_NONE);
778 evas_object_resize(Ad.vic_li[i], VIC_LI_W, VIC_LI_H);
779 evas_object_move(Ad.vic_li[i], VIC_LI_X, VIC_LI_Y);
782 /* Initial list display */
783 Ad.vic_ini_li = elm_list_add(Ad.win);
784 elm_list_select_mode_set(Ad.vic_ini_li, ELM_OBJECT_SELECT_MODE_NONE);
785 evas_object_resize(Ad.vic_ini_li, VIC_LI_W, VIC_LI_H);
786 evas_object_move(Ad.vic_ini_li, VIC_LI_X, VIC_LI_Y);
787 elm_list_item_append(Ad.vic_ini_li, NULL, NULL, NULL, NULL, NULL);
788 elm_list_go(Ad.vic_ini_li);
789 evas_object_show(Ad.vic_ini_li);
791 ICO_DBG("winCreate Leave");
798 static Evas_Object *create_win(const char *name)
800 ICO_DBG("create_win Enter");
803 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
805 elm_win_title_set(eo, name);
806 evas_object_smart_callback_add(eo, "delete,request", win_del, NULL);
809 ICO_DBG("create_win Leave");
816 static bool app_create(void *data)
818 ICO_DBG("app_create Enter");
821 Ad.win = create_win(MODULE_NAME);
822 if (Ad.win == NULL) {
823 ICO_ERR("main window is un-creating.");
826 evas_object_show(Ad.win);
828 elm_win_indicator_mode_set(Ad.win, ELM_WIN_INDICATOR_SHOW);
829 elm_win_fullscreen_set(Ad.win, EINA_TRUE);
831 Ad.bg = elm_bg_add(Ad.win);
832 elm_win_resize_object_add(Ad.win, Ad.bg);
833 evas_object_size_hint_weight_set(Ad.bg, EVAS_HINT_EXPAND,
835 elm_bg_file_set(Ad.bg, BG_IMAGE_FILE, NULL);
836 evas_object_show(Ad.bg);
838 evas_object_resize(Ad.win, WIDTH, HEIGHT);
841 (void) elm_config_font_overlay_set(TEXT_LIST_ITEM, FONT_FAMILY,
843 (void) elm_config_font_overlay_set(TEXT_BUTTON, FONT_FAMILY, FONT_SIZE);
844 (void) elm_config_font_overlay_set(TEXT_LABEL, FONT_FAMILY, FONT_SIZE);
845 (void) elm_config_font_overlay_apply();
851 ICO_DBG("app_create Leave");
852 return TRUE; /* EXIT_SUCCESS */
855 int main(int argc, char *argv[])
858 app_event_callback_s event_callback;
862 /* Setting the log output */
863 memset(appid, 0x00, sizeof(appid));
865 if (aul_app_get_appid_bypid(pid, appid, sizeof(appid)) == AUL_R_OK) {
869 ico_log_open(MODULE_NAME);
871 ICO_INF("START_MODULE %s", MODULE_NAME);
872 ICO_DBG("main Enter");
874 /* Read configuration file */
875 if (get_config() != 0) {
876 ICO_ERR("get_config NG");
881 if (amb_init() != EINA_TRUE) {
882 ICO_ERR("amb_init NG");
886 /* set callback fanc */
887 event_callback.create = app_create;
888 event_callback.terminate = app_terminate;
889 event_callback.pause = NULL;
890 event_callback.resume = NULL;
891 event_callback.service = NULL;
892 event_callback.low_memory = NULL;
893 event_callback.low_battery = NULL;
894 event_callback.device_orientation = NULL;
895 event_callback.language_changed = NULL;
896 event_callback.region_format_changed = NULL;
898 memset(&Ad, 0x0, sizeof(struct appdata_t));
900 result = app_efl_main(&argc, &argv, &event_callback, &Ad);
902 ICO_DBG("main Leave");
903 ICO_INF("END_MODULE %s", MODULE_NAME);