vial/src/main/python/firmware_flasher.py

69 lines
2.5 KiB
Python
Raw Normal View History

2020-12-02 02:47:11 -05:00
# SPDX-License-Identifier: GPL-2.0-or-later
2020-12-02 10:29:28 -05:00
import datetime
from PyQt5.QtGui import QFontDatabase
from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QLineEdit, QToolButton, QPlainTextEdit, QProgressBar,\
QFileDialog, QDialog
2020-12-02 02:47:11 -05:00
from util import tr
2020-12-02 10:10:59 -05:00
from vial_device import VialBootloader
2020-12-02 02:47:11 -05:00
class FirmwareFlasher(QVBoxLayout):
def __init__(self, parent=None):
super().__init__(parent)
2020-12-02 10:29:28 -05:00
self.selected_firmware_path = ""
2020-12-02 02:47:11 -05:00
file_selector = QHBoxLayout()
2020-12-02 10:29:28 -05:00
self.txt_file_selector = QLineEdit()
self.txt_file_selector.setReadOnly(True)
file_selector.addWidget(self.txt_file_selector)
2020-12-02 02:47:11 -05:00
btn_select_file = QToolButton()
btn_select_file.setText(tr("Flasher", "Select file..."))
2020-12-02 10:29:28 -05:00
btn_select_file.clicked.connect(self.on_click_select_file)
2020-12-02 02:47:11 -05:00
file_selector.addWidget(btn_select_file)
self.addLayout(file_selector)
2020-12-02 10:29:28 -05:00
self.txt_logger = QPlainTextEdit()
self.txt_logger.setReadOnly(True)
self.txt_logger.setFont(QFontDatabase.systemFont(QFontDatabase.FixedFont))
self.addWidget(self.txt_logger)
2020-12-02 02:47:11 -05:00
progress_flash = QHBoxLayout()
progress_flash.addWidget(QProgressBar())
btn_flash = QToolButton()
btn_flash.setText(tr("Flasher", "Flash"))
2020-12-02 10:29:28 -05:00
btn_flash.clicked.connect(self.on_click_flash)
2020-12-02 02:47:11 -05:00
progress_flash.addWidget(btn_flash)
self.addLayout(progress_flash)
2020-12-02 10:10:59 -05:00
self.device = None
def rebuild(self, device):
self.device = device
2020-12-02 10:29:28 -05:00
self.txt_logger.clear()
if isinstance(self.device, VialBootloader):
self.log("Valid Vial Bootloader device at {}".format(self.device.desc["path"].decode("utf-8")))
2020-12-02 10:10:59 -05:00
def valid(self):
2020-12-02 10:29:28 -05:00
# TODO: it is also valid to flash a VialKeyboard which supports optional "vibl-integration" feature
2020-12-02 10:10:59 -05:00
return isinstance(self.device, VialBootloader)
2020-12-02 10:29:28 -05:00
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))