-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkpc_agent.py
103 lines (84 loc) · 2.86 KB
/
kpc_agent.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
"""Module containing KPC Agent"""
from keypad import Keypad
from led_driver import LedDriver
class KpcAgent:
"""Keypad Controller Agent Class"""
def __init__(self) -> None:
self.keypad = Keypad()
self.leds = LedDriver()
self.override_signal = None
self.entry_buffer = ""
self.passcode = None
def light_led(self, duration):
"""Light led from buffer"""
led = int(self.entry_buffer)
duration = int(duration)
if 6 > led >= 0:
self.light_one_led(led, duration)
self.reset_buffer()
def power_down(self):
"""Power down"""
self.reset_buffer()
self.leds.power_down()
def wakeup(self):
"""Power up system"""
self.leds.power_up()
def reset_buffer(self):
"""Resets current entered passcode"""
self.entry_buffer = ""
def fsm_signal(self, signal):
"""Receive signal from FSM"""
self.entry_buffer += signal
def get_next_signal(self):
"""Get next signal from Keypad"""
return_signal = None
if self.override_signal:
return_signal = self.override_signal
self.override_signal = None
else:
return_signal = self.keypad.get_next_signal()
return return_signal
def verify_login(self):
"""Verify passcode"""
print(self.entry_buffer)
print(self.read_passcode())
if self.entry_buffer == self.read_passcode():
self.override_signal = "Y"
self.twinkle_leds()
else:
self.override_signal = "N"
self.flash_leds()
self.entry_buffer = ""
def validate_passcode_change(self):
"""Validate new passcode"""
passcodes = self.entry_buffer.split('*')
# if not re.search(r"[^\d]", self.passcode[0]):
if passcodes[0] == passcodes[1] and len(passcodes[0]) >= 4:
self.set_new_passcode(passcodes[0])
else:
self.twinkle_leds()
self.reset_buffer()
def set_new_passcode(self, new_passcode):
"""Sets new passcode"""
with open('passcode.txt', 'w') as pass_file:
pass_file.write(new_passcode)
self.passcode = new_passcode
def read_passcode(self):
"""Reads passcode from file"""
if not self.passcode:
with open('passcode.txt') as pass_file:
self.passcode = pass_file.readline().strip()
return self.passcode
def light_one_led(self, led, duration):
"""Light specific LED"""
self.leds.light_single(led, duration)
def flash_leds(self):
"""Flash all LEDs"""
self.leds.flash()
def twinkle_leds(self):
"""Twinkle all LEDs"""
self.leds.twinkle()
def exit_action(self):
"""Power Down LEDs"""
self.leds.power_down()
KPC_INSTANCE = KpcAgent()