#define STREAM_MANAGER_METHOD_NAME_ACTIVATE_DUCKING "ActivateDucking"
#define STREAM_MANAGER_METHOD_NAME_GET_DUCKING_STATE "GetDuckingState"
#define STREAM_MANAGER_METHOD_NAME_UPDATE_PROPLIST "UpdateProplist"
+#define STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICE "DiscoverRemoteDevice"
+#define STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE "PublishLocalDevice"
/* signal */
#define STREAM_MANAGER_SIGNAL_NAME_VOLUME_CHANGED "VolumeChanged"
#define STREAM_MANAGER_SIGNAL_NAME_DUCKING_STATE_CHANGED "DuckingStateChanged"
METHOD_HANDLER_ACTIVATE_DUCKING,
METHOD_HANDLER_GET_DUCKING_STATE,
METHOD_HANDLER_UPDATE_PROPLIST,
+ METHOD_HANDLER_DISCOVER_REMOTE_DEVICE,
+ METHOD_HANDLER_PUBLISH_LOCAL_DEVICE,
METHOD_HANDLER_MAX
};
" <arg name=\"index\" direction=\"in\" type=\"u\"/>" \
" <arg name=\"proplist\" direction=\"in\" type=\"s\"/>" \
" </method>" \
+ " <method name=\"STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICEE\">" \
+ " <arg name=\"enable\" direction=\"in\" type=\"b\"/>" \
+ " </method>" \
+ " <method name=\"STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE\">" \
+ " <arg name=\"enable\" direction=\"in\" type=\"b\"/>" \
+ " </method>" \
" <signal name=\"STREAM_MANAGER_SIGNAL_NAME_VOLUME_CHANGED\">" \
" <arg name=\"direction\" type=\"s\"/>" \
" <arg name=\"volume_type\" type=\"s\"/>" \
" <arg name=\"peer_info\" type=\"s\"/>" \
" </signal>" \
" <signal name=\"STREAM_MANAGER_SIGNAL_NAME_REMOTE_ACCESS\">" \
- " <arg name=\"index\" type=\"u\"/>" \
- " <arg name=\"permission\" type=\"s\"/>" \
+ " <arg name=\"index\" type=\"u\"/>" \
+ " <arg name=\"permission\" type=\"s\"/>" \
" </signal>" \
" </interface>" \
" <interface name=\"org.freedesktop.DBus.Introspectable\">" \
static void handle_activate_ducking(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_get_ducking_state(DBusConnection *conn, DBusMessage *msg, void *userdata);
static void handle_update_proplist(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 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" },
static pa_dbus_arg_info update_proplist_args[] = { { "type", "s", "in" },
{ "index", "u", "in" },
{ "property", "s", "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 const char* signature_args_for_in[] = {
"s", /* METHOD_HANDLER_GET_STREAM_INFO */
"sas", /* METHOD_HANDLER_GET_PID_OF_LATEST_STREAM */
"ubsud", /* METHOD_HANDLER_ACTIVATE_DUCKING */
"u", /* METHOD_HANDLER_GET_DUCKING_STATE */
- "sus" /* METHOD_HANDLER_UPDATE_PROPLIST */
+ "sus", /* METHOD_HANDLER_UPDATE_PROPLIST */
+ "b", /* METHOD_HANDLER_DISCOVER_REMOTE_DEVICE */
+ "b" /* METHOD_HANDLER_PUBLISH_LOCAL_DEVICE */
};
static pa_dbus_method_handler method_handlers[METHOD_HANDLER_MAX] = {
.arguments = update_proplist_args,
.n_arguments = sizeof(update_proplist_args) / sizeof(pa_dbus_arg_info),
.receive_cb = handle_update_proplist },
+ [METHOD_HANDLER_DISCOVER_REMOTE_DEVICE] = {
+ .method_name = STREAM_MANAGER_METHOD_NAME_DISCOVER_REMOTE_DEVICE,
+ .arguments = discover_remote_device_args,
+ .n_arguments = sizeof(discover_remote_device_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_discover_remote_device },
+ [METHOD_HANDLER_PUBLISH_LOCAL_DEVICE] = {
+ .method_name = STREAM_MANAGER_METHOD_NAME_PUBLISH_LOCAL_DEVICE,
+ .arguments = publish_local_device_args,
+ .n_arguments = sizeof(publish_local_device_args) / sizeof(pa_dbus_arg_info),
+ .receive_cb = handle_publish_local_device },
};
static DBusHandlerResult handle_introspect(DBusConnection *conn, DBusMessage *msg, void *userdata) {
pa_dbus_send_empty_reply(conn, msg);
}
+static uint32_t discover;
+static uint32_t protocol_tcp;
+static uint32_t publish;
+
+static void handle_discover_remote_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_stream_manager *m = (pa_stream_manager*)userdata;
+ pa_module *module;
+ dbus_bool_t enable;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ pa_assert_se(dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_BOOLEAN, &enable,
+ DBUS_TYPE_INVALID));
+
+ pa_log_info("discover module enable(%d)", enable);
+
+ if (enable) {
+ if (discover) {
+ pa_log_error("already loaded");
+ goto error;
+ }
+ if (pa_module_load(&module, m->core, "module-tizenaudio-discover", NULL)) {
+ pa_log_error("failed to load module");
+ goto error;
+ }
+ discover = module->index;
+ } else {
+ if (discover) {
+ pa_module_unload_request_by_index(m->core, discover, true);
+ discover = 0;
+ }
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ return;
+
+error:
+ pa_dbus_send_error(conn, msg, DBUS_ERROR_FAILED, "%s",
+ "org.tizen.multimedia.audio.Internal");
+}
+
+static void handle_publish_local_device(DBusConnection *conn, DBusMessage *msg, void *userdata) {
+ pa_stream_manager *m = (pa_stream_manager*)userdata;
+ pa_module *module;
+ dbus_bool_t enable;
+
+ pa_assert(conn);
+ pa_assert(msg);
+ pa_assert(m);
+
+ pa_assert_se(dbus_message_get_args(msg, NULL,
+ DBUS_TYPE_BOOLEAN, &enable,
+ DBUS_TYPE_INVALID));
+
+ pa_log_info("publish module enable(%d)", enable);
+
+ if (enable) {
+ if (protocol_tcp || publish) {
+ pa_log_error("already loaded");
+ goto error;
+ }
+ if (pa_module_load(&module, m->core, "module-native-protocol-tcp", "auth-anonymous=1")) {
+ pa_log_error("failed to load module");
+ goto error;
+ }
+ protocol_tcp = module->index;
+
+ if (pa_module_load(&module, m->core, "module-tizenaudio-publish", NULL)) {
+ pa_module_unload_request_by_index(m->core, protocol_tcp, true);
+ pa_log_error("failed to load module");
+ goto error;
+ }
+ publish = module->index;
+ } else {
+ if (protocol_tcp) {
+ pa_module_unload_request_by_index(m->core, protocol_tcp, true);
+ protocol_tcp = 0;
+ }
+ if (publish) {
+ pa_module_unload_request_by_index(m->core, publish, true);
+ publish = 0;
+ }
+ }
+
+ pa_dbus_send_empty_reply(conn, msg);
+
+ return;
+
+error:
+ 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;