aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boot.py5
-rw-r--r--ergol.py43
-rw-r--r--json_layer.py17
-rw-r--r--kmk_frnb.py117
-rw-r--r--layout.py8
-rw-r--r--oled.py46
-rw-r--r--serial_conn.py8
7 files changed, 130 insertions, 114 deletions
diff --git a/boot.py b/boot.py
index 3f2dfb2..1aa21e5 100644
--- a/boot.py
+++ b/boot.py
@@ -1,8 +1,9 @@
import usb_cdc
-usb_cdc.enable(data=True)
-
import layout
import storage
+
+usb_cdc.enable(data=True)
+
if layout.check_key():
print("Key pressed")
storage.remount("/", readonly=False)
diff --git a/ergol.py b/ergol.py
new file mode 100644
index 0000000..df282af
--- /dev/null
+++ b/ergol.py
@@ -0,0 +1,43 @@
+from kmk.keys import make_key
+from kmk.keys import ModifierKey, KeyboardKey
+
+make_key(code=4, names=("A",), constructor=KeyboardKey)
+make_key(code=5, names=("B",), constructor=KeyboardKey)
+make_key(code=26, names=("C",), constructor=KeyboardKey)
+make_key(code=12, names=("D",), constructor=KeyboardKey)
+make_key(code=7, names=("E",), constructor=KeyboardKey)
+make_key(code=10, names=("F",), constructor=KeyboardKey)
+make_key(code=54, names=("G",), constructor=KeyboardKey)
+make_key(code=16, names=("H",), constructor=KeyboardKey)
+make_key(code=15, names=("I",), constructor=KeyboardKey)
+make_key(code=48, names=("J",), constructor=KeyboardKey)
+
+make_key(code=56, names=("K",), constructor=KeyboardKey)
+make_key(code=11, names=("L",), constructor=KeyboardKey)
+make_key(code=24, names=("M",), constructor=KeyboardKey)
+make_key(code=09, names=("N",), constructor=KeyboardKey)
+make_key(code=8, names=("O",), constructor=KeyboardKey)
+make_key(code=21, names=("P",), constructor=KeyboardKey)
+make_key(code=20, names=("Q",), constructor=KeyboardKey)
+
+
+make_key(code=13, names=("R",), constructor=KeyboardKey)
+make_key(code=22, names=("S",), constructor=KeyboardKey)
+make_key(code=14, names=("T",), constructor=KeyboardKey)
+make_key(code=51, names=("U",), constructor=KeyboardKey)
+make_key(code=25, names=("V",), constructor=KeyboardKey)
+make_key(code=23, names=("W",), constructor=KeyboardKey)
+make_key(code=27, names=("X",), constructor=KeyboardKey)
+make_key(code=19, names=("Y",), constructor=KeyboardKey)
+make_key(code=29, names=("Z",), constructor=KeyboardKey)
+
+make_key(code=39, names=("ZERO",), constructor=KeyboardKey)
+make_key(code=30, names=("ONE",), constructor=KeyboardKey)
+make_key(code=31, names=("TWO",), constructor=KeyboardKey)
+make_key(code=32, names=("THREE",), constructor=KeyboardKey)
+make_key(code=33, names=("FOUR",), constructor=KeyboardKey)
+make_key(code=34, names=("FIVE",), constructor=KeyboardKey)
+make_key(code=35, names=("SIX",), constructor=KeyboardKey)
+make_key(code=36, names=("SEVEN",), constructor=KeyboardKey)
+make_key(code=37, names=("EIGHT",), constructor=KeyboardKey)
+make_key(code=38, names=("NINE",), constructor=KeyboardKey)
diff --git a/json_layer.py b/json_layer.py
index 9e98fc3..acc78d7 100644
--- a/json_layer.py
+++ b/json_layer.py
@@ -24,6 +24,7 @@ from kmk.modules.macros import Delay, Macros, Tap
# I do not define it yet, only declare it.
operators = {}
+
def key_of_json(element, inside=False):
""" Create the key from the key name.
The value can be either a string or a list. If the parameter is a
@@ -39,7 +40,7 @@ def key_of_json(element, inside=False):
key = key_of_json(hd)
if len(tl) != 0:
# Chainable key / recursive function
- return key( key_of_json(tl) )
+ return key(key_of_json(tl))
else:
return key
if isinstance(element, dict):
@@ -47,6 +48,7 @@ def key_of_json(element, inside=False):
return operators[key](value)
return
+
def encode_macro(element):
""" Encode the result of the function key_of_json in order to build a macro
of this
@@ -58,6 +60,7 @@ def encode_macro(element):
return Tap(key)
return key
+
def sequence(element):
""" Convert a list of keys into a sequence of them.
"""
@@ -66,20 +69,24 @@ def sequence(element):
# Send the list as arguments to the function
return KC.MACRO(*seq)
+
def no_release(element):
key = key_of_json(element)
return key(no_release=True)
+
def no_press(element):
key = key_of_json(element)
return key(no_press=True)
+
# Now I can define the dictionnary
-operators["key"] = key_of_json
-operators["chain"] = key_of_json
-operators["seq"] = sequence
+operators["key"] = key_of_json
+operators["chain"] = key_of_json
+operators["seq"] = sequence
operators["no_release"] = no_release
-operators["no_press"] = no_press
+operators["no_press"] = no_press
+
class Layer(object):
""" Layer as an object.
diff --git a/kmk_frnb.py b/kmk_frnb.py
index a16c806..0c3a588 100644
--- a/kmk_frnb.py
+++ b/kmk_frnb.py
@@ -1,5 +1,6 @@
from kmk.keys import make_key
from kmk.keys import ModifierKey, KeyboardKey
+from ergol import *
# Modifier keys
make_key(code=0x01, names=("CONTROL", "^"), constructor=ModifierKey)
@@ -9,19 +10,8 @@ make_key(code=0x08, names=("LEFT_GUI", "WINDOWS"), constructor=ModifierKey)
make_key(code=0x40, names=("RIGHT_ALT", "ALTGR"), constructor=ModifierKey)
make_key(code=0x20, names=("RIGHT_SHIFT",), constructor=ModifierKey)
make_key(code=0x80, names=("RIGHT_GUI",), constructor=ModifierKey)
-#SHIFT=make_key(code=225, names=("SHIFT",))
-#WINDOWS=make_key(code=0x08, names=("WINDOWS",))
-
-make_key(code=39, names=("ZERO",), constructor=KeyboardKey)
-make_key(code=30, names=("ONE",), constructor=KeyboardKey)
-make_key(code=31, names=("TWO",), constructor=KeyboardKey)
-make_key(code=32, names=("THREE",), constructor=KeyboardKey)
-make_key(code=33, names=("FOUR",), constructor=KeyboardKey)
-make_key(code=34, names=("FIVE",), constructor=KeyboardKey)
-make_key(code=35, names=("SIX",), constructor=KeyboardKey)
-make_key(code=36, names=("SEVEN",), constructor=KeyboardKey)
-make_key(code=37, names=("EIGHT",), constructor=KeyboardKey)
-make_key(code=38, names=("NINE",), constructor=KeyboardKey)
+# SHIFT=make_key(code=225, names=("SHIFT",))
+# WINDOWS=make_key(code=0x08, names=("WINDOWS",))
make_key(code=80, names=("LEFT_ARROW",), constructor=KeyboardKey)
make_key(code=79, names=("RIGHT_ARROW",), constructor=KeyboardKey)
@@ -30,98 +20,35 @@ make_key(code=81, names=("DOWN_ARROW",), constructor=KeyboardKey)
make_key(code=78, names=("PAGE_DOWN",), constructor=KeyboardKey)
make_key(code=75, names=("PAGE_UP",), constructor=KeyboardKey)
-make_key(code=4, names=("A",), constructor=KeyboardKey)
-make_key(code=20, names=("B",), constructor=KeyboardKey)
-make_key(code=11, names=("C",), constructor=KeyboardKey)
-make_key(code=12, names=("D",), constructor=KeyboardKey)
-make_key(code=9, names=("E",), constructor=KeyboardKey)
-make_key(code=56, names=("F",), constructor=KeyboardKey)
-make_key(code=54, names=("G",), constructor=KeyboardKey)
-make_key(code=55, names=("H",), constructor=KeyboardKey)
-make_key(code=7, names=("I",), constructor=KeyboardKey)
-make_key(code=19, names=("J",), constructor=KeyboardKey)
-make_key(code=5, names=("K",), constructor=KeyboardKey)
-make_key(code=18, names=("L",), constructor=KeyboardKey)
-make_key(code=52, names=("M",), constructor=KeyboardKey)
-make_key(code=51, names=("N",), constructor=KeyboardKey)
-make_key(code=21, names=("O",), constructor=KeyboardKey)
-make_key(code=8, names=("P",), constructor=KeyboardKey)
-make_key(code=16, names=("Q",), constructor=KeyboardKey)
-make_key(code=15, names=("R",), constructor=KeyboardKey)
-make_key(code=14, names=("S",), constructor=KeyboardKey)
-make_key(code=13, names=("T",), constructor=KeyboardKey)
-make_key(code=22, names=("U",), constructor=KeyboardKey)
-make_key(code=24, names=("V",), constructor=KeyboardKey)
-make_key(code=48, names=("W",), constructor=KeyboardKey)
-make_key(code=6, names=("X",), constructor=KeyboardKey)
-make_key(code=27, names=("Y",), constructor=KeyboardKey)
-make_key(code=47, names=("Z",), constructor=KeyboardKey)
-
-make_key(code=89, names=("KEYPAD_ONE", "KP_0"), constructor=KeyboardKey)
-make_key(code=98, names=("KEYPAD_ZERO", "KP_1"), constructor=KeyboardKey)
-make_key(code=90, names=("KEYPAD_TWO", "KP_2"), constructor=KeyboardKey)
-make_key(code=91, names=("KEYPAD_THREE","KP_3"), constructor=KeyboardKey)
-make_key(code=92, names=("KEYPAD_FOUR", "KP_4"), constructor=KeyboardKey)
-make_key(code=93, names=("KEYPAD_FIVE", "KP_5"), constructor=KeyboardKey)
-make_key(code=94, names=("KEYPAD_SIX", "KP_6"), constructor=KeyboardKey)
-make_key(code=95, names=("KEYPAD_SEVEN","KP_7"), constructor=KeyboardKey)
-make_key(code=96, names=("KEYPAD_EIGHT","KP_8"), constructor=KeyboardKey)
-make_key(code=97, names=("KEYPAD_NINE", "KP_9"), constructor=KeyboardKey)
-make_key(code=86, names=("KEYPAD_MINUS","KP_MINUS"), constructor=KeyboardKey)
-make_key(code=99, names=("KEYPAD_PERIOD","KP_DOT"), constructor=KeyboardKey)
+make_key(code=89, names=("KEYPAD_ONE", "KP_0"), constructor=KeyboardKey)
+make_key(code=98, names=("KEYPAD_ZERO", "KP_1"), constructor=KeyboardKey)
+make_key(code=90, names=("KEYPAD_TWO", "KP_2"), constructor=KeyboardKey)
+make_key(code=91, names=("KEYPAD_THREE", "KP_3"), constructor=KeyboardKey)
+make_key(code=92, names=("KEYPAD_FOUR", "KP_4"), constructor=KeyboardKey)
+make_key(code=93, names=("KEYPAD_FIVE", "KP_5"), constructor=KeyboardKey)
+make_key(code=94, names=("KEYPAD_SIX", "KP_6"), constructor=KeyboardKey)
+make_key(code=95, names=("KEYPAD_SEVEN", "KP_7"), constructor=KeyboardKey)
+make_key(code=96, names=("KEYPAD_EIGHT", "KP_8"), constructor=KeyboardKey)
+make_key(code=97, names=("KEYPAD_NINE", "KP_9"), constructor=KeyboardKey)
+make_key(code=86, names=("KEYPAD_MINUS", "KP_MINUS"), constructor=KeyboardKey)
+make_key(code=99, names=("KEYPAD_PERIOD", "KP_DOT"), constructor=KeyboardKey)
make_key(code=87, names=("KEYPAD_PLUS", "KP_PLUS"), constructor=KeyboardKey)
-make_key(code=85, names=("KEYPAD_ASTERISK","KP_ASTERISK"), constructor=KeyboardKey)
-make_key(code=84, names=("KEYPAD_FORWARD_SLASH","KP_SLASH"), constructor=KeyboardKey)
+make_key(code=85, names=("KEYPAD_ASTERISK", "KP_ASTERISK"), constructor=KeyboardKey)
+make_key(code=84, names=("KEYPAD_FORWARD_SLASH", "KP_SLASH"), constructor=KeyboardKey)
make_key(code=83, names=("KEYPAD_NUMLOCK", "NUM_LOCK"), constructor=KeyboardKey)
-make_key(code=40, names=("RETURN","ENTER"), constructor=KeyboardKey)
+make_key(code=40, names=("RETURN", "ENTER"), constructor=KeyboardKey)
make_key(code=44, names=("SPACE", "SPACEBAR"), constructor=KeyboardKey)
+make_key(code=227, names=("GUI",), constructor=KeyboardKey)
+make_key(code=74, names=("HOME",), constructor=KeyboardKey)
+make_key(code=73, names=("INSERT",), constructor=KeyboardKey)
make_key(code=101, names=("APPLICATION",), constructor=KeyboardKey)
-make_key(code=26, names=("Accent_aigu",), constructor=KeyboardKey)
-make_key(code=28, names=("Accent_circonflexe",), constructor=KeyboardKey)
-make_key(code=23, names=("Accent_grave",), constructor=KeyboardKey)
-make_key(code=49, names=("BACKSLASH",), constructor=KeyboardKey)
-make_key(code=42, names=("BACKSPACE",), constructor=KeyboardKey)
-make_key(code=47, names=("Barre_couvrante",), constructor=KeyboardKey)
-make_key(code=18, names=("Barre_oblique_couvrante",), constructor=KeyboardKey)
-make_key(code=15, names=("Brève",), constructor=KeyboardKey)
-make_key(code=57, names=("CAPS_LOCK",), constructor=KeyboardKey)
-make_key(code=10, names=("COMMA",), constructor=KeyboardKey)
-make_key(code=227, names=("COMMAND",), constructor=KeyboardKey)
-make_key(code=24, names=("Caron",), constructor=KeyboardKey)
-make_key(code=11, names=("Cédille",), constructor=KeyboardKey)
make_key(code=76, names=("DELETE",), constructor=KeyboardKey)
make_key(code=77, names=("END",), constructor=KeyboardKey)
-make_key(code=46, names=("EQUALS",), constructor=KeyboardKey)
make_key(code=41, names=("ESCAPE",), constructor=KeyboardKey)
-make_key(code=13, names=("Exposants",), constructor=KeyboardKey)
-make_key(code=23, names=("FORWARD_SLASH",), constructor=KeyboardKey)
-make_key(code=17, names=("GRAVE_ACCENT",), constructor=KeyboardKey)
-make_key(code=227, names=("GUI",), constructor=KeyboardKey)
-make_key(code=74, names=("HOME",), constructor=KeyboardKey)
-make_key(code=73, names=("INSERT",), constructor=KeyboardKey)
-make_key(code=29, names=("RIGHT_BRACKET",), constructor=KeyboardKey)
-make_key(code=28, names=("LEFT_BRACKET",), constructor=KeyboardKey)
-make_key(code=14, names=("Latin_et_ponctuation",), constructor=KeyboardKey)
-make_key(code=54, names=("Lettres_grecques",), constructor=KeyboardKey)
-make_key(code=45, names=("MINUS",), constructor=KeyboardKey)
-make_key(code=52, names=("Macron",), constructor=KeyboardKey)
-make_key(code=100, names=("OEM_102",), constructor=KeyboardKey)
-make_key(code=226, names=("OPTION",), constructor=KeyboardKey)
-make_key(code=56, names=("Ogonek",), constructor=KeyboardKey)
-make_key(code=72, names=("PAUSE",), constructor=KeyboardKey)
-make_key(code=25, names=("PERIOD",), constructor=KeyboardKey)
-make_key(code=70, names=("PRINT_SCREEN",), constructor=KeyboardKey)
-make_key(code=55, names=("Point_souscrit",), constructor=KeyboardKey)
-make_key(code=53, names=("QUOTE",), constructor=KeyboardKey)
-make_key(code=26, names=("SEMICOLON",), constructor=KeyboardKey)
-make_key(code=71, names=("SCROLL_LOCK",), constructor=KeyboardKey)
-make_key(code=12, names=("Symboles_scientifiques",), constructor=KeyboardKey)
-make_key(code=16, names=("Rond_en_chef",), constructor=KeyboardKey)
+make_key(code=227, names=("COMMAND",), constructor=KeyboardKey)
make_key(code=43, names=("TAB",), constructor=KeyboardKey)
-make_key(code=51, names=("Tilde",), constructor=KeyboardKey)
-make_key(code=7, names=("Tréma",), constructor=KeyboardKey)
make_key(code=58, names=("F1",), constructor=KeyboardKey)
make_key(code=59, names=("F2",), constructor=KeyboardKey)
diff --git a/layout.py b/layout.py
index 3dfb828..4bc0eb1 100644
--- a/layout.py
+++ b/layout.py
@@ -1,16 +1,15 @@
# Describe the layout used in the keyboard
#
import board
-from digitalio import Pull
+from digitalio import DigitalInOut, Direction, Pull
from kmk.scanners import DiodeOrientation
-col_pins = (board.GP26,board.GP27,board.GP28,board.GP29)
-row_pins = (board.GP22,board.GP20,board.GP23,board.GP21)
+col_pins = (board.GP26, board.GP27, board.GP28, board.GP29)
+row_pins = (board.GP22, board.GP20, board.GP23, board.GP21)
diode_orientation = DiodeOrientation.ROW2COL
-from digitalio import DigitalInOut, Direction, Pull
def check_key():
""" Check if a key is pressed and return True if so.
@@ -38,6 +37,7 @@ def check_key():
return result
return False
+
def set_keyboard(keyboard):
""" Initialize the kmk keyboard with the values defined here.
"""
diff --git a/oled.py b/oled.py
index ab4c917..91a6818 100644
--- a/oled.py
+++ b/oled.py
@@ -4,12 +4,14 @@
import board
import busio
+from kmk.extensions.lock_status import LockStatus
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.
+ """ This is a named layer which return the name of the current mappng as
+ text.
"""
def __init__(self, keyboard, *args, **kwargs):
@@ -21,7 +23,7 @@ class NamedLayer(TextEntry):
def text(self):
try:
return self.keyboard.keymap[0].name
- except:
+ except _:
return self._text
@text.setter
@@ -29,6 +31,31 @@ class NamedLayer(TextEntry):
self._text = value
+class StatusLayer(TextEntry):
+ """ This layer display a status
+ """
+
+ def __init__(self, text, display, prop, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self._text = text
+ self.display = display
+ self.property = prop
+
+ @property
+ def text(self):
+ """ Return the name of the given property
+ """
+ if getattr(self.display, self.property):
+ return ""
+ return f"{self._text}:Off"
+
+ @text.setter
+ def text(self, value):
+ """ Ignore the text given
+ """
+ pass
+
+
class CustomDisplay(Display):
""" Create a custom Display object which refresh the display everytime the
layout is updated
@@ -36,12 +63,22 @@ class CustomDisplay(Display):
def __init__(self, *args, **kwargs):
self.keyboard = None
super().__init__(*args, **kwargs)
+ self.status = LockStatus()
self._prevLayers = None
+ self.numlock = False
+
def during_bootup(self, keyboard):
super().during_bootup(keyboard)
+ self.status.during_bootup(keyboard)
self.keyboard = keyboard
+ def after_hid_send(self, sandbox):
+ self.status.after_hid_send(sandbox)
+ if self.status.report_updated:
+ self.numlock = self.status.get_num_lock()
+ self.render(sandbox.active_layers[0])
+
def before_matrix_scan(self, sandbox):
""" Override the default function with the layer name as a comparaison
key
@@ -50,7 +87,6 @@ class CustomDisplay(Display):
if self.keyboard.keymap[0].name != self._prevLayers:
self._prevLayers = self.keyboard.keymap[0].name
self.render(sandbox.active_layers[0])
- return
@property
def timer_start(self):
@@ -62,6 +98,7 @@ class CustomDisplay(Display):
if self.keyboard:
self.keyboard.keymap[0].timer_start = value
+
def main(keyboard):
driver = SSD1306(
@@ -73,5 +110,6 @@ def main(keyboard):
)
display.entries = [
NamedLayer(keyboard, text="", x=0, y=0),
+ StatusLayer(text="Num", display=display, prop="numlock", x=0, y=20),
]
keyboard.extensions.append(display)
diff --git a/serial_conn.py b/serial_conn.py
index a781d64..7645563 100644
--- a/serial_conn.py
+++ b/serial_conn.py
@@ -4,6 +4,7 @@ import time
from kmk.modules import Module
from usb_cdc import data
+
class Client(Module):
""" Listen the connections from host, and apply the actions depending of
the json command.
@@ -31,13 +32,12 @@ class Client(Module):
if current_name != "Disconnected":
self.last_name = current_name
keyboard.keymap[0].name = "Disconnected"
- time.sleep(1)
+ # 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:
return
@@ -53,7 +53,7 @@ class Client(Module):
jdata = json.loads(content)
except ValueError as err:
# In circuitPython, json error are reported as ValueError.
- # seet https://docs.circuitpython.org/en/latest/docs/library/json.html#json.load
+ # see https://docs.circuitpython.org/en/latest/docs/library/json.html#json.load
print(err, line)
return
@@ -61,7 +61,7 @@ class Client(Module):
# direct raw layer instruction if this does not work.
actions = {
- "layer" : lambda x : keyboard.keymap[0].load(x),
+ "layer": lambda x: keyboard.keymap[0].load(x),
}
try: