From 40f03a73eacbeba8976220c23ebe0e2d1ce31479 Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Wed, 1 Mar 2023 08:50:38 +0300 Subject: [PATCH] Timed dimming Dims display slightly after 10 seconds of inactivity, dims if further after 30 seconds. Returns to full brightness after a keypress. --- kmk/extensions/oled.py | 55 ++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/kmk/extensions/oled.py b/kmk/extensions/oled.py index 7946003..9d83a93 100644 --- a/kmk/extensions/oled.py +++ b/kmk/extensions/oled.py @@ -1,11 +1,15 @@ import busio import gc +from supervisor import ticks_ms + import adafruit_displayio_ssd1306 import displayio import terminalio from adafruit_display_text import label +from kmk.kmktime import check_deadline + from kmk.extensions import Extension from kmk.handlers.stock import passthrough as handler_passthrough from kmk.keys import make_key @@ -25,17 +29,7 @@ class OledData: self.data = entries @staticmethod - def oled_text_entry( - text='', - x=0, - y=0, - x_anchor=0.0, - y_anchor=0.0, - direction='LTR', - line_spacing=0.75, - inverted=False, - layer=None, - ): + def oled_text_entry(text='', x=0, y=0, x_anchor=0.0, y_anchor=0.0, direction='LTR', line_spacing=0.75, inverted=False, layer=None): return { 0: text, 1: x, @@ -71,16 +65,19 @@ class Oled(Extension): device_address=0x3C, brightness=0.8, brightness_step=0.1, + portrait: bool = False, ): displayio.release_displays() self.rotation = 180 if flip else 0 + #if portrait: self.rotation = self.rotation + 90 self._views = views.data - self._width = width - self._height = height + self._width = width if not portrait else height + self._height = height if not portrait else width self._prevLayers = 0 self._device_address = device_address self._brightness = brightness self._brightness_step = brightness_step + self._timer_start = ticks_ms() gc.collect() make_key( @@ -100,16 +97,13 @@ class Oled(Extension): label.Label( terminalio.FONT, text=view[0], - color=0xFFFFFF if view[9] is False else 0x000000, - background_color=0x000000 if view[9] is False else 0xFFFFFF, + color=0xFFFFFF if not view[9] else 0x000000, + background_color=0x000000 if not view[9] else 0xFFFFFF, anchor_point=(view[5], view[6]), - anchored_position=( - view[1] if view[9] is False else view[1] + 1, - view[2], - ), + anchored_position=(view[1] if not view[9] else view[1]+1, view[2]), label_direction=view[7], line_spacing=view[8], - padding_left=0 if view[9] is False else 1, + padding_left=1, ) ) elif view[4] == OledEntryType.IMG: @@ -153,14 +147,16 @@ class Oled(Extension): self.updateOLED(sandbox) return - def after_matrix_scan(self, sandbox): - return + def after_matrix_scan(self, keyboard): + if keyboard.matrix_update or keyboard.secondary_matrix_update: + self.timer_time_reset() + return def before_hid_send(self, sandbox): return def after_hid_send(self, sandbox): - return + self.dim() def on_powersave_enable(self, sandbox): self._display.brightness = ( @@ -189,3 +185,16 @@ class Oled(Extension): else 0.1 ) self._brightness = self._display.brightness # Save current brightness + + def timer_time_reset(self): + self._timer_start = ticks_ms() + + def dim(self): + if not check_deadline(ticks_ms(), self._timer_start, 30000): + if self._display.brightness > 0.1: + self._display.brightness = 0.1 + elif not check_deadline(ticks_ms(), self._timer_start, 10000): + if self._display.brightness > 0.5: + self._display.brightness = 0.5 + else: self._display.brightness = (self._brightness) + return \ No newline at end of file