Add non-blocking screen updating

Signed-off-by: python273 <iam@python273.pw>
This commit is contained in:
python273 2019-10-22 20:53:15 +03:00
parent 8c22b1d6f1
commit 9ca2424df1

@ -1,7 +1,8 @@
import os import os
import logging import logging
import pwnagotchi.plugins as plugins import threading
import pwnagotchi.plugins as plugins
import pwnagotchi.ui.hw as hw import pwnagotchi.ui.hw as hw
import pwnagotchi.ui.web as web import pwnagotchi.ui.web as web
from pwnagotchi.ui.view import View from pwnagotchi.ui.view import View
@ -18,6 +19,14 @@ class Display(View):
self.init_display() self.init_display()
self._canvas_next_event = threading.Event()
self._canvas_next = None
self._render_thread_instance = threading.Thread(
target=self._render_thread,
daemon=True
)
self._render_thread_instance.start()
def is_inky(self): def is_inky(self):
return self._implementation.name == 'inky' return self._implementation.name == 'inky'
@ -59,6 +68,14 @@ class Display(View):
img = self._canvas if self._rotation == 0 else self._canvas.rotate(-self._rotation) img = self._canvas if self._rotation == 0 else self._canvas.rotate(-self._rotation)
return img return img
def _render_thread(self):
"""Used for non-blocking screen updating."""
while True:
self._canvas_next_event.wait()
self._canvas_next_event.clear()
self._implementation.render(self._canvas_next)
def _on_view_rendered(self, img): def _on_view_rendered(self, img):
web.update_frame(img) web.update_frame(img)
try: try:
@ -70,4 +87,5 @@ class Display(View):
if self._enabled: if self._enabled:
self._canvas = (img if self._rotation == 0 else img.rotate(self._rotation)) self._canvas = (img if self._rotation == 0 else img.rotate(self._rotation))
if self._implementation is not None: if self._implementation is not None:
self._implementation.render(self._canvas) self._canvas_next = self._canvas
self._canvas_next_event.set()