119 lines
4.8 KiB
Python
Executable File
119 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
name_base = 'org.gna.home.a2jmidid'
|
|
control_interface_name = name_base + '.control'
|
|
service_name = name_base
|
|
|
|
import sys
|
|
import os
|
|
from traceback import print_exc
|
|
|
|
import dbus
|
|
|
|
def main():
|
|
if len(sys.argv) == 1:
|
|
print("Usage: %s [command] [command] ..." % os.path.basename(sys.argv[0]))
|
|
print("Commands:")
|
|
print(" exit - exit a2j bridge dbus service")
|
|
print(" start - start bridging")
|
|
print(" stop - stop brdiging")
|
|
print(" status - get bridging status")
|
|
print(" gjcn - get JACK client name")
|
|
print(" ma2jp <client_id> <port_id> - map ALSA to JACK playback port")
|
|
print(" ma2jc <client_id> <port_id> - map ALSA to JACK capture port")
|
|
print(" mj2a <jack_port_name> - map JACK port to ALSA port")
|
|
print(" ehw - enable export of hardware ports")
|
|
print(" dhw - disable export of hardware ports")
|
|
print(" dup - disallow unique port names")
|
|
print(" aup - allow unique port names")
|
|
sys.exit(0)
|
|
|
|
bus = dbus.SessionBus()
|
|
|
|
controller = bus.get_object(service_name, "/")
|
|
control_iface = dbus.Interface(controller, control_interface_name)
|
|
|
|
# check arguments
|
|
index = 1
|
|
while index < len(sys.argv):
|
|
arg = sys.argv[index]
|
|
index += 1
|
|
try:
|
|
if arg == "exit":
|
|
print("--- exit")
|
|
control_iface.exit()
|
|
elif arg == "start":
|
|
print("--- start")
|
|
control_iface.start()
|
|
elif arg == "stop":
|
|
print("--- stop")
|
|
control_iface.stop()
|
|
elif arg == "status":
|
|
print("--- status")
|
|
if control_iface.is_started():
|
|
print("Bridging enabled")
|
|
else:
|
|
print("Bridging disabled")
|
|
if control_iface.get_hw_export():
|
|
print("Hardware exported")
|
|
else:
|
|
print("Hardware not exported")
|
|
if control_iface.get_disable_port_uniqueness():
|
|
print("Avoiding unique port names")
|
|
else:
|
|
print("Allowing unique port names")
|
|
elif arg == "gjcn":
|
|
print("--- get jack client name")
|
|
print(control_iface.get_jack_client_name())
|
|
elif arg == 'ma2jp':
|
|
print("--- map ALSA to JACK playback port")
|
|
if index + 1 >= len(sys.argv):
|
|
print("map ALSA to JACK playback port command requires ALSA client ID and ALSA port ID arguments")
|
|
sys.exit()
|
|
client_id = sys.argv[index]
|
|
index += 1
|
|
port_id = sys.argv[index]
|
|
index += 1
|
|
|
|
print("'%s'" % control_iface.map_alsa_to_jack_port(client_id, port_id, True))
|
|
elif arg == 'ma2jc':
|
|
print("--- map ALSA to JACK capture port")
|
|
if index + 1 >= len(sys.argv):
|
|
print("map ALSA to JACK capture port command requires ALSA client ID and ALSA port ID arguments")
|
|
sys.exit()
|
|
client_id = sys.argv[index]
|
|
index += 1
|
|
port_id = sys.argv[index]
|
|
index += 1
|
|
|
|
print("'%s'" % control_iface.map_alsa_to_jack_port(client_id, port_id, False))
|
|
elif arg == 'mj2a':
|
|
print("--- map JACK to ALSA port")
|
|
if index >= len(sys.argv):
|
|
print("map JACK to ALSA port command requires JACK port name argument")
|
|
sys.exit()
|
|
jack_port = sys.argv[index]
|
|
index += 1
|
|
|
|
out = control_iface.map_jack_port_to_alsa(jack_port)
|
|
print("%u:%u ('%s':'%s')" % (int(out[0]), int(out[1]), str(out[2]), str(out[3])))
|
|
elif arg == 'ehw':
|
|
print("--- enable export of hardware ports")
|
|
control_iface.set_hw_export(True)
|
|
elif arg == 'dhw':
|
|
print("--- disable export of hardware ports")
|
|
control_iface.set_hw_export(False)
|
|
elif arg == 'aup':
|
|
print("--- allow unique port names")
|
|
control_iface.set_disable_port_uniqueness(False)
|
|
elif arg == 'dup':
|
|
print("--- disallow unique port names")
|
|
control_iface.set_disable_port_uniqueness(True)
|
|
else:
|
|
print("Unknown command '%s'" % arg)
|
|
except dbus.DBusException as e:
|
|
print("DBus exception: %s" % str(e))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|