From 109c4395a86c72fb34f820c633a1679590dc8fdb Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Sun, 11 Aug 2024 16:43:29 +0200 Subject: Initial commit --- oled.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 oled.py (limited to 'oled.py') diff --git a/oled.py b/oled.py new file mode 100644 index 0000000..4db0436 --- /dev/null +++ b/oled.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import board +import busio + +from kmk.extensions.display import Display, TextEntry, ImageEntry +from kmk.extensions.display.ssd1306 import SSD1306 +from supervisor import ticks_ms + +class NamedLayer(TextEntry): + """ This is a named layer which return the name of the current mappng as text. + """ + + def __init__(self, keyboard, *args, **kwargs): + super().__init__(*args, **kwargs) + self._text = None + self.keyboard = keyboard + + @property + def text(self): + try: + return self.keyboard.keymap[0].name + except: + return self._text + + @text.setter + def text(self, value): + self._text = value + + +class CustomDisplay(Display): + """ Create a custom Display object which refresh the display everytime the + layout is updated + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._prevLayers = None + + def during_bootup(self, keyboard): + super().during_bootup(keyboard) + self.keyboard = keyboard + + def before_matrix_scan(self, sandbox): + """ Override the default function with the layer name as a comparaison + key + """ + super().before_matrix_scan(sandbox) + if self.keyboard.keymap[0].name != self._prevLayers: + self.timer_start = ticks_ms() + self._prevLayers = self.keyboard.keymap[0].name + self.render(sandbox.active_layers[0]) + return + + + +def main(keyboard): + + driver = SSD1306( + i2c=busio.I2C(board.SCL, board.SDA), + ) + + display = CustomDisplay( + display=driver, + ) + display.entries = [ + NamedLayer(keyboard, text="", x=0, y=0), + ] + keyboard.extensions.append(display) -- cgit v1.2.3