firmware_flasher: add file selection

main
Ilya Zhuravlev 2020-12-02 10:29:28 -05:00
parent 74ed115c16
commit 72aec53cef
1 changed files with 37 additions and 3 deletions

View File

@ -1,6 +1,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QLineEdit, QToolButton, QPlainTextEdit, QProgressBar import datetime
from PyQt5.QtGui import QFontDatabase
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QLineEdit, QToolButton, QPlainTextEdit, QProgressBar,\
QFileDialog, QDialog
from util import tr from util import tr
from vial_device import VialBootloader from vial_device import VialBootloader
@ -11,17 +15,26 @@ class FirmwareFlasher(QVBoxLayout):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self.selected_firmware_path = ""
file_selector = QHBoxLayout() file_selector = QHBoxLayout()
file_selector.addWidget(QLineEdit()) self.txt_file_selector = QLineEdit()
self.txt_file_selector.setReadOnly(True)
file_selector.addWidget(self.txt_file_selector)
btn_select_file = QToolButton() btn_select_file = QToolButton()
btn_select_file.setText(tr("Flasher", "Select file...")) btn_select_file.setText(tr("Flasher", "Select file..."))
btn_select_file.clicked.connect(self.on_click_select_file)
file_selector.addWidget(btn_select_file) file_selector.addWidget(btn_select_file)
self.addLayout(file_selector) self.addLayout(file_selector)
self.addWidget(QPlainTextEdit()) self.txt_logger = QPlainTextEdit()
self.txt_logger.setReadOnly(True)
self.txt_logger.setFont(QFontDatabase.systemFont(QFontDatabase.FixedFont))
self.addWidget(self.txt_logger)
progress_flash = QHBoxLayout() progress_flash = QHBoxLayout()
progress_flash.addWidget(QProgressBar()) progress_flash.addWidget(QProgressBar())
btn_flash = QToolButton() btn_flash = QToolButton()
btn_flash.setText(tr("Flasher", "Flash")) btn_flash.setText(tr("Flasher", "Flash"))
btn_flash.clicked.connect(self.on_click_flash)
progress_flash.addWidget(btn_flash) progress_flash.addWidget(btn_flash)
self.addLayout(progress_flash) self.addLayout(progress_flash)
@ -29,6 +42,27 @@ class FirmwareFlasher(QVBoxLayout):
def rebuild(self, device): def rebuild(self, device):
self.device = device self.device = device
self.txt_logger.clear()
if isinstance(self.device, VialBootloader):
self.log("Valid Vial Bootloader device at {}".format(self.device.desc["path"].decode("utf-8")))
def valid(self): def valid(self):
# TODO: it is also valid to flash a VialKeyboard which supports optional "vibl-integration" feature
return isinstance(self.device, VialBootloader) return isinstance(self.device, VialBootloader)
def on_click_select_file(self):
dialog = QFileDialog()
# TODO: this should be .vfw for Vial Firmware
dialog.setDefaultSuffix("bin")
dialog.setAcceptMode(QFileDialog.AcceptOpen)
dialog.setNameFilters(["Vial Firmware (*.bin)"])
if dialog.exec_() == QDialog.Accepted:
self.selected_firmware_path = dialog.selectedFiles()[0]
self.txt_file_selector.setText(self.selected_firmware_path)
self.log("Firmware update package: {}".format(self.selected_firmware_path))
def on_click_flash(self):
pass
def log(self, line):
self.txt_logger.appendPlainText("[{}] {}".format(datetime.datetime.now(), line))