diff options
author | Seungbae Shin <seungbae.shin@samsung.com> | 2015-04-08 18:38:41 +0900 |
---|---|---|
committer | Seungbae Shin <seungbae.shin@samsung.com> | 2015-04-27 16:24:33 +0900 |
commit | cd707bc05b72e1de5456c0491f8798e6e4af11cb (patch) | |
tree | 9ff7bc272746f8fc58cc77fea49c5334a97a4c19 /testsuite | |
parent | 3f02956c64883a74194e063194fcbf75dc1b5215 (diff) | |
download | libmm-sound-cd707bc05b72e1de5456c0491f8798e6e4af11cb.tar.gz libmm-sound-cd707bc05b72e1de5456c0491f8798e6e4af11cb.tar.bz2 libmm-sound-cd707bc05b72e1de5456c0491f8798e6e4af11cb.zip |
Rebase code with tizen 2.3 with following additional changessubmit/tizen_common/20150505.090000submit/tizen/20150429.013912accepted/tizen/wearable/20150506.234517accepted/tizen/tv/20150506.233455accepted/tizen/mobile/20150511.004108accepted/tizen/common/20150506.091345
1. enable _TIZEN_PUBLIC_
2. disable SUPPORT_BT_SCO
3. fix build error (%.pc -> .pc, -lrt, PULSE_CFLAGS/LIBS -> PA_CFLAGS/LIBS, PASIMPLE_CFLAGS/LIBS)
4. fix build error (add m4_pattern_allow([AM_PROG_AR]), AM_PROG_AR, AM_PROG_CC_C_O in configure.ac)
5. disable code related to VCONFKEY_RECORDER_STATE, VCONFKEY_SETAPPL_ACCESSORY_DOCK_SOUND
6. [vconf-buxton] no smack labels for vconf key initialization (memory), set smack label as User for file backend vconfs
Change-Id: I610a527852e9871bfe5cd74bc36e4b2783adfbc4
Diffstat (limited to 'testsuite')
-rw-r--r-- | testsuite/Makefile.am | 4 | ||||
-rw-r--r-- | testsuite/mm_sound_testsuite_simple.c | 654 |
2 files changed, 539 insertions, 119 deletions
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am index 570a14d..adb2202 100644 --- a/testsuite/Makefile.am +++ b/testsuite/Makefile.am @@ -4,7 +4,6 @@ mm_sound_testsuite_SOURCES = mm_sound_testsuite_simple.c mm_sound_testsuite_CFLAGS = $(MMCOMMON_CFLAGS) \ -I$(srcdir)/../include \ - $(AVSYSTEM_CFLAGS) \ $(ALSA_CFLAGS) \ $(VCONF_CFLAGS) \ $(AUDIOSESSIONMGR_CFLAGS) \ @@ -12,10 +11,9 @@ mm_sound_testsuite_CFLAGS = $(MMCOMMON_CFLAGS) \ mm_sound_testsuite_DEPENDENCIES = $(srcdir)/../.libs/libmmfsound.la \ $(srcdir)/../.libs/libmmfkeysound.la - +mm_sound_testsuite_CFLAGS += -fPIC -pie mm_sound_testsuite_LDADD = $(MMCOMMON_LIBS) \ $(MMSESSION_LIBS) \ - $(AVSYSTEM_LIBS) \ $(VCONF_LIBS) \ $(AUDIOSESSIONMGR_LIBS) \ $(srcdir)/../.libs/libmmfsound.la \ diff --git a/testsuite/mm_sound_testsuite_simple.c b/testsuite/mm_sound_testsuite_simple.c index 2423c2d..3cd81ec 100644 --- a/testsuite/mm_sound_testsuite_simple.c +++ b/testsuite/mm_sound_testsuite_simple.c @@ -24,12 +24,14 @@ #include <stdlib.h> #define debug_log(msg, args...) fprintf(stderr, msg, ##args) -#define avsys_info(msg, args...) fprintf(stderr, msg, ##args) +#define debug_error(msg, args...) fprintf(stderr, msg, ##args) #define MAX_STRING_LEN 256 #define MAX_PATH_LEN 1024 #define MIN_TONE_PLAY_TIME 300 #include "../include/mm_sound.h" +#include "../include/mm_sound_common.h" #include "../include/mm_sound_private.h" +#include "../include/mm_sound_pa_client.h" #include <glib.h> @@ -43,7 +45,8 @@ #include <mm_session_private.h> #include <audio-session-manager-types.h> -#define POWERON_FILE "/usr/share/keysound/poweron.wav" +#define POWERON_FILE "/usr/share/feedback/sound/operation/power_on.wav" +#define KEYTONE_FILE "/opt/usr/share/settings/Previews/touch.wav" // For testsuite status @@ -79,20 +82,82 @@ static int __mm_sound_foreach_available_route_cb (mm_sound_route route, void *us static void __mm_sound_available_route_changed_cb (mm_sound_route route, bool available, void *user_data); static void __mm_sound_active_device_changed_cb (mm_sound_device_in device_in, mm_sound_device_out device_out, void *user_data); -void mycallback(void *data) +void mycallback(void *data, int id) { char *str = (char*)data; if(data != NULL) - debug_log("mycallback called (user data:%s)\n", str); + debug_log("mycallback called (user data:%s ,id:%d)\n", str, id); else debug_log("mycallback called (no user data)\n"); } volatile char test_callback_done; -void test_callback(void *data) +void test_callback(void *data, int id) { debug_log("test_callback is called\n"); test_callback_done = 1; } +void device_connected_cb (MMSoundDevice_t device_h, bool is_connected, void *user_data) +{ + int ret = 0; + int type = 0; + int io_direction = 0; + int state = 0; + int id = 0; + char *name = NULL; + debug_log("*** device_connected_cb is called, device_h[0x%x], is_connected[%d], user_date[0x%x]\n", device_h, is_connected, user_data); + ret = mm_sound_get_device_type(device_h, &type); + if (ret) { + debug_error("failed to mm_sound_get_device_type()\n"); + } + ret = mm_sound_get_device_io_direction(device_h, &io_direction); + if (ret) { + debug_error("failed to mm_sound_get_device_io_direction()\n"); + } + ret = mm_sound_get_device_state(device_h, &state); + if (ret) { + debug_error("failed to mm_sound_get_device_state()\n"); + } + ret = mm_sound_get_device_id(device_h, &id); + if (ret) { + debug_error("failed to mm_sound_get_device_id()\n"); + } + ret = mm_sound_get_device_name(device_h, &name); + if (ret) { + debug_error("failed to mm_sound_get_device_name()\n"); + } + debug_log("*** --- type[%d], id[%d], io_direction[%d], state[%d], name[%s]\n", type, id, io_direction, state, name); +} +void device_info_changed_cb (MMSoundDevice_t device_h, int changed_info_type, void *user_data) +{ + int ret = 0; + int type = 0; + int io_direction = 0; + int state = 0; + int id = 0; + char *name = NULL; + debug_log("*** device_info_changed_cb is called, device_h[0x%x], changed_info_type[%d], user_date[0x%x]\n", device_h, changed_info_type, user_data); + ret = mm_sound_get_device_type(device_h, &type); + if (ret) { + debug_error("failed to mm_sound_get_device_type()\n"); + } + ret = mm_sound_get_device_io_direction(device_h, &io_direction); + if (ret) { + debug_error("failed to mm_sound_get_device_io_direction()\n"); + } + ret = mm_sound_get_device_state(device_h, &state); + if (ret) { + debug_error("failed to mm_sound_get_device_state()\n"); + } + ret = mm_sound_get_device_id(device_h, &id); + if (ret) { + debug_error("failed to mm_sound_get_device_id()\n"); + } + ret = mm_sound_get_device_name(device_h, &name); + if (ret) { + debug_error("failed to mm_sound_get_device_name()\n"); + } + debug_log("*** --- type[%d], id[%d], io_direction[%d], state[%d], name[%s]\n", type, id, io_direction, state, name); +} void quit_program() { g_main_loop_quit(g_loop); @@ -132,6 +197,11 @@ static void displaymenu() g_print("r : Get system \t"); g_print("t : Inc. system \t"); g_print("y : Dec. system \n"); + g_print("g : Get voice \t"); + g_print("h : Inc. voice \t"); + g_print("j : Dec. voice \n"); + g_print("B : Set audio balance\n"); + g_print("M : Set mute all\n"); g_print("==================================================================\n"); g_print(" Audio route APIs\n"); g_print("==================================================================\n"); @@ -142,14 +212,25 @@ static void displaymenu() g_print("p : Add Active Route Callback\t"); g_print("P : Remove Active Route Callback \n"); g_print("{ : Get BT A2DP Status\n"); + g_print("} : Set Active Route\n"); g_print("==================================================================\n"); g_print(" Session Test\n"); g_print("==================================================================\n"); g_print("z : Call start \t"); g_print("Z : VideoCall start \t"); - g_print("v : Call/VideoCall end \t"); + g_print("N : Notification start \n"); + g_print("n : VOIP start \t"); + g_print("v : Session end \t"); g_print("V : Current Status \n"); g_print("==================================================================\n"); + g_print(" Audio device APIs\n"); + g_print("==================================================================\n"); + g_print("L : Get current list of connected devices \n"); + g_print("C : Add device connected callback \t"); + g_print("D : Remove device connected callback \n"); + g_print("Q : Add device info. changed callback \t"); + g_print("W : Remove device info. changed callback \n"); + g_print("==================================================================\n"); g_print("d : Input Directory \t"); g_print("f : Input File name \t"); g_print("x : Exit Program \n"); @@ -195,14 +276,14 @@ gboolean input (GIOChannel *channel) static void input_filename(char *filename) { - strncpy(g_file_name, filename, sizeof(g_file_name)-1); + MMSOUND_STRNCPY(g_file_name, filename, MAX_STRING_LEN); g_print("\nThe input filename is '%s' \n\n",g_file_name); } static void input_dirname(char *dirname) { - strncpy(g_dir_name, dirname, sizeof(g_dir_name)-1); + MMSOUND_STRNCPY(g_dir_name, dirname, MAX_PATH_LEN); g_print("\nThe input directory is '%s' \n\n",g_dir_name); } @@ -216,8 +297,9 @@ static char* __get_playback_device_str (mm_sound_device_out out) case MM_SOUND_DEVICE_OUT_BT_A2DP: return "BTA2DP"; case MM_SOUND_DEVICE_OUT_DOCK: return "DOCK"; case MM_SOUND_DEVICE_OUT_HDMI: return "HDMI"; - case MM_SOUND_DEVICE_OUT_WFD: return "WFD"; + case MM_SOUND_DEVICE_OUT_MIRRORING: return "MIRRORING"; case MM_SOUND_DEVICE_OUT_USB_AUDIO: return "USB"; + case MM_SOUND_DEVICE_OUT_MULTIMEDIA_DOCK: return "MULTIMEDIA_DOCK"; default: return NULL; } } @@ -236,12 +318,14 @@ static char* __get_route_str (mm_sound_route route) { switch (route) { case MM_SOUND_ROUTE_OUT_SPEAKER: return "OUT_SPEAKER"; + case MM_SOUND_ROUTE_OUT_RECEIVER: return "OUT_RECEIVER"; case MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY: return "OUT_WIRED_ACCESSORY"; - case MM_SOUND_ROUTE_OUT_BLUETOOTH: return "OUT_BLUETOOTH"; + case MM_SOUND_ROUTE_OUT_BLUETOOTH_A2DP: return "OUT_BLUETOOTH_A2DP"; case MM_SOUND_ROUTE_OUT_DOCK: return "OUT_DOCK"; case MM_SOUND_ROUTE_OUT_HDMI: return "OUT_HDMI"; - case MM_SOUND_ROUTE_OUT_WFD: return "OUT_WFD"; + case MM_SOUND_ROUTE_OUT_MIRRORING: return "OUT_MIRRORING"; case MM_SOUND_ROUTE_OUT_USB_AUDIO: return "OUT_USB"; + case MM_SOUND_ROUTE_OUT_MULTIMEDIA_DOCK: return "OUT_MULTIMEDIA_DOCK"; case MM_SOUND_ROUTE_IN_MIC: return "IN_MIC"; case MM_SOUND_ROUTE_IN_WIRED_ACCESSORY: return "IN_WIRED_ACCESSORY"; case MM_SOUND_ROUTE_IN_MIC_OUT_RECEIVER: return "IN_MIC_OUT_RECEIVER"; @@ -281,7 +365,7 @@ static void interpret (char *cmd) case CURRENT_STATUS_MAINMENU: if(strncmp(cmd, "k", 1) == 0) { - ret = mm_sound_play_keysound(POWERON_FILE, 8); + ret = mm_sound_play_keysound(KEYTONE_FILE, 8); if(ret < 0) debug_log("keysound play failed with 0x%x\n", ret); } @@ -391,6 +475,116 @@ static void interpret (char *cmd) } } } + else if(strncmp(cmd, "g", 1) == 0) + {//get voice volume + unsigned int value = 100; + ret = mm_sound_volume_get_value(VOLUME_TYPE_VOICE, &value); + if(ret < 0) { + debug_log("mm_sound_volume_get_value 0x%x\n", ret); + } + else{ + g_print("*** VOICE VOLUME : %u ***\n", value); + g_volume_value = value; + } + } + else if(strncmp(cmd, "h", 1) == 0) + {//set voice volume up + unsigned int value = 100; + ret = mm_sound_volume_get_value(VOLUME_TYPE_VOICE, &value); + if(ret < 0) { + debug_log("mm_sound_volume_get_value 0x%x\n", ret); + } + else { + debug_log("Loaded voice volume is %d\n", value); + int step; + value++; + mm_sound_volume_get_step(VOLUME_TYPE_VOICE, &step); + if(value >= step) { + value = step-1; + } + ret = mm_sound_volume_set_value(VOLUME_TYPE_VOICE, value); + if(ret < 0) { + debug_log("mm_sound_volume_set_value 0x%x\n", ret); + }else { + g_print("Current Voice volume is %d\n", value); + } + } + } + else if(strncmp(cmd, "j", 1) == 0) + {//set voice volume down + unsigned int value = 100; + ret = mm_sound_volume_get_value(VOLUME_TYPE_VOICE, &value); + if(ret < 0) { + debug_log("mm_sound_volume_get_value 0x%x\n", ret); + } + else { + if(value != 0) { + value--; + } + + ret = mm_sound_volume_set_value(VOLUME_TYPE_VOICE, value); + if(ret < 0) { + debug_log("mm_sound_volume_set_value 0x%x\n", ret); + }else { + g_print("Current Voice volume is %d\n", value); + } + } + } + + else if(strncmp(cmd, "B", 1) == 0) + { + int ret = 0; + char input_string[128]; + float balance; + + fflush(stdin); + ret = mm_sound_volume_get_balance(&balance); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_volume_get_balance Success, balance=%f\n", balance); + } else { + g_print ("### mm_sound_volume_get_balance Error = %x\n", ret); + } + g_print("> Enter new audio balance (current is %f) : ", balance); + if (fgets(input_string, sizeof(input_string)-1, stdin) == NULL) { + g_print ("### fgets return NULL\n"); + } + + balance = atof (input_string); + ret = mm_sound_volume_set_balance(balance); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_volume_set_balance(%f) Success\n", balance); + } else { + g_print ("### mm_sound_volume_set_balance(%f) Error = %x\n", balance, ret); + } + } + + else if(strncmp(cmd, "M", 1) == 0) + { + int ret = 0; + char input_string[128]; + int muteall; + + fflush(stdin); + ret = mm_sound_get_muteall(&muteall); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_get_muteall Success, muteall=%d\n", muteall); + } else { + g_print ("### mm_sound_get_muteall Error = %x\n", ret); + } + g_print("> Enter new muteall state (current is %d) : ", muteall); + if (fgets(input_string, sizeof(input_string)-1, stdin) == NULL) { + g_print ("### fgets return NULL\n"); + } + + muteall = atoi (input_string); + ret = mm_sound_set_muteall(muteall); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_set_muteall(%d) Success\n", muteall); + } else { + g_print ("### mm_sound_set_muteall(%d) Error = %x\n", muteall, ret); + } + } + else if(strncmp(cmd, "a", 1) == 0) { debug_log("volume is %d type, %d\n", g_volume_type, g_volume_value); @@ -413,12 +607,15 @@ static void interpret (char *cmd) int tonetime=0; double volume=1.0; int volume_type = -1; + bool enable_session = 0; MMSoundTone_t tone = MM_SOUND_TONE_DTMF_0; while(num != 'q') { fflush(stdin); - g_print("enter number(0~H exit:q), volume type(0~7), volume(0.0~1.0), time(ms):\t "); - fgets(input_string, sizeof(input_string)-1, stdin); + g_print("enter number(0~H exit:q), volume type(0~7), volume(0.0~1.0), time(ms), enable_session(0:unable , 1:enable):\t "); + if (fgets(input_string, sizeof(input_string)-1, stdin) == NULL) { + g_print ("### fgets return NULL\n"); + } tok = strtok(input_string, " "); if(!tok) continue; if(tok[0] == 'q') { @@ -496,9 +693,9 @@ static void interpret (char *cmd) else if(num == 'x') { tone =MM_SOUND_TONE_CDMA_ALERT_CALL_GUARD; } else if(num == 'y') { tone =MM_SOUND_TONE_CDMA_SOFT_ERROR_LITE; } else if(num == 'z') { tone =MM_SOUND_TONE_CDMA_CALLDROP_LITE; } - else if(num == '{') { tone =MM_SOUND_TONE_CDMA_NETWORK_BUSY_ONE_SHOT; } - else if(num == '}') { tone =MM_SOUND_TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING; } - else if(num == '~') { tone =MM_SOUND_TONE_CDMA_SIGNAL_OFF; } + else if(num == '{') { tone =MM_SOUND_TONE_LOW_FRE; } + else if(num == '}') { tone =MM_SOUND_TONE_MED_FRE; } + else if(num == '~') { tone =MM_SOUND_TONE_HIGH_FRE; } tok = strtok(NULL, " "); if(tok) volume_type = (double)atoi(tok); @@ -515,8 +712,11 @@ static void interpret (char *cmd) tonetime = MIN_TONE_PLAY_TIME; } - debug_log("volume type: %d\t volume is %f\t tonetime: %d \n", volume_type, volume, tonetime); - ret = mm_sound_play_tone(tone, volume_type, volume, tonetime, &handle); + tok = strtok(NULL, " "); + if(tok) enable_session = (bool)atof(tok); + + debug_log("volume type: %d\t volume is %f\t tonetime: %d\t enable_session %d \n", volume_type, volume, tonetime, enable_session); + ret = mm_sound_play_tone_ex(tone, volume_type, volume, tonetime, &handle, enable_session); if(ret<0) debug_log ("[magpie] Play DTMF sound cannot be played ! %d\n", handle); } @@ -622,53 +822,39 @@ static void interpret (char *cmd) } else if (strncmp (cmd, "1",1) == 0) { //ap to spk - if (mm_sound_set_path (MM_SOUND_GAIN_KEYTONE, MM_SOUND_PATH_SPK, MM_SOUND_PATH_NONE, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("Set path for speaker playback\n"); + g_print("Not supported - Set path for speaker playback\n"); } else if (strncmp (cmd, "2",1) == 0) { //ap to headset - if (mm_sound_set_path(MM_SOUND_GAIN_KEYTONE, MM_SOUND_PATH_HEADSET, MM_SOUND_PATH_NONE, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("Set path for headset playback\n"); + g_print("Not supported - Set path for headset playback\n"); } else if (strncmp (cmd, "3",1) == 0) { } else if (strncmp (cmd, "4",1) == 0) { //recording - if (mm_sound_set_path(MM_SOUND_GAIN_VOICEREC, MM_SOUND_PATH_NONE, MM_SOUND_PATH_MIC, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("Set path for recording with main mic\n"); + g_print("Not supported - Set path for recording with main mic\n"); } else if (strncmp (cmd, "5",1) == 0) { } else if (strncmp (cmd, "6",1) == 0) { //voice call - if (mm_sound_set_path(MM_SOUND_GAIN_VOICECALL, MM_SOUND_PATH_RECV, MM_SOUND_PATH_MIC, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("Set path for voicecall\n"); + g_print("Not supported - Set path for voicecall\n"); } else if (strncmp (cmd, "7",1) == 0) { //voicecall release - if (mm_sound_set_path(MM_SOUND_GAIN_VOICECALL, MM_SOUND_PATH_NONE, MM_SOUND_PATH_NONE, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("release path for voicecall\n"); + g_print("Not supported - release path for voicecall\n"); } else if (strncmp (cmd, "8",1) == 0) { //voice call - if (mm_sound_set_path(MM_SOUND_GAIN_VIDEOCALL, MM_SOUND_PATH_SPK, MM_SOUND_PATH_MIC, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("Fail to set sound path !!!\n"); - g_print("Set path for VT call\n"); + g_print("Not supported - Set path for VT call\n"); } else if (strncmp (cmd, "9",1) == 0) { //voicecall release - if (mm_sound_set_path(MM_SOUND_GAIN_VIDEOCALL, MM_SOUND_PATH_NONE, MM_SOUND_PATH_NONE, MM_SOUND_PATH_OPTION_NONE)<0) - debug_log ("[magpie] Fail to set sound path !!!\n"); - g_print("release path for VT call\n"); + g_print("Not supported - release path for VT call\n"); } /* -------------------------- Route Test : Starts -------------------------- */ @@ -695,8 +881,8 @@ static void interpret (char *cmd) } else if (strncmp(cmd, "i", 1) == 0) { int ret = 0; - mm_sound_device_in in; - mm_sound_device_out out; + mm_sound_device_in in = MM_SOUND_DEVICE_IN_NONE; + mm_sound_device_out out = MM_SOUND_DEVICE_OUT_NONE; ret = mm_sound_get_active_device(&in, &out); if (ret == MM_ERROR_NONE) { g_print ("### mm_sound_get_active_device() Success : in[0x%08x][%s], out[0x%08x][%s]\n\n", @@ -725,7 +911,7 @@ static void interpret (char *cmd) } else if (strncmp(cmd, "p", 1) == 0) { int ret = 0; - ret = mm_sound_add_active_device_changed_callback(__mm_sound_active_device_changed_cb, NULL); + ret = mm_sound_add_active_device_changed_callback("null", __mm_sound_active_device_changed_cb, NULL); if (ret == MM_ERROR_NONE) { g_print ("### mm_sound_add_active_device_changed_callback() Success\n\n"); } else { @@ -734,7 +920,7 @@ static void interpret (char *cmd) } else if (strncmp(cmd, "P", 1) == 0) { int ret = 0; - ret = mm_sound_remove_active_device_changed_callback(); + ret = mm_sound_remove_active_device_changed_callback("null"); if (ret == MM_ERROR_NONE) { g_print ("### mm_sound_remove_active_device_changed_callback() Success\n\n"); } else { @@ -743,7 +929,7 @@ static void interpret (char *cmd) } else if (strncmp(cmd, "{", 1) == 0) { int ret = 0; - int connected = 0; + bool connected = 0; char* bt_name = NULL; ret = mm_sound_route_get_a2dp_status (&connected, &bt_name); @@ -762,49 +948,67 @@ static void interpret (char *cmd) char input_string[128]; mm_sound_route route = MM_SOUND_ROUTE_OUT_SPEAKER; char num; + char need_broadcast; fflush(stdin); g_print ("1. MM_SOUND_ROUTE_OUT_SPEAKER\n"); - g_print ("2. MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY\n"); - g_print ("3. MM_SOUND_ROUTE_OUT_BLUETOOTH\n"); - g_print ("4. MM_SOUND_ROUTE_OUT_DOCK\n"); - g_print ("5. MM_SOUND_ROUTE_OUT_HDMI\n"); - g_print ("6. MM_SOUND_ROUTE_OUT_WFD\n"); - g_print ("7. MM_SOUND_ROUTE_OUT_USB_AUDIO\n"); - g_print ("8. MM_SOUND_ROUTE_IN_MIC\n"); - g_print ("9. MM_SOUND_ROUTE_IN_WIRED_ACCESSORY\n"); - g_print ("0. MM_SOUND_ROUTE_IN_MIC_OUT_RECEIVER\n"); - g_print ("a. MM_SOUND_ROUTE_IN_MIC_OUT_SPEAKER\n"); - g_print ("b. MM_SOUND_ROUTE_IN_MIC_OUT_HEADPHONE\n"); - g_print ("c. MM_SOUND_ROUTE_INOUT_HEADSET\n"); - g_print ("d. MM_SOUND_ROUTE_INOUT_BLUETOOTH\n"); - g_print("> select route number : "); - - fgets(input_string, sizeof(input_string)-1, stdin); + g_print ("2. MM_SOUND_ROUTE_OUT_RECEIVER\n"); + g_print ("3. MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY\n"); + g_print ("4. MM_SOUND_ROUTE_OUT_BLUETOOTH_A2DP\n"); + g_print ("5. MM_SOUND_ROUTE_OUT_DOCK\n"); + g_print ("6. MM_SOUND_ROUTE_OUT_HDMI\n"); + g_print ("7. MM_SOUND_ROUTE_OUT_MIRRORING\n"); + g_print ("8. MM_SOUND_ROUTE_OUT_USB_AUDIO\n"); + g_print ("9. MM_SOUND_ROUTE_OUT_MULTIMEDIA_DOCK\n"); + g_print ("0. MM_SOUND_ROUTE_IN_MIC\n"); + g_print ("a. MM_SOUND_ROUTE_IN_WIRED_ACCESSORY\n"); + g_print ("b. MM_SOUND_ROUTE_IN_MIC_OUT_RECEIVER\n"); + g_print ("c. MM_SOUND_ROUTE_IN_MIC_OUT_SPEAKER\n"); + g_print ("d. MM_SOUND_ROUTE_IN_MIC_OUT_HEADPHONE\n"); + g_print ("e. MM_SOUND_ROUTE_INOUT_HEADSET\n"); + g_print ("f. MM_SOUND_ROUTE_INOUT_BLUETOOTH\n"); + g_print("> select route number and select is need broadcast(1 need , 0 no need): (eg . 1 1)"); + + if (fgets(input_string, sizeof(input_string)-1, stdin)) { + g_print ("### fgets return NULL\n"); + } num = input_string[0]; + need_broadcast = input_string[2]; if(num == '1') { route = MM_SOUND_ROUTE_OUT_SPEAKER; } - else if(num == '2') { route = MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY; } - else if(num == '3') { route = MM_SOUND_ROUTE_OUT_BLUETOOTH; } - else if(num == '4') { route = MM_SOUND_ROUTE_OUT_DOCK; } - else if(num == '5') { route = MM_SOUND_ROUTE_OUT_HDMI; } - else if(num == '6') { route = MM_SOUND_ROUTE_OUT_WFD; } - else if(num == '7') { route = MM_SOUND_ROUTE_OUT_USB_AUDIO; } - else if(num == '8') { route = MM_SOUND_ROUTE_IN_MIC; } - else if(num == '9') { route = MM_SOUND_ROUTE_IN_WIRED_ACCESSORY; } - else if(num == '0') { route = MM_SOUND_ROUTE_IN_MIC_OUT_RECEIVER; } - else if(num == 'a') { route = MM_SOUND_ROUTE_IN_MIC_OUT_SPEAKER; } - else if(num == 'b') { route = MM_SOUND_ROUTE_IN_MIC_OUT_HEADPHONE; } - else if(num == 'c') { route = MM_SOUND_ROUTE_INOUT_HEADSET; } - else if(num == 'd') { route = MM_SOUND_ROUTE_INOUT_BLUETOOTH; } - - ret = mm_sound_set_active_route(route); - if (ret == MM_ERROR_NONE) { - g_print ("### mm_sound_set_active_route(%s) Success\n\n", __get_route_str (route)); + else if(num == '2') { route = MM_SOUND_ROUTE_OUT_RECEIVER; } + else if(num == '3') { route = MM_SOUND_ROUTE_OUT_WIRED_ACCESSORY; } + else if(num == '4') { route = MM_SOUND_ROUTE_OUT_BLUETOOTH_A2DP; } + else if(num == '5') { route = MM_SOUND_ROUTE_OUT_DOCK; } + else if(num == '6') { route = MM_SOUND_ROUTE_OUT_HDMI; } + else if(num == '7') { route = MM_SOUND_ROUTE_OUT_MIRRORING; } + else if(num == '8') { route = MM_SOUND_ROUTE_OUT_USB_AUDIO; } + else if(num == '9') { route = MM_SOUND_ROUTE_OUT_MULTIMEDIA_DOCK; } + else if(num == '0') { route = MM_SOUND_ROUTE_IN_MIC; } + else if(num == 'a') { route = MM_SOUND_ROUTE_IN_WIRED_ACCESSORY; } + else if(num == 'b') { route = MM_SOUND_ROUTE_IN_MIC_OUT_RECEIVER; } + else if(num == 'c') { route = MM_SOUND_ROUTE_IN_MIC_OUT_SPEAKER; } + else if(num == 'd') { route = MM_SOUND_ROUTE_IN_MIC_OUT_HEADPHONE; } + else if(num == 'e') { route = MM_SOUND_ROUTE_INOUT_HEADSET; } + else if(num == 'f') { route = MM_SOUND_ROUTE_INOUT_BLUETOOTH; } + + if (need_broadcast == '1') { + ret = mm_sound_set_active_route(route); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_set_active_route(%s) Success\n\n", __get_route_str (route)); + } else { + g_print ("### mm_sound_set_active_route(%s) Error : errno [%x]\n\n", __get_route_str (route), ret); + } + } else { - g_print ("### mm_sound_set_acstive_route(%s) Error : errno [%x]\n\n", __get_route_str (route), ret); + ret = mm_sound_set_active_route_without_broadcast(route); + if (ret == MM_ERROR_NONE) { + g_print ("### mm_sound_set_active_route_without_broadcast(%s) Success\n\n", __get_route_str (route)); + } else { + g_print ("### mm_sound_set_active_route_without_broadcast(%s) Error : errno [%x]\n\n", __get_route_str (route), ret); + } } - } + } else if(strncmp(cmd, "z", 1) ==0) { if(MM_ERROR_NONE != mm_session_init(MM_SESSION_TYPE_CALL)) @@ -818,6 +1022,18 @@ static void interpret (char *cmd) g_print("VideoCall session init failed\n"); } } + else if(strncmp(cmd, "N", 1) ==0) { + if(MM_ERROR_NONE != mm_session_init(MM_SESSION_TYPE_NOTIFY)) + { + g_print("Notify session init failed\n"); + } + } + else if(strncmp(cmd, "n", 1) ==0) { + if(MM_ERROR_NONE != mm_session_init(MM_SESSION_TYPE_VOIP)) + { + g_print("VOIP session init failed\n"); + } + } else if(strncmp(cmd, "v", 1) ==0) { if(MM_ERROR_NONE != mm_session_finish()) { @@ -836,35 +1052,14 @@ static void interpret (char *cmd) { g_print("No Session Instance\n"); } - if(value & ASM_STATUS_SHARE_MMPLAYER) { - g_print("SHARE - PLAYER\n"); - } - if(value & ASM_STATUS_EXCLUSIVE_MMPLAYER) { - g_print("EXCLUSIVE - PLAYER\n"); - } - if(value & ASM_STATUS_SHARE_MMSOUND) { - g_print("SHARE - SOUND\n"); - } - if(value & ASM_STATUS_EXCLUSIVE_MMSOUND) { - g_print("EXCLUSIVE - SOUND\n"); - } - if(value & ASM_STATUS_SHARE_MMCAMCORDER) { - g_print("SHARE - CAMCORDER\n"); - } - if(value & ASM_STATUS_EXCLUSIVE_MMCAMCORDER) { - g_print("EXCLUSIVE - CAMCORDER\n"); - } - if(value & ASM_STATUS_SHARE_OPENAL) { - g_print("SHARE - OPENAL\n"); + if(value & ASM_STATUS_MEDIA_MMPLAYER) { + g_print("MEDIA - PLAYER\n"); } - if(value & ASM_STATUS_EXCLUSIVE_OPENAL) { - g_print("EXCLUSIVE - OPENAL\n"); + if(value & ASM_STATUS_MEDIA_MMSOUND) { + g_print("MEDIA - SOUND\n"); } - if(value & ASM_STATUS_SHARE_AVSYSTEM) { - g_print("SHARE - AVSYSTEM\n"); - } - if(value & ASM_STATUS_EXCLUSIVE_AVSYSTEM) { - g_print("EXCLUSIVE - AVSYSTEM\n"); + if(value & ASM_STATUS_MEDIA_OPENAL) { + g_print("MEDIA - OPENAL\n"); } if(value & ASM_STATUS_NOTIFY) { g_print("NOTIFY\n"); @@ -878,10 +1073,224 @@ static void interpret (char *cmd) if(value & ASM_STATUS_VIDEOCALL) { g_print("VIDEOCALL\n"); } + if(value & ASM_STATUS_VOIP) { + g_print("VOIP\n"); + } } } - // End of sound & avsystem interpret + else if(strncmp(cmd, "L", 1) ==0) { + int ret = 0; + mm_sound_device_flags_e flags = MM_SOUND_DEVICE_ALL_FLAG; + MMSoundDeviceList_t device_list; + int type = 0; + int io_direction = 0; + int state = 0; + int id = 0; + char *name = NULL; + MMSoundDevice_t device_h = NULL; + int dret = MM_ERROR_NONE; + + ret = mm_sound_get_current_device_list(flags, &device_list); + if (ret) { + g_print("failed to mm_sound_get_current_device_list(), ret[0x%x]\n", ret); + } else { + g_print("device_list[0x%x], device_h[0x%x]\n", device_list, device_h); + do { + dret = mm_sound_get_next_device (device_list, &device_h); + if (dret) { + debug_error("failed to mm_sound_get_next_device(), dret[0x%x]\n", dret); + } else { + ret = mm_sound_get_device_type(device_h, &type); + if (ret) { + debug_error("failed to mm_sound_get_device_type()\n"); + } + ret = mm_sound_get_device_io_direction(device_h, &io_direction); + if (ret) { + debug_error("failed to mm_sound_get_device_io_direction()\n"); + } + ret = mm_sound_get_device_state(device_h, &state); + if (ret) { + debug_error("failed to mm_sound_get_device_state()\n"); + } + ret = mm_sound_get_device_id(device_h, &id); + if (ret) { + debug_error("failed to mm_sound_get_device_id()\n"); + } + ret = mm_sound_get_device_name(device_h, &name); + if (ret) { + debug_error("failed to mm_sound_get_device_name()\n"); + } + debug_log("*** --- [NEXT DEVICE] type[%d], id[%d], io_direction[%d], state[%d], name[%s]\n", type, id, io_direction, state, name); + } + } while (dret == MM_ERROR_NONE); + do { + dret = MM_ERROR_NONE; + dret = mm_sound_get_prev_device (device_list, &device_h); + if (dret) { + debug_error("failed to mm_sound_get_prev_device(), dret[0x%x]\n", dret); + } else { + ret = mm_sound_get_device_type(device_h, &type); + if (ret) { + debug_error("failed to mm_sound_get_device_type()\n"); + } + ret = mm_sound_get_device_io_direction(device_h, &io_direction); + if (ret) { + debug_error("failed to mm_sound_get_device_io_direction()\n"); + } + ret = mm_sound_get_device_state(device_h, &state); + if (ret) { + debug_error("failed to mm_sound_get_device_state()\n"); + } + ret = mm_sound_get_device_id(device_h, &id); + if (ret) { + debug_error("failed to mm_sound_get_device_id()\n"); + } + ret = mm_sound_get_device_name(device_h, &name); + if (ret) { + debug_error("failed to mm_sound_get_device_name()\n"); + } + debug_log("*** --- [PREV DEVICE] type[%d], id[%d], io_direction[%d], state[%d], name[%s]\n", type, id, io_direction, state, name); + } + } while (dret == MM_ERROR_NONE); + } + } + + else if(strncmp(cmd, "C", 1) ==0) { + int ret = 0; + char input_string[128]; + mm_sound_device_flags_e device_flag_1 = MM_SOUND_DEVICE_ALL_FLAG; + mm_sound_device_flags_e device_flag_2 = MM_SOUND_DEVICE_ALL_FLAG; + mm_sound_device_flags_e device_flag_3 = MM_SOUND_DEVICE_ALL_FLAG; + + char flag_1, flag_2, flag_3; + + fflush(stdin); + g_print ("1. IO_DIRECTION_IN_FLAG\n"); + g_print ("2. IO_DIRECTION_OUT_FLAG\n"); + g_print ("3. IO_DIRECTION_BOTH_FLAG\n"); + g_print ("4. TYPE_INTERNAL_FLAG\n"); + g_print ("5. TYPE_EXTERNAL_FLAG\n"); + g_print ("6. STATE_DEACTIVATED_FLAG\n"); + g_print ("7. STATE_ACTIVATED_FLAG\n"); + g_print ("8. ALL_FLAG\n"); + g_print("> select flag numbers (total 3): (eg. 2 5 7)"); + + if (fgets(input_string, sizeof(input_string)-1, stdin)) { + g_print ("### fgets return NULL\n"); + } + flag_1 = input_string[0]; + flag_2 = input_string[2]; + flag_3 = input_string[4]; + + if(flag_1 == '1') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_1 == '2') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_1 == '3') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_1 == '4') { device_flag_1 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_1 == '5') { device_flag_1 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_1 == '6') { device_flag_1 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_1 == '7') { device_flag_1 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_1 == '8') { device_flag_1 = MM_SOUND_DEVICE_ALL_FLAG; } + if(flag_2 == '1') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_2 == '2') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_2 == '3') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_2 == '4') { device_flag_2 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_2 == '5') { device_flag_2 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_2 == '6') { device_flag_2 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_2 == '7') { device_flag_2 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_2 == '8') { device_flag_2 = MM_SOUND_DEVICE_ALL_FLAG; } + if(flag_3 == '1') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_3 == '2') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_3 == '3') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_3 == '4') { device_flag_3 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_3 == '5') { device_flag_3 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_3 == '6') { device_flag_3 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_3 == '7') { device_flag_3 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_3 == '8') { device_flag_3 = MM_SOUND_DEVICE_ALL_FLAG; } + + ret = mm_sound_add_device_connected_callback(device_flag_1|device_flag_2|device_flag_3, device_connected_cb, NULL); + if (ret) { + g_print("failed to mm_sound_add_device_connected_callback(), ret[0x%x]\n", ret); + } else { + g_print("device_flags[0x%x], callback fun[0x%x]\n", device_flag_1|device_flag_2|device_flag_3, device_connected_cb); + } + } + + else if(strncmp(cmd, "D", 1) ==0) { + int ret = 0; + ret = mm_sound_remove_device_connected_callback(); + if (ret) { + g_print("failed to mm_sound_remove_device_connected_callback(), ret[0x%x]\n", ret); + } + } + + else if(strncmp(cmd, "Q", 1) ==0) { + int ret = 0; + char input_string[128]; + mm_sound_device_flags_e device_flag_1 = MM_SOUND_DEVICE_ALL_FLAG; + mm_sound_device_flags_e device_flag_2 = MM_SOUND_DEVICE_ALL_FLAG; + mm_sound_device_flags_e device_flag_3 = MM_SOUND_DEVICE_ALL_FLAG; + + char flag_1, flag_2, flag_3; + + fflush(stdin); + g_print ("1. IO_DIRECTION_IN_FLAG\n"); + g_print ("2. IO_DIRECTION_OUT_FLAG\n"); + g_print ("3. IO_DIRECTION_BOTH_FLAG\n"); + g_print ("4. TYPE_INTERNAL_FLAG\n"); + g_print ("5. TYPE_EXTERNAL_FLAG\n"); + g_print ("6. STATE_DEACTIVATED_FLAG\n"); + g_print ("7. STATE_ACTIVATED_FLAG\n"); + g_print ("8. ALL_FLAG\n"); + g_print("> select flag numbers (total 3): (eg. 2 5 7)"); + + if (fgets(input_string, sizeof(input_string)-1, stdin)) { + g_print ("### fgets return NULL\n"); + } + flag_1 = input_string[0]; + flag_2 = input_string[2]; + flag_3 = input_string[4]; + + if(flag_1 == '1') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_1 == '2') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_1 == '3') { device_flag_1 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_1 == '4') { device_flag_1 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_1 == '5') { device_flag_1 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_1 == '6') { device_flag_1 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_1 == '7') { device_flag_1 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_1 == '8') { device_flag_1 = MM_SOUND_DEVICE_ALL_FLAG; } + if(flag_2 == '1') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_2 == '2') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_2 == '3') { device_flag_2 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_2 == '4') { device_flag_2 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_2 == '5') { device_flag_2 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_2 == '6') { device_flag_2 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_2 == '7') { device_flag_2 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_2 == '8') { device_flag_2 = MM_SOUND_DEVICE_ALL_FLAG; } + if(flag_3 == '1') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_IN_FLAG; } + else if(flag_3 == '2') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_OUT_FLAG; } + else if(flag_3 == '3') { device_flag_3 = MM_SOUND_DEVICE_IO_DIRECTION_BOTH_FLAG; } + else if(flag_3 == '4') { device_flag_3 = MM_SOUND_DEVICE_TYPE_INTERNAL_FLAG; } + else if(flag_3 == '5') { device_flag_3 = MM_SOUND_DEVICE_TYPE_EXTERNAL_FLAG; } + else if(flag_3 == '6') { device_flag_3 = MM_SOUND_DEVICE_STATE_DEACTIVATED_FLAG; } + else if(flag_3 == '7') { device_flag_3 = MM_SOUND_DEVICE_STATE_ACTIVATED_FLAG; } + else if(flag_3 == '8') { device_flag_3 = MM_SOUND_DEVICE_ALL_FLAG; } + + ret = mm_sound_add_device_information_changed_callback(device_flag_1|device_flag_2|device_flag_3, device_info_changed_cb, NULL); + if (ret) { + g_print("failed to mm_sound_add_device_information_changed_callback(), ret[0x%x]\n", ret); + } else { + g_print("device_flags[0x%x], callback fun[0x%x]\n", device_flag_1|device_flag_2|device_flag_3, device_info_changed_cb); + } + } + + else if(strncmp(cmd, "W", 1) ==0) { + int ret = 0; + ret = mm_sound_remove_device_information_changed_callback(); + if (ret) { + g_print("failed to mm_sound_remove_device_information_changed_callback(), ret[0x%x]\n", ret); + } + } else if (strncmp(cmd, "x", 1) == 0) { quit_program(); } @@ -902,15 +1311,19 @@ static void interpret (char *cmd) //g_timeout_add(100, timeout_menu_display, 0); } -void volume_change_callback(void* data) +void volume_change_callback(volume_type_t type, unsigned int volume, void *user_data) { - volume_type_t* type = (volume_type_t*) data; - - g_volume_type = *type; - mm_sound_volume_get_value(g_volume_type, &g_volume_value); - g_print("Volume Callback Runs :::: MEDIA VALUME %d\n", g_volume_value); + if (type == VOLUME_TYPE_MEDIA) + g_print("Volume Callback Runs :::: MEDIA VALUME %d\n", volume); } +void muteall_change_callback(void* data) +{ + int muteall; + + mm_sound_get_muteall(&muteall); + g_print("Muteall Callback Runs :::: muteall value = %d\n", muteall); +} void audio_route_policy_changed_callback(void* data, system_audio_route_t policy) { @@ -931,14 +1344,23 @@ void audio_route_policy_changed_callback(void* data, system_audio_route_t policy int main(int argc, char *argv[]) { + int ret = 0; stdin_channel = g_io_channel_unix_new(0); g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)input, NULL); g_loop = g_main_loop_new (NULL, 1); g_print("callback function addr :: %p\n", volume_change_callback); g_volume_type = VOLUME_TYPE_MEDIA; - mm_sound_volume_get_value(g_volume_type, &g_volume_value); - mm_sound_volume_add_callback(g_volume_type, volume_change_callback, (void*) &g_volume_type); + ret = mm_sound_volume_get_value(g_volume_type, &g_volume_value); + if(ret < 0) { + g_print("mm_sound_volume_get_value 0x%x\n", ret); + } + + MMSOUND_STRNCPY(g_file_name, POWERON_FILE, MAX_STRING_LEN); + g_print("\nThe input filename is '%s' \n\n",g_file_name); + + mm_sound_add_volume_changed_callback(volume_change_callback, (void*) &g_volume_type); + mm_sound_muteall_add_callback(muteall_change_callback); displaymenu(); g_main_loop_run (g_loop); |