enhance arg parsing

This commit is contained in:
coon 2025-09-18 23:08:42 +02:00
parent 1c5ca4fdfd
commit 19238c755c

View file

@ -33,7 +33,7 @@ class Mixer:
if p.pending(): if p.pending():
msg = p.get_message() msg = p.get_message()
# print(msg.type) print(msg.type)
print(vars(msg)) print(vars(msg))
if hasattr(msg, "data"): if hasattr(msg, "data"):
@ -86,15 +86,19 @@ class Mixer:
print(f"Model: {QuModel(i_pad_flag)}") print(f"Model: {QuModel(i_pad_flag)}")
print(f"Firmware Version: {major_ver}.{minor_ver}") print(f"Firmware Version: {major_ver}.{minor_ver}")
def get_name_from_qu(self, channel_no): def get_name_from_qu(self, channel_no, name_to_set):
msg_id = 0x01 msg_id = 0x01
data = self.SYSEX_HEADER + [int(0), msg_id, int(channel_no)] data = self.SYSEX_HEADER + [int(0), msg_id, int(channel_no)]
if name_to_set:
data += list(name_to_set.encode('utf-8'))
msg = mido.Message('sysex', data=data) msg = mido.Message('sysex', data=data)
msg_bytes = bytes(msg.bytes()) msg_bytes = bytes(msg.bytes())
self.sock.sendall(msg_bytes)
print("Sent:", " ".join(f"{b:02X}" for b in msg_bytes)) print("Sent:", " ".join(f"{b:02X}" for b in msg_bytes))
self.sock.sendall(msg_bytes)
response = self.recv() response = self.recv()
@ -133,6 +137,8 @@ class Mixer:
self.sock.sendall(msg_bytes) self.sock.sendall(msg_bytes)
def scene_recall(self, scene_id): def scene_recall(self, scene_id):
print(f"scene_recall: scene_id={scene_id}", scene_id)
self.set_bank_1() self.set_bank_1()
msb = mido.Message('program_change', channel=0, program=scene_id) msb = mido.Message('program_change', channel=0, program=scene_id)
@ -148,23 +154,34 @@ class Mixer:
def main(): def main():
parser = argparse.ArgumentParser(description="Allen & Heath Qu Remote Control") parser = argparse.ArgumentParser(description="Allen & Heath Qu Remote Control")
parser.add_argument("ip", help="IP of the mixer") parser.add_argument("ip", help="IP of the mixer")
parser.add_argument("command", help="Command to execute")
subparsers = parser.add_subparsers(dest="command", required=True, help="Available commands")
channel_naming_parser = subparsers.add_parser("get_name_from_qu", help="Channel naming")
channel_naming_parser.add_argument("channel_id", type=int, choices=range(0, 16), help="Number of channel to get or set its name")
channel_naming_parser.add_argument("-n", "--name", help="Channel name to set")
subparsers.add_parser("get_system_state", help="Get system information")
subparsers.add_parser("shutdown", help="Shut down the mixer")
scene_parser = subparsers.add_parser("scene_recall", help="Recall a specific scene")
scene_parser.add_argument("scene_number", type=int, choices=range(0, 100), help="Scene number to recall")
subparsers.add_parser("scene_recall_default", help="Set the default scene 0")
subparsers.add_parser("watch", help="Just receive data from mixer and print it to console")
args = parser.parse_args() args = parser.parse_args()
if not args.ip:
print("ip is missing!")
return 1
print(f"IP: {args.ip}") print(f"IP: {args.ip}")
if args.command: if args.command:
print(f"Command: {args.command}") print(f"Command: {args.command}")
print(f"Args: {vars(args)}")
match args.command: match args.command:
case 'get_name_from_qu': case 'get_name_from_qu':
mixer = Mixer(args.ip, MIXER_PORT) mixer = Mixer(args.ip, MIXER_PORT)
mixer.get_name_from_qu(0) mixer.get_name_from_qu(args.channel_id, args.name)
case 'get_system_state': case 'get_system_state':
mixer = Mixer(args.ip, MIXER_PORT) mixer = Mixer(args.ip, MIXER_PORT)
@ -174,7 +191,11 @@ def main():
mixer = Mixer(args.ip, MIXER_PORT) mixer = Mixer(args.ip, MIXER_PORT)
mixer.shutdown() mixer.shutdown()
case 'set_default_layer': case 'scene_recall':
mixer = Mixer(args.ip, MIXER_PORT)
mixer.scene_recall(args.scene_number)
case 'scene_recall_default':
mixer = Mixer(args.ip, MIXER_PORT) mixer = Mixer(args.ip, MIXER_PORT)
mixer.scene_recall(0) mixer.scene_recall(0)
@ -182,9 +203,5 @@ def main():
mixer = Mixer(args.ip, MIXER_PORT) mixer = Mixer(args.ip, MIXER_PORT)
mixer.watch() mixer.watch()
case 'scene_recall':
mixer = Mixer(args.ip, MIXER_PORT)
mixer.scene_recall(0)
if __name__ == '__main__': if __name__ == '__main__':
main() main()