Changed powersave strategy, reworked constructor

This commit is contained in:
regicidal.plutophage 2023-03-04 00:33:13 +00:00
parent 7182dbf4e5
commit 95e028d9dd

View File

@ -31,21 +31,49 @@ class OledData:
text='', text='',
x=0, x=0,
y=0, y=0,
x_anchor=0.0, x_anchor='left',
y_anchor=0.0, y_anchor='top',
direction='LTR', direction='LTR',
line_spacing=0.75, line_spacing=0.75,
inverted=False, inverted=False,
layer=None, layer=None,
): ):
_x = 0
_x_anchor = 0.0
_y_anchor = 0.0
if x_anchor == 'left' or x_anchor == 'l':
_x_anchor = 0.0
elif x_anchor == 'middle' or x_anchor == 'm':
_x_anchor = 0.5
elif x_anchor == 'right' or x_anchor == 'r':
_x_anchor = 1.0
else:
_x_anchor = 0.0
if y_anchor == 'top' or y_anchor == 't':
_y_anchor = 0.0
elif y_anchor == 'middle' or y_anchor == 'm':
_y_anchor = 0.5
elif y_anchor == 'bottom' or y_anchor == 'b':
_y_anchor = 1.0
else:
_y_anchor = 0.0
if (
x_anchor != 'middle'
or x_anchor != 'right'
or x_anchor != 'm'
or x_anchor != 'r'
):
_x = x + 1
else:
_x = x
return { return {
0: text, 0: text,
1: x, 1: _x,
2: y, 2: y,
3: layer, 3: layer,
4: OledEntryType.TXT, 4: OledEntryType.TXT,
5: x_anchor, 5: _x_anchor,
6: y_anchor, 6: _y_anchor,
7: direction, 7: direction,
8: line_spacing, 8: line_spacing,
9: inverted, 9: inverted,
@ -75,6 +103,8 @@ class Oled(Extension):
brightness_step=0.1, brightness_step=0.1,
dim_time=None, dim_time=None,
off_time=None, off_time=None,
powersave_dim_time=10,
powersave_off_time=60,
): ):
displayio.release_displays() displayio.release_displays()
self.rotation = 180 if flip else 0 self.rotation = 180 if flip else 0
@ -91,6 +121,12 @@ class Oled(Extension):
self._powersave = False self._powersave = False
self._dim_time_ms = dim_time * 1000 if dim_time else None self._dim_time_ms = dim_time * 1000 if dim_time else None
self._off_time_ms = off_time * 1000 if off_time else None self._off_time_ms = off_time * 1000 if off_time else None
self._powersave_dim_time_ms = (
powersave_dim_time * 1000 if powersave_dim_time else None
)
self._powersave_off_time_ms = (
powersave_off_time * 1000 if powersave_off_time else None
)
gc.collect() gc.collect()
make_key( make_key(
@ -114,10 +150,7 @@ class Oled(Extension):
color=0xFFFFFF if not view[9] else 0x000000, color=0xFFFFFF if not view[9] else 0x000000,
background_color=0x000000 if not view[9] 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], view[2]),
view[1] if not view[9] else view[1] + 1,
view[2],
),
label_direction=view[7], label_direction=view[7],
line_spacing=view[8], line_spacing=view[8],
padding_left=1, padding_left=1,
@ -205,20 +238,32 @@ class Oled(Extension):
self._timer_start = ticks_ms() self._timer_start = ticks_ms()
def dim(self): def dim(self):
if self._off_time_ms is not None and not check_deadline( if self._powersave:
if self._powersave_off_time_ms is not None and not check_deadline(
ticks_ms(), self._timer_start, self._powersave_off_time_ms
):
self._go_dark = True
elif self._powersave_dim_time_ms is not None and not check_deadline(
ticks_ms(), self._timer_start, self._powersave_dim_time_ms
):
self._display.brightness = (
self._display.brightness / 2
if self._display.brightness > 0.5
else 0.1
)
else:
self._display.brightness = self._brightness
self._go_dark = False
elif self._off_time_ms is not None and not check_deadline(
ticks_ms(), self._timer_start, self._off_time_ms ticks_ms(), self._timer_start, self._off_time_ms
): ):
self._go_dark = True self._go_dark = True
elif self._dim_time_ms is not None and not check_deadline( elif self._dim_time_ms is not None and not check_deadline(
ticks_ms(), self._timer_start, self._dim_time_ms ticks_ms(), self._timer_start, self._dim_time_ms
): ):
if self._display.brightness > 0.1:
self._display.brightness = 0.1
elif self._powersave:
self._display.brightness = ( self._display.brightness = (
self._display.brightness / 2 if self._display.brightness > 0.5 else 0.1 self._display.brightness / 2 if self._display.brightness > 0.5 else 0.1
) )
self._go_dark = False
else: else:
self._display.brightness = self._brightness self._display.brightness = self._brightness
self._go_dark = False self._go_dark = False