-
Notifications
You must be signed in to change notification settings - Fork 0
/
controller.py
104 lines (91 loc) · 2.66 KB
/
controller.py
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
## hud.py
##
## Copyright 2016-7-20 Gabriel Triggs
from rt import RandomTelemetry as RT
from hud import Hud
from time import sleep
from Tkinter import TclError
import serial
from log import Logger
def parseLineToKV(line):
inLine = line[1:].rstrip().rstrip('@')
varAssignments = inLine.split('&')
kvLists = map(lambda str: str.split('='), varAssignments)
kvStrings = {xs[0]: xs[1] for xs in kvLists}
kv = {}
kv["PackSOC"] = int(kvStrings["PackSOC"])
kv["AverageTemp"] = int(kvStrings["AverageTemp"])
kv["HighTemp"] = int(kvStrings["HighTemp"])
kv["HighThermistor"] = int(kvStrings["HighThermistor"])
kv["LowTemp"] = int(kvStrings["LowTemp"])
kv["LowThermistor"] = int(kvStrings["LowThermistor"])
kv["PackSumVoltage"] = float(kvStrings["PackSumVoltage"])
kv["PackInsVoltage"] = float(kvStrings["PackInsVoltage"])
kv["PackCurrent"] = float(kvStrings["PackCurrent"])
kv["CA"] = float(kvStrings["CA"])
kv["CM"] = float(kvStrings["CM"])
kv["NC"] = float(kvStrings["NC"])
kv["Vaux"] = float(kvStrings["Vaux"])
kv["MPH"] = float(kvStrings["MPH"])
kv["RPM"] = float(kvStrings["RPM"])
kv["PackAmph"] = float(kvStrings["PackAmph"] )
kv["DischargeEnable"] = int(kvStrings["DischargeEnable"])
return kv
def parseLineToStringKV(line):
inLine = line[1:].rstrip().rstrip('@')
varAssignments = inLine.split('&')
kvLists = map(lambda str: str.split('='), varAssignments)
kv = {xs[0]: xs[1] for xs in kvLists}
return kv
def strfkv(kv):
out = ""
for k, v in kv.items():
out += (k + ' = ' + v + '\n')
return out
def main():
hud = Hud()
# ser = serial.Serial(port = '/dev/ttyUSB0',
# baudrate = 9600,
# parity = serial.PARITY_NONE,
# stopbits = serial.STOPBITS_ONE,
# bytesize = serial.EIGHTBITS,
# timeout = 1)
logger = 0
kv = {}
stringKV = {}
firstPass = True
while True:
# wrapping this all in a try-catch should handle file-opening/-closing timeline nicely
# i.e. catch TclError(possibly tclError): close file
#
# var parsing and file writing will need to be wrapped in classes
sleep(0.5)
#kv = RT.randomKV()
#print kv
try:
#inLine = ser.readline()
inLine = RT.randomKVLine()
if inLine[0] == '@':
newKV = parseLineToKV(inLine)
newStringKV = parseLineToStringKV(inLine)
if firstPass:
keys = sorted(newStringKV.keys())
logger = Logger(keys)
firstPass = False
if newKV != kv:
kv = newKV
stringKV = newStringKV
hud.updateHud(kv)
hud.update_idletasks()
hud.update()
logger.logKV(stringKV)
print strfkv(stringKV)
except TclError: #possibly tclError
print "HUD was closed"
logger.close()
break
except err:
print err
break
if __name__ == '__main__':
main()