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>
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user