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 runing and 1 otherwise"
110 print " start - start jack server if not currently started"
111 print " stop - stop jack server if currenly 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 " il - get list of available internals"
120 print " ip <name> - get parameters of given internal"
121 print " ipd <name> <param> - get long description for internal parameter"
122 print " ips <name> <param> <value> - set internal parameter"
123 print " iload <name> - load internal"
124 print " iunload <name> - unload internal"
125 print " ep - get engine parameters"
126 print " epd <param> - get long description for engine parameter"
127 print " eps <param> <value> - set engine parameter"
130 bus
= dbus
.SessionBus()
132 controller
= bus
.get_object(service_name
, "/org/jackaudio/Controller")
133 control_iface
= dbus
.Interface(controller
, control_interface_name
)
134 configure_iface
= dbus
.Interface(controller
, configure_interface_name
)
138 while index
< len(sys
.argv
):
139 arg
= sys
.argv
[index
]
145 elif arg
== "status":
147 if control_iface
.IsStarted():
155 control_iface
.StartServer()
158 control_iface
.StopServer()
160 print "--- switch master driver"
161 control_iface
.SwitchMaster()
163 if control_iface
.IsManuallyActivated():
164 print "Manually activated"
166 print "Automatically activated"
168 print "--- drivers list"
169 is_range
, is_strict
, is_fake_values
, values
= configure_iface
.GetParameterConstraint(['engine', 'driver'])
173 print "--- get selected driver"
174 isset
, default
, value
= configure_iface
.GetParameterValue(['engine', 'driver'])
177 if index
>= len(sys
.argv
):
178 print "driver select command requires driver name argument"
181 arg
= sys
.argv
[index
]
184 print "--- driver select \"%s\"" % arg
185 configure_iface
.SetParameterValue(['engine', 'driver'], dbus
.String(arg
))
187 print "--- get driver parameters (type:isset:default:value)"
188 get_parameters(configure_iface
, ['driver'])
190 if index
>= len(sys
.argv
):
191 print "get driver parameter long description command requires parameter name argument"
194 param
= sys
.argv
[index
]
197 print "--- get driver parameter description (%s)" % param
198 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
201 if index
+ 1 >= len(sys
.argv
):
202 print "driver parameter set command requires parameter name and value arguments"
205 param
= sys
.argv
[index
]
207 value
= sys
.argv
[index
]
210 print "--- driver param set \"%s\" -> \"%s\"" % (param
, value
)
212 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['driver', param
])
213 configure_iface
.SetParameterValue(['driver', param
], python_type_to_jackdbus_type(value
, type_char
))
215 print "--- get engine parameters (type:isset:default:value)"
216 get_parameters(configure_iface
, ['engine'])
218 if index
>= len(sys
.argv
):
219 print "get engine parameter long description command requires parameter name argument"
222 param_name
= sys
.argv
[index
]
225 print "--- get engine parameter description (%s)" % param_name
227 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param_name
])
230 if index
+ 1 >= len(sys
.argv
):
231 print "engine parameter set command requires parameter name and value arguments"
234 param
= sys
.argv
[index
]
236 value
= sys
.argv
[index
]
239 print "--- engine param set \"%s\" -> \"%s\"" % (param
, value
)
241 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['engine', param
])
242 configure_iface
.SetParameterValue(['engine', param
], python_type_to_jackdbus_type(value
, type_char
))
244 print "--- internals list"
245 is_leaf
, internals
= configure_iface
.ReadContainer(['internals'])
246 for internal
in internals
:
249 print "--- get internal parameters (type:isset:default:value)"
251 if index
>= len(sys
.argv
):
252 print "internal parameters command requires internal name argument"
255 internal_name
= sys
.argv
[index
]
258 get_parameters(configure_iface
, ['internals', internal_name
])
260 if index
+ 1 >= len(sys
.argv
):
261 print "get internal parameter long description command requires internal and parameter name arguments"
264 name
= sys
.argv
[index
]
266 param
= sys
.argv
[index
]
269 print "--- get internal parameter description (%s)" % param
270 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', name
, param
])
273 if index
+ 2 >= len(sys
.argv
):
274 print "get internal parameter long description command requires internal, parameter name and value arguments"
277 internal_name
= sys
.argv
[index
]
279 param
= sys
.argv
[index
]
281 value
= sys
.argv
[index
]
284 print "--- internal param set \"%s\" -> \"%s\"" % (param
, value
)
286 type_char
, name
, short_descr
, long_descr
= configure_iface
.GetParameterInfo(['internals', internal_name
, param
])
287 configure_iface
.SetParameterValue(['internals', internal_name
, param
], python_type_to_jackdbus_type(value
, type_char
))
289 print "--- load internal"
291 if index
>= len(sys
.argv
):
292 print "load internal command requires internal name argument"
295 name
= sys
.argv
[index
]
297 result
= control_iface
.LoadInternal(name
)
298 elif arg
== 'iunload':
299 print "--- unload internal"
301 if index
>= len(sys
.argv
):
302 print "unload internal command requires internal name argument"
305 name
= sys
.argv
[index
]
307 result
= control_iface
.UnloadInternal(name
)
309 print "Unknown command '%s'" % arg
310 except dbus
.DBusException
, e
:
311 print "DBus exception: %s" % str(e
)
313 if __name__
== '__main__':