Files
maikandClaude Opus 4.8 a7c93fa266 Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux
auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird
das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/
scipy/PortAudio) kommen nativ aus Debian stretch.

Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei
Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode
zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per
.gitignore ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 19:57:01 +02:00

373 lines
17 KiB
Python

# uncompyle6 version 3.9.3
# Python bytecode version base 2.6 (62161)
# Decompiled from: Python 3.9.25 (main, Oct 31 2025, 23:16:49)
# [GCC 14.2.0]
# Embedded file name: user_config_network.pyc
# Compiled at: 2025-05-07 14:29:41
import wx, os, data_model, traceback, one_unit, ConfigParser, protocol, sys, select_keys, select_units, d_protocol, mytime
from user_config_helpers import *
inactivityChoices = [
3,
4,
5,
6,
7,
8,
9,
10]
class networkConfiguration(wx.Panel):
def __init__(self, parent, frame, uiNumber, panelName):
self.frame = frame
self.name = panelName
self.uiNumber = uiNumber
self.parent = parent
wx.Panel.__init__(self, parent, size=(964, 600))
self.Show(True)
self.lines = {}
self.initFinished = False
return
def initMe(self, force=False):
if self.IsShown() == False:
return
if self.initFinished == True:
return 0
print mytime.displayTime(), 'ucn.initMe networkConfiguration', self.name
frame = self.frame
uiNumber = self.uiNumber
self.lines = {0: (self.createLine(0)), 1: (self.createLine(1)), 2: (self.createLine(2)), 3: (self.createLine(3)), 4: (self.createLine(4))}
optkey = data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_HARDWARE_STATUS_FLAGS, 0, 0)
try:
hardwareStatusFlags = int(self.frame.frame.parent.model.get(optkey))
if hardwareStatusFlags & protocol.confTelnetEnabled == protocol.confTelnetEnabled:
self.lines[0].enableTelnet.SetValue(1)
else:
self.lines[0].enableTelnet.SetValue(0)
except:
pass
self.checkBoxes = {}
self.uiKeys = getKeys(frame, uiNumber)
self.encryptionKey = ''
self.milanKey = ''
for uiIndex in self.uiKeys:
(key, val) = self.uiKeys[uiIndex]
if val[1] == 0:
line = self.lines[0]
line.key = key
flags = val[2]
if flags & 1 == 1:
line.enableTEA.SetValue(1)
else:
line.enableTEA.SetValue(0)
if flags & 2 == 2:
line.enableBroadcast.SetValue(1)
else:
line.enableBroadcast.SetValue(0)
if flags & 4 == 4:
line.stopWhenMFPActive.SetValue(1)
else:
line.stopWhenMFPActive.SetValue(0)
if flags & 8 == 8:
line.stopWhenTelnetActive.SetValue(1)
else:
line.stopWhenTelnetActive.SetValue(0)
if flags & 16 == 16:
line.enableBasicTelnet.SetValue(0)
else:
line.enableBasicTelnet.SetValue(1)
if flags & 96 == 32:
line.switchInput.SetStringSelection(getString('installed'))
if flags & 96 == 64:
line.switchInput.SetStringSelection(getString('notInstalled'))
timeoutValue = val[3]
line.timeoutInput.SetStringSelection(inactivityChoices[timeoutValue])
nibble = '' + chr(val[4]) + chr(val[5]) + chr(val[6]) + chr(val[7])
self.encryptionKey = nibble + self.encryptionKey[4:]
if val[1] == 1:
line = self.lines[1]
line.key = key
nibble = '' + chr(val[2]) + chr(val[3]) + chr(val[4]) + chr(val[5]) + chr(val[6]) + chr(val[7])
self.encryptionKey = self.encryptionKey[:4] + nibble + self.encryptionKey[10:]
if val[1] == 2:
line = self.lines[2]
line.key = key
nibble = '' + chr(val[2]) + chr(val[3]) + chr(val[4]) + chr(val[5]) + chr(val[6]) + chr(val[7])
self.encryptionKey = self.encryptionKey[:10] + nibble
if val[1] == 3:
line = self.lines[3]
line.key = key
flags = val[2]
if flags & 1 == 1:
self.lines[0].avbMode.SetStringSelection('MILAN')
else:
self.lines[0].avbMode.SetStringSelection('Disabled')
nibble = '' + chr(val[4]) + chr(val[5]) + chr(val[6]) + chr(val[7])
self.milanKey = nibble + self.milanKey[4:]
if val[1] == 4:
line = self.lines[4]
line.key = key
nibble = '' + chr(val[2]) + chr(val[3]) + chr(val[4]) + chr(val[5])
self.milanKey = self.milanKey[:4] + nibble
if self.encryptionKey.strip() == '':
self.encryptionKey = ''
if self.milanKey.strip() == '':
self.milanKey = ''
self.lines[0].keyInput.SetValue(self.encryptionKey)
self.lines[0].milanKey.SetValue(self.milanKey)
self.enable(self.lines[0])
self.initFinished = True
self.Show(True)
return
def createLine(self, lineNumber):
p = wx.Panel(self, size=(924, 440))
p.Show(False)
networkPanel = wx.Panel(p, size=(884, 100), pos=(10, 10))
telnetPanel = wx.Panel(p, size=(884, 110), pos=(10, 120))
switchPanel = wx.Panel(p, size=(884, 60), pos=(10, 240))
milanPanel = wx.Panel(p, size=(884, 60), pos=(10, 320))
if lineNumber == 0:
p.enableBroadcast = wx.CheckBox(networkPanel, 0, 'Enable Device Discovery Broadcast', pos=(13,
10))
p.enableBroadcast.SetValue(True)
p.stopWhenMFPActive = wx.CheckBox(networkPanel, 3, 'Stop when AllControl is connected', pos=(33,
40))
p.stopWhenMFPActive.SetValue(False)
p.stopWhenTelnetActive = wx.CheckBox(networkPanel, 4, 'Stop when Open Interface (Telnet) is connected', pos=(33,
70))
p.stopWhenTelnetActive.SetValue(False)
p.telnetLabel = wx.StaticText(telnetPanel, -1, '3rd Party Control (Telnet)', pos=(10,
10))
p.enableTelnet = wx.CheckBox(telnetPanel, 1, 'Enable', pos=(170, 10))
p.enableTelnet.SetValue(False)
p.enableBasicTelnet = wx.CheckBox(telnetPanel, 1, 'Enable Text Commands', pos=(400,
10))
p.enableBasicTelnet.SetValue(True)
p.enableTEA = wx.CheckBox(telnetPanel, 2, 'Use encryption', pos=(170, 40))
p.enableTEA.SetValue(False)
p.encryptionKeyLabel = wx.StaticText(telnetPanel, -1, 'Key:', pos=(350,
42))
p.keyInput = wx.TextCtrl(telnetPanel, -1, pos=(400, 40), size=(200, 24))
p.timeoutLabel = wx.StaticText(telnetPanel, -1, 'Time to automatically disconnect after inactivity', pos=(10,
72))
p.timeoutInput = wx.Choice(telnetPanel, -1, choices=inactivityChoices, style=wx.BORDER_NONE, pos=(400,
70), size=(200,
24))
p.timeoutInput.SetStringSelection(inactivityChoices[0])
p.switchLabel = wx.StaticText(switchPanel, -1, 'Hardware Network Switch', pos=(10,
10))
p.switchInput = wx.Choice(switchPanel, -1, choices=[getString('auto'), getString('installed'), getString('notInstalled')], style=wx.BORDER_NONE, pos=(400,
10), size=(200,
24))
p.switchInput.SetStringSelection(getString('auto'))
p.milanLabel = wx.StaticText(milanPanel, -1, 'AVB Options', pos=(10, 10))
p.avbMode = wx.Choice(milanPanel, -1, choices=['Disabled', 'MILAN'], style=wx.BORDER_NONE, pos=(400,
10), size=(150,
24))
p.avbMode.SetStringSelection('Disabled')
p.keyLabel = wx.StaticText(milanPanel, -1, 'Key:', pos=(600, 10))
p.milanKey = wx.TextCtrl(milanPanel, -1, pos=(650, 10), size=(200, 24), style=wx.TE_PASSWORD)
self.Bind(wx.EVT_CHECKBOX, self.OnTEAEnabled, id=2)
self.Bind(wx.EVT_CHECKBOX, self.OnBroadcastEnabled, id=0)
self.Bind(wx.EVT_CHECKBOX, self.OnTelnetEnabled, id=1)
p.Show(True)
networkPanel.SetBackgroundColour((200, 200, 200))
networkPanel.Show(True)
telnetPanel.SetBackgroundColour((200, 200, 200))
telnetPanel.Show(True)
switchPanel.SetBackgroundColour((200, 200, 200))
switchPanel.Show(True)
milanPanel.SetBackgroundColour((200, 200, 200))
milanPanel.Show(True)
p.SetPosition((0, 0))
p.key = None
p.lineNumber = lineNumber
return p
def OnBroadcastEnabled(self, e):
self.enable(self.lines[0])
return
def OnTelnetEnabled(self, e):
self.enable(self.lines[0])
return
def OnTEAEnabled(self, e):
self.enable(self.lines[0])
return
def enable(self, line):
val = line.enableBroadcast.GetValue()
line.stopWhenMFPActive.Enable(val)
line.stopWhenTelnetActive.Enable(val)
val = line.enableTelnet.GetValue()
line.enableTEA.Enable(val)
line.timeoutInput.Enable(val)
line.timeoutLabel.Enable(val)
line.enableBasicTelnet.Enable(val)
val = line.enableTEA.GetValue()
line.keyInput.Enable(val)
line.encryptionKeyLabel.Enable(val)
if val == True:
line.enableBasicTelnet.SetValue(False)
line.enableBasicTelnet.Enable(False)
return
def evaluateLine(self, line):
try:
encryptionKey = self.lines[0].keyInput.GetValue() + ' '
print mytime.displayTime(), 'ucn. TEA Key:', encryptionKey
encryptionKey = data_model.safeName(encryptionKey)[:16]
print mytime.displayTime(), 'set to', encryptionKey
encryptionAllowed = True
self.lines[0].keyInput.SetValue(encryptionKey)
except:
encryptionKey = ' '
encryptionAllowed = False
try:
milanKey = self.lines[0].milanKey.GetValue() + ' '
print mytime.displayTime(), 'ucn. MILAN Key:', milanKey
milanKey = data_model.safeName(milanKey)[:8]
print mytime.displayTime(), 'set to', milanKey
self.lines[0].milanKey.SetValue(milanKey)
except:
milanKey = ' '
if line.lineNumber == 0:
flags = 0
if self.lines[0].enableTEA.GetValue() == True and encryptionAllowed:
flags |= 1
timeoutString = line.timeoutInput.GetStringSelection()
timeoutValue = 0
for i in range(len(inactivityChoices)):
if inactivityChoices[i] == timeoutString:
timeoutValue = i
break
if self.lines[0].enableBroadcast.GetValue() == True:
flags |= 2
if self.lines[0].stopWhenMFPActive.GetValue() == True:
flags |= 4
if self.lines[0].stopWhenTelnetActive.GetValue() == True:
flags |= 8
if self.lines[0].enableBasicTelnet.GetValue() == False:
flags |= 16
if self.lines[0].switchInput.GetStringSelection() == getString('installed'):
flags |= 32
if self.lines[0].switchInput.GetStringSelection() == getString('notInstalled'):
flags |= 64
optkey = data_model.Key(protocol.STRUCT_ID_GLOBAL, protocol.MEMBER_ID_HARDWARE_STATUS_FLAGS, 0, 0)
try:
hardwareStatusFlags = int(self.frame.frame.parent.model.get(optkey))
if line.enableTelnet.GetValue() == True:
hardwareStatusFlags |= protocol.confTelnetEnabled
else:
hardwareStatusFlags &= 4294967295L ^ protocol.confTelnetEnabled
self.frame.frame.parent.set_value(optkey, hardwareStatusFlags)
except:
traceback.print_exc(file=sys.stdout)
else:
try:
encryptionKey = encryptionKey[:4]
print mytime.displayTime(), 'ucn.1', encryptionKey
sendString = '' + chr(self.uiNumber)
sendString += chr(line.lineNumber)
sendString += chr(flags)
sendString += chr(timeoutValue)
sendString += encryptionKey
mys = 'String: '
for c in sendString:
mys += hex(ord(c)) + ':'
print mys
return sendString
except:
print mytime.displayTime(), 'uca.ec.eL.failed to build string'
traceback.print_exc(file=sys.stdout)
return
elif line.lineNumber == 1:
try:
encryptionKey = encryptionKey[4:10]
print mytime.displayTime(), 'ucn.2', encryptionKey
sendString = '' + chr(self.uiNumber)
sendString += chr(line.lineNumber)
sendString += encryptionKey
mys = 'String: '
for c in sendString:
mys += hex(ord(c)) + ':'
print mys
return sendString
except:
print mytime.displayTime(), 'uca.ec.eL.failed to build string'
traceback.print_exc(file=sys.stdout)
return
elif line.lineNumber == 2:
try:
encryptionKey = encryptionKey[10:16]
sendString = '' + chr(self.uiNumber)
sendString += chr(line.lineNumber)
sendString += encryptionKey
return sendString
except:
print mytime.displayTime(), 'uca.ec.eL.failed to build string'
traceback.print_exc(file=sys.stdout)
return
elif line.lineNumber == 3:
flags = 0
avbMode = self.lines[0].avbMode.GetStringSelection()
if avbMode == 'MILAN':
flags |= 1
try:
milanKey = milanKey[:4]
print mytime.displayTime(), 'ucn.1b', milanKey
sendString = '' + chr(self.uiNumber)
sendString += chr(line.lineNumber)
sendString += chr(flags)
sendString += chr(0)
sendString += milanKey
mys = 'String: '
for c in sendString:
mys += hex(ord(c)) + ':'
print mys
return sendString
except:
print mytime.displayTime(), 'uca.ec.eL.failed to build string'
traceback.print_exc(file=sys.stdout)
return
elif line.lineNumber == 4:
try:
milanKey = milanKey[4:8]
print mytime.displayTime(), 'ucn.2b', milanKey
sendString = '' + chr(self.uiNumber)
sendString += chr(line.lineNumber)
sendString += milanKey
sendString += chr(0)
sendString += chr(0)
mys = 'String: '
for c in sendString:
mys += hex(ord(c)) + ':'
print mys
return sendString
except:
print mytime.displayTime(), 'uca.ec.eL.failed to build string'
traceback.print_exc(file=sys.stdout)
return
return
# okay decompiling pycode/user_config_network.pyc