Add internal API to set ACM master mode 70/208070/4 accepted/tizen/unified/20190621.121848 submit/tizen/20190619.053430 submit/tizen/20190620.095920
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 18 Jun 2019 01:00:41 +0000 (10:00 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 19 Jun 2019 03:01:37 +0000 (12:01 +0900)
[Version] 0.5.26
[Issue Type] New feature

Change-Id: Ib144b92e53d5a59f38cae1dab65eb6564197e6ce
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/sound_manager_internal.h
include/sound_manager_private.h
packaging/capi-media-sound-manager.spec
src/sound_manager_internal.c
src/sound_manager_private.c
test/sound_manager_test.c

index 71c348d..db40ebe 100644 (file)
@@ -816,6 +816,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);
+
+/**
  * @}
  */
 
index 127b5c8..0502cd0 100644 (file)
@@ -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
index 77a015a..e7aabc5 100644 (file)
@@ -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
index 2e965c2..a2670a1 100644 (file)
@@ -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);
+}
index 0c6f8ee..3a47466 100644 (file)
@@ -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;
+}
index 4027100..bfa5522 100644 (file)
@@ -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);