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 Sound Sample APP
11 * Test use with which sound is sounded
17 #include <Ecore_Evas.h>
18 #include <Elementary.h>
19 //#include <Ecore_X.h>
24 //#include "ico_apf.h"
25 //#include "ico_apf_ecore.h"
26 //#include "ico_apf_log.h"
27 #include "soundsample.h"
31 /*============================================================================*/
32 /* Define fixed parameters */
33 /*============================================================================*/
34 #define STATUS_BAR_HEIGHT (64)
35 #define CTRL_BAR_HEIGHT (128)
36 #define WIDTH (1080) /* Base Background width */
37 #define HEIGHT (1920 - STATUS_BAR_HEIGHT - CTRL_BAR_HEIGHT) /* Base Background height */
40 #define MODULE_NAME "org.tizen.ico.app-soundsample"
42 #define CONFIG_FILE "/usr/apps/org.tizen.ico.app-soundsample/res/soundsample_config.txt"
43 #define BG_IMAGE_FILE "/usr/apps/org.tizen.ico.app-soundsample/res/images/sound_bg.png"
45 #define MAX_BUTTON_NUM (3)
46 #define MAX_DRAW_LEM (20)
48 #define GROUP_DATA "data"
49 #define KEY_WAVFILE_PATH "wavfile_path"
50 #define KEY_SERVER_IP "server_ip"
51 #define KEY_DEVICE_NAME "device_name"
52 #define KEY_VOLUME1 "volume1"
53 #define KEY_VOLUME2 "volume2"
54 #define KEY_APP_NAME "app_name"
55 #define KEY_STREAM_NAME "stream_name"
56 #define KEY_REPEAT_FLG "repeat_flg"
57 #define KEY_MEDIA_ROLE "media_role"
61 #define FONT_FAMILY (char *)"Sans" // Mono, Sans, Serif
64 #define TEXT_BUTTON (char *)"button"
65 #define TEXT_LABEL (char *)"label"
67 /*============================================================================*/
68 /* Define data types */
69 /*============================================================================*/
80 Evas_Coord w; /* width */
81 Evas_Coord h; /* height */
86 char name[255]; /* font name */
87 Evas_Font_Size size; /* font size */
92 Evas_Coord x; /* X position */
93 Evas_Coord y; /* Y position */
96 struct object_text_val_t
98 struct color_val_t color;
99 struct size_val_t size;
100 struct font_val_t font;
101 struct pos_val_t pos;
106 struct object_figure_val_t
108 struct color_val_t color;
109 struct size_val_t size;
110 struct pos_val_t pos;
117 Evas_Object *win; //main window
120 Evas_Object *snd_type;
121 Evas_Object *btn_name[MAX_BUTTON_NUM];
122 Evas_Object *btn[MAX_BUTTON_NUM];
123 Evas_Object *icon[MAX_BUTTON_NUM];
124 Evas_Object *sts_txt;
125 Evas_Object *app_name;
126 Evas_Object *strm_name;
127 Evas_Object *pid_txt;
130 /*============================================================================*/
131 /* Function prototype for static(internal) functions */
132 /*============================================================================*/
133 static void _on_mousedown1(void *data, Evas_Object *obj, void *event_info);
134 static void _on_mousedown2(void *data, Evas_Object *obj, void *event_info);
135 static void _on_mousedown3(void *data, Evas_Object *obj, void *event_info);
136 static int start_audio(void);
137 static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler);
138 static void rcv_event(int event_num);
139 static void send_event_req(int event_num);
140 static void recv_event_res(int ret);
141 static void chg_state(int state_num);
142 static void conf_check_gerror(char *para_num, GError ** error);
143 static int read_config(void);
144 static void draw_text(Evas_Object *obj, struct object_text_val_t *text);
145 static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr);
146 //static int get_sound(int argc, char **argv);
147 static bool app_create(void *data);
148 static Evas_Object *_create_win(const char *name);
149 static void _win_del(void *data, Evas_Object *obj, void *event_info);
150 static void app_terminate(void *data);
151 static void _winCreate(void);
152 /*============================================================================*/
153 /* Tables and Valiables */
154 /*============================================================================*/
155 extern int pulse_main(struct audio_config_t *, int);
157 /* application data */
158 static struct appdata_t Ad;
161 static double Width = 0;
162 static double Height = 0;
163 static double W_mag = 0;
164 static double H_mag = 0;
167 static int StateNum = STATE_STOP;
169 /* file descriptor */
170 static int Filedes[2];
171 static int Filedes2[2];
173 /* Child process ID */
174 static pid_t ChPid = 0;
177 static struct audio_config_t AudioConfig = {
178 NULL, NULL, NULL, -1, -1, NULL, NULL
181 static struct object_text_val_t SndTypeText = {
182 {0, 0, 0, 255}, {500, 50}, {"Sans", 48}, {25, 25}, "", NULL
185 static struct object_text_val_t ButtonText[MAX_BUTTON_NUM] = {
186 {{255, 0, 0, 255}, {220, 50}, {"Sans", 48}, {100 + 65, 90}, "START",
188 {{0, 255, 0, 255}, {220, 50}, {"Sans", 48}, {370 + 75, 90}, "STOP", NULL},
189 {{0, 0, 255, 255}, {220, 50}, {"Sans", 48}, {640 + 65, 90}, "PAUSE", NULL}
192 static struct object_figure_val_t ButtonFigr[MAX_BUTTON_NUM] = {
193 {{255, 0, 0, 255}, {220, 95}, {130, 140}, "media_player/play",
194 (void *) _on_mousedown1},
195 {{0, 255, 0, 255}, {220, 95}, {400, 140}, "media_player/stop",
196 (void *) _on_mousedown2},
197 {{0, 0, 255, 255}, {220, 95}, {670, 140}, "media_player/pause",
198 (void *) _on_mousedown3}
201 static struct object_text_val_t StateInfoText = {
202 {0, 0, 0, 255}, {500, 50}, {"Sans", 48}, {330, 300}, "STATE : STOP", NULL
205 static struct object_text_val_t AppNameText = {
206 {0, 0, 0, 255}, {900, 50}, {"Sans", 32}, {150, 410}, "App Name : ", NULL
209 static struct object_text_val_t StreamNameText = {
210 {0, 0, 0, 255}, {900, 50}, {"Sans", 32}, {150, 490}, "Stream Name : ",
214 static struct object_text_val_t PidText = {
215 {0, 0, 0, 255}, {900, 50}, {"Sans", 36}, {150, 570}, "PID : ", NULL
218 static char SsndType[32];
220 /*============================================================================*/
222 /*============================================================================*/
223 static void _on_mousedown1(void *data, Evas_Object *obj, void *event_info)
225 ICO_PRF("TOUCH_EVENT _on_mousedown1: Enter");
226 ICO_PRF("TOUCH_EVENT Input event : START");
228 rcv_event(START_REQ);
230 ICO_PRF("TOUCH_EVENT _on_mousedown1: Leave");
233 static void _on_mousedown2(void *data, Evas_Object *obj, void *event_info)
235 ICO_PRF("TOUCH_EVENT _on_mousedown2: Enter");
236 ICO_PRF("TOUCH_EVENT Input event : STOP");
240 ICO_PRF("TOUCH_EVENT _on_mousedown2: Leave");
243 static void _on_mousedown3(void *data, Evas_Object *obj, void *event_info)
245 ICO_PRF("TOUCH_EVENT _on_mousedown3: Enter");
246 ICO_PRF("TOUCH_EVENT Input event : PAUSE");
248 rcv_event(PAUSE_REQ);
250 ICO_PRF("TOUCH_EVENT _on_mousedown3: Leave");
253 static int start_audio(void)
255 ICO_DBG("start_audio: Enter");
259 signal(SIGCLD, SIG_IGN);
261 if ((ChPid = fork()) < 0) {
265 else if (ChPid == 0) {
266 /* Processing of child processes to start */
270 ICO_DBG("Voice response : START");
271 ret = pulse_main(&AudioConfig, Filedes[0]);
272 ICO_DBG("Voice response : END");
274 ICO_DBG("pulse_main: ret = [%d]", ret);
279 /* Termination of child processes */
283 /* Processing of parent process */
284 ICO_DBG("Child process: ChPid = [%d]", ChPid);
286 ICO_DBG("start_audio: Leave");
291 static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler)
293 ICO_DBG("stop_audio: Enter");
296 memset(buff, 0x00, sizeof(buff));
298 /* Reading from a pipe */
299 read(Filedes2[0], buff, sizeof(buff));
300 ICO_DBG("buff :%s", buff);
302 if (atoi(buff) != 0) {
303 ICO_DBG("pulse_main Err: ret= [%d]", atoi(buff));
304 _win_del(NULL, NULL, NULL);
308 chg_state(STATE_STOP);
310 /* Process id initialization */
313 ICO_DBG("stop_audio: Leave");
315 return ECORE_CALLBACK_RENEW;
318 static void rcv_event(int event_num)
320 ICO_DBG("rcv_event: Enter");
329 send_event_req(event_num);
331 chg_state(STATE_STOP);
336 send_event_req(event_num);
338 chg_state(STATE_PAUSE);
342 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
343 StateNum, event_num);
352 /* Voice reproduction start */
356 chg_state(STATE_START);
359 ICO_DBG("start_audio Err: ret= [%d]", ret);
360 _win_del(NULL, NULL, NULL);
365 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
366 StateNum, event_num);
376 send_event_req(event_num);
378 chg_state(STATE_STOP);
383 send_event_req(event_num);
385 chg_state(STATE_START);
389 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
390 StateNum, event_num);
397 ICO_DBG("Not support StateNum: StateNum = [%d]", StateNum);
401 ICO_DBG("rcv_event: Leave");
404 static void send_event_req(int event_num)
406 ICO_DBG("send_event_req: Enter");
409 memset(msg, 0x00, sizeof(msg));
411 snprintf(msg, sizeof(msg), "%d", event_num);
412 ICO_DBG("msg = %s", msg);
414 write(Filedes[1], msg, strlen(msg) + 1);
415 ICO_DBG("send_event_req: Leave");
418 static void recv_event_res(int ret)
420 ICO_DBG("recv_event_res: Enter");
423 memset(msg, 0x00, sizeof(msg));
425 snprintf(msg, sizeof(msg), "%d", ret);
426 ICO_DBG("msg = %s", msg);
428 write(Filedes2[1], msg, strlen(msg) + 1);
429 ICO_DBG("recv_event_res: Leave");
432 static void chg_state(int state_num)
434 ICO_DBG("chg_state: Enter");
435 ICO_DBG("chg_state state_num = [%d]", state_num);
437 // char buf[ICO_UXF_MAX_PROCESS_NAME + 1];
439 memset(buf, 0x00, sizeof(buf));
443 snprintf(buf, sizeof(buf), "%s", "STATE : START");
444 elm_object_text_set(Ad.sts_txt, buf);
445 StateNum = state_num;
449 snprintf(buf, sizeof(buf), "%s", "STATE : STOP");
450 elm_object_text_set(Ad.sts_txt, buf);
451 StateNum = state_num;
455 snprintf(buf, sizeof(buf), "%s", "STATE : PAUSE");
456 elm_object_text_set(Ad.sts_txt, buf);
457 StateNum = state_num;
461 ICO_DBG("Not support State: state_num = [%d]", state_num);
465 ICO_DBG("chg_state StateNum = [%d]", StateNum);
466 ICO_DBG("chg_state: Leave");
469 static void conf_check_gerror(char *para_num, GError ** error)
471 ICO_DBG("conf_check_gerror: Enter");
473 if (*error != NULL) {
474 ICO_DBG("Config [%s] : %s", para_num, (*error)->message);
476 g_clear_error(error);
478 ICO_DBG("conf_check_gerror: Leave");
481 static int read_config(void)
483 ICO_DBG("read_config: Enter");
487 GError *error = NULL;
489 keyfile = g_key_file_new();
490 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
491 if (!g_key_file_load_from_file(keyfile, CONFIG_FILE, flags, &error)) {
492 conf_check_gerror(CONFIG_FILE, &error);
493 g_key_file_free(keyfile);
497 AudioConfig.wavfile_path = g_key_file_get_string(keyfile, GROUP_DATA,
500 if ((error) || (strlen(AudioConfig.wavfile_path) <= 0)) {
501 ICO_DBG("No config data [%s]", KEY_WAVFILE_PATH);
502 conf_check_gerror(KEY_WAVFILE_PATH, &error);
503 g_key_file_free(keyfile);
507 AudioConfig.server_ip = g_key_file_get_string(keyfile, GROUP_DATA,
508 KEY_SERVER_IP, &error);
509 if ((error) || (strlen(AudioConfig.server_ip) <= 0)) {
510 ICO_DBG("No config data [%s]", KEY_SERVER_IP);
511 conf_check_gerror(KEY_SERVER_IP, &error);
512 AudioConfig.server_ip = NULL;
515 AudioConfig.device_name = g_key_file_get_string(keyfile, GROUP_DATA,
516 KEY_DEVICE_NAME, &error);
517 if ((error) || (strlen(AudioConfig.device_name) <= 0)) {
518 ICO_DBG("No config data [%s]", KEY_DEVICE_NAME);
519 conf_check_gerror(KEY_DEVICE_NAME, &error);
520 AudioConfig.device_name = NULL;
523 AudioConfig.volume1 = g_key_file_get_integer(keyfile, GROUP_DATA,
524 KEY_VOLUME1, &error);
526 ICO_DBG("No config data [%s]", KEY_VOLUME1);
527 conf_check_gerror(KEY_VOLUME1, &error);
528 AudioConfig.volume1 = -1;
531 AudioConfig.volume2 = g_key_file_get_integer(keyfile, GROUP_DATA,
532 KEY_VOLUME2, &error);
534 ICO_DBG("No config data [%s]", KEY_VOLUME2);
535 conf_check_gerror(KEY_VOLUME2, &error);
536 AudioConfig.volume2 = -1;
539 AudioConfig.app_name = g_key_file_get_string(keyfile, GROUP_DATA,
540 KEY_APP_NAME, &error);
541 if ((error) || (strlen(AudioConfig.app_name) <= 0)) {
542 ICO_DBG("No config data [%s]", KEY_APP_NAME);
543 conf_check_gerror(KEY_APP_NAME, &error);
544 AudioConfig.app_name = "TP_PulseAudio";
547 AudioConfig.stream_name = g_key_file_get_string(keyfile, GROUP_DATA,
548 KEY_STREAM_NAME, &error);
549 if ((error) || (strlen(AudioConfig.stream_name) <= 0)) {
550 ICO_DBG("No config data [%s]", KEY_STREAM_NAME);
551 conf_check_gerror(KEY_DEVICE_NAME, &error);
552 AudioConfig.stream_name = "Pri0";
555 AudioConfig.repeat_flg = g_key_file_get_string(keyfile, GROUP_DATA,
556 KEY_REPEAT_FLG, &error);
557 if ((error) || (strlen(AudioConfig.repeat_flg) <= 0)) {
558 ICO_DBG("No config data [%s]", KEY_REPEAT_FLG);
559 conf_check_gerror(KEY_DEVICE_NAME, &error);
560 AudioConfig.repeat_flg = "OFF";
563 AudioConfig.media_role = g_key_file_get_string(keyfile, GROUP_DATA,
564 KEY_MEDIA_ROLE, &error);
565 if ((error) || (strlen(AudioConfig.media_role) <= 0)) {
566 ICO_DBG("No config data [%s]", KEY_MEDIA_ROLE);
567 conf_check_gerror(KEY_DEVICE_NAME, &error);
568 AudioConfig.media_role = "none";
571 ICO_DBG("AudioConfig.wavfile_path = [%s]", AudioConfig.wavfile_path);
572 ICO_DBG("AudioConfig.server_ip = [%s]", AudioConfig.server_ip);
573 ICO_DBG("AudioConfig.device_name = [%s]", AudioConfig.device_name);
574 ICO_DBG("AudioConfig.volume1 = [%d]", AudioConfig.volume1);
575 ICO_DBG("AudioConfig.volume2 = [%d]", AudioConfig.volume2);
576 ICO_DBG("AudioConfig.app_name = [%s]", AudioConfig.app_name);
577 ICO_DBG("AudioConfig.stream_name = [%s]", AudioConfig.stream_name);
578 ICO_DBG("AudioConfig.repeat_flg = [%s]", AudioConfig.repeat_flg);
579 ICO_DBG("AudioConfig.media_role = [%s]", AudioConfig.media_role);
580 ICO_DBG("read_config: Leave");
584 static void draw_text(Evas_Object *obj, struct object_text_val_t *text)
586 ICO_DBG("draw_text: Enter");
588 // evas_object_color_set(obj, text->color.r, text->color.g, text->color.b,
590 evas_object_resize(obj, text->size.w * W_mag, text->size.h * H_mag);
591 evas_object_move(obj, text->pos.x * W_mag, text->pos.y * H_mag);
592 evas_object_show(obj);
593 elm_object_text_set(obj, text->text);
595 ICO_DBG("draw_text: Leave");
598 static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr)
600 ICO_DBG("draw_figr: Enter");
602 // evas_object_color_set(obj, figr->color.r, figr->color.g, figr->color.b,
604 evas_object_resize(obj, figr->size.w * W_mag, figr->size.h * H_mag);
605 evas_object_move(obj, figr->pos.x * W_mag, figr->pos.y * H_mag);
606 evas_object_show(obj);
608 ICO_DBG("draw_figr: Leave");
611 static void res_callback(ico_apf_resource_notify_info_t *info,
617 ("##==> Callbacked! evt=%d res=%d id=%d bid=%d appid=%s dev=%s "
618 "user_data=%d", info->state, info->resid, info->id, info->bid,
619 info->appid, info->device, (int) user_data);
621 switch (info->state) {
622 case ICO_APF_RESOURCE_STATE_ACQUIRED:
623 case ICO_APF_RESOURCE_STATE_DEPRIVED:
624 case ICO_APF_RESOURCE_STATE_WAITTING:
625 case ICO_APF_RESOURCE_STATE_RELEASED:
626 if (info->resid == ICO_APF_RESID_INT_SOUND) {
628 ico_apf_resource_reply_int_sound_mode(info->device, info->id,
630 ICO_DBG("##==> callback reply int_sound(%s,%d,1) = %d",
631 info->device, info->id, ret);
635 ico_apf_resource_reply_sound_mode(info->device, info->id, 1);
636 ICO_DBG("##==> callback reply sound(%s,%d,1) = %d",
637 info->device, info->id, ret);
646 static void app_terminate(void *data)
648 ICO_DBG("ENTER app_terminate");
649 // Release all resources
653 evas_object_del(Ad.win);
658 evas_object_del(Ad.bg);
663 evas_object_del(Ad.snd_type);
667 for (i = 0; i < MAX_BUTTON_NUM; i++) {
669 evas_object_del(Ad.btn[i]);
673 if (Ad.btn_name[i]) {
674 evas_object_del(Ad.btn_name[i]);
675 Ad.btn_name[i] = NULL;
679 evas_object_del(Ad.icon[i]);
685 evas_object_del(Ad.sts_txt);
690 evas_object_del(Ad.app_name);
695 evas_object_del(Ad.strm_name);
700 evas_object_del(Ad.pid_txt);
704 ICO_DBG("LEAVE app_terminate");
708 static void _winCreate(void)
710 ICO_DBG("ENTER _winCreate");
716 memset(buf, 0x00, sizeof(buf));
717 memset(buf2, 0x00, sizeof(buf));
719 if (NULL == Ad.win) {
720 ICO_DBG("Err Param NG");
725 Ad.snd_type = elm_label_add(Ad.win);
726 draw_text(Ad.snd_type, &SndTypeText);
727 elm_object_text_set(Ad.snd_type, SsndType);
730 for (i = 0; i < MAX_BUTTON_NUM; i++) {
732 Ad.btn_name[i] = elm_label_add(Ad.win);
733 draw_text(Ad.btn_name[i], &ButtonText[i]);
736 Ad.btn[i] = elm_button_add(Ad.win);
737 Ad.icon[i] = elm_icon_add(Ad.win);
738 elm_icon_standard_set(Ad.icon[i], ButtonFigr[i].icon_name);
739 elm_object_part_content_set(Ad.btn[i], "icon", Ad.icon[i]);
740 draw_figr(Ad.btn[i], &ButtonFigr[i]);
741 evas_object_smart_callback_add(Ad.btn[i], "clicked",
742 (Evas_Smart_Cb) (ButtonFigr[i].func),
747 Ad.sts_txt = elm_label_add(Ad.win);
748 draw_text(Ad.sts_txt, &StateInfoText);
750 /* Application Name */
751 Ad.app_name = elm_label_add(Ad.win);
752 draw_text(Ad.app_name, &AppNameText);
754 if (strlen(AudioConfig.app_name) > MAX_DRAW_LEM) {
755 snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.app_name);
756 snprintf(buf, sizeof(buf), "%s%s...", "App name : ", buf2);
759 snprintf(buf, sizeof(buf), "%s%s", "App name : ",
760 AudioConfig.app_name);
762 elm_object_text_set(Ad.app_name, buf);
765 Ad.strm_name = elm_label_add(Ad.win);
766 draw_text(Ad.strm_name, &StreamNameText);
768 if (strlen(AudioConfig.stream_name) > MAX_DRAW_LEM) {
769 snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.stream_name);
770 snprintf(buf, sizeof(buf), "%s%s...", "Stream name : ", buf2);
773 snprintf(buf, sizeof(buf), "%s%s", "Stream name : ",
774 AudioConfig.stream_name);
776 elm_object_text_set(Ad.strm_name, buf);
779 Ad.pid_txt = elm_label_add(Ad.win);
780 draw_text(Ad.pid_txt, &PidText);
781 snprintf(buf, sizeof(buf), "%s%d", "PID : ", getpid());
782 elm_object_text_set(Ad.pid_txt, buf);
784 ICO_DBG("LEAVE _winCreate");
788 static void _win_del(void *data, Evas_Object *obj, void *event_info)
790 ICO_DBG("ENTER _win_del");
794 ICO_DBG("LEAVE _win_del");
798 static Evas_Object *_create_win(const char *name)
800 ICO_DBG("ENTER _create_win");
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);
808 ICO_DBG("LEAVE _create_win");
813 static bool app_create(void *data)
815 ICO_DBG("ENTER app_create");
820 /* get display size */
821 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
822 ICO_DBG("window size w=%d,h=%d", w, h);
824 /* set app screen size */
826 Height = h - STATUS_BAR_HEIGHT;
832 W_mag = Width / WIDTH;
833 H_mag = Height / HEIGHT;
835 ICO_DBG("Width =%f,Height=%f", Width, Height);
836 ICO_DBG("W_mag =%f,H_mag=%f", W_mag, H_mag);
839 Ad.win = _create_win(MODULE_NAME);
840 if (Ad.win == NULL) {
843 evas_object_show(Ad.win);
845 elm_win_indicator_mode_set(Ad.win, ELM_WIN_INDICATOR_SHOW);
846 elm_win_fullscreen_set(Ad.win, EINA_TRUE);
848 Ad.bg = elm_bg_add(Ad.win);
849 elm_win_resize_object_add(Ad.win, Ad.bg);
850 evas_object_size_hint_weight_set(Ad.bg, EVAS_HINT_EXPAND,
852 elm_bg_file_set(Ad.bg, BG_IMAGE_FILE, NULL);
853 evas_object_show(Ad.bg);
855 evas_object_resize(Ad.win, Width, Height);
858 (void)elm_config_font_overlay_set(TEXT_BUTTON, FONT_FAMILY, FONT_SIZE);
859 (void)elm_config_font_overlay_set(TEXT_LABEL, FONT_FAMILY, FONT_SIZE);
860 (void)elm_config_font_overlay_apply();
864 ICO_DBG("LEAVE app_create");
866 return TRUE; /* EXIT_SUCCESS */
870 static int get_sound(int argc, char **argv)
872 ICO_DBG("ENTER get_sound");
878 /* get resource control option */
879 b = bundle_import_from_argv(argc, argv);
883 val = bundle_get_val(b, "rightoption");
885 if (strcasecmp(val, "-basesound") == 0) {
886 getsound = 1; /* get base sound */
887 strcpy(SsndType, "BaseSound");
889 else if (strcasecmp(val, "-intsound") == 0) {
890 getsound = 2; /* get interrupt sound */
891 strcpy(SsndType, "IntSound");
893 else if (strncasecmp(val, "-int=", 5) == 0) {
894 getsound = strtol(val + 5, (char **) 0, 0);
895 getsound += 2; /* get interrupt sound */
896 sprintf(SsndType, "IntSound.%d", getsound - 2);
902 /* initialize resource control for Ecore */
903 if (ico_apf_ecore_init(NULL) != ICO_APF_E_NONE) {
904 ICO_DBG("ico_apf_ecore_init() Error");
905 ecore_evas_shutdown();
909 /* set resource request callback */
910 ico_apf_resource_set_event_cb(res_callback, NULL);
912 /* acquire a right to display a screen */
914 ico_apf_resource_get_sound_mode(NULL, 0, 0);
917 ico_apf_resource_get_int_sound_mode(NULL, getsound - 2, 0);
920 ICO_DBG("LEAVE get_sound");
925 int main(int argc, char *argv[])
927 // char appid[ICO_UXF_MAX_PROCESS_NAME + 1];
930 app_event_callback_s event_callback;
933 /* Setting the log output */
934 // if (ico_apf_get_app_id(0, appid) == ICO_APP_CTL_E_NONE) {
935 // ico_apf_log_open(appid);
938 /* Setting the log output */
939 memset(appid, 0, sizeof(appid));
941 if (aul_app_get_appid_bypid(pid, appid, sizeof(appid)) == AUL_R_OK) {
945 ico_log_open(MODULE_NAME);
948 ICO_INF("START_MODULE %s", MODULE_NAME);
949 ICO_DBG("ENTER main");
951 if (pipe(Filedes) == -1) {
952 ICO_DBG("Err pipe Filedes");
956 if (pipe(Filedes2) == -1) {
957 ICO_DBG("Err pipe Filedes2");
961 if (read_config() == -1) {
962 ICO_DBG("Err Config Read NG");
966 if (!ecore_evas_init()) {
971 // if (get_sound(argc, argv) != 0) {
972 // ICO_DBG("Err get_sound");
973 // return EXIT_FAILURE;
976 /* File descriptor to monitor callback function entry */
977 ecore_main_fd_handler_add(Filedes2[0], ECORE_FD_READ, stop_audio, NULL,
980 /* set callback fanc */
981 event_callback.create = app_create;
982 event_callback.terminate = app_terminate;
983 event_callback.pause = NULL;
984 event_callback.resume = NULL;
985 event_callback.service = NULL;
986 event_callback.low_memory = NULL;
987 event_callback.low_battery = NULL;
988 event_callback.device_orientation = NULL;
989 event_callback.language_changed = NULL;
990 event_callback.region_format_changed = NULL;
992 memset(&Ad, 0x0, sizeof(struct appdata_t));
994 result = app_efl_main(&argc, &argv, &event_callback, &Ad);
996 // ico_apf_ecore_term();
997 ecore_evas_shutdown();
1005 if ((ChPid > 0) && (kill(ChPid, 0) != EOF)) {
1006 kill(ChPid, SIGKILL);
1007 ICO_DBG("END Process ChPid = [%d]", ChPid);
1009 ICO_DBG("main: Leave");
1010 ICO_INF("END_MODULE %s", MODULE_NAME);