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
25 #include <Ecore_Evas.h>
26 #include <Elementary.h>
27 //#include <Ecore_X.h>
32 //#include "ico_apf.h"
33 //#include "ico_apf_ecore.h"
34 //#include "ico_apf_log.h"
35 #include "soundsample.h"
39 /*============================================================================*/
40 /* Define fixed parameters */
41 /*============================================================================*/
42 #define STATUS_BAR_HEIGHT (64)
43 #define CTRL_BAR_HEIGHT (128)
44 #define WIDTH (1080) /* Base Background width */
45 #define HEIGHT (1920 - STATUS_BAR_HEIGHT - CTRL_BAR_HEIGHT) /* Base Background height */
47 #define PACKAG "ico-app-soundsample"
48 #define CONFIG_FILE "/usr/apps/org.tizen.ico.app-soundsample/res/soundsample_config.txt"
49 #define BG_IMAGE_FILE "/usr/apps/org.tizen.ico.app-soundsample/res/images/sound_bg.png"
51 #define MAX_BUTTON_NUM (3)
52 #define MAX_DRAW_LEM (20)
54 #define GROUP_DATA "data"
55 #define KEY_WAVFILE_PATH "wavfile_path"
56 #define KEY_SERVER_IP "server_ip"
57 #define KEY_DEVICE_NAME "device_name"
58 #define KEY_VOLUME1 "volume1"
59 #define KEY_VOLUME2 "volume2"
60 #define KEY_APP_NAME "app_name"
61 #define KEY_STREAM_NAME "stream_name"
62 #define KEY_REPEAT_FLG "repeat_flg"
63 #define KEY_MEDIA_ROLE "media_role"
67 #define FONT_FAMILY (char *)"Sans" // Mono, Sans, Serif
70 #define TEXT_BUTTON (char *)"button"
71 #define TEXT_LABEL (char *)"label"
73 /*============================================================================*/
74 /* Define data types */
75 /*============================================================================*/
86 Evas_Coord w; /* width */
87 Evas_Coord h; /* height */
92 char name[255]; /* font name */
93 Evas_Font_Size size; /* font size */
98 Evas_Coord x; /* X position */
99 Evas_Coord y; /* Y position */
102 struct object_text_val_t
104 struct color_val_t color;
105 struct size_val_t size;
106 struct font_val_t font;
107 struct pos_val_t pos;
112 struct object_figure_val_t
114 struct color_val_t color;
115 struct size_val_t size;
116 struct pos_val_t pos;
123 Evas_Object *win; //main window
126 Evas_Object *snd_type;
127 Evas_Object *btn_name[MAX_BUTTON_NUM];
128 Evas_Object *btn[MAX_BUTTON_NUM];
129 Evas_Object *icon[MAX_BUTTON_NUM];
130 Evas_Object *sts_txt;
131 Evas_Object *app_name;
132 Evas_Object *strm_name;
133 Evas_Object *pid_txt;
136 /*============================================================================*/
137 /* Function prototype for static(internal) functions */
138 /*============================================================================*/
139 static void _on_mousedown1(void *data, Evas_Object *obj, void *event_info);
140 static void _on_mousedown2(void *data, Evas_Object *obj, void *event_info);
141 static void _on_mousedown3(void *data, Evas_Object *obj, void *event_info);
142 static int start_audio(void);
143 static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler);
144 static void rcv_event(int event_num);
145 static void send_event_req(int event_num);
146 static void recv_event_res(int ret);
147 static void chg_state(int state_num);
148 static void conf_check_gerror(char *para_num, GError ** error);
149 static int read_config(void);
150 static void draw_text(Evas_Object *obj, struct object_text_val_t *text);
151 static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr);
152 //static int get_sound(int argc, char **argv);
153 static bool app_create(void *data);
154 static Evas_Object *_create_win(const char *name);
155 static void _win_del(void *data, Evas_Object *obj, void *event_info);
156 static void app_terminate(void *data);
157 static void _winCreate(void);
158 /*============================================================================*/
159 /* Tables and Valiables */
160 /*============================================================================*/
161 extern int pulse_main(struct audio_config_t *, int);
163 /* application data */
164 static struct appdata_t Ad;
167 static double Width = 0;
168 static double Height = 0;
169 static double W_mag = 0;
170 static double H_mag = 0;
173 static int StateNum = STATE_STOP;
175 /* file descriptor */
176 static int Filedes[2];
177 static int Filedes2[2];
179 /* Child process ID */
180 static pid_t ChPid = 0;
183 static struct audio_config_t AudioConfig = {
184 NULL, NULL, NULL, -1, -1, NULL, NULL
187 static struct object_text_val_t SndTypeText = {
188 {0, 0, 0, 255}, {500, 50}, {"Sans", 48}, {25, 25}, "", NULL
191 static struct object_text_val_t ButtonText[MAX_BUTTON_NUM] = {
192 {{255, 0, 0, 255}, {220, 50}, {"Sans", 48}, {100 + 65, 90}, "START",
194 {{0, 255, 0, 255}, {220, 50}, {"Sans", 48}, {370 + 75, 90}, "STOP", NULL},
195 {{0, 0, 255, 255}, {220, 50}, {"Sans", 48}, {640 + 65, 90}, "PAUSE", NULL}
198 static struct object_figure_val_t ButtonFigr[MAX_BUTTON_NUM] = {
199 {{255, 0, 0, 255}, {220, 95}, {130, 140}, "media_player/play",
200 (void *) _on_mousedown1},
201 {{0, 255, 0, 255}, {220, 95}, {400, 140}, "media_player/stop",
202 (void *) _on_mousedown2},
203 {{0, 0, 255, 255}, {220, 95}, {670, 140}, "media_player/pause",
204 (void *) _on_mousedown3}
207 static struct object_text_val_t StateInfoText = {
208 {0, 0, 0, 255}, {500, 50}, {"Sans", 48}, {330, 300}, "STATE : STOP", NULL
211 static struct object_text_val_t AppNameText = {
212 {0, 0, 0, 255}, {900, 50}, {"Sans", 32}, {150, 410}, "App Name : ", NULL
215 static struct object_text_val_t StreamNameText = {
216 {0, 0, 0, 255}, {900, 50}, {"Sans", 32}, {150, 490}, "Stream Name : ",
220 static struct object_text_val_t PidText = {
221 {0, 0, 0, 255}, {900, 50}, {"Sans", 36}, {150, 570}, "PID : ", NULL
224 static char SsndType[32];
226 /*============================================================================*/
228 /*============================================================================*/
229 static void _on_mousedown1(void *data, Evas_Object *obj, void *event_info)
231 ICO_DBG("_on_mousedown1: Enter");
232 ICO_DBG("Input event : START");
234 rcv_event(START_REQ);
236 ICO_DBG("_on_mousedown1: Leave");
239 static void _on_mousedown2(void *data, Evas_Object *obj, void *event_info)
241 ICO_DBG("_on_mousedown2: Enter");
242 ICO_DBG("Input event : STOP");
246 ICO_DBG("_on_mousedown2: Leave");
249 static void _on_mousedown3(void *data, Evas_Object *obj, void *event_info)
251 ICO_DBG("_on_mousedown3: Enter");
252 ICO_DBG("Input event : PAUSE");
254 rcv_event(PAUSE_REQ);
256 ICO_DBG("_on_mousedown3: Leave");
259 static int start_audio(void)
261 ICO_DBG("start_audio: Enter");
265 signal(SIGCLD, SIG_IGN);
267 if ((ChPid = fork()) < 0) {
271 else if (ChPid == 0) {
272 /* Processing of child processes to start */
276 ICO_DBG("Voice response : START");
277 ret = pulse_main(&AudioConfig, Filedes[0]);
278 ICO_DBG("Voice response : END");
280 ICO_DBG("pulse_main: ret = [%d]", ret);
285 /* Termination of child processes */
289 /* Processing of parent process */
290 ICO_DBG("Child process: ChPid = [%d]", ChPid);
292 ICO_DBG("start_audio: Leave");
297 static Eina_Bool stop_audio(void *data, Ecore_Fd_Handler *fd_handler)
299 ICO_DBG("stop_audio: Enter");
302 memset(buff, 0x00, sizeof(buff));
304 /* Reading from a pipe */
305 read(Filedes2[0], buff, sizeof(buff));
306 ICO_DBG("buff :%s", buff);
308 if (atoi(buff) != 0) {
309 ICO_DBG("pulse_main Err: ret= [%d]", atoi(buff));
310 _win_del(NULL, NULL, NULL);
314 chg_state(STATE_STOP);
316 /* Process id initialization */
319 ICO_DBG("stop_audio: Leave");
321 return ECORE_CALLBACK_RENEW;
324 static void rcv_event(int event_num)
326 ICO_DBG("rcv_event: Enter");
335 send_event_req(event_num);
337 chg_state(STATE_STOP);
342 send_event_req(event_num);
344 chg_state(STATE_PAUSE);
348 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
349 StateNum, event_num);
358 /* Voice reproduction start */
362 chg_state(STATE_START);
365 ICO_DBG("start_audio Err: ret= [%d]", ret);
366 _win_del(NULL, NULL, NULL);
371 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
372 StateNum, event_num);
382 send_event_req(event_num);
384 chg_state(STATE_STOP);
389 send_event_req(event_num);
391 chg_state(STATE_START);
395 ICO_DBG("Not receive: StateNum = [%d],event_num = [%d]",
396 StateNum, event_num);
403 ICO_DBG("Not support StateNum: StateNum = [%d]", StateNum);
407 ICO_DBG("rcv_event: Leave");
410 static void send_event_req(int event_num)
412 ICO_DBG("send_event_req: Enter");
415 memset(msg, 0x00, sizeof(msg));
417 snprintf(msg, sizeof(msg), "%d", event_num);
418 ICO_DBG("msg = %s", msg);
420 write(Filedes[1], msg, strlen(msg) + 1);
421 ICO_DBG("send_event_req: Leave");
424 static void recv_event_res(int ret)
426 ICO_DBG("recv_event_res: Enter");
429 memset(msg, 0x00, sizeof(msg));
431 snprintf(msg, sizeof(msg), "%d", ret);
432 ICO_DBG("msg = %s", msg);
434 write(Filedes2[1], msg, strlen(msg) + 1);
435 ICO_DBG("recv_event_res: Leave");
438 static void chg_state(int state_num)
440 ICO_DBG("chg_state: Enter");
441 ICO_DBG("chg_state state_num = [%d]", state_num);
443 // char buf[ICO_UXF_MAX_PROCESS_NAME + 1];
445 memset(buf, 0x00, sizeof(buf));
449 snprintf(buf, sizeof(buf), "%s", "STATE : START");
450 elm_object_text_set(Ad.sts_txt, buf);
451 StateNum = state_num;
455 snprintf(buf, sizeof(buf), "%s", "STATE : STOP");
456 elm_object_text_set(Ad.sts_txt, buf);
457 StateNum = state_num;
461 snprintf(buf, sizeof(buf), "%s", "STATE : PAUSE");
462 elm_object_text_set(Ad.sts_txt, buf);
463 StateNum = state_num;
467 ICO_DBG("Not support State: state_num = [%d]", state_num);
471 ICO_DBG("chg_state StateNum = [%d]", StateNum);
472 ICO_DBG("chg_state: Leave");
475 static void conf_check_gerror(char *para_num, GError ** error)
477 ICO_DBG("conf_check_gerror: Enter");
479 if (*error != NULL) {
480 ICO_DBG("Config [%s] : %s", para_num, (*error)->message);
482 g_clear_error(error);
484 ICO_DBG("conf_check_gerror: Leave");
487 static int read_config(void)
489 ICO_DBG("read_config: Enter");
493 GError *error = NULL;
495 keyfile = g_key_file_new();
496 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
497 if (!g_key_file_load_from_file(keyfile, CONFIG_FILE, flags, &error)) {
498 conf_check_gerror(CONFIG_FILE, &error);
499 g_key_file_free(keyfile);
503 AudioConfig.wavfile_path = g_key_file_get_string(keyfile, GROUP_DATA,
506 if ((error) || (strlen(AudioConfig.wavfile_path) <= 0)) {
507 ICO_DBG("No config data [%s]", KEY_WAVFILE_PATH);
508 conf_check_gerror(KEY_WAVFILE_PATH, &error);
509 g_key_file_free(keyfile);
513 AudioConfig.server_ip = g_key_file_get_string(keyfile, GROUP_DATA,
514 KEY_SERVER_IP, &error);
515 if ((error) || (strlen(AudioConfig.server_ip) <= 0)) {
516 ICO_DBG("No config data [%s]", KEY_SERVER_IP);
517 conf_check_gerror(KEY_SERVER_IP, &error);
518 AudioConfig.server_ip = NULL;
521 AudioConfig.device_name = g_key_file_get_string(keyfile, GROUP_DATA,
522 KEY_DEVICE_NAME, &error);
523 if ((error) || (strlen(AudioConfig.device_name) <= 0)) {
524 ICO_DBG("No config data [%s]", KEY_DEVICE_NAME);
525 conf_check_gerror(KEY_DEVICE_NAME, &error);
526 AudioConfig.device_name = NULL;
529 AudioConfig.volume1 = g_key_file_get_integer(keyfile, GROUP_DATA,
530 KEY_VOLUME1, &error);
532 ICO_DBG("No config data [%s]", KEY_VOLUME1);
533 conf_check_gerror(KEY_VOLUME1, &error);
534 AudioConfig.volume1 = -1;
537 AudioConfig.volume2 = g_key_file_get_integer(keyfile, GROUP_DATA,
538 KEY_VOLUME2, &error);
540 ICO_DBG("No config data [%s]", KEY_VOLUME2);
541 conf_check_gerror(KEY_VOLUME2, &error);
542 AudioConfig.volume2 = -1;
545 AudioConfig.app_name = g_key_file_get_string(keyfile, GROUP_DATA,
546 KEY_APP_NAME, &error);
547 if ((error) || (strlen(AudioConfig.app_name) <= 0)) {
548 ICO_DBG("No config data [%s]", KEY_APP_NAME);
549 conf_check_gerror(KEY_APP_NAME, &error);
550 AudioConfig.app_name = "TP_PulseAudio";
553 AudioConfig.stream_name = g_key_file_get_string(keyfile, GROUP_DATA,
554 KEY_STREAM_NAME, &error);
555 if ((error) || (strlen(AudioConfig.stream_name) <= 0)) {
556 ICO_DBG("No config data [%s]", KEY_STREAM_NAME);
557 conf_check_gerror(KEY_DEVICE_NAME, &error);
558 AudioConfig.stream_name = "Pri0";
561 AudioConfig.repeat_flg = g_key_file_get_string(keyfile, GROUP_DATA,
562 KEY_REPEAT_FLG, &error);
563 if ((error) || (strlen(AudioConfig.repeat_flg) <= 0)) {
564 ICO_DBG("No config data [%s]", KEY_REPEAT_FLG);
565 conf_check_gerror(KEY_DEVICE_NAME, &error);
566 AudioConfig.repeat_flg = "OFF";
569 AudioConfig.media_role = g_key_file_get_string(keyfile, GROUP_DATA,
570 KEY_MEDIA_ROLE, &error);
571 if ((error) || (strlen(AudioConfig.media_role) <= 0)) {
572 ICO_DBG("No config data [%s]", KEY_MEDIA_ROLE);
573 conf_check_gerror(KEY_DEVICE_NAME, &error);
574 AudioConfig.media_role = "none";
577 ICO_DBG("AudioConfig.wavfile_path = [%s]", AudioConfig.wavfile_path);
578 ICO_DBG("AudioConfig.server_ip = [%s]", AudioConfig.server_ip);
579 ICO_DBG("AudioConfig.device_name = [%s]", AudioConfig.device_name);
580 ICO_DBG("AudioConfig.volume1 = [%d]", AudioConfig.volume1);
581 ICO_DBG("AudioConfig.volume2 = [%d]", AudioConfig.volume2);
582 ICO_DBG("AudioConfig.app_name = [%s]", AudioConfig.app_name);
583 ICO_DBG("AudioConfig.stream_name = [%s]", AudioConfig.stream_name);
584 ICO_DBG("AudioConfig.repeat_flg = [%s]", AudioConfig.repeat_flg);
585 ICO_DBG("AudioConfig.media_role = [%s]", AudioConfig.media_role);
586 ICO_DBG("read_config: Leave");
590 static void draw_text(Evas_Object *obj, struct object_text_val_t *text)
592 ICO_DBG("draw_text: Enter");
594 // evas_object_color_set(obj, text->color.r, text->color.g, text->color.b,
596 evas_object_resize(obj, text->size.w * W_mag, text->size.h * H_mag);
597 evas_object_move(obj, text->pos.x * W_mag, text->pos.y * H_mag);
598 evas_object_show(obj);
599 elm_object_text_set(obj, text->text);
601 ICO_DBG("draw_text: Leave");
604 static void draw_figr(Evas_Object *obj, struct object_figure_val_t *figr)
606 ICO_DBG("draw_figr: Enter");
608 // evas_object_color_set(obj, figr->color.r, figr->color.g, figr->color.b,
610 evas_object_resize(obj, figr->size.w * W_mag, figr->size.h * H_mag);
611 evas_object_move(obj, figr->pos.x * W_mag, figr->pos.y * H_mag);
612 evas_object_show(obj);
614 ICO_DBG("draw_figr: Leave");
617 static void res_callback(ico_apf_resource_notify_info_t *info,
623 ("##==> Callbacked! evt=%d res=%d id=%d bid=%d appid=%s dev=%s "
624 "user_data=%d", info->state, info->resid, info->id, info->bid,
625 info->appid, info->device, (int) user_data);
627 switch (info->state) {
628 case ICO_APF_RESOURCE_STATE_ACQUIRED:
629 case ICO_APF_RESOURCE_STATE_DEPRIVED:
630 case ICO_APF_RESOURCE_STATE_WAITTING:
631 case ICO_APF_RESOURCE_STATE_RELEASED:
632 if (info->resid == ICO_APF_RESID_INT_SOUND) {
634 ico_apf_resource_reply_int_sound_mode(info->device, info->id,
636 ICO_DBG("##==> callback reply int_sound(%s,%d,1) = %d",
637 info->device, info->id, ret);
641 ico_apf_resource_reply_sound_mode(info->device, info->id, 1);
642 ICO_DBG("##==> callback reply sound(%s,%d,1) = %d",
643 info->device, info->id, ret);
652 static void app_terminate(void *data)
654 ICO_DBG("ENTER app_terminate");
655 // Release all resources
659 evas_object_del(Ad.win);
664 evas_object_del(Ad.bg);
669 evas_object_del(Ad.snd_type);
673 for (i = 0; i < MAX_BUTTON_NUM; i++) {
675 evas_object_del(Ad.btn[i]);
679 if (Ad.btn_name[i]) {
680 evas_object_del(Ad.btn_name[i]);
681 Ad.btn_name[i] = NULL;
685 evas_object_del(Ad.icon[i]);
691 evas_object_del(Ad.sts_txt);
696 evas_object_del(Ad.app_name);
701 evas_object_del(Ad.strm_name);
706 evas_object_del(Ad.pid_txt);
710 ICO_DBG("LEAVE app_terminate");
714 static void _winCreate(void)
716 ICO_DBG("ENTER _winCreate");
722 memset(buf, 0x00, sizeof(buf));
723 memset(buf2, 0x00, sizeof(buf));
725 if (NULL == Ad.win) {
726 ICO_DBG("Err Param NG");
731 Ad.snd_type = elm_label_add(Ad.win);
732 draw_text(Ad.snd_type, &SndTypeText);
733 elm_object_text_set(Ad.snd_type, SsndType);
736 for (i = 0; i < MAX_BUTTON_NUM; i++) {
738 Ad.btn_name[i] = elm_label_add(Ad.win);
739 draw_text(Ad.btn_name[i], &ButtonText[i]);
742 Ad.btn[i] = elm_button_add(Ad.win);
743 Ad.icon[i] = elm_icon_add(Ad.win);
744 elm_icon_standard_set(Ad.icon[i], ButtonFigr[i].icon_name);
745 elm_object_part_content_set(Ad.btn[i], "icon", Ad.icon[i]);
746 draw_figr(Ad.btn[i], &ButtonFigr[i]);
747 evas_object_smart_callback_add(Ad.btn[i], "clicked",
748 (Evas_Smart_Cb) (ButtonFigr[i].func),
753 Ad.sts_txt = elm_label_add(Ad.win);
754 draw_text(Ad.sts_txt, &StateInfoText);
756 /* Application Name */
757 Ad.app_name = elm_label_add(Ad.win);
758 draw_text(Ad.app_name, &AppNameText);
760 if (strlen(AudioConfig.app_name) > MAX_DRAW_LEM) {
761 snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.app_name);
762 snprintf(buf, sizeof(buf), "%s%s...", "App name : ", buf2);
765 snprintf(buf, sizeof(buf), "%s%s", "App name : ",
766 AudioConfig.app_name);
768 elm_object_text_set(Ad.app_name, buf);
771 Ad.strm_name = elm_label_add(Ad.win);
772 draw_text(Ad.strm_name, &StreamNameText);
774 if (strlen(AudioConfig.stream_name) > MAX_DRAW_LEM) {
775 snprintf(buf2, MAX_DRAW_LEM, "%s", AudioConfig.stream_name);
776 snprintf(buf, sizeof(buf), "%s%s...", "Stream name : ", buf2);
779 snprintf(buf, sizeof(buf), "%s%s", "Stream name : ",
780 AudioConfig.stream_name);
782 elm_object_text_set(Ad.strm_name, buf);
785 Ad.pid_txt = elm_label_add(Ad.win);
786 draw_text(Ad.pid_txt, &PidText);
787 snprintf(buf, sizeof(buf), "%s%d", "PID : ", getpid());
788 elm_object_text_set(Ad.pid_txt, buf);
790 ICO_DBG("LEAVE _winCreate");
794 static void _win_del(void *data, Evas_Object *obj, void *event_info)
796 ICO_DBG("ENTER _win_del");
800 ICO_DBG("LEAVE _win_del");
804 static Evas_Object *_create_win(const char *name)
806 ICO_DBG("ENTER _create_win");
809 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
811 elm_win_title_set(eo, name);
812 evas_object_smart_callback_add(eo, "delete,request", _win_del, NULL);
814 ICO_DBG("LEAVE _create_win");
819 static bool app_create(void *data)
821 ICO_DBG("ENTER app_create");
826 /* get display size */
827 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
828 ICO_DBG("window size w=%d,h=%d", w, h);
830 /* set app screen size */
832 Height = h - STATUS_BAR_HEIGHT;
838 W_mag = Width / WIDTH;
839 H_mag = Height / HEIGHT;
841 ICO_DBG("Width =%f,Height=%f", Width, Height);
842 ICO_DBG("W_mag =%f,H_mag=%f", W_mag, H_mag);
845 Ad.win = _create_win(PACKAGE);
846 if (Ad.win == NULL) {
849 evas_object_show(Ad.win);
851 elm_win_indicator_mode_set(Ad.win, ELM_WIN_INDICATOR_SHOW);
852 elm_win_fullscreen_set(Ad.win, EINA_TRUE);
854 Ad.bg = elm_bg_add(Ad.win);
855 elm_win_resize_object_add(Ad.win, Ad.bg);
856 evas_object_size_hint_weight_set(Ad.bg, EVAS_HINT_EXPAND,
858 elm_bg_file_set(Ad.bg, BG_IMAGE_FILE, NULL);
859 evas_object_show(Ad.bg);
861 evas_object_resize(Ad.win, Width, Height);
864 (void)elm_config_font_overlay_set(TEXT_BUTTON, FONT_FAMILY, FONT_SIZE);
865 (void)elm_config_font_overlay_set(TEXT_LABEL, FONT_FAMILY, FONT_SIZE);
866 (void)elm_config_font_overlay_apply();
870 ICO_DBG("LEAVE app_create");
872 return TRUE; /* EXIT_SUCCESS */
876 static int get_sound(int argc, char **argv)
878 ICO_DBG("ENTER get_sound");
884 /* get resource control option */
885 b = bundle_import_from_argv(argc, argv);
889 val = bundle_get_val(b, "rightoption");
891 if (strcasecmp(val, "-basesound") == 0) {
892 getsound = 1; /* get base sound */
893 strcpy(SsndType, "BaseSound");
895 else if (strcasecmp(val, "-intsound") == 0) {
896 getsound = 2; /* get interrupt sound */
897 strcpy(SsndType, "IntSound");
899 else if (strncasecmp(val, "-int=", 5) == 0) {
900 getsound = strtol(val + 5, (char **) 0, 0);
901 getsound += 2; /* get interrupt sound */
902 sprintf(SsndType, "IntSound.%d", getsound - 2);
908 /* initialize resource control for Ecore */
909 if (ico_apf_ecore_init(NULL) != ICO_APF_E_NONE) {
910 ICO_DBG("ico_apf_ecore_init() Error");
911 ecore_evas_shutdown();
915 /* set resource request callback */
916 ico_apf_resource_set_event_cb(res_callback, NULL);
918 /* acquire a right to display a screen */
920 ico_apf_resource_get_sound_mode(NULL, 0, 0);
923 ico_apf_resource_get_int_sound_mode(NULL, getsound - 2, 0);
926 ICO_DBG("LEAVE get_sound");
931 int main(int argc, char *argv[])
933 // char appid[ICO_UXF_MAX_PROCESS_NAME + 1];
936 app_event_callback_s event_callback;
939 /* Setting the log output */
940 // if (ico_apf_get_app_id(0, appid) == ICO_APP_CTL_E_NONE) {
941 // ico_apf_log_open(appid);
944 /* Setting the log output */
945 memset(appid, 0, sizeof(appid));
947 if (aul_app_get_appid_bypid(pid, appid, sizeof(appid)) == AUL_R_OK) {
951 ico_log_open("org.tizen.ico.app-soundsample");
954 ICO_DBG("ENTER main");
956 if (pipe(Filedes) == -1) {
957 ICO_DBG("Err pipe Filedes");
961 if (pipe(Filedes2) == -1) {
962 ICO_DBG("Err pipe Filedes2");
966 if (read_config() == -1) {
967 ICO_DBG("Err Config Read NG");
971 if (!ecore_evas_init()) {
976 // if (get_sound(argc, argv) != 0) {
977 // ICO_DBG("Err get_sound");
978 // return EXIT_FAILURE;
981 /* File descriptor to monitor callback function entry */
982 ecore_main_fd_handler_add(Filedes2[0], ECORE_FD_READ, stop_audio, NULL,
985 /* set callback fanc */
986 event_callback.create = app_create;
987 event_callback.terminate = app_terminate;
988 event_callback.pause = NULL;
989 event_callback.resume = NULL;
990 event_callback.service = NULL;
991 event_callback.low_memory = NULL;
992 event_callback.low_battery = NULL;
993 event_callback.device_orientation = NULL;
994 event_callback.language_changed = NULL;
995 event_callback.region_format_changed = NULL;
997 memset(&Ad, 0x0, sizeof(struct appdata_t));
999 result = app_efl_main(&argc, &argv, &event_callback, &Ad);
1001 // ico_apf_ecore_term();
1002 ecore_evas_shutdown();
1010 if ((ChPid > 0) && (kill(ChPid, 0) != EOF)) {
1011 kill(ChPid, SIGKILL);
1012 ICO_DBG("END Process ChPid = [%d]", ChPid);
1014 ICO_DBG("main: Leave");