1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
import pdb
from xml.etree.ElementTree import ElementTree
import math,struct
#import json # json.loads() to decode string; json.dumps() to encode data
import socket
from pygame.locals import *
import time as clock
KINET_VERSION = 0x0001
KINET_MAGIC = 0x4adc0104
KINET_MOREMAGIC = 0xdeadbeef
KINET_DEEPMAGIC = 0xc001d00d
KINET_MAGICHASH = 0x69000420
KINET_PORTOUT = 0x0108
KINET_UNI = 0
kinetDict = {'flags': 0, 'startcode': 0, 'pad':0}
def dist(l1, l2):
return math.sqrt(sum([(l1[i]-l2[i])**2 for i in range(len(l1))]))
def time():
return clock.time()*1000
def fileToDict(fileName):
fileText = ''
with open(fileName) as f:
for line in f:
fileText += line.rstrip('\n').lstrip('\t') + ' '
if fileText == '':
return {}
return eval(fileText)
print fileToDict('LayoutEngine.params')
def combineColors(c1,c2):
return [c1[i]+c2[i] for i in range(min(len(c1),len(c2)))]
def multiplyColor(color, percent):
return tuple([channel*(percent) for channel in color])
#parses arguments into python objects if possible, otherwise leaves as strings
def generateArgDict(parentNode, recurse=False):
args = {}
for arg in parentNode.getchildren():
key = arg.tag
if arg.getchildren() != []:
value = generateArgDict(arg, True)
else:
#convert into python if possible, otherwise don't
try:
value = eval(arg.text)
except (NameError,SyntaxError):
value = str(arg.text)
if key in args: #build of lists of like-elements
if type(args[key]) != type([]):
args[key] = [args[key]]
args[key].append(value)
else:
args[key]=value
#if we should be a list but we aren't:
if len(args.keys()) == 1 and recurse:
return args[args.keys()[0]]
return args
def getConnectedSocket(ip,port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print (ip, port)
sock.connect((ip, port))
return sock
def composePixelStripData(pixelStrip):
packet = bytearray()
for light in pixelStrip:
color = light.state()
for channel in color: #skip the last value, its an
#alpha value
packet.append(struct.pack('B', channel))
#pdb.set_trace()
return packet
def composePixelStripPacket(pixelStrip,port):
packet = bytearray()
data = composePixelStripData(pixelStrip)
subDict = dict(kinetDict)
subDict['len'] = 38399 #I have no idea why this works.
subDict['port'] = port
#pdb.set_trace()
packet.extend(kinetPortOutPacket(subDict))
packet.append(0x0)
packet.extend(data)
return packet
def kinetHeader():
header = bytearray()
header.extend(struct.pack('L', KINET_MAGIC))
header.extend(struct.pack('H', KINET_VERSION))
header.extend(struct.pack('H', KINET_PORTOUT))
header.extend(struct.pack('L', 0))
return header
def kinetPortOut():
header = kinetHeader()
header.extend(struct.pack('L', KINET_UNI))
return header
def kinetPortOutPayload(argDict):
payload = bytearray()
payload.extend(struct.pack('B', argDict['port']))
#payload.append(0x00) #somepadding? lolwtf.
payload.extend(struct.pack('H', argDict['flags']))
#payload.append(0x00) #somepadding? lolwtf.
payload.extend(struct.pack('H', argDict['len']))
payload.extend(struct.pack('H', argDict['startcode']))
#pdb.set_trace()
return payload
def kinetPortOutPacket(payloadArgs):
packet = bytearray()
packet.extend(kinetPortOut())
packet.extend(kinetPortOutPayload(payloadArgs))
return packet
def testXMLParse(fileName):
#pdb.set_trace()
config = ElementTree()
config.parse(fileName)
print generateArgDict(config.find('ChildElement'))
print generateArgDict(config.find('Renderer'))
testXMLParse('TestXML.xml')
##CONSTANTS##
location = 'Location'
|