diff options
| author | Sébastien Dailly <sebastien@dailly.me> | 2025-07-20 21:46:40 +0200 | 
|---|---|---|
| committer | Sébastien Dailly <sebastien@dailly.me> | 2025-07-20 21:46:40 +0200 | 
| commit | 6de0aef90b5bb2c73fd0f192eb79bf81e2fb6715 (patch) | |
| tree | 7e3c2ba0cc83796fd1d6729eac6e3d67fa207fc0 | |
| parent | a4382ed71254dfb8e5eed0a6849e7710e0367cb8 (diff) | |
Refresh the screen when receiving a change from the host
| -rw-r--r-- | code.py | 5 | ||||
| -rw-r--r-- | json_layer.py | 17 | ||||
| -rw-r--r-- | oled.py | 10 | ||||
| -rw-r--r-- | serial_conn.py | 17 | 
4 files changed, 39 insertions, 10 deletions
@@ -1,10 +1,9 @@  import board -from supervisor import runtime  import json -from serial_conn import Client +from supervisor import runtime  import oled -from supervisor import runtime +from serial_conn import Client  # Do not reload the application when the files are changed  runtime.autoreload = False diff --git a/json_layer.py b/json_layer.py index 8d12681..9e98fc3 100644 --- a/json_layer.py +++ b/json_layer.py @@ -8,6 +8,7 @@  # +from supervisor import ticks_ms  from kmk.keys import Key, KC  from kmk.modules.macros import Delay, Macros, Tap @@ -83,11 +84,15 @@ operators["no_press"]   = no_press  class Layer(object):      """ Layer as an object.          This class gives the property name in addition of the keymap list + +        This layer keep a track of the last time the layer was updated. This is +        used as timer in order to put the device in sleep mode or not.      """      def __init__(self): -        self.name = ""          self.keys = [] +        self._name = "" +        self.timer_start = ticks_ms()      def load(self, json_data):          """ Load the json dictionnary into the layer. The dictionnary shall be @@ -101,6 +106,7 @@ class Layer(object):              The dictionnary must be one of the operators declared above.          """ +        self.timer_start = ticks_ms()          for name, keys in json_data.items():              self.name = name              self.keys = list(map(key_of_json, keys)) @@ -114,3 +120,12 @@ class Layer(object):          """ Compare two layer by the name only          """          return self.name == other.name + +    @property +    def name(self): +        return self._name + +    @name.setter +    def name(self, value): +        self.timer_start = ticks_ms() +        self._name = value @@ -34,6 +34,7 @@ class CustomDisplay(Display):          layout is updated      """      def __init__(self, *args, **kwargs): +        self.keyboard = None          super().__init__(*args, **kwargs)          self._prevLayers = None @@ -47,12 +48,19 @@ class CustomDisplay(Display):          """          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 +    @property +    def timer_start(self): +        if self.keyboard: +            return self.keyboard.keymap[0].timer_start +    @timer_start.setter +    def timer_start(self, value): +        if self.keyboard: +            self.keyboard.keymap[0].timer_start = value  def main(keyboard): diff --git a/serial_conn.py b/serial_conn.py index 0775ba0..a781d64 100644 --- a/serial_conn.py +++ b/serial_conn.py @@ -9,6 +9,9 @@ class Client(Module):          the json command.      """ +    def __init__(self): +        self.last_name = None +      def during_bootup(self, keyboard):          try:              # Do not set any timeout, we check before reading a string if there @@ -23,13 +26,17 @@ class Client(Module):      def before_hid_send(self, keyboard):          # Serial.data isn't initialized yet. -        if not data: -            return - -        if not data.connected: -            keyboard.keymap[0].name = "Disconnected" +        if not data or not data.connected: +            current_name = keyboard.keymap[0].name +            if current_name != "Disconnected": +                self.last_name = current_name +                keyboard.keymap[0].name = "Disconnected"              time.sleep(1)              return +        if self.last_name is not None: +            keyboard.keymap[0].name = self.last_name +            self.last_name = None +          # Nothing to parse.          if data.in_waiting <= 0:  | 
