From c972442a7c4a4a7681092058ddc9ca4ef58eb384 Mon Sep 17 00:00:00 2001 From: sletz Date: Wed, 22 Apr 2009 13:53:16 +0000 Subject: [PATCH] D-Bus control for switch master API. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3519 0c269be4-1314-0410-8aa9-9f06e86f4224 --- dbus/controller.c | 16 ++++++++++++++++ dbus/controller_iface_control.c | 15 +++++++++++++++ dbus/controller_internal.h | 5 +++++ example-clients/jack_control | 4 ++++ linux/alsa/JackAlsaDriver.cpp | 2 ++ 5 files changed, 42 insertions(+) diff --git a/dbus/controller.c b/dbus/controller.c index 110bf5d9..bd1c6a9b 100644 --- a/dbus/controller.c +++ b/dbus/controller.c @@ -263,6 +263,22 @@ jack_controller_stop_server( return TRUE; } +bool +jack_controller_switch_master( + struct jack_controller * controller_ptr, + void *dbus_call_context_ptr) +{ + if (!jackctl_server_switch_master( + controller_ptr->server, + controller_ptr->driver)) + { + jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Failed to switch master"); + return FALSE; + } + + return TRUE; +} + void * jack_controller_create( DBusConnection *connection) diff --git a/dbus/controller_iface_control.c b/dbus/controller_iface_control.c index 5ad68391..fb0dab75 100644 --- a/dbus/controller_iface_control.c +++ b/dbus/controller_iface_control.c @@ -105,6 +105,17 @@ jack_control_run_method( jack_controller_control_send_signal_server_stopped(); } } + else if (strcmp (call->method_name, "SwitchMaster") == 0) + { + if (!jack_controller_switch_master(controller_ptr, call)) + { + jack_error ("Failed to switch master"); + } + else + { + jack_controller_control_send_signal_server_stopped(); + } + } else if (strcmp (call->method_name, "GetLoad") == 0) { if (!controller_ptr->started) @@ -252,6 +263,9 @@ JACK_DBUS_METHOD_ARGUMENTS_END JACK_DBUS_METHOD_ARGUMENTS_BEGIN(StopServer) JACK_DBUS_METHOD_ARGUMENTS_END +JACK_DBUS_METHOD_ARGUMENTS_BEGIN(SwitchMaster) +JACK_DBUS_METHOD_ARGUMENTS_END + JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetLoad) JACK_DBUS_METHOD_ARGUMENT("load", "d", true) JACK_DBUS_METHOD_ARGUMENTS_END @@ -295,6 +309,7 @@ JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHOD_DESCRIBE(IsStarted, NULL) JACK_DBUS_METHOD_DESCRIBE(StartServer, NULL) JACK_DBUS_METHOD_DESCRIBE(StopServer, NULL) + JACK_DBUS_METHOD_DESCRIBE(SwitchMaster, NULL) JACK_DBUS_METHOD_DESCRIBE(GetLoad, NULL) JACK_DBUS_METHOD_DESCRIBE(GetXruns, NULL) JACK_DBUS_METHOD_DESCRIBE(GetSampleRate, NULL) diff --git a/dbus/controller_internal.h b/dbus/controller_internal.h index 4c4c9ed5..a4cef0f6 100644 --- a/dbus/controller_internal.h +++ b/dbus/controller_internal.h @@ -81,6 +81,11 @@ jack_controller_stop_server( struct jack_controller *controller_ptr, void *dbus_call_context_ptr); +bool +jack_controller_switch_master( + struct jack_controller *controller_ptr, + void *dbus_call_context_ptr); + bool jack_controller_select_driver( struct jack_controller *controller_ptr, diff --git a/example-clients/jack_control b/example-clients/jack_control index 42c1fc3c..c7b2dab5 100755 --- a/example-clients/jack_control +++ b/example-clients/jack_control @@ -109,6 +109,7 @@ def main(): print " status - check whether jack server is started, return value is 0 if runing and 1 otherwise" print " start - start jack server if not currently started" print " stop - stop jack server if currenly started" + print " sm - switch master to currently selected driver" print " dl - get list of available drivers" print " dg - get currently selected driver" print " ds - select driver" @@ -155,6 +156,9 @@ def main(): elif arg == 'stop': print "--- stop" control_iface.StopServer() + elif arg == 'sm': + print "--- switch master driver" + control_iface.SwitchMaster() elif arg == 'ism': if control_iface.IsManuallyActivated(): print "Manually activated" diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index f59d927d..7ed400d4 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -51,6 +51,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "audio_reserve.h" +//#define DEBUG_WAKEUP 1 + namespace Jack {