started working on matrix test feature
parent
fbf45fcdf1
commit
016ac7eed5
|
|
@ -26,6 +26,7 @@ CMD_VIA_KEYMAP_GET_BUFFER = 0x12
|
||||||
CMD_VIA_VIAL_PREFIX = 0xFE
|
CMD_VIA_VIAL_PREFIX = 0xFE
|
||||||
|
|
||||||
VIA_LAYOUT_OPTIONS = 0x02
|
VIA_LAYOUT_OPTIONS = 0x02
|
||||||
|
VIA_SWITCH_MATRIX_STATE = 0x03
|
||||||
|
|
||||||
CMD_VIAL_GET_KEYBOARD_ID = 0x00
|
CMD_VIAL_GET_KEYBOARD_ID = 0x00
|
||||||
CMD_VIAL_GET_SIZE = 0x01
|
CMD_VIAL_GET_SIZE = 0x01
|
||||||
|
|
@ -500,6 +501,13 @@ class Keyboard:
|
||||||
|
|
||||||
self.usb_send(self.dev, struct.pack("BB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_LOCK), retries=20)
|
self.usb_send(self.dev, struct.pack("BB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_LOCK), retries=20)
|
||||||
|
|
||||||
|
def matrix_poll(self):
|
||||||
|
if self.via_protocol < 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
data = self.usb_send(self.dev, struct.pack("BB", CMD_VIA_GET_KEYBOARD_VALUE, VIA_SWITCH_MATRIX_STATE), retries=20)
|
||||||
|
return data
|
||||||
|
|
||||||
def macro_serialize(self, macro):
|
def macro_serialize(self, macro):
|
||||||
"""
|
"""
|
||||||
Serialize a single macro, a macro is made out of macro actions (BasicAction)
|
Serialize a single macro, a macro is made out of macro actions (BasicAction)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ from macro_recorder import MacroRecorder
|
||||||
from unlocker import Unlocker
|
from unlocker import Unlocker
|
||||||
from util import tr, find_vial_devices, EXAMPLE_KEYBOARDS
|
from util import tr, find_vial_devices, EXAMPLE_KEYBOARDS
|
||||||
from vial_device import VialKeyboard
|
from vial_device import VialKeyboard
|
||||||
|
from matrix_test import MatrixTest
|
||||||
|
|
||||||
import themes
|
import themes
|
||||||
|
|
||||||
|
|
@ -51,9 +52,10 @@ class MainWindow(QMainWindow):
|
||||||
self.keymap_editor = KeymapEditor(self.layout_editor)
|
self.keymap_editor = KeymapEditor(self.layout_editor)
|
||||||
self.firmware_flasher = FirmwareFlasher(self)
|
self.firmware_flasher = FirmwareFlasher(self)
|
||||||
self.macro_recorder = MacroRecorder()
|
self.macro_recorder = MacroRecorder()
|
||||||
|
self.matrix_tester = MatrixTest(self.layout_editor)
|
||||||
|
|
||||||
self.editors = [(self.keymap_editor, "Keymap"), (self.layout_editor, "Layout"), (self.macro_recorder, "Macros"),
|
self.editors = [(self.keymap_editor, "Keymap"), (self.layout_editor, "Layout"), (self.macro_recorder, "Macros"),
|
||||||
(self.firmware_flasher, "Firmware updater")]
|
(self.matrix_tester, "Matrix tester"), (self.firmware_flasher, "Firmware updater")]
|
||||||
Unlocker.global_layout_editor = self.layout_editor
|
Unlocker.global_layout_editor = self.layout_editor
|
||||||
|
|
||||||
self.tabs = QTabWidget()
|
self.tabs = QTabWidget()
|
||||||
|
|
@ -234,7 +236,7 @@ class MainWindow(QMainWindow):
|
||||||
Unlocker.unlock(self.current_device.keyboard)
|
Unlocker.unlock(self.current_device.keyboard)
|
||||||
self.current_device.keyboard.reload()
|
self.current_device.keyboard.reload()
|
||||||
|
|
||||||
for e in [self.layout_editor, self.keymap_editor, self.firmware_flasher, self.macro_recorder]:
|
for e in [self.layout_editor, self.keymap_editor, self.firmware_flasher, self.macro_recorder, self.matrix_tester]:
|
||||||
e.rebuild(self.current_device)
|
e.rebuild(self.current_device)
|
||||||
|
|
||||||
def refresh_tabs(self):
|
def refresh_tabs(self):
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
from PyQt5.QtWidgets import QVBoxLayout, QPushButton
|
||||||
|
from PyQt5.QtCore import Qt, QTimer
|
||||||
|
import struct
|
||||||
|
import math
|
||||||
|
|
||||||
|
from basic_editor import BasicEditor
|
||||||
|
from keyboard_widget import KeyboardWidget
|
||||||
|
from vial_device import VialKeyboard
|
||||||
|
from unlocker import Unlocker
|
||||||
|
|
||||||
|
class MatrixTest(BasicEditor):
|
||||||
|
def __init__(self, layout_editor):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.layout_editor = layout_editor
|
||||||
|
|
||||||
|
self.keyboardWidget = KeyboardWidget(layout_editor)
|
||||||
|
self.startButtonWidget = QPushButton("Start testing")
|
||||||
|
|
||||||
|
layout = QVBoxLayout()
|
||||||
|
layout.addWidget(self.keyboardWidget)
|
||||||
|
layout.setAlignment(self.keyboardWidget, Qt.AlignCenter)
|
||||||
|
|
||||||
|
self.addLayout(layout)
|
||||||
|
self.addWidget(self.startButtonWidget)
|
||||||
|
|
||||||
|
self.keyboard = None
|
||||||
|
self.device = None
|
||||||
|
self.polling = False
|
||||||
|
|
||||||
|
self.timer = QTimer()
|
||||||
|
self.timer.timeout.connect(self.matrix_poller)
|
||||||
|
self.startButtonWidget.clicked.connect(self.start_poller)
|
||||||
|
|
||||||
|
def rebuild(self, device):
|
||||||
|
super().rebuild(device)
|
||||||
|
if self.valid():
|
||||||
|
self.keyboard = device.keyboard
|
||||||
|
|
||||||
|
self.keyboardWidget.set_keys(self.keyboard.keys, self.keyboard.encoders)
|
||||||
|
|
||||||
|
def valid(self):
|
||||||
|
return isinstance(self.device, VialKeyboard)
|
||||||
|
|
||||||
|
def matrix_poller(self):
|
||||||
|
# print(f"Rows: {self.keyboard.rows}")
|
||||||
|
# print(f"Cols: {self.keyboard.cols}")
|
||||||
|
rows = self.keyboard.rows
|
||||||
|
cols = self.keyboard.cols
|
||||||
|
matrix = [ [None for y in range(cols)] for x in range(rows) ]
|
||||||
|
|
||||||
|
data = self.keyboard.matrix_poll()
|
||||||
|
|
||||||
|
row_size = math.ceil(cols / 8)
|
||||||
|
|
||||||
|
for row in range(rows):
|
||||||
|
row_data_start = 2 + (row * row_size)
|
||||||
|
row_data_end = row_data_start + row_size
|
||||||
|
row_data = data[row_data_start:row_data_end]
|
||||||
|
|
||||||
|
for col in range(cols):
|
||||||
|
col_byte = math.floor(col / 8)
|
||||||
|
state = (row_data[col_byte] >> col) & 1
|
||||||
|
matrix[row][col] = state
|
||||||
|
|
||||||
|
def start_poller(self):
|
||||||
|
if not self.polling:
|
||||||
|
Unlocker.unlock(self.keyboard)
|
||||||
|
self.startButtonWidget.setText("Stop testing")
|
||||||
|
self.timer.start(100)
|
||||||
|
self.polling = True
|
||||||
|
else:
|
||||||
|
self.timer.stop()
|
||||||
|
self.keyboard.lock()
|
||||||
|
self.startButtonWidget.setText("Start testing")
|
||||||
|
self.polling = False
|
||||||
|
|
||||||
Loading…
Reference in New Issue