/
screen-reader.py
75 lines (58 loc) · 1.59 KB
/
screen-reader.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
import can
import asyncio
from bitstring import BitArray
from bitstring import Bits
import utils.TextDecoder as TextDecoder
import curses
can0 = can.ThreadSafeBus(channel = 'vcan0', bustype = 'socketcan_ctypes')
can0.set_filters([
{
'can_id': 0x5E7,
'can_mask': 0x7FF,
'extended': False
}
])
txt = ''
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(True)
instrumentPanelWindow = curses.newwin(6, 20, 0, 0)
instrumentPanelWindow.border()
screen.refresh()
instrumentPanelWindow.refresh()
def print_message(msg: can.Message):
global txt
frameId = msg.data[0]
frameCount = Bits(int=int(frameId), length=8).hex[0]
frameNumber = Bits(int=int(frameId), length=8).hex[1]
frame = BitArray()
for x in range(6):
x = x + 2
frame.append(Bits(uint=int(msg.data[x]), length=8))
txt = txt + frame.bin
if frameNumber == frameCount:
instrumentPanelWindow.clear()
text = TextDecoder.decode(txt)
fragments = text.split("\n")
# print(fragments)
row = 1
for fragment in fragments:
instrumentPanelWindow.addstr(row, 1, ' ' + fragment)
# print(fragment)
# print(row)
row += 1
instrumentPanelWindow.border()
instrumentPanelWindow.refresh()
# print(TextDecoder.decode(txt))
txt = ''
loop = asyncio.get_event_loop()
try:
notifier = can.Notifier(can0, [print_message], loop=loop)
loop.run_forever()
except:
curses.nocbreak()
screen.keypad(False)
curses.echo()
curses.endwin()
raise