mixer.py: get_system_state: return data in a struct instead of printing them
This commit is contained in:
parent
a6ee957e21
commit
35bf8a4928
1 changed files with 47 additions and 30 deletions
77
mixer.py
77
mixer.py
|
@ -5,12 +5,40 @@ import socket
|
|||
import mido
|
||||
|
||||
from enum import Enum
|
||||
from dataclasses import dataclass
|
||||
|
||||
# For Allen & Heath Qu MIDI protocol documentation see:
|
||||
# https://www.allen-heath.com/content/uploads/2023/06/Qu_MIDI_Protocol_V1.9.pdf
|
||||
|
||||
|
||||
class Mixer:
|
||||
@dataclass
|
||||
class SystemState:
|
||||
class QuModel(Enum):
|
||||
QU16 = 1
|
||||
QU24 = 2
|
||||
QU32 = 3
|
||||
QUPAC = 4
|
||||
QUSB = 5
|
||||
|
||||
def __str__(self):
|
||||
labels = {
|
||||
1: "Qu-16",
|
||||
2: "Qu-24",
|
||||
3: "Qu-32",
|
||||
4: "Qu-Pac",
|
||||
5: "Qu-SB",
|
||||
}
|
||||
|
||||
return labels[self.value]
|
||||
|
||||
sys_ex_header : list
|
||||
midi_channel : int
|
||||
id : int
|
||||
model : QuModel
|
||||
major_ver : int
|
||||
minor_ver : int
|
||||
|
||||
def __init__(self, ip):
|
||||
self.MIXER_PORT = 51325
|
||||
self.sock = socket.create_connection((ip, self.MIXER_PORT))
|
||||
|
@ -73,37 +101,18 @@ class Mixer:
|
|||
|
||||
response = self.recv_sys_ex(self.SysExMessageId.GET_SYSTEM_STATE_RESPONSE)
|
||||
|
||||
class QuModel(Enum):
|
||||
QU16 = 1
|
||||
QU24 = 2
|
||||
QU32 = 3
|
||||
QUPAC = 4
|
||||
QUSB = 5
|
||||
|
||||
def __str__(self):
|
||||
labels = {
|
||||
1: "Qu-16",
|
||||
2: "Qu-24",
|
||||
3: "Qu-32",
|
||||
4: "Qu-Pac",
|
||||
5: "Qu-SB",
|
||||
}
|
||||
|
||||
return labels[self.value]
|
||||
|
||||
sysex_header = response.data[:8]
|
||||
|
||||
midi_channel = int(response.data[7]) + 1
|
||||
id = int(response.data[8])
|
||||
i_pad_flag = int(response.data[9])
|
||||
major_ver = int(response.data[10])
|
||||
minor_ver = int(response.data[11])
|
||||
|
||||
print(f"sysex_header: {sysex_header}")
|
||||
print(f"MIDI channel: {midi_channel}")
|
||||
print(f"ID: 0x{id:02X}")
|
||||
print(f"Model: {QuModel(i_pad_flag)}")
|
||||
print(f"Firmware Version: {major_ver}.{minor_ver}")
|
||||
state = self.SystemState(
|
||||
sys_ex_header=response.data[:8],
|
||||
midi_channel=int(response.data[7]),
|
||||
id=int(response.data[8]),
|
||||
model=self.SystemState.QuModel(i_pad_flag),
|
||||
major_ver=int(response.data[10]),
|
||||
minor_ver = int(response.data[11])
|
||||
)
|
||||
|
||||
return state
|
||||
|
||||
def get_name_from_qu(self, channel_no, name_to_set):
|
||||
msg_id = self.SysExMessageId.GET_NAME_FROM_QU_REQUEST.value
|
||||
|
@ -206,7 +215,15 @@ def main():
|
|||
|
||||
match args.command:
|
||||
case "get_name_from_qu": mixer.get_name_from_qu(args.channel_id, args.name)
|
||||
case "get_system_state": mixer.get_system_state()
|
||||
case "get_system_state":
|
||||
state = mixer.get_system_state()
|
||||
|
||||
print(f"sysex_header: {state.sys_ex_header}")
|
||||
print(f"MIDI channel: {state.midi_channel}")
|
||||
print(f"ID: 0x{state.id:02X}")
|
||||
print(f"Model: {state.model}")
|
||||
print(f"Firmware Version: {state.major_ver}.{state.minor_ver}")
|
||||
|
||||
case "shutdown": mixer.shutdown()
|
||||
case "scene_recall": mixer.scene_recall(args.scene_number)
|
||||
case "scene_recall_default": mixer.scene_recall(0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue