stream-manager-dbus: Add rpi playback route method handler 36/259036/7 accepted/tizen/unified/20210708.131533 submit/tizen/20210705.072009 submit/tizen/20210707.025110
authorSeungbae Shin <seungbae.shin@samsung.com>
Mon, 31 May 2021 07:23:04 +0000 (16:23 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Mon, 5 Jul 2021 03:18:49 +0000 (12:18 +0900)
[Version] 13.0.67
[Issue Type] Internal feature

Change-Id: Iff4048c39bb7601066f21b58a2176a50377c96b9

packaging/pulseaudio-modules-tizen.spec
src/stream-manager-dbus-priv.h
src/stream-manager-dbus.c

index aeedf99..2d54e44 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          13.0.66
+Version:          13.0.67
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 940940a..47ea970 100644 (file)
@@ -57,6 +57,7 @@
 #define STREAM_MANAGER_METHOD_NAME_SET_REMOTE_PERMISSION             "SetRemotePermission"
 #define STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICE            "DiscoverRemoteDevice"
 #define STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE              "PublishLocalDevice"
+#define STREAM_MANAGER_METHOD_NAME_SET_RPI_PLAYBACK_ROUTE            "SetRpiPlaybackRoute"
 /* signal */
 #define STREAM_MANAGER_SIGNAL_NAME_VOLUME_CHANGED                    "VolumeChanged"
 #define STREAM_MANAGER_SIGNAL_NAME_DUCKING_STATE_CHANGED             "DuckingStateChanged"
@@ -95,6 +96,7 @@ enum method_handler_index {
     METHOD_HANDLER_NAME_SET_REMOTE_PERMISSION,
     METHOD_HANDLER_DISCOVER_REMOTE_DEVICE,
     METHOD_HANDLER_PUBLISH_LOCAL_DEVICE,
+    METHOD_HANDLER_SET_RPI_PLAYBACK_ROUTE,
     METHOD_HANDLER_MAX
 };
 
index e68cda6..f10e221 100644 (file)
@@ -74,6 +74,7 @@ static void handle_get_ducking_state(DBusConnection *conn, DBusMessage *msg, voi
 static void handle_set_remote_permission(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void handle_discover_remote_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void handle_publish_local_device(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_rpi_playback_route(DBusConnection *conn, DBusMessage *msg, void *userdata);
 static void send_volume_changed_signal(DBusConnection *conn, const char *direction, const char *volume_type, const uint32_t volume_level);
 
 static pa_dbus_arg_info get_stream_info_args[]  = { { "stream_type", "s", "in" },
@@ -188,6 +189,7 @@ static pa_dbus_arg_info set_remote_permission_args[] = { { "type", "s", "in" },
                                                    { "allowed", "b", "in" } };
 static pa_dbus_arg_info discover_remote_device_args[] = { { "enable", "b", "in" } };
 static pa_dbus_arg_info publish_local_device_args[] = { { "enable", "b", "in" } };
+static pa_dbus_arg_info set_rpi_playback_route_args[] = { { "type", "u", "in" } };
 
 static const char* signature_args_for_in[] = {
     "s",        /* METHOD_HANDLER_GET_STREAM_INFO */
@@ -220,7 +222,8 @@ static const char* signature_args_for_in[] = {
     "u",        /* METHOD_HANDLER_GET_DUCKING_STATE */
     "sub",      /* METHOD_HANDLER_SET_REMOTE_PERMISSION */
     "b",        /* METHOD_HANDLER_DISCOVER_REMOTE_DEVICE */
-    "b"         /* METHOD_HANDLER_PUBLISH_LOCAL_DEVICE */
+    "b",        /* METHOD_HANDLER_PUBLISH_LOCAL_DEVICE */
+    "u",        /* METHOD_HANDLER_SET_RPI_PLAYBACK_ROUTE */
     };
 
 static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
@@ -379,6 +382,11 @@ static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
         .arguments = publish_local_device_args,
         .n_arguments = sizeof(publish_local_device_args) / sizeof(pa_dbus_arg_info),
         .receive_cb = handle_publish_local_device },
+    [METHOD_HANDLER_SET_RPI_PLAYBACK_ROUTE] = {
+        .method_name = STREAM_MANAGER_METHOD_NAME_SET_RPI_PLAYBACK_ROUTE,
+        .arguments = set_rpi_playback_route_args,
+        .n_arguments = sizeof(set_rpi_playback_route_args) / sizeof(pa_dbus_arg_info),
+        .receive_cb = handle_set_rpi_playback_route }
 };
 
 static int get_stream_type(const char *direction, stream_type_t *stream_type) {
@@ -2393,6 +2401,33 @@ error:
                             "org.tizen.multimedia.audio.Internal");
 }
 
+static void handle_set_rpi_playback_route(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+    pa_stream_manager *m = (pa_stream_manager *)userdata;
+    dbus_uint32_t type;
+    hal_route_option route_option;
+
+    pa_assert(conn);
+    pa_assert(msg);
+    pa_assert(m);
+
+    pa_assert_se(dbus_message_get_args(msg, NULL,
+                                       DBUS_TYPE_UINT32, &type,
+                                       DBUS_TYPE_INVALID));
+
+    pa_log_info("setting rpi playback route(%u)", type);
+
+    memset(&route_option, 0, sizeof(hal_route_option));
+    route_option.role = STREAM_ROLE_MEDIA;
+    route_option.name = "rpi playback route";
+    route_option.value = (int32_t)type;
+
+    if (pa_hal_interface_update_route_option(m->hal, &route_option) == 0)
+        pa_dbus_send_empty_reply(conn, msg);
+    else
+        pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "%s",
+                           "org.tizen.multimedia.audio.Internal");
+}
+
 static DBusHandlerResult handle_methods(DBusConnection *conn, DBusMessage *msg, void *userdata) {
     int idx = 0;
     pa_stream_manager *m = (pa_stream_manager *)userdata;