Added remote debugger and cleaned up several things Looks good to merge

This commit is contained in:
Kyle Brown 2018-10-26 14:26:15 -07:00
parent 2b28b99503
commit 15fea0189b
4 changed files with 44 additions and 25 deletions

3
.gitignore vendored
View File

@ -112,3 +112,6 @@ venv.bak/
# Pycharms cruft # Pycharms cruft
.idea .idea
# Personal dev scripts
.scripts

View File

@ -4,7 +4,6 @@ UART is supported, though other modes will come later such as Bluetooth and i2c.
Useful config options: Useful config options:
```python ```python
keyboard.split_type = "UART" # Sets split mode to UART
keyboard.split_flip = True # If your boards are identical but one is flipped, this option is for you keyboard.split_flip = True # If your boards are identical but one is flipped, this option is for you
keyboard.split_offsets = [6, 6, 6, 6] # This is the how many keys are on each column on the "Master" half keyboard.split_offsets = [6, 6, 6, 6] # This is the how many keys are on each column on the "Master" half
``` ```
@ -34,5 +33,6 @@ from kmk_side import split_side
# UART # UART
To enable uart it's as simple as adding this line, of course changing the pin To enable uart it's as simple as adding this line, of course changing the pin
```python ```python
keyboard.split_type = "UART"
keyboard.uart = keyboard.init_uart(tx=board.SCL) keyboard.uart = keyboard.init_uart(tx=board.SCL)
``` ```

View File

@ -63,7 +63,9 @@ class Firmware:
split_offsets = () split_offsets = ()
split_flip = False split_flip = False
split_side = None
split_master_left = True split_master_left = True
is_master = None
uart = None uart = None
uart_flip = True uart_flip = True
@ -84,6 +86,10 @@ class Firmware:
self._send_hid() self._send_hid()
def _handle_update(self, update): def _handle_update(self, update):
'''
Bulk processing of update code for each cycle
:param update:
'''
if update is not None: if update is not None:
self._state.matrix_changed( self._state.matrix_changed(
update[0], update[0],
@ -110,26 +116,39 @@ class Firmware:
self._state.resolve_macro() self._state.resolve_macro()
def _send_to_master(self, update): def _send_to_master(self, update):
if self.split_master_left:
update[1] += self.split_offsets[update[0]]
else:
update[1] -= self.split_offsets[update[0]]
if self.uart is not None: if self.uart is not None:
if self.split_master_left:
update[1] += self.split_offsets[update[0]]
self.uart.write(update) self.uart.write(update)
def _receive_from_slave(self): def _receive_from_slave(self):
if self.uart is not None and self.uart.in_waiting > 0: if self.uart is not None and self.uart.in_waiting > 0:
update = bytearray(self.uart.read(3)) update = bytearray(self.uart.read(3))
if self.split_master_left: # Built in debug mode switch
update[1] -= self.split_offsets[update[0]] if update == b'DEB':
# TODO Pretty up output
print(self.uart.readline())
return None
return update return update
return None return None
def _send_debug(self, message):
'''
Prepends DEB and appends a newline to allow debug messages to
be detected and handled differently than typical keypresses.
:param message: Debug message
'''
if self.uart is not None:
self.uart.write('DEB')
self.uart.write(message, '\n')
def _master_half(self): def _master_half(self):
return supervisor.runtime.serial_connected return supervisor.runtime.serial_connected
def init_uart(self, tx=None, rx=None, timeout=1): def init_uart(self, tx=None, rx=None, timeout=20):
if self._master_half(): if self._master_half():
# If running with one wire, only receive on master # If running with one wire, only receive on master
if rx is None or self.uart_flip: if rx is None or self.uart_flip:
@ -146,19 +165,15 @@ class Firmware:
assert self.col_pins, 'no GPIO pins defined for matrix columns' assert self.col_pins, 'no GPIO pins defined for matrix columns'
assert self.diode_orientation is not None, 'diode orientation must be defined' assert self.diode_orientation is not None, 'diode orientation must be defined'
self.is_master == self._master_half()
if self.split_flip and not self._master_half(): if self.split_flip and not self._master_half():
self.col_pins = list(reversed(self.col_pins)) self.col_pins = list(reversed(self.col_pins))
if self.split_side == "Left": if self.split_side == "Left":
if supervisor.runtime.serial_connected: self.split_master_left = self.is_master
self.split_master_left = True elif self.split_side == "Right":
else: self.split_master_left = not self.is_master
self.split_master_left = False
else:
if supervisor.runtime.serial_connected:
self.split_master_left = False
else:
self.split_master_left = True
self.matrix = MatrixScanner( self.matrix = MatrixScanner(
cols=self.col_pins, cols=self.col_pins,

View File

@ -1,7 +1,7 @@
import board import board
import busio import busio
from kmk.consts import DiodeOrientation, UnicodeModes from kmk.consts import DiodeOrientation, LeaderMode, UnicodeModes
from kmk.keycodes import KC from kmk.keycodes import KC
from kmk.keycodes import generate_leader_dictionary_seq as glds from kmk.keycodes import generate_leader_dictionary_seq as glds
from kmk.macros.simple import send_string from kmk.macros.simple import send_string
@ -16,17 +16,18 @@ keyboard.col_pins = (P.D10, P.D9, P.D7, P.D5, P.A4, P.A5)
keyboard.row_pins = (P.A0, P.A1, P.A2, P.A3) keyboard.row_pins = (P.A0, P.A1, P.A2, P.A3)
keyboard.diode_orientation = DiodeOrientation.COLUMNS keyboard.diode_orientation = DiodeOrientation.COLUMNS
# ------------------User level config variables ---------------------------------------
keyboard.unicode_mode = UnicodeModes.LINUX
keyboard.tap_time = 350
keyboard.leader_timeout = 2000
keyboard.debug_enabled = False
keyboard.split_type = "UART" keyboard.split_type = "UART"
keyboard.split_flip = True keyboard.split_flip = True
keyboard.split_offsets = [6, 6, 6, 6] keyboard.split_offsets = [6, 6, 6, 6]
keyboard.uart = keyboard.init_uart(tx=board.TX, rx=board.RX)
keyboard.uart_flip = False keyboard.uart_flip = False
keyboard.uart = keyboard.init_uart(tx=board.TX, rx=board.RX)
# ------------------User level config variables ---------------------------------------
keyboard.leader_mode = LeaderMode.TIMEOUT
keyboard.unicode_mode = UnicodeModes.LINUX
keyboard.tap_time = 150
keyboard.leader_timeout = 2000
keyboard.debug_enabled = True
emoticons = compile_unicode_string_sequences({ emoticons = compile_unicode_string_sequences({
# Emoticons, but fancier # Emoticons, but fancier