broke out layer led function and started on debouncing
This commit is contained in:
63
keyboard.py
Normal file → Executable file
63
keyboard.py
Normal file → Executable file
@@ -149,7 +149,6 @@ class Keyboard:
|
||||
self.layer = LayerState()
|
||||
|
||||
self.led = RGBLED(rgb_pins)
|
||||
self.led.indicate_boot()
|
||||
if debug_repl:
|
||||
print("Done initializing keyboard")
|
||||
|
||||
@@ -207,36 +206,6 @@ class Keyboard:
|
||||
def get_key(self, layer_index, key_index) -> KeyBase:
|
||||
return self.keymap[layer_index][key_index]
|
||||
|
||||
def start(self):
|
||||
if self.debug_repl:
|
||||
print("Starting keyboard")
|
||||
try:
|
||||
self._initialize_session_values()
|
||||
if self.debug_repl:
|
||||
print("Keyboard started")
|
||||
while True:
|
||||
for pin in self.pins:
|
||||
layer = self.layer.get()
|
||||
key = self.keymap[layer][pin.index]
|
||||
key.handle(self, pin)
|
||||
layer = self.layer.get()
|
||||
if len(self.layer_colors) >= (layer + 1):
|
||||
self.led.set(self.layer_colors[layer])
|
||||
else:
|
||||
self.led.off()
|
||||
if self.pressed_keys != self.pressed_keys_last_cycle:
|
||||
self.send_nkro_report()
|
||||
self.pressed_keys_last_cycle = set(self.pressed_keys)
|
||||
|
||||
except Exception as e:
|
||||
if self.debug_repl:
|
||||
raise e
|
||||
print(f"Exception thrown: {e}, restarting..")
|
||||
self.led.indicate_exception()
|
||||
time.sleep(1)
|
||||
self.led.indicate_boot()
|
||||
self.start()
|
||||
|
||||
def add_keycode_to_report(self, keycode: int):
|
||||
self.pressed_keys.add(keycode)
|
||||
|
||||
@@ -247,6 +216,13 @@ class Keyboard:
|
||||
# silently pass errors when same keycode has been issued twice
|
||||
pass
|
||||
|
||||
def _update_layer_led(self) -> None:
|
||||
layer = self.layer.get()
|
||||
if len(self.layer_colors) >= (layer + 1):
|
||||
self.led.set(self.layer_colors[layer])
|
||||
else:
|
||||
self.led.off()
|
||||
|
||||
# todo: add boot mode
|
||||
def send_nkro_report(self):
|
||||
"""Sends the USB HID NKRO keyboard report."""
|
||||
@@ -262,3 +238,28 @@ class Keyboard:
|
||||
if code & 0x00ff:
|
||||
report_bitmap[code >> 3] |= 1 << (code & 0x7)
|
||||
self.keyboard_device.send_report(report)
|
||||
|
||||
def start(self):
|
||||
if self.debug_repl:
|
||||
print("Starting keyboard")
|
||||
self.led.indicate_boot()
|
||||
try:
|
||||
self._initialize_session_values()
|
||||
if self.debug_repl:
|
||||
print("Keyboard started")
|
||||
while True:
|
||||
for pin in self.pins:
|
||||
key = self.get_key(self.layer.get(), pin.index)
|
||||
key.handle(self, pin)
|
||||
self._update_layer_led()
|
||||
|
||||
if self.pressed_keys != self.pressed_keys_last_cycle:
|
||||
self.send_nkro_report()
|
||||
self.pressed_keys_last_cycle = set(self.pressed_keys)
|
||||
except Exception as e:
|
||||
if self.debug_repl:
|
||||
raise e
|
||||
print(f"Exception thrown: {e}, restarting..")
|
||||
self.led.indicate_exception()
|
||||
time.sleep(1)
|
||||
self.start()
|
||||
|
||||
0
keycodes.py
Normal file → Executable file
0
keycodes.py
Normal file → Executable file
19
keytypes.py
Normal file → Executable file
19
keytypes.py
Normal file → Executable file
@@ -120,8 +120,18 @@ class KeycodeBase(KeyBase):
|
||||
def _consume_next_event(self, pin) -> bool:
|
||||
"""Returns: a boolean representing if the event property was updated with a new event or not"""
|
||||
next_pin_event = pin.read_event()
|
||||
current_key_event = self.events.current
|
||||
current_key_event, previous_key_event = self.events.current, self.events.previous
|
||||
next_key_event = None
|
||||
|
||||
if current_key_event == KeyEvent.SOFT_RELEASED:
|
||||
if previous_key_event == KeyEvent.RELEASED:
|
||||
return self._set_event(KeyEvent.RELEASED)
|
||||
if next_pin_event == PinEvent.RELEASED:
|
||||
return self._set_event(KeyEvent.RELEASED)
|
||||
if previous_key_event == KeyEvent.PRESSED_ or next_pin_event == PinEvent.PRESSED:
|
||||
return self._set_event(KeyEvent.SOFT_RELEASED)
|
||||
return self._set_event(KeyEvent.NO_EVENT)
|
||||
|
||||
if current_key_event == KeyEvent.NO_EVENT:
|
||||
if next_pin_event == PinEvent.NO_EVENT:
|
||||
next_key_event = KeyEvent.NO_EVENT
|
||||
@@ -143,13 +153,6 @@ class KeycodeBase(KeyBase):
|
||||
next_key_event = KeyEvent.RELEASED
|
||||
if next_pin_event == PinEvent.PRESSED:
|
||||
next_key_event = KeyEvent.NO_EVENT
|
||||
if current_key_event == KeyEvent.SOFT_RELEASED:
|
||||
if next_pin_event == PinEvent.NO_EVENT:
|
||||
next_key_event = KeyEvent.NO_EVENT
|
||||
if next_pin_event == PinEvent.RELEASED:
|
||||
next_key_event = KeyEvent.RELEASED
|
||||
if next_pin_event == PinEvent.PRESSED:
|
||||
next_key_event = KeyEvent.NO_EVENT
|
||||
|
||||
return self._set_event(next_key_event)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user