3 name_base
= 'org.jackaudio'
4 control_interface_name
= name_base
+ '.JackControl'
5 configure_interface_name
= name_base
+ '.Configure'
6 service_name
= name_base
+ '.service'
10 from traceback
import print_exc
14 def bool_convert(str_value
):
15 if str_value
.lower() == "false":
18 if str_value
.lower() == "off":
21 if str_value
.lower() == "no":
27 if str_value
.lower() == "(null)":
30 return bool(str_value
)
32 def dbus_type_to_python_type(dbus_value
):
33 if type(dbus_value
) == dbus
.Boolean
:
34 return bool(dbus_value
)
35 if type(dbus_value
) == dbus
.Int32
or type(dbus_value
) == dbus
.UInt32
:
36 return int(dbus_value
)
39 def python_type_to_jackdbus_type(value
, type_char
):
40 type_char
= str(type_char
)
43 return bool_convert(value
);
44 elif type_char
== "y":
45 return dbus
.Byte(value
);
46 elif type_char
== "i":
47 return dbus
.Int32(value
)
48 elif type_char
== "u":
49 return dbus
.UInt32(value
)
53 def dbus_type_to_type_string(dbus_value
):
54 if type(dbus_value
) == dbus
.Boolean
:
56 if type(dbus_value
) == dbus
.Int32
:
58 if type(dbus_value
) == dbus
.UInt32
:
60 if type(dbus_value
) == dbus
.Byte
:
62 if type(dbus_value
) == dbus
.String
:
65 return None # throw exception here?
67 def dbus_typesig_to_type_string(type_char
):
68 type_char
= str(type_char
)
81 return None # throw exception here?
83 def get_parameters(iface
, path
):
84 params
= iface
.GetParametersInfo(path
)
88 typestr
= dbus_typesig_to_type_string(param
[0])
93 isset
, default
, value
= iface
.GetParameterValue(path
+ [name
])
99 value
= dbus_type_to_python_type(value
)
100 default
= dbus_type_to_python_type(default
)
102 print "%20s: %s (%s:%s:%s:%s)" %(name
, descr
, typestr
, isset
, default
, value
)
105 if len(sys
.argv
) == 1:
106 print "Usage: %s [command] [command] ..." % os
.path
.basename(sys
.argv
[0])
108 print " exit - exit jack dbus service (stops jack server if currently running)"
109 print " status - check whether jack server is started, return value is 0 if running and 1 otherwise"
110 print " start - start jack server if not currently started"
111 print " stop - stop jack server if currently started"
112 print " sm - switch master to currently selected driver"
113 print " dl - get list of available drivers"
114 print " dg - get currently selected driver"
115 print " ds <driver> - select driver"
116 print " dp - get parameters of currently selected driver"
117 print " dpd <param> - get long description for driver parameter"
118 print " dps <param> <value> - set driver parameter"
119 print " asd <driver> - add slave driver"
120 print " rsd <driver> - remove slave driver"
121 print " il - get list of available internals"
122 print " ip <name> - get parameters of given internal"
123 print " ipd <name> <param> - get long description for internal parameter"
124 print " ips <name> <param> <value> - set internal parameter"
125 print " iload <name> - load internal"
126 print " iunload <name> - unload internal"
127 print " ep - get engine parameters"
128 print " epd <param> - get long description for engine parameter"
129 print " eps <param> <value> - set engine parameter"
132 bus
= dbus
.SessionBus()
134 controller
= bus
.get_object(service_name
, "/org/jackaudio/Controller")
135 control_iface
= dbus
.Interface(controller
, control_interface_name
)
136 configure_iface
= dbus
.Interface(controller
, configure_interface_name
)
140 while index
< len(sys
.argv
):
141 arg
= sys
.argv
[index
]
147 elif arg
== "status":
149 if control_iface
.IsStarted():
157 control_iface
.StartServer()
160 control_iface
.StopServer()
162 print "--- switch master driver"
163 control_iface
.SwitchMaster()
165 if control_iface
.IsManuallyActivated():
166 print "Manually activated"
168 print "Automatically activated"
170 print "--- drivers list"
171 is_range
, is_strict
, is_fake_values
, values
= configure_iface
.GetParameterConstraint(['engine', 'driver'])
175 print "--- get selected driver"
176 isset
, default
, value
= configure_iface
.GetParameterValue(['engine', 'driver'])
179 if index
>= len(sys
.argv
):
180 print "driver select command requires driver name argument"
183 arg
= sys
.argv
[index
]
186 print "--- driver select \"%s\"" % arg
187 configure_iface
.SetParameterValue(['engine', 'driver'], dbus
.String(arg
))
189 print "--- get driver parameters (type:isset:default:value)"
190 get_parameters(configure_iface
, ['driver'])
192 if index
>= len(sys
.argv
):
193 print "get driver parameter long description command requires parameter name argument"
196 param
= sys
.argv
[index
]
199 print "--- get driver parameter description (%s)" % param
200 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
203 if index
+ 1 >= len(sys
.argv
):
204 print "driver parameter set command requires parameter name and value arguments"
207 param
= sys
.argv
[index
]
209 value
= sys
.argv
[index
]
212 print "--- driver param set \"%s\" -> \"%s\"" % (param
, value
)
214 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
215 configure_iface
.SetParameterValue(['driver', param
], python_type_to_jackdbus_type(value
, type_char
))
217 print "--- get engine parameters (type:isset:default:value)"
218 get_parameters(configure_iface
, ['engine'])
220 if index
>= len(sys
.argv
):
221 print "get engine parameter long description command requires parameter name argument"
224 param_name
= sys
.argv
[index
]
227 print "--- get engine parameter description (%s)" % param_name
229 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param_name
])
232 if index
+ 1 >= len(sys
.argv
):
233 print "engine parameter set command requires parameter name and value arguments"
236 param
= sys
.argv
[index
]
238 value
= sys
.argv
[index
]
241 print "--- engine param set \"%s\" -> \"%s\"" % (param
, value
)
243 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param
])
244 configure_iface
.SetParameterValue(['engine', param
], python_type_to_jackdbus_type(value
, type_char
))
246 print "--- internals list"
247 is_leaf
, internals
= configure_iface
.ReadContainer(['internals'])
248 for internal
in internals
:
251 print "--- get internal parameters (type:isset:default:value)"
253 if index
>= len(sys
.argv
):
254 print "internal parameters command requires internal name argument"
257 internal_name
= sys
.argv
[index
]
260 get_parameters(configure_iface
, ['internals', internal_name
])
262 if index
+ 1 >= len(sys
.argv
):
263 print "get internal parameter long description command requires internal and parameter name arguments"
266 name
= sys
.argv
[index
]
268 param
= sys
.argv
[index
]
271 print "--- get internal parameter description (%s)" % param
272 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', name
, param
])
275 if index
+ 2 >= len(sys
.argv
):
276 print "get internal parameter long description command requires internal, parameter name and value arguments"
279 internal_name
= sys
.argv
[index
]
281 param
= sys
.argv
[index
]
283 value
= sys
.argv
[index
]
286 print "--- internal param set \"%s\" -> \"%s\"" % (param
, value
)
288 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', internal_name
, param
])
289 configure_iface
.SetParameterValue(['internals', internal_name
, param
], python_type_to_jackdbus_type(value
, type_char
))
291 print "--- load internal"
293 if index
>= len(sys
.argv
):
294 print "load internal command requires internal name argument"
297 name
= sys
.argv
[index
]
299 result
= control_iface
.LoadInternal(name
)
300 elif arg
== 'iunload':
301 print "--- unload internal"
303 if index
>= len(sys
.argv
):
304 print "unload internal command requires internal name argument"
307 name
= sys
.argv
[index
]
309 result
= control_iface
.UnloadInternal(name
)
311 print "--- add slave driver"
313 if index
>= len(sys
.argv
):
314 print "add slave driver command requires driver name argument"
317 name
= sys
.argv
[index
]
319 result
= control_iface
.AddSlaveDriver(name
)
321 print "--- remove slave driver"
323 if index
>= len(sys
.argv
):
324 print "remove slave driver command requires driver name argument"
327 name
= sys
.argv
[index
]
329 result
= control_iface
.RemoveSlaveDriver(name
)
331 print "Unknown command '%s'" % arg
332 except dbus
.DBusException
, e
:
333 print "DBus exception: %s" % str(e
)
335 if __name__
== '__main__':