From 51f6a07821a24e7b5cc9a9a07b740fa1ee7fae4e Mon Sep 17 00:00:00 2001 From: sletz Date: Wed, 6 May 2009 14:58:37 +0000 Subject: [PATCH] D-Bus access for jackctl_server_add_slave/jackctl_server_remove_slave API. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3530 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 3 ++- dbus/controller.c | 38 ++++++++++++++++++++++++++++++++ dbus/controller_iface_control.c | 49 +++++++++++++++++++++++++++++++++++++++++ dbus/controller_internal.h | 10 +++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 716edef4..63e954ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,7 +27,8 @@ Paul Davis 2009-05-06 Stephane Letz - * Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). + * Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). + * D-Bus access for jackctl_server_add_slave/jackctl_server_remove_slave API. 2009-05-05 Stephane Letz diff --git a/dbus/controller.c b/dbus/controller.c index bd1c6a9b..f5c53f69 100644 --- a/dbus/controller.c +++ b/dbus/controller.c @@ -392,6 +392,44 @@ fail: } bool +jack_controller_add_slave( + struct jack_controller *controller_ptr, + const char * driver_name) +{ + jackctl_driver_t *driver; + + driver = jack_controller_find_driver(controller_ptr->server, driver_name); + + if (driver == NULL) + { + return false; + } + + jack_info("driver \"%s\" selected", driver_name); + + return jackctl_server_add_slave(controller_ptr->server, driver); +} + +bool +jack_controller_remove_slave( + struct jack_controller *controller_ptr, + const char * driver_name) +{ + jackctl_driver_t *driver; + + driver = jack_controller_find_driver(controller_ptr->server, driver_name); + + if (driver == NULL) + { + return false; + } + + jack_info("driver \"%s\" selected", driver_name); + + return jackctl_server_remove_slave(controller_ptr->server, driver); +} + +bool jack_controller_load_internal( struct jack_controller *controller_ptr, const char * internal_name) diff --git a/dbus/controller_iface_control.c b/dbus/controller_iface_control.c index fb0dab75..f55fb608 100644 --- a/dbus/controller_iface_control.c +++ b/dbus/controller_iface_control.c @@ -215,6 +215,44 @@ jack_control_run_method( "jack_controller_load_internal failed for internal (%s)", internal_name); } } + else if (strcmp (call->method_name, "AddSlave") == 0) + { + const char *driver_name; + + if (!jack_dbus_get_method_args(call, DBUS_TYPE_STRING, &driver_name, DBUS_TYPE_INVALID)) + { + /* The method call had invalid arguments meaning that + * get_method_args() has constructed an error for us. + */ + goto exit; + } + + if (!jack_controller_add_slave(controller_ptr, driver_name)) { + jack_dbus_error( + call, + JACK_DBUS_ERROR_GENERIC, + "jack_controller_add_slave failed for driver (%s)", driver_name); + } + } + else if (strcmp (call->method_name, "RemoveSlave") == 0) + { + const char *driver_name; + + if (!jack_dbus_get_method_args(call, DBUS_TYPE_STRING, &driver_name, DBUS_TYPE_INVALID)) + { + /* The method call had invalid arguments meaning that + * get_method_args() has constructed an error for us. + */ + goto exit; + } + + if (!jack_controller_remove_slave(controller_ptr, driver_name)) { + jack_dbus_error( + call, + JACK_DBUS_ERROR_GENERIC, + "jack_controller_remove_slave failed for driver (%s)", driver_name); + } + } else if (strcmp (call->method_name, "UnloadInternal") == 0) { const char *internal_name; @@ -234,6 +272,7 @@ jack_control_run_method( "jack_controller_unload_internal failed for internal (%s)", internal_name); } } + else { return false; @@ -305,6 +344,14 @@ JACK_DBUS_METHOD_ARGUMENTS_BEGIN(UnlooadInternal) JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) JACK_DBUS_METHOD_ARGUMENTS_END +JACK_DBUS_METHOD_ARGUMENTS_BEGIN(AddSlave) + JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) +JACK_DBUS_METHOD_ARGUMENTS_END + +JACK_DBUS_METHOD_ARGUMENTS_BEGIN(RemoveSlave) + JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) +JACK_DBUS_METHOD_ARGUMENTS_END + JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHOD_DESCRIBE(IsStarted, NULL) JACK_DBUS_METHOD_DESCRIBE(StartServer, NULL) @@ -320,6 +367,8 @@ JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHOD_DESCRIBE(ResetXruns, NULL) JACK_DBUS_METHOD_DESCRIBE(LoadInternal, NULL) JACK_DBUS_METHOD_DESCRIBE(UnlooadInternal, NULL) + JACK_DBUS_METHOD_DESCRIBE(AddSlave, NULL) + JACK_DBUS_METHOD_DESCRIBE(RemoveSlave, NULL) JACK_DBUS_METHODS_END JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(ServerStarted) diff --git a/dbus/controller_internal.h b/dbus/controller_internal.h index a4cef0f6..a7711a8d 100644 --- a/dbus/controller_internal.h +++ b/dbus/controller_internal.h @@ -85,6 +85,16 @@ bool jack_controller_switch_master( struct jack_controller *controller_ptr, void *dbus_call_context_ptr); + +bool +jack_controller_add_slave( + struct jack_controller *controller_ptr, + const char * driver_name); + +bool +jack_controller_remove_slave( + struct jack_controller *controller_ptr, + const char * driver_name); bool jack_controller_select_driver( -- 2.11.4.GIT