Timed dimming

Dims display slightly after 10 seconds of inactivity, dims if further after 30 seconds. Returns to full brightness after a keypress.
This commit is contained in:
regicidal.plutophage 2023-03-01 08:50:38 +03:00 committed by GitHub
parent 3482a530e5
commit 40f03a73ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,11 +1,15 @@
import busio import busio
import gc import gc
from supervisor import ticks_ms
import adafruit_displayio_ssd1306 import adafruit_displayio_ssd1306
import displayio import displayio
import terminalio import terminalio
from adafruit_display_text import label from adafruit_display_text import label
from kmk.kmktime import check_deadline
from kmk.extensions import Extension from kmk.extensions import Extension
from kmk.handlers.stock import passthrough as handler_passthrough from kmk.handlers.stock import passthrough as handler_passthrough
from kmk.keys import make_key from kmk.keys import make_key
@ -25,17 +29,7 @@ class OledData:
self.data = entries self.data = entries
@staticmethod @staticmethod
def oled_text_entry( 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):
text='',
x=0,
y=0,
x_anchor=0.0,
y_anchor=0.0,
direction='LTR',
line_spacing=0.75,
inverted=False,
layer=None,
):
return { return {
0: text, 0: text,
1: x, 1: x,
@ -71,16 +65,19 @@ class Oled(Extension):
device_address=0x3C, device_address=0x3C,
brightness=0.8, brightness=0.8,
brightness_step=0.1, brightness_step=0.1,
portrait: bool = False,
): ):
displayio.release_displays() displayio.release_displays()
self.rotation = 180 if flip else 0 self.rotation = 180 if flip else 0
#if portrait: self.rotation = self.rotation + 90
self._views = views.data self._views = views.data
self._width = width self._width = width if not portrait else height
self._height = height self._height = height if not portrait else width
self._prevLayers = 0 self._prevLayers = 0
self._device_address = device_address self._device_address = device_address
self._brightness = brightness self._brightness = brightness
self._brightness_step = brightness_step self._brightness_step = brightness_step
self._timer_start = ticks_ms()
gc.collect() gc.collect()
make_key( make_key(
@ -100,16 +97,13 @@ class Oled(Extension):
label.Label( label.Label(
terminalio.FONT, terminalio.FONT,
text=view[0], text=view[0],
color=0xFFFFFF if view[9] is False else 0x000000, color=0xFFFFFF if not view[9] else 0x000000,
background_color=0x000000 if view[9] is False else 0xFFFFFF, background_color=0x000000 if not view[9] else 0xFFFFFF,
anchor_point=(view[5], view[6]), anchor_point=(view[5], view[6]),
anchored_position=( anchored_position=(view[1] if not view[9] else view[1]+1, view[2]),
view[1] if view[9] is False else view[1] + 1,
view[2],
),
label_direction=view[7], label_direction=view[7],
line_spacing=view[8], line_spacing=view[8],
padding_left=0 if view[9] is False else 1, padding_left=1,
) )
) )
elif view[4] == OledEntryType.IMG: elif view[4] == OledEntryType.IMG:
@ -153,14 +147,16 @@ class Oled(Extension):
self.updateOLED(sandbox) self.updateOLED(sandbox)
return return
def after_matrix_scan(self, sandbox): def after_matrix_scan(self, keyboard):
if keyboard.matrix_update or keyboard.secondary_matrix_update:
self.timer_time_reset()
return return
def before_hid_send(self, sandbox): def before_hid_send(self, sandbox):
return return
def after_hid_send(self, sandbox): def after_hid_send(self, sandbox):
return self.dim()
def on_powersave_enable(self, sandbox): def on_powersave_enable(self, sandbox):
self._display.brightness = ( self._display.brightness = (
@ -189,3 +185,16 @@ class Oled(Extension):
else 0.1 else 0.1
) )
self._brightness = self._display.brightness # Save current brightness 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