From: Sangchul Lee Date: Tue, 18 Jun 2019 01:00:41 +0000 (+0900) Subject: Add internal API to set ACM master mode X-Git-Tag: submit/tizen/20190619.053430^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F70%2F208070%2F4;p=platform%2Fcore%2Fapi%2Fsound-manager.git Add internal API to set ACM master mode [Version] 0.5.26 [Issue Type] New feature Change-Id: Ib144b92e53d5a59f38cae1dab65eb6564197e6ce Signed-off-by: Sangchul Lee --- diff --git a/include/sound_manager_internal.h b/include/sound_manager_internal.h index 71c348d..db40ebe 100644 --- a/include/sound_manager_internal.h +++ b/include/sound_manager_internal.h @@ -815,6 +815,21 @@ int sound_manager_get_device_product_id(sound_device_h device, int *product_id); */ int sound_manager_is_stream_on_device_by_id(sound_stream_info_h stream_info, int device_id, bool *is_on); +/** + * @internal + * @brief Sets ACM master mode. + * @since_tizen 5.5 + * + * @remarks The master mode is not enabled as default. + * + * @param[in] enable The master mode to be set: (@c true = master, @c false = slave) + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SOUND_MANAGER_ERROR_NONE Success + * @retval #SOUND_MANAGER_ERROR_INTERNAL Internal error inside the sound system + */ +int sound_manager_set_acm_master_mode(bool enable); + /** * @} */ diff --git a/include/sound_manager_private.h b/include/sound_manager_private.h index 127b5c8..0502cd0 100644 --- a/include/sound_manager_private.h +++ b/include/sound_manager_private.h @@ -341,6 +341,8 @@ int _set_volume_ratio(uint32_t stream_index, sound_stream_direction_e direction, int _set_virtual_stream_volume(virtual_sound_stream_info_s *virtual_stream, double ratio); +int _set_acm_master_mode(bool on); + #ifdef __cplusplus } #endif diff --git a/packaging/capi-media-sound-manager.spec b/packaging/capi-media-sound-manager.spec index 77a015a..e7aabc5 100644 --- a/packaging/capi-media-sound-manager.spec +++ b/packaging/capi-media-sound-manager.spec @@ -1,6 +1,6 @@ Name: capi-media-sound-manager Summary: Sound Manager library -Version: 0.5.25 +Version: 0.5.26 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/sound_manager_internal.c b/src/sound_manager_internal.c index 2e965c2..a2670a1 100644 --- a/src/sound_manager_internal.c +++ b/src/sound_manager_internal.c @@ -695,4 +695,13 @@ int sound_manager_is_stream_on_device_by_id(sound_stream_info_h stream_info, int ret = mm_sound_is_stream_on_device_by_id(stream_h->pa_index, device_id, is_on); return _convert_sound_manager_error_code(__func__, ret); -} \ No newline at end of file +} + +int sound_manager_set_acm_master_mode(bool enable) +{ + int ret = MM_ERROR_NONE; + + ret = _set_acm_master_mode(enable); + + return _convert_sound_manager_error_code(__func__, ret); +} diff --git a/src/sound_manager_private.c b/src/sound_manager_private.c index 0c6f8ee..3a47466 100644 --- a/src/sound_manager_private.c +++ b/src/sound_manager_private.c @@ -48,6 +48,7 @@ #define PA_DEVICE_MANAGER_METHOD_NAME_GET_AVOID_RESAMPLING "GetAvoidResampling" #define PA_DEVICE_MANAGER_METHOD_NAME_SET_SPECIFIC_STREAM "SetSpecificStreamOnly" #define PA_DEVICE_MANAGER_METHOD_NAME_GET_SPECIFIED_STREAM "GetSpecifiedStream" +#define PA_DEVICE_MANAGER_METHOD_NAME_SET_ACM_MODE "SetAcmMode" #define VCONF_PATH_PREFIX_VOLUME "file/private/sound/volume/" #define VCONF_PATH_MAX 64 @@ -2630,3 +2631,40 @@ int _set_virtual_stream_volume(virtual_sound_stream_info_s *virtual_stream, doub return ret; } + +int _set_acm_master_mode(bool on) +{ + int ret = MM_ERROR_NONE; + GVariant *result = NULL; + GDBusConnection *conn = NULL; + GError *err = NULL; + + if ((ret = __get_dbus_connection(&conn))) + return ret; + + result = g_dbus_connection_call_sync(conn, + PA_BUS_NAME, + PA_DEVICE_MANAGER_OBJECT_PATH, + PA_DEVICE_MANAGER_INTERFACE, + PA_DEVICE_MANAGER_METHOD_NAME_SET_ACM_MODE, + g_variant_new("(u)", (unsigned int)on), + NULL, + G_DBUS_CALL_FLAGS_NONE, + 2000, + NULL, + &err); + if (err) { + LOGE("g_dbus_connection_call_sync() for SET ACM MODE error (%s)", err->message); + ret = _convert_dbus_error(err->message); + g_error_free(err); + goto LEAVE; + } else { + LOGI("ACM master mode [%s]", on ? "ON" : "OFF"); + } + +LEAVE: + g_variant_unref(result); + g_object_unref(conn); + + return ret; +} diff --git a/test/sound_manager_test.c b/test/sound_manager_test.c index 4027100..bfa5522 100644 --- a/test/sound_manager_test.c +++ b/test/sound_manager_test.c @@ -97,6 +97,7 @@ enum { CURRENT_STATUS_GET_MAX_MASTER_VOLUME, CURRENT_STATUS_SET_MASTER_VOLUME, CURRENT_STATUS_GET_MASTER_VOLUME, + CURRENT_STATUS_SET_ACM_MASTER_MODE, #endif }; @@ -314,6 +315,8 @@ void _interpret_main_menu(char *cmd) g_menu_state = CURRENT_STATUS_SET_MASTER_VOLUME; else if (strncmp(cmd, "mgv", MAX_CMD_LEN) == 0) g_menu_state = CURRENT_STATUS_GET_MASTER_VOLUME; + else if (strncmp(cmd, "acm", MAX_CMD_LEN) == 0) + g_menu_state = CURRENT_STATUS_SET_ACM_MASTER_MODE; #endif else if (strncmp(cmd, "q", MAX_CMD_LEN) == 0) { g_print("closing the test suite\n"); @@ -403,6 +406,9 @@ void display_sub_basic() g_print("sfp. *Set Filter Preset\t"); g_print("uft. *Unset Filter\n"); g_print("isd. *Is Stream on Device by ID\n"); +#ifndef TIZEN_FEATURE_TV_PROD + g_print("acm. *Set ACM Master mode\n"); +#endif g_print(" * is for internal usage.\n"); g_print("=========================================================================================\n"); } @@ -548,6 +554,8 @@ static void displaymenu() g_print("*** input master volume level\n"); else if (g_menu_state == CURRENT_STATUS_GET_MASTER_VOLUME) g_print("*** press enter to get master volume level\n"); + else if (g_menu_state == CURRENT_STATUS_SET_ACM_MASTER_MODE) + g_print("*** input master mode enable or disable (0:disable 1:enable)\n"); #endif else { g_print("*** unknown status.\n"); @@ -2149,6 +2157,24 @@ static void interpret(char *cmd) reset_menu_state(); break; } + case CURRENT_STATUS_SET_ACM_MASTER_MODE: { + int ret = SOUND_MANAGER_ERROR_NONE; + int selection = atoi(cmd); + + if (selection < 0 || selection > 1) { + g_print("invalid selection(%d)\n", selection); + reset_menu_state(); + break; + } + + if ((ret = sound_manager_set_acm_master_mode((bool)selection))) + g_print("fail to sound_manager_set_acm_master_mode(), ret(0x%x)\n", ret); + else + g_print("success to sound_manager_set_acm_master_mode(), ret(0x%x)\n", ret); + + reset_menu_state(); + break; + } #endif } g_timeout_add(100, timeout_menu_display, 0);