-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
73 lines (58 loc) · 2.21 KB
/
app.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
#!/usr/bin/env python3
import logging
import time
import posix_ipc
import importlib
import settings
class MicroDotPHAT:
modules = []
apps = []
current_app = None
current_app_index = 0
def __init__(self):
logging.basicConfig(level=settings.LOGLEVEL)
for module_name in settings.MODULES:
try:
self.modules.append(importlib.import_module(module_name))
except ModuleNotFoundError:
try:
self.modules.append(importlib.import_module("apps." + module_name))
except ModuleNotFoundError:
logging.error("Couldn't load app '{0}'".format(module_name))
self.mq = posix_ipc.MessageQueue("/microdotphat_ipc", flags=posix_ipc.O_CREAT)
self.mq.block = False
for module in self.modules:
self.apps.append(module.App())
self.current_app = self.apps[self.current_app_index]
def change_app(self, index):
self.current_app = self.apps[index]
self.current_app_index = index
self.current_app.reload()
def run(self):
self.current_app.run_once()
try:
message = self.mq.receive(timeout=10)
except posix_ipc.BusyError:
message = None
if message:
message_text = message[0].decode()
logging.debug("Received message: " + message_text)
if message_text == "next":
next_app_index = (self.current_app_index + 1) % len(self.apps)
logging.debug("Current app index: {0}, next app index: {1}".format(
self.current_app_index,
next_app_index
))
self.change_app(next_app_index)
elif message_text == "previous":
previous_app_index = (self.current_app_index + len(self.apps) - 1) % len(self.apps)
logging.debug("Current app index: {0}, previous app index: {1}".format(
self.current_app_index,
previous_app_index
))
self.change_app(previous_app_index)
if __name__ == '__main__':
app = MicroDotPHAT()
while True:
app.run()
time.sleep(1)