Commit 1d29ba2d authored by Agrigor's avatar Agrigor

Proxy done, now ready for testing with original MarmeLEDs :)

parent d6e626bd
......@@ -10,10 +10,7 @@ import struct
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOCALHOST = "127.0.0.1"
ART_IP = LOCALHOST
ART_PORT = 6454
ART_PACKAGE_SIZE = 576
JAM_IP = '10.1.25.31'
JAM_URL = "http://jochenbauer.net/cgi-bin/marmeled"
......@@ -28,32 +25,6 @@ FLUSH_SIZE = 24
TELEGRAM_PAUSE = 0
FLUSH_PAUSE = 0
FOO = b'\x41\x72\x74\x2d\x4e\x65\x74\x00\x00\x50\x00\x0e\x77\x00\x00\x00\x02\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
def test():
ArtHeader = FOO[:8] #.decode('latin1')
print(ArtHeader)
ArtOpcode = struct.unpack('<h', FOO[8:10])[0]
print(ArtOpcode)
ArtProtocolVersion = struct.unpack('>h', FOO[10:12])[0]
print(ArtProtocolVersion)
ArtSequence = FOO[12]
print(ArtSequence)
ArtPhysical = FOO[13]
print(ArtPhysical)
ArtUniverse = struct.unpack('>h', FOO[14:16])[0]
print(ArtUniverse)
ArtLength = struct.unpack('>h', FOO[16:18])[0]
print(ArtLength)
ArtData = []
for i in range(ArtLength):
ArtData.append(FOO[18+i])
ArtData = np.asarray(ArtData[:GLASSES_QUANTITY * LED_QUANTITY * COLOR_QUANTITY])
ArtData = ArtData.reshape(GLASSES_QUANTITY, LED_QUANTITY, COLOR_QUANTITY)
ArtData = np.insert(ArtData, 0, 0, axis=2)
ArtData[:, :, 0] = np.arange(GLASSES_QUANTITY * LED_QUANTITY).reshape(GLASSES_QUANTITY, LED_QUANTITY)
print(ArtData)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ~~~~~~~~~~~~~~~~~~~~~~~~ CLASS DEFINITIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......@@ -70,6 +41,7 @@ class JAMpyLED:
def connect(self):
self.__socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print("JAMpyLED Socket initialized...")
def __getIP(self):
return urllib.request.urlopen(JAM_URL).read().decode()[:-1]
......@@ -80,7 +52,7 @@ class JAMpyLED:
data[:, :, 0] = np.arange(GLASSES_QUANTITY * LED_QUANTITY).reshape(GLASSES_QUANTITY, LED_QUANTITY)
return data
def send(self, delay):
def send(self, delay=0):
for i in range(GLASSES_QUANTITY):
msg = bytearray.fromhex('')
for j in range(LED_QUANTITY):
......@@ -94,6 +66,7 @@ class JAMpyLED:
def cleanup(self):
self.__socket.close()
print("...JAMpyLED Socket closed")
class ArtNet:
......@@ -103,8 +76,16 @@ class ArtNet:
self.ArtProtocolVersion = 14
self.ArtSequence = 0
self.ArtPhysical = 0
self.ArtUniverse = 0
self.ArtData = ""
self.ArtUniverse = 1
self.ArtLength = 0
self.ArtData = self.__buildDataStructure()
self.ArtDataTemplate = self.__buildDataStructure()
def __buildDataStructure(self):
dim = GLASSES_QUANTITY * LED_QUANTITY * (ADDRESS_LENGTH + COLOR_QUANTITY)
data = np.zeros(dim, dtype=np.int).reshape(GLASSES_QUANTITY, LED_QUANTITY, (ADDRESS_LENGTH + COLOR_QUANTITY))
data[:, :, 0] = np.arange(GLASSES_QUANTITY * LED_QUANTITY).reshape(GLASSES_QUANTITY, LED_QUANTITY)
return data
def connect(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
......@@ -112,28 +93,36 @@ class ArtNet:
print("Art-Net Socket initialized...")
def receive(self):
print("Receiving...")
buffer, address = self.socket.recvfrom(ART_PACKAGE_SIZE)
print(address)
print(buffer)
print()
buffer = self.socket.recv(1024)
if self.ArtHeader == buffer[:7].decode():
if self.ArtOpcode == struct.unpack('<H', buffer[8:10])[0]:
self.ArtData = self.ArtDataTemplate
ledAddress = 0
for i in range(GLASSES_QUANTITY):
for j in range(LED_QUANTITY):
for k in range(1, ADDRESS_LENGTH + COLOR_QUANTITY):
self.ArtData[i, j, k] = buffer[18+ledAddress]
ledAddress += 1
return self.ArtData
def cleanup(self):
self.socket.close()
print("...Socket closed")
print("...ArtNet Socket closed")
class Proxy:
def __init__(self):
self.art = ArtNet()
# self.jam = JAMpyLED()
self.jam = JAMpyLED()
def run(self):
self.art.connect()
# self.jam.connect()
self.jam.connect()
print("... Proxy runnin ...")
try:
while True:
self.art.receive()
self.jam.data = self.art.receive()
self.jam.send()
except KeyboardInterrupt:
pass
finally:
......@@ -141,7 +130,7 @@ class Proxy:
def cleanup(self):
self.art.cleanup()
# self.jam.cleanup()
self.jam.cleanup()
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......@@ -151,8 +140,7 @@ class Proxy:
# Start Client
if __name__ == "__main__":
# app = Proxy()
# app.run()
test()
app = Proxy()
app.run()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment