unlocker: allow re-locking keyboard
parent
e5487a0ae6
commit
9a4825a124
|
|
@ -30,6 +30,7 @@ CMD_VIAL_SET_ENCODER = 0x04
|
||||||
CMD_VIAL_GET_LOCK = 0x05
|
CMD_VIAL_GET_LOCK = 0x05
|
||||||
CMD_VIAL_UNLOCK_START = 0x06
|
CMD_VIAL_UNLOCK_START = 0x06
|
||||||
CMD_VIAL_UNLOCK_POLL = 0x07
|
CMD_VIAL_UNLOCK_POLL = 0x07
|
||||||
|
CMD_VIAL_LOCK = 0x08
|
||||||
|
|
||||||
# how much of a macro/keymap buffer we can read/write per packet
|
# how much of a macro/keymap buffer we can read/write per packet
|
||||||
BUFFER_FETCH_CHUNK = 28
|
BUFFER_FETCH_CHUNK = 28
|
||||||
|
|
@ -316,3 +317,6 @@ class Keyboard:
|
||||||
def unlock_poll(self):
|
def unlock_poll(self):
|
||||||
data = self.usb_send(self.dev, struct.pack("BB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_UNLOCK_POLL))
|
data = self.usb_send(self.dev, struct.pack("BB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_UNLOCK_POLL))
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def lock(self):
|
||||||
|
self.usb_send(self.dev, struct.pack("BB", CMD_VIA_VIAL_PREFIX, CMD_VIAL_LOCK))
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ from layout_editor import LayoutEditor
|
||||||
from macro_recorder import MacroRecorder
|
from macro_recorder import MacroRecorder
|
||||||
from unlocker import Unlocker
|
from unlocker import Unlocker
|
||||||
from util import tr, find_vial_devices
|
from util import tr, find_vial_devices
|
||||||
|
from vial_device import VialKeyboard
|
||||||
|
|
||||||
|
|
||||||
class MainWindow(QMainWindow):
|
class MainWindow(QMainWindow):
|
||||||
|
|
@ -84,6 +85,16 @@ class MainWindow(QMainWindow):
|
||||||
file_menu.addSeparator()
|
file_menu.addSeparator()
|
||||||
file_menu.addAction(exit_act)
|
file_menu.addAction(exit_act)
|
||||||
|
|
||||||
|
keyboard_unlock_act = QAction(tr("MenuSecurity", "Unlock"), self)
|
||||||
|
keyboard_unlock_act.triggered.connect(self.unlock_keyboard)
|
||||||
|
|
||||||
|
keyboard_lock_act = QAction(tr("MenuSecurity", "Lock"), self)
|
||||||
|
keyboard_lock_act.triggered.connect(self.lock_keyboard)
|
||||||
|
|
||||||
|
self.security_menu = self.menuBar().addMenu(tr("Menu", "Security"))
|
||||||
|
self.security_menu.addAction(keyboard_unlock_act)
|
||||||
|
self.security_menu.addAction(keyboard_lock_act)
|
||||||
|
|
||||||
def on_layout_load(self):
|
def on_layout_load(self):
|
||||||
dialog = QFileDialog()
|
dialog = QFileDialog()
|
||||||
dialog.setDefaultSuffix("vil")
|
dialog.setDefaultSuffix("vil")
|
||||||
|
|
@ -127,6 +138,9 @@ class MainWindow(QMainWindow):
|
||||||
self.refresh_tabs()
|
self.refresh_tabs()
|
||||||
|
|
||||||
def rebuild(self):
|
def rebuild(self):
|
||||||
|
# don't show "Security" menu for bootloader mode, as the bootloader is inherently insecure
|
||||||
|
self.security_menu.menuAction().setVisible(isinstance(self.current_device, VialKeyboard))
|
||||||
|
|
||||||
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]:
|
||||||
e.rebuild(self.current_device)
|
e.rebuild(self.current_device)
|
||||||
|
|
||||||
|
|
@ -162,3 +176,11 @@ class MainWindow(QMainWindow):
|
||||||
self.tabs.setEnabled(True)
|
self.tabs.setEnabled(True)
|
||||||
self.combobox_devices.setEnabled(True)
|
self.combobox_devices.setEnabled(True)
|
||||||
self.btn_refresh_devices.setEnabled(True)
|
self.btn_refresh_devices.setEnabled(True)
|
||||||
|
|
||||||
|
def unlock_keyboard(self):
|
||||||
|
if isinstance(self.current_device, VialKeyboard):
|
||||||
|
self.unlocker.perform_unlock(self.current_device.keyboard)
|
||||||
|
|
||||||
|
def lock_keyboard(self):
|
||||||
|
if isinstance(self.current_device, VialKeyboard):
|
||||||
|
self.current_device.keyboard.lock()
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@ class Unlocker(QWidget):
|
||||||
|
|
||||||
layout.addWidget(QLabel(tr("Unlocker", "In order to proceed, the keyboard must be set into unlocked mode.\n"
|
layout.addWidget(QLabel(tr("Unlocker", "In order to proceed, the keyboard must be set into unlocked mode.\n"
|
||||||
"You should only perform this operation on computers that you trust.")))
|
"You should only perform this operation on computers that you trust.")))
|
||||||
layout.addWidget(QLabel(tr("Unlocker", "To exit this mode, you will need to replug the keyboard.")))
|
layout.addWidget(QLabel(tr("Unlocker", "To exit this mode, you will need to replug the keyboard\n"
|
||||||
|
"or select Security->Lock from the menu.")))
|
||||||
layout.addWidget(QLabel(tr("Unlocker", "Press and hold the following keys until the progress bar "
|
layout.addWidget(QLabel(tr("Unlocker", "Press and hold the following keys until the progress bar "
|
||||||
"below fills up:")))
|
"below fills up:")))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue