X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/blobdiff_plain/5addeea21db64285a19902913dde42a98546625c..b6c1453b93053cbf2fb6aae6f09fdb8f9b9e4345:/displayio/_display.py?ds=sidebyside diff --git a/displayio/_display.py b/displayio/_display.py index 7bfe532..8551f8c 100644 --- a/displayio/_display.py +++ b/displayio/_display.py @@ -82,7 +82,7 @@ class Display: backlight_on_high: bool = True, SH1107_addressing: bool = False, ): - # pylint: disable=too-many-locals,invalid-name + # pylint: disable=too-many-locals,invalid-name, too-many-branches """Create a Display object on the given display bus (`displayio.FourWire` or `paralleldisplay.ParallelBus`). @@ -112,6 +112,13 @@ class Display: The initialization sequence should always leave the display memory access inline with the scan of the display to minimize tearing artifacts. """ + + if rotation % 90 != 0: + raise ValueError("Display rotation must be in 90 degree increments") + + if SH1107_addressing and color_depth != 1: + raise ValueError("color_depth must be 1 when SH1107_addressing is True") + # Turn off auto-refresh as we init self._auto_refresh = False ram_width = 0x100 @@ -320,7 +327,7 @@ class Display: ) return areas - def background(self): + def _background(self): """Run background refresh tasks. Do not call directly""" if ( self._auto_refresh @@ -331,7 +338,7 @@ class Display: def _refresh_area(self, area) -> bool: """Loop through dirty areas and redraw that area.""" - # pylint: disable=too-many-locals + # pylint: disable=too-many-locals, too-many-branches clipped = Area() # Clip the area to the display by overlapping the areas. @@ -397,6 +404,11 @@ class Display: buffer = memoryview(bytearray([0] * (buffer_size * 4))) mask = memoryview(bytearray([0] * mask_length)) self._core.fill_area(subrectangle, mask, buffer) + + # Can't acquire display bus; skip the rest of the data. + if not self._core.bus_free(): + return False + self._core.begin_transaction() self._send_pixels(buffer[:subrectangle_size_bytes]) self._core.end_transaction() @@ -420,12 +432,12 @@ class Display: self._core.fill_area(area, mask, buffer) return buffer - def release(self) -> None: + def _release(self) -> None: """Release the display and free its resources""" self.auto_refresh = False self._core.release_display_core() - def reset(self) -> None: + def _reset(self) -> None: """Reset the display""" self.auto_refresh = True circuitpython_splash.x = 0 @@ -498,6 +510,8 @@ class Display: @rotation.setter def rotation(self, value: int): + if value % 90 != 0: + raise ValueError("Display rotation must be in 90 degree increments") self._core.set_rotation(value) @property