#include "communicator.h"
#include "hal-interface.h"
+#include "stream-manager.h"
#include "device-manager.h"
#define SHARED_DEVICE_MANAGER "tizen-device-manager"
" <arg name=\"device_id\" direction=\"in\" type=\"i\"/>\n" \
" <arg name=\"sample_rate\" direction=\"out\" type=\"u\"/>\n" \
" </method>\n" \
+ " <method name=\"SetSpecificStreamOnly\">\n" \
+ " <arg name=\"device_id\" direction=\"in\" type=\"i\"/>\n" \
+ " <arg name=\"stream_role\" direction=\"in\" type=\"s\"/>\n" \
+ " </method>\n" \
+ " <method name=\"GetSpecifiedStream\">\n" \
+ " <arg name=\"device_id\" direction=\"in\" type=\"i\"/>\n" \
+ " <arg name=\"stream_role\" direction=\"out\" type=\"s\"/>\n" \
+ " </method>\n" \
" <method name=\"DumpDeviceList\">\n" \
" </method>\n" \
" <method name=\"TestStatusChange\">\n" \
static void handle_get_supported_sample_rates(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_set_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_sample_rate(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_set_specific_stream_only(DBusConnection *conn, DBusMessage *msg, void *userdata);
+static void handle_get_specified_stream(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_load_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_unload_sink(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_unload_sink_with_device_string(DBusConnection *conn, DBusMessage *msg, void *userdata);
METHOD_HANDLER_GET_SUPPORTED_SAMPLE_RATES,
METHOD_HANDLER_SET_SAMPLE_RATE,
METHOD_HANDLER_GET_SAMPLE_RATE,
+ METHOD_HANDLER_SET_SPECIFIC_STREAM_ONLY,
+ METHOD_HANDLER_GET_SPECIFIED_STREAM,
METHOD_HANDLER_DUMP_DEVICE_LIST,
METHOD_HANDLER_STATUS_TEST,
METHOD_HANDLER_MAX
[METHOD_HANDLER_GET_SAMPLE_RATE] = {
.method_name = "GetSampleRate",
.receive_cb = handle_get_sample_rate },
+ [METHOD_HANDLER_SET_SPECIFIC_STREAM_ONLY] = {
+ .method_name = "SetSpecificStreamOnly",
+ .receive_cb = handle_set_specific_stream_only },
+ [METHOD_HANDLER_GET_SPECIFIED_STREAM] = {
+ .method_name = "GetSpecifiedStream",
+ .receive_cb = handle_get_specified_stream },
[METHOD_HANDLER_DUMP_DEVICE_LIST] = {
.method_name = "DumpDeviceList",
.receive_cb = handle_dump_device_list },
dbus_message_unref(reply);
}
+static void handle_set_specific_stream_only(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_device_manager *dm;
+ DBusMessage *reply = NULL;
+ dbus_int32_t device_id;
+ char *stream_role;
+ pa_tz_device *device;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(userdata);
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ dm = (pa_device_manager *)userdata;
+ pa_assert_se(dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_INT32, &device_id,
+ DBUS_TYPE_STRING, &stream_role,
+ DBUS_TYPE_INVALID));
+
+ pa_log_info("Set the device(id:%d) only for the stream role(%s)", device_id, stream_role);
+
+ if (!(device = _device_list_get_device_by_id(dm, device_id))) {
+ pa_log_error("could not find any device with id:%d", device_id);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", "org.tizen.multimedia.audio.InvalidArgument");
+ return;
+ }
+ if (!is_usb_output_device(device)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_NOT_SUPPORTED, "%s", "org.tizen.multimedia.audio.PolicyInternal");
+ return;
+ }
+
+ device->specified_stream_role = stream_role;
+
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
+static void handle_get_specified_stream(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_device_manager *dm;
+ DBusMessage *reply = NULL;
+ dbus_int32_t device_id;
+ char *specified_stream_role;
+ pa_tz_device *device;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(userdata);
+
+ dm = (pa_device_manager *)userdata;
+
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+
+ pa_assert_se(dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_INT32, &device_id,
+ DBUS_TYPE_INVALID));
+
+ pa_log_info("Get specified stream role for the device(id:%d)", device_id);
+
+ if (!(device = _device_list_get_device_by_id(dm, device_id))) {
+ pa_log_error("could not find any device with id:%d", device_id);
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "%s", "org.tizen.multimedia.audio.InvalidArgument");
+ return;
+ }
+ if (!is_usb_output_device(device)) {
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_NOT_SUPPORTED, "%s", "org.tizen.multimedia.audio.PolicyInternal");
+ return;
+ }
+
+ specified_stream_role = device->specified_stream_role;
+
+ pa_log_info("stream role(%s) is specified for the device(id:%d)", device->specified_stream_role, device_id);
+ pa_assert_se((reply = dbus_message_new_method_return(msg)));
+ pa_assert_se(dbus_message_append_args(reply, DBUS_TYPE_STRING, &specified_stream_role, DBUS_TYPE_INVALID));
+ pa_assert_se(dbus_connection_send(conn, reply, NULL));
+ dbus_message_unref(reply);
+}
+
static void handle_test_device_status_change(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_device_manager *dm = (pa_device_manager *)userdata;
char *type;