aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@dailly.me>2025-07-20 21:46:40 +0200
committerSébastien Dailly <sebastien@dailly.me>2025-07-20 21:46:40 +0200
commit6de0aef90b5bb2c73fd0f192eb79bf81e2fb6715 (patch)
tree7e3c2ba0cc83796fd1d6729eac6e3d67fa207fc0
parenta4382ed71254dfb8e5eed0a6849e7710e0367cb8 (diff)
Refresh the screen when receiving a change from the host
-rw-r--r--code.py5
-rw-r--r--json_layer.py17
-rw-r--r--oled.py10
-rw-r--r--serial_conn.py17
4 files changed, 39 insertions, 10 deletions
diff --git a/code.py b/code.py
index a738543..a232644 100644
--- a/code.py
+++ b/code.py
@@ -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
diff --git a/oled.py b/oled.py
index 4db0436..ab4c917 100644
--- a/oled.py
+++ b/oled.py
@@ -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: