From 19238c755ca1fecb3ee78665545874fa11f2bc39 Mon Sep 17 00:00:00 2001 From: coon Date: Thu, 18 Sep 2025 23:08:42 +0200 Subject: [PATCH] enhance arg parsing --- mixer.py | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/mixer.py b/mixer.py index aca7804..1ca6602 100755 --- a/mixer.py +++ b/mixer.py @@ -33,7 +33,7 @@ class Mixer: if p.pending(): msg = p.get_message() - # print(msg.type) + print(msg.type) print(vars(msg)) if hasattr(msg, "data"): @@ -86,15 +86,19 @@ class Mixer: print(f"Model: {QuModel(i_pad_flag)}") 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 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_bytes = bytes(msg.bytes()) - self.sock.sendall(msg_bytes) print("Sent:", " ".join(f"{b:02X}" for b in msg_bytes)) + self.sock.sendall(msg_bytes) response = self.recv() @@ -133,6 +137,8 @@ class Mixer: self.sock.sendall(msg_bytes) def scene_recall(self, scene_id): + print(f"scene_recall: scene_id={scene_id}", scene_id) + self.set_bank_1() msb = mido.Message('program_change', channel=0, program=scene_id) @@ -148,23 +154,34 @@ class Mixer: def main(): parser = argparse.ArgumentParser(description="Allen & Heath Qu Remote Control") 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() - if not args.ip: - print("ip is missing!") - return 1 - print(f"IP: {args.ip}") if args.command: print(f"Command: {args.command}") + print(f"Args: {vars(args)}") match args.command: case 'get_name_from_qu': 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': mixer = Mixer(args.ip, MIXER_PORT) @@ -174,7 +191,11 @@ def main(): mixer = Mixer(args.ip, MIXER_PORT) 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.scene_recall(0) @@ -182,9 +203,5 @@ def main(): mixer = Mixer(args.ip, MIXER_PORT) mixer.watch() - case 'scene_recall': - mixer = Mixer(args.ip, MIXER_PORT) - mixer.scene_recall(0) - if __name__ == '__main__': main()