Added board firmware update functionality
This commit is contained in:
@@ -1,74 +1,46 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
|
||||
import Controls 1.0 as Controls
|
||||
import Cubo 1.0
|
||||
import Screens 1.0 as Screens
|
||||
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
spacing: 20
|
||||
|
||||
Keys.onReturnPressed: sendButton.clicked()
|
||||
Keys.onEnterPressed: sendButton.clicked()
|
||||
property string title: stack.itemAt(stack.currentIndex).title
|
||||
|
||||
Controls.Frame {
|
||||
Flickable {
|
||||
id: outputFlickable
|
||||
clip: true
|
||||
anchors.fill: parent
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
StackLayout {
|
||||
id: stack
|
||||
|
||||
TextArea.flickable: Controls.TextArea {
|
||||
id: outputArea
|
||||
}
|
||||
Screens.TerminalScreen {
|
||||
id: terminalScreen
|
||||
property string title: qsTr("Terminal")
|
||||
}
|
||||
|
||||
ScrollBar.horizontal: Controls.ScrollBar {}
|
||||
ScrollBar.vertical: Controls.ScrollBar {}
|
||||
Screens.FirmwareUpdateScreen {
|
||||
id: firmwareUpdateScreen
|
||||
property string title: qsTr("Firmware update")
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
ColumnLayout {
|
||||
spacing: 20
|
||||
|
||||
Controls.Button {
|
||||
text: qsTr("Clear")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: outputArea.clear()
|
||||
}
|
||||
|
||||
Controls.TextField {
|
||||
id: commandField
|
||||
implicitHeight: 52
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.Button {
|
||||
id: sendButton
|
||||
text: qsTr("Send")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: {
|
||||
BmsInterface.commands().sendTerminalCmd(commandField.text)
|
||||
commandField.clear()
|
||||
Repeater {
|
||||
model: [terminalScreen.title, firmwareUpdateScreen.title]
|
||||
delegate: Controls.LinkLabel {
|
||||
text: modelData
|
||||
onClicked: stack.currentIndex = index
|
||||
}
|
||||
}
|
||||
|
||||
Controls.Button {
|
||||
text: qsTr("Help")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: BmsInterface.commands().sendTerminalCmd("help")
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: BmsInterface.commands()
|
||||
onPrintReceived: {
|
||||
outputArea.append(str)
|
||||
outputArea.cursorPosition = outputArea.length
|
||||
}
|
||||
Layout.preferredWidth: 180
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ ColumnLayout {
|
||||
Connections {
|
||||
target: BmsInterface
|
||||
onStatusMessage: printMessage(msg, isGood)
|
||||
onPortConnectedChanged: printMessage(BmsInterface.getConnectedPortName(), true)
|
||||
}
|
||||
|
||||
function printMessage(msg, isGood) {
|
||||
|
||||
126
qml/Screens/FirmwareUpdateScreen.qml
Normal file
126
qml/Screens/FirmwareUpdateScreen.qml
Normal file
@@ -0,0 +1,126 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
import QtQuick.Dialogs 1.2
|
||||
import Qt.labs.settings 1.1
|
||||
|
||||
import Controls 1.0 as Controls
|
||||
import Cubo 1.0
|
||||
|
||||
ColumnLayout {
|
||||
spacing: 20
|
||||
|
||||
Controls.Frame {
|
||||
padding: 35
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
spacing: 20
|
||||
|
||||
Controls.TitleLabel {
|
||||
text: qsTr("Board information")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: 10
|
||||
|
||||
Controls.ContentLabel {
|
||||
text: qsTr("Firmware")
|
||||
}
|
||||
|
||||
Controls.DotSeparator {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ContentLabel {
|
||||
id: firmwareLabel
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: 10
|
||||
|
||||
Controls.ContentLabel {
|
||||
text: qsTr("Hardware")
|
||||
}
|
||||
|
||||
Controls.DotSeparator {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ContentLabel {
|
||||
id: hardwareLabel
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: 10
|
||||
|
||||
Controls.ContentLabel {
|
||||
text: qsTr("UUID")
|
||||
}
|
||||
|
||||
Controls.DotSeparator {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.ContentLabel {
|
||||
id: uuidLabel
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.Button {
|
||||
text: qsTr("Upload firmware")
|
||||
onClicked: firmwareFileDialog.open()
|
||||
|
||||
FileDialog {
|
||||
id: firmwareFileDialog
|
||||
title: qsTr("Select firmware file")
|
||||
folder: shortcuts.documents
|
||||
nameFilters: [ qsTr("Firmware files (*.bin)"), qsTr("All files (*)") ]
|
||||
onAccepted: {
|
||||
if (BmsInterface.isPortConnected()) {
|
||||
updateHelper.uploadFirmware(firmwareFileDialog.fileUrl.toString().replace(/^(file:\/{3})/, ""), BmsInterface)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Settings {
|
||||
category: "firmwareUpdate"
|
||||
property alias folder: firmwareFileDialog.folder
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
FirmwareUpdateHelper {
|
||||
id: updateHelper
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: BmsInterface.commands()
|
||||
onFwVersionReceived: {
|
||||
firmwareLabel.text = major + "." + minor
|
||||
hardwareLabel.text = hw
|
||||
uuidLabel.text = bufferToHex(uuid)
|
||||
}
|
||||
}
|
||||
|
||||
function bufferToHex(buffer) {
|
||||
return [...new Uint8Array(buffer)]
|
||||
.map(b => b.toString(16).padStart(2, "0"))
|
||||
.join("").toUpperCase();
|
||||
}
|
||||
}
|
||||
74
qml/Screens/TerminalScreen.qml
Normal file
74
qml/Screens/TerminalScreen.qml
Normal file
@@ -0,0 +1,74 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
|
||||
import Controls 1.0 as Controls
|
||||
import Cubo 1.0
|
||||
|
||||
ColumnLayout {
|
||||
spacing: 20
|
||||
|
||||
Keys.onReturnPressed: sendButton.clicked()
|
||||
Keys.onEnterPressed: sendButton.clicked()
|
||||
|
||||
Controls.Frame {
|
||||
Flickable {
|
||||
id: outputFlickable
|
||||
clip: true
|
||||
anchors.fill: parent
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
|
||||
TextArea.flickable: Controls.TextArea {
|
||||
id: outputArea
|
||||
}
|
||||
|
||||
ScrollBar.horizontal: Controls.ScrollBar {}
|
||||
ScrollBar.vertical: Controls.ScrollBar {}
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
spacing: 20
|
||||
|
||||
Controls.Button {
|
||||
text: qsTr("Clear")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: outputArea.clear()
|
||||
}
|
||||
|
||||
Controls.TextField {
|
||||
id: commandField
|
||||
implicitHeight: 52
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Controls.Button {
|
||||
id: sendButton
|
||||
text: qsTr("Send")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: {
|
||||
BmsInterface.commands().sendTerminalCmd(commandField.text)
|
||||
commandField.clear()
|
||||
}
|
||||
}
|
||||
|
||||
Controls.Button {
|
||||
text: qsTr("Help")
|
||||
Layout.preferredWidth: 120
|
||||
onClicked: BmsInterface.commands().sendTerminalCmd("help")
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: BmsInterface.commands()
|
||||
onPrintReceived: {
|
||||
outputArea.append(str)
|
||||
outputArea.cursorPosition = outputArea.length
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,3 +8,5 @@ DebugInformationScreen 1.0 DebugInformationScreen.qml
|
||||
ConnectionDialog 1.0 ConnectionDialog.qml
|
||||
MessageDialog 1.0 MessageDialog.qml
|
||||
StatusPopup 1.0 StatusPopup.qml
|
||||
TerminalScreen 1.0 TerminalScreen.qml
|
||||
FirmwareUpdateScreen 1.0 FirmwareUpdateScreen.qml
|
||||
|
||||
Reference in New Issue
Block a user