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 " dpr <param> - reset driver parameter to its default value"
120 print " asd <driver> - add slave driver"
121 print " rsd <driver> - remove slave driver"
122 print " il - get list of available internals"
123 print " ip <name> - get parameters of given internal"
124 print " ipd <name> <param> - get long description for internal parameter"
125 print " ips <name> <param> <value> - set internal parameter"
126 print " ipr <name> <param> - reset internal parameter to its default value"
127 print " iload <name> - load internal"
128 print " iunload <name> - unload internal"
129 print " ep - get engine parameters"
130 print " epd <param> - get long description for engine parameter"
131 print " eps <param> <value> - set engine parameter"
132 print " epr <param> - reset engine parameter to its default value"
135 bus
= dbus
.SessionBus()
137 controller
= bus
.get_object(service_name
, "/org/jackaudio/Controller")
138 control_iface
= dbus
.Interface(controller
, control_interface_name
)
139 configure_iface
= dbus
.Interface(controller
, configure_interface_name
)
143 while index
< len(sys
.argv
):
144 arg
= sys
.argv
[index
]
150 elif arg
== "status":
152 if control_iface
.IsStarted():
160 control_iface
.StartServer()
163 control_iface
.StopServer()
165 print "--- switch master driver"
166 control_iface
.SwitchMaster()
168 if control_iface
.IsManuallyActivated():
169 print "Manually activated"
171 print "Automatically activated"
173 print "--- drivers list"
174 is_range
, is_strict
, is_fake_values
, values
= configure_iface
.GetParameterConstraint(['engine', 'driver'])
178 print "--- get selected driver"
179 isset
, default
, value
= configure_iface
.GetParameterValue(['engine', 'driver'])
182 if index
>= len(sys
.argv
):
183 print "driver select command requires driver name argument"
186 arg
= sys
.argv
[index
]
189 print "--- driver select \"%s\"" % arg
190 configure_iface
.SetParameterValue(['engine', 'driver'], dbus
.String(arg
))
192 print "--- get driver parameters (type:isset:default:value)"
193 get_parameters(configure_iface
, ['driver'])
195 if index
>= len(sys
.argv
):
196 print "get driver parameter long description command requires parameter name argument"
199 param
= sys
.argv
[index
]
202 print "--- get driver parameter description (%s)" % param
203 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
206 if index
+ 1 >= len(sys
.argv
):
207 print "driver parameter set command requires parameter name and value arguments"
210 param
= sys
.argv
[index
]
212 value
= sys
.argv
[index
]
215 print "--- driver param set \"%s\" -> \"%s\"" % (param
, value
)
217 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
218 configure_iface
.SetParameterValue(['driver', param
], python_type_to_jackdbus_type(value
, type_char
))
220 if index
>= len(sys
.argv
):
221 print "driver parameter reset command requires parameter name argument"
224 param
= sys
.argv
[index
]
227 print "--- driver param reset \"%s\"" % param
228 configure_iface
.ResetParameterValue(['driver', param
])
230 print "--- get engine parameters (type:isset:default:value)"
231 get_parameters(configure_iface
, ['engine'])
233 if index
>= len(sys
.argv
):
234 print "get engine parameter long description command requires parameter name argument"
237 param_name
= sys
.argv
[index
]
240 print "--- get engine parameter description (%s)" % param_name
242 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param_name
])
245 if index
+ 1 >= len(sys
.argv
):
246 print "engine parameter set command requires parameter name and value arguments"
249 param
= sys
.argv
[index
]
251 value
= sys
.argv
[index
]
254 print "--- engine param set \"%s\" -> \"%s\"" % (param
, value
)
256 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param
])
257 configure_iface
.SetParameterValue(['engine', param
], python_type_to_jackdbus_type(value
, type_char
))
259 if index
>= len(sys
.argv
):
260 print "engine parameter reset command requires parameter name"
263 param
= sys
.argv
[index
]
266 print "--- engine param reset \"%s\"" % param
268 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param
])
269 configure_iface
.ResetParameterValue(['engine', param
])
271 print "--- internals list"
272 is_leaf
, internals
= configure_iface
.ReadContainer(['internals'])
273 for internal
in internals
:
276 print "--- get internal parameters (type:isset:default:value)"
278 if index
>= len(sys
.argv
):
279 print "internal parameters command requires internal name argument"
282 internal_name
= sys
.argv
[index
]
285 get_parameters(configure_iface
, ['internals', internal_name
])
287 if index
+ 1 >= len(sys
.argv
):
288 print "get internal parameter long description command requires internal and parameter name arguments"
291 name
= sys
.argv
[index
]
293 param
= sys
.argv
[index
]
296 print "--- get internal parameter description (%s)" % param
297 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', name
, param
])
300 if index
+ 2 >= len(sys
.argv
):
301 print "internal parameter set command requires internal, parameter name and value arguments"
304 internal_name
= sys
.argv
[index
]
306 param
= sys
.argv
[index
]
308 value
= sys
.argv
[index
]
311 print "--- internal param set \"%s\" -> \"%s\"" % (param
, value
)
313 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', internal_name
, param
])
314 configure_iface
.SetParameterValue(['internals', internal_name
, param
], python_type_to_jackdbus_type(value
, type_char
))
316 if index
+ 1 >= len(sys
.argv
):
317 print "reset internal parameter command requires internal and parameter name arguments"
320 internal_name
= sys
.argv
[index
]
322 param
= sys
.argv
[index
]
325 print "--- internal param reset \"%s\"" % param
327 configure_iface
.ResetParameterValue(['internals', internal_name
, param
])
329 print "--- load internal"
331 if index
>= len(sys
.argv
):
332 print "load internal command requires internal name argument"
335 name
= sys
.argv
[index
]
337 result
= control_iface
.LoadInternal(name
)
338 elif arg
== 'iunload':
339 print "--- unload internal"
341 if index
>= len(sys
.argv
):
342 print "unload internal command requires internal name argument"
345 name
= sys
.argv
[index
]
347 result
= control_iface
.UnloadInternal(name
)
349 print "--- add slave driver"
351 if index
>= len(sys
.argv
):
352 print "add slave driver command requires driver name argument"
355 name
= sys
.argv
[index
]
357 result
= control_iface
.AddSlaveDriver(name
)
359 print "--- remove slave driver"
361 if index
>= len(sys
.argv
):
362 print "remove slave driver command requires driver name argument"
365 name
= sys
.argv
[index
]
367 result
= control_iface
.RemoveSlaveDriver(name
)
369 print "Unknown command '%s'" % arg
370 except dbus
.DBusException
, e
:
371 print "DBus exception: %s" % str(e
)
373 if __name__
== '__main__':