]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/blobdiff - displayio/__init__.py
update after running pre-commit
[hackapet/Adafruit_Blinka_Displayio.git] / displayio / __init__.py
index 74facd99e0a288cbe35c5f53259bd4c80a6fe7f2..b22ce94c9113c19861d21f5afcbe4ff4d63c577c 100644 (file)
@@ -17,22 +17,29 @@ displayio for Blinka
 
 """
 import threading
+import time
 from typing import Union
-from ._fourwire import FourWire
-from ._i2cdisplay import I2CDisplay
+
+import fourwire
+import i2cdisplaybus
+from busdisplay import BusDisplay
+from busdisplay._displaybus import _DisplayBus
+from epaperdisplay import EPaperDisplay
 from ._bitmap import Bitmap
 from ._colorspace import Colorspace
 from ._colorconverter import ColorConverter
-from ._display import Display
-from ._epaperdisplay import EPaperDisplay
 from ._group import Group
 from ._ondiskbitmap import OnDiskBitmap
 from ._palette import Palette
-from ._shape import Shape
 from ._tilegrid import TileGrid
-from ._displaybus import _DisplayBus
 from ._constants import CIRCUITPY_DISPLAY_LIMIT
 
+# 8.x Backwards compatibility, remove at 10.x or
+# when compatibility is removed from core displayio
+Display = BusDisplay
+FourWire = fourwire.FourWire
+I2CDisplay = i2cdisplaybus.I2CDisplayBus
+
 __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
 
@@ -41,10 +48,15 @@ displays = []
 display_buses = []
 
 
-def _background():
+def _background(stop_event):
     """Main thread function to loop through all displays and update them"""
-    for display in displays:
-        display.background()
+    while not stop_event.is_set():
+        for display in displays:
+            display._background()  # pylint: disable=protected-access
+
+        # relax system when _background does nothing
+        # and we are in a while True loop consuming lots of CPU
+        time.sleep(0.0)
 
 
 def release_displays() -> None:
@@ -54,7 +66,7 @@ def release_displays() -> None:
     initialization so the display is active as long as possible.
     """
     for display in displays:
-        display.release()
+        display._release()  # pylint: disable=protected-access
     displays.clear()
 
     for display_bus in display_buses:
@@ -62,7 +74,7 @@ def release_displays() -> None:
     display_buses.clear()
 
 
-def allocate_display(new_display: Union[Display, EPaperDisplay]) -> None:
+def allocate_display(new_display: Union[BusDisplay, EPaperDisplay]) -> None:
     """Add a display to the displays pool and return the new display"""
     if len(displays) >= CIRCUITPY_DISPLAY_LIMIT:
         raise RuntimeError("Too many displays")
@@ -78,7 +90,10 @@ def allocate_display_bus(new_display_bus: _DisplayBus) -> None:
     display_buses.append(new_display_bus)
 
 
-background_thread = threading.Thread(target=_background, daemon=True)
+background_thread_stop_event = threading.Event()
+background_thread = threading.Thread(
+    target=_background, args=(background_thread_stop_event,), daemon=True
+)
 
 
 # Start the background thread
@@ -89,6 +104,7 @@ def _start_background():
 
 def _stop_background():
     if background_thread.is_alive():
+        background_thread_stop_event.set()
         # Stop the thread
         background_thread.join()