Added board firmware update functionality

This commit is contained in:
Yury Shuvakin
2022-09-13 15:20:09 +03:00
parent d28efef208
commit 4dd1f95193
21 changed files with 908 additions and 225 deletions

View File

@@ -70,9 +70,9 @@ release_android {
UI_DIR = build/android/obj UI_DIR = build/android/obj
} }
build_mobile { #build_mobile {
DEFINES += USE_MOBILE # DEFINES += USE_MOBILE
} #}
SOURCES += main.cpp\ SOURCES += main.cpp\
# akbmonitorpage.cpp \ # akbmonitorpage.cpp \
@@ -104,6 +104,7 @@ SOURCES += main.cpp\
utility.cpp \ utility.cpp \
bmsinterface.cpp \ bmsinterface.cpp \
translator.cpp \ translator.cpp \
firmwareupdatehelper.cpp \
# visualizationchart.cpp \ # visualizationchart.cpp \
# visualizationpage.cpp # visualizationpage.cpp
@@ -138,6 +139,7 @@ HEADERS += \ #mainwindow.h \
utility.h \ utility.h \
bmsinterface.h \ bmsinterface.h \
translator.h \ translator.h \
firmwareupdatehelper.h \
# visualizationchart.h \ # visualizationchart.h \
# visualizationpage.h # visualizationpage.h

View File

@@ -113,8 +113,8 @@ BMSInterface::BMSInterface(QObject *parent) : QObject(parent)
connect(mCommands, SIGNAL(dataToSend(QByteArray&)),this, SLOT(cmdDataToSend(QByteArray&))); connect(mCommands, SIGNAL(dataToSend(QByteArray&)),this, SLOT(cmdDataToSend(QByteArray&)));
connect(mCommands, SIGNAL(fwVersionReceived(int,int,QString,QByteArray)),this, SLOT(fwVersionReceived(int,int,QString,QByteArray))); connect(mCommands, SIGNAL(fwVersionReceived(int,int,QString,QByteArray)),this, SLOT(fwVersionReceived(int,int,QString,QByteArray)));
connect(mCommands, SIGNAL(ackReceived(QString)), this, SLOT(ackReceived(QString))); connect(mCommands, SIGNAL(ackReceived(QString)), this, SLOT(ackReceived(QString)));
connect(mbmsConfig, SIGNAL(updated()), this, SLOT(bmsconfUpdated())); connect(mbmsConfig, SIGNAL(updated()), this, SLOT(bmsConfUpdated()));
connect(mbmsConfig, SIGNAL(stored()), this, SLOT(bmsconfStored())); connect(mbmsConfig, SIGNAL(stored()), this, SLOT(bmsConfStored()));
} }
BMSInterface::~BMSInterface() BMSInterface::~BMSInterface()
@@ -628,7 +628,6 @@ void BMSInterface::ignoreCanChange(bool ignore)
#ifdef HAS_SERIALPORT #ifdef HAS_SERIALPORT
void BMSInterface::serialDataAvailable() void BMSInterface::serialDataAvailable()
{ {
bool b = true;
while (mSerialPort->bytesAvailable() > 0) { while (mSerialPort->bytesAvailable() > 0) {
mPacket->processData(mSerialPort->readAll()); mPacket->processData(mSerialPort->readAll());
} }
@@ -660,7 +659,6 @@ void BMSInterface::serialPortError(QSerialPort::SerialPortError error)
void BMSInterface::tcpInputConnected() void BMSInterface::tcpInputConnected()
{ {
bool b = true;
mTcpConnected = true; mTcpConnected = true;
updateFwRx(false); updateFwRx(false);
} }
@@ -673,7 +671,6 @@ void BMSInterface::tcpInputDisconnected()
void BMSInterface::tcpInputDataAvailable() void BMSInterface::tcpInputDataAvailable()
{ {
bool b = true;
while (mTcpSocket->bytesAvailable() > 0) { while (mTcpSocket->bytesAvailable() > 0) {
mPacket->processData(mTcpSocket->readAll()); mPacket->processData(mTcpSocket->readAll());
} }
@@ -748,9 +745,13 @@ void BMSInterface::timerSlot()
if (mIsUploadingFw) { if (mIsUploadingFw) {
updateFwRx(false); updateFwRx(false);
mFwRetries = 0; mFwRetries = 0;
if (fwStatus.compare("FW Upload Done") == 0) { if (mCommands->getFirmwareUploadSuccess())
{
disconnectPort();
emit fwUploadStatus(fwStatus, 1.0, false); emit fwUploadStatus(fwStatus, 1.0, false);
} else { }
else
{
emit fwUploadStatus(fwStatus, 0.0, false); emit fwUploadStatus(fwStatus, 0.0, false);
} }
} }
@@ -796,7 +797,7 @@ void BMSInterface::fwVersionReceived(int major, int minor, QString hw, QByteArra
{ {
QList<QPair<int, int> > fwPairs = getSupportedFirmwarePairs(); QList<QPair<int, int> > fwPairs = getSupportedFirmwarePairs();
QString strUuid = Utility::uuid2Str(uuid, true); QString strUuid = uuid.toHex().toUpper();
if (fwPairs.isEmpty()) { if (fwPairs.isEmpty()) {
emit messageDialog(tr("Not Supported Firmwares"), emit messageDialog(tr("Not Supported Firmwares"),
@@ -862,17 +863,6 @@ void BMSInterface::fwVersionReceived(int major, int minor, QString hw, QByteArra
} }
auto fwStr = tr("Firmware version: %1.%2, Hardware: %3, UUID: %4").arg(major).arg(minor).arg(hw).arg(strUuid); auto fwStr = tr("Firmware version: %1.%2, Hardware: %3, UUID: %4").arg(major).arg(minor).arg(hw).arg(strUuid);
// QString fwStr;
// fwStr.sprintf("ENNOID-BMS Firmware Version %d.%d", major, minor);
// if (!hw.isEmpty()) {
// fwStr += ", Hardware: " + hw;
// }
// if (!strUuid.isEmpty()) {
// fwStr += ", UUID: " + strUuid;
// }
emit statusMessage(fwStr, true); emit statusMessage(fwStr, true);
#if 0 #if 0
} }
@@ -891,13 +881,15 @@ void BMSInterface::fwVersionReceived(int major, int minor, QString hw, QByteArra
} }
} }
void BMSInterface::bmsconfUpdated() void BMSInterface::bmsConfUpdated()
{ {
emit statusMessage(tr("BMS configuration updated"), true); emit statusMessage(tr("BMS configuration updated"), true);
emit bmsConfigurationUpdated();
} }
void BMSInterface::bmsconfStored() { void BMSInterface::bmsConfStored() {
emit statusMessage(tr("BMS configuration stored to Flash"), true); emit statusMessage(tr("BMS configuration stored to Flash"), true);
emit bmsConfigurationStored();
} }
void BMSInterface::ackReceived(QString ackType) void BMSInterface::ackReceived(QString ackType)

View File

@@ -127,6 +127,8 @@ signals:
void autoConnectProgressUpdated(double progress, bool isOngoing); void autoConnectProgressUpdated(double progress, bool isOngoing);
void autoConnectFinished(); void autoConnectFinished();
void pairingListUpdated(); void pairingListUpdated();
void bmsConfigurationUpdated();
void bmsConfigurationStored();
public slots: public slots:
@@ -150,8 +152,8 @@ private slots:
void packetReceived(QByteArray &data); void packetReceived(QByteArray &data);
void cmdDataToSend(QByteArray &data); void cmdDataToSend(QByteArray &data);
void fwVersionReceived(int major, int minor, QString hw, QByteArray uuid); void fwVersionReceived(int major, int minor, QString hw, QByteArray uuid);
void bmsconfUpdated(); void bmsConfUpdated();
void bmsconfStored(); void bmsConfStored();
void ackReceived(QString ackType); void ackReceived(QString ackType);
private: private:

View File

@@ -39,6 +39,8 @@ Commands::Commands(QObject *parent) : QObject(parent)
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareTimer = 0; mFirmwareTimer = 0;
mFirmwareRetries = 0; mFirmwareRetries = 0;
mFirmwareIsBootloader = false;
mFirmwareUploadSuccess = false;
mFirmwareUploadStatus = "FW Upload Status"; mFirmwareUploadStatus = "FW Upload Status";
mCheckNextbmsConfig = false; mCheckNextbmsConfig = false;
@@ -457,12 +459,12 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
const int timeout = 350; const int timeout = 350;
if (mFirmwareState == 0) { if (mFirmwareState == 0) {
mFirmwareUploadStatus = "Buffer Erase"; mFirmwareUploadStatus = tr("Buffer erase");
if (isTimeout) { if (isTimeout) {
// Erase timed out, abort. // Erase timed out, abort.
mFirmwareIsUploading = false; mFirmwareIsUploading = false;
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareUploadStatus = "Buffer Erase Timeout"; mFirmwareUploadStatus = tr("Buffer erase timeout");
} else { } else {
mFirmwareState++; mFirmwareState++;
mFirmwareRetries = retries; mFirmwareRetries = retries;
@@ -470,7 +472,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
firmwareUploadUpdate(true); firmwareUploadUpdate(true);
} }
} else if (mFirmwareState == 1) { } else if (mFirmwareState == 1) {
mFirmwareUploadStatus = "CRC/Size Write"; mFirmwareUploadStatus = tr("CRC/Size write");
if (isTimeout) { if (isTimeout) {
if (mFirmwareRetries > 0) { if (mFirmwareRetries > 0) {
mFirmwareRetries--; mFirmwareRetries--;
@@ -479,7 +481,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false; mFirmwareIsUploading = false;
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareState = 0; mFirmwareState = 0;
mFirmwareUploadStatus = "CRC/Size Write Timeout"; mFirmwareUploadStatus = tr("CRC/Size write timeout");
return; return;
} }
@@ -498,7 +500,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
firmwareUploadUpdate(true); firmwareUploadUpdate(true);
} }
} else if (mFirmwareState == 2) { } else if (mFirmwareState == 2) {
mFirmwareUploadStatus = "FW Data Write"; mFirmwareUploadStatus = tr("Firmware data write");
if (isTimeout) { if (isTimeout) {
if (mFirmwareRetries > 0) { if (mFirmwareRetries > 0) {
mFirmwareRetries--; mFirmwareRetries--;
@@ -507,7 +509,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false; mFirmwareIsUploading = false;
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareState = 0; mFirmwareState = 0;
mFirmwareUploadStatus = "FW Data Write Timeout"; mFirmwareUploadStatus = tr("Firmware data write timeout");
return; return;
} }
@@ -534,7 +536,8 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false; mFirmwareIsUploading = false;
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareState = 0; mFirmwareState = 0;
mFirmwareUploadStatus = "FW Upload Done"; mFirmwareUploadSuccess = true;
mFirmwareUploadStatus = tr("Firmware update completed!\n\nReconnect to the board if you want to continue working with it.");
// Upload done. Enter bootloader! // Upload done. Enter bootloader!
if (!mFirmwareIsBootloader) { if (!mFirmwareIsBootloader) {
@@ -616,7 +619,8 @@ void Commands::startFirmwareUpload(QByteArray &newFirmware, bool isBootloader)
mFirmwareRetries = 5; mFirmwareRetries = 5;
mNewFirmware.clear(); mNewFirmware.clear();
mNewFirmware.append(newFirmware); mNewFirmware.append(newFirmware);
mFirmwareUploadStatus = "Buffer Erase"; mFirmwareUploadSuccess = false;
mFirmwareUploadStatus = tr("Buffer erase");
if (mFirmwareIsBootloader) { if (mFirmwareIsBootloader) {
firmwareUploadUpdate(true); firmwareUploadUpdate(true);
@@ -628,7 +632,12 @@ void Commands::startFirmwareUpload(QByteArray &newFirmware, bool isBootloader)
} }
} }
double Commands::getFirmwareUploadProgress() bool Commands::getFirmwareUploadSuccess() const
{
return mFirmwareUploadSuccess;
}
double Commands::getFirmwareUploadProgress() const
{ {
if (mFirmwareIsUploading) { if (mFirmwareIsUploading) {
return (double)mFimwarePtr / (double)mNewFirmware.size(); return (double)mFimwarePtr / (double)mNewFirmware.size();
@@ -637,7 +646,7 @@ double Commands::getFirmwareUploadProgress()
} }
} }
QString Commands::getFirmwareUploadStatus() QString Commands::getFirmwareUploadStatus() const
{ {
return mFirmwareUploadStatus; return mFirmwareUploadStatus;
} }
@@ -648,7 +657,7 @@ void Commands::cancelFirmwareUpload()
mFirmwareIsUploading = false; mFirmwareIsUploading = false;
mFimwarePtr = 0; mFimwarePtr = 0;
mFirmwareState = 0; mFirmwareState = 0;
mFirmwareUploadStatus = "Cancelled"; mFirmwareUploadStatus = tr("Cancelled");
} }
} }

View File

@@ -47,8 +47,9 @@ public:
Q_INVOKABLE int getCanSendId(); Q_INVOKABLE int getCanSendId();
void setbmsConfig(ConfigParams *bmsConfig); void setbmsConfig(ConfigParams *bmsConfig);
Q_INVOKABLE void startFirmwareUpload(QByteArray &newFirmware, bool isBootloader = false); Q_INVOKABLE void startFirmwareUpload(QByteArray &newFirmware, bool isBootloader = false);
Q_INVOKABLE double getFirmwareUploadProgress(); Q_INVOKABLE double getFirmwareUploadProgress() const;
Q_INVOKABLE QString getFirmwareUploadStatus(); Q_INVOKABLE QString getFirmwareUploadStatus() const;
Q_INVOKABLE bool getFirmwareUploadSuccess() const;
Q_INVOKABLE void cancelFirmwareUpload(); Q_INVOKABLE void cancelFirmwareUpload();
void checkbmsConfig(); void checkbmsConfig();
Q_INVOKABLE void storeBMSConfig(); Q_INVOKABLE void storeBMSConfig();
@@ -112,6 +113,7 @@ private:
int mFirmwareTimer; int mFirmwareTimer;
int mFirmwareRetries; int mFirmwareRetries;
bool mFirmwareIsBootloader; bool mFirmwareIsBootloader;
bool mFirmwareUploadSuccess;
QString mFirmwareUploadStatus; QString mFirmwareUploadStatus;
ConfigParams *mbmsConfig; ConfigParams *mbmsConfig;

29
firmwareupdatehelper.cpp Normal file
View File

@@ -0,0 +1,29 @@
#include "firmwareupdatehelper.h"
#include "bmsinterface.h"
#include <QFile>
#include <QByteArray>
FirmwareUpdateHelper::FirmwareUpdateHelper(QObject *parent) : QObject(parent)
{
}
bool FirmwareUpdateHelper::uploadFirmware(QString filename, BMSInterface *interface)
{
QFile file(filename);
if (!file.open(QIODevice::ReadOnly))
{
interface->emitMessageDialog(tr("Upload error"),
tr("Could not open file. Make sure that the path is valid."),
false);
return false;
}
auto data = file.readAll();
interface->commands()->startFirmwareUpload(data, false);
return true;
}

17
firmwareupdatehelper.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef FIRMWAREUPDATEHELPER_H
#define FIRMWAREUPDATEHELPER_H
#include <QObject>
class BMSInterface;
class FirmwareUpdateHelper : public QObject
{
Q_OBJECT
public:
explicit FirmwareUpdateHelper(QObject *parent = nullptr);
Q_INVOKABLE bool uploadFirmware(QString filename, BMSInterface *interface);
};
#endif // FIRMWAREUPDATEHELPER_H

View File

@@ -21,6 +21,7 @@
#include "bmsinterface.h" #include "bmsinterface.h"
#include "utility.h" #include "utility.h"
#include "translator.h" #include "translator.h"
#include "firmwareupdatehelper.h"
#include <QApplication> #include <QApplication>
#include <QFontDatabase> #include <QFontDatabase>
@@ -73,6 +74,7 @@ int main(int argc, char *argv[])
qmlRegisterSingletonType<Translator>("Cubo", 1, 0, "Translator", translatorSingletontypeProvider); qmlRegisterSingletonType<Translator>("Cubo", 1, 0, "Translator", translatorSingletontypeProvider);
qmlRegisterType<Commands>("Cubo", 1, 0, "Commands"); qmlRegisterType<Commands>("Cubo", 1, 0, "Commands");
qmlRegisterType<ConfigParams>("Cubo", 1, 0, "ConfigParams"); qmlRegisterType<ConfigParams>("Cubo", 1, 0, "ConfigParams");
qmlRegisterType<FirmwareUpdateHelper>("Cubo", 1, 0, "FirmwareUpdateHelper");
engine.addImportPath(QStringLiteral("qrc:/")); engine.addImportPath(QStringLiteral("qrc:/"));
engine.load(QUrl(QStringLiteral("qrc:/MainWindow.qml"))); engine.load(QUrl(QStringLiteral("qrc:/MainWindow.qml")));

View File

@@ -0,0 +1,38 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import Utils 1.0
ProgressBar {
id: control
padding: 2
background: Rectangle {
implicitWidth: 250
implicitHeight: 26
border.width: 1
border.color: Palette.borderColor
color: Palette.screenBackgroundColor
radius: 5
}
contentItem: Item {
implicitWidth: 250
implicitHeight: 24
Rectangle {
width: control.visualPosition * parent.width
height: parent.height
radius: 5
color: Palette.alternativeBackgroundColor
}
Text {
text: Math.floor((control.value / control.to) * 100) + '%'
anchors.centerIn: parent
color: Palette.textColor
font.pixelSize: 18
font.weight: Font.Bold
}
}
}

View File

@@ -25,3 +25,4 @@ MenuItemDelegate 1.0 MenuItemDelegate.qml
ScrollIndicator 1.0 ScrollIndicator.qml ScrollIndicator 1.0 ScrollIndicator.qml
OutlineImageButton 1.0 OutlineImageButton.qml OutlineImageButton 1.0 OutlineImageButton.qml
ImageButton 1.0 ImageButton.qml ImageButton 1.0 ImageButton.qml
ProgressBar 1.0 ProgressBar.qml

View File

@@ -131,17 +131,8 @@ ApplicationWindow {
RowLayout { RowLayout {
id: topBar id: topBar
property var labels: [
qsTr("AKB monitor"),
qsTr("Cell monitor"),
qsTr("BMS settings"),
qsTr("Visualization"),
qsTr("Information output"),
qsTr("Terminal"),
]
Label { Label {
text: topBar.labels[stack.currentIndex] text: stack.itemAt(stack.currentIndex).title
font.pixelSize: 38 font.pixelSize: 38
font.weight: Font.Bold font.weight: Font.Bold
color: Palette.textColor color: Palette.textColor
@@ -316,12 +307,15 @@ ApplicationWindow {
Layout.bottomMargin: 30 Layout.bottomMargin: 30
Screens.AkbMonitorScreen { Screens.AkbMonitorScreen {
property string title: qsTr("AKB monitor")
} }
Screens.CellMonitorScreen { Screens.CellMonitorScreen {
property string title: qsTr("Cell monitor")
} }
Screens.BmsSettingsScreen { Screens.BmsSettingsScreen {
property string title: qsTr("BMS settings")
onNeedWait: { onNeedWait: {
if (active) { if (active) {
busyPopup.text = text busyPopup.text = text
@@ -333,10 +327,12 @@ ApplicationWindow {
} }
Screens.VisualizationScreen { Screens.VisualizationScreen {
property string title: qsTr("Visualization")
} }
Screens.DebugInformationScreen { Screens.DebugInformationScreen {
id: debugScreen id: debugScreen
property string title: qsTr("Information output")
} }
Screens.BmsServiceScreen { Screens.BmsServiceScreen {
@@ -357,8 +353,6 @@ ApplicationWindow {
serialLabel.text = "-" serialLabel.text = "-"
firmwareLabel.text = "-" firmwareLabel.text = "-"
} }
debugScreen.printMessage(BmsInterface.getConnectedPortName(), true)
} }
onMessageDialog: { onMessageDialog: {
@@ -389,6 +383,22 @@ ApplicationWindow {
} }
} }
} }
onFwUploadStatus: {
if (isOngoing) {
if (!progressPopup.opened) {
progressPopup.open()
}
progressPopup.text = status
progressPopup.progress = progress
} else {
progressPopup.close()
BmsInterface.emitMessageDialog(qsTr("Firmware update"), status, true)
}
}
onBmsConfigurationStored: busyPopup.close()
} }
Connections { Connections {
@@ -440,7 +450,6 @@ ApplicationWindow {
onOpened: { onOpened: {
hideStatusTimer.start() hideStatusTimer.start()
busyPopup.close()
} }
} }
@@ -477,6 +486,8 @@ ApplicationWindow {
font.pixelSize: 20 font.pixelSize: 20
Layout.alignment: Qt.AlignCenter Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
leftPadding: 10
rightPadding: 10
background: Rectangle { background: Rectangle {
color: Palette.textColor color: Palette.textColor
@@ -490,6 +501,48 @@ ApplicationWindow {
onClosed: hideBusyTimer.stop() onClosed: hideBusyTimer.stop()
} }
Popup {
id: progressPopup
x: (parent.width - width) / 2
y: (parent.height - height) / 2
modal: true
closePolicy: Popup.NoAutoClose
property alias text: progressText.text
property alias progress: progressBar.value
background: Rectangle {
color: "transparent"
}
ColumnLayout {
Controls.ProgressBar {
id: progressBar
Layout.alignment: Qt.AlignCenter
Layout.preferredWidth: 500
}
Controls.SubtitleLabel {
text: "asdfzasdf"
id: progressText
color: Palette.alternativeTextColor
maximumLineCount: 3
wrapMode: Text.Wrap
font.pixelSize: 20
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
leftPadding: 10
rightPadding: 10
background: Rectangle {
color: Palette.textColor
opacity: 0.3
radius: 6
}
}
}
}
Timer { Timer {
id: hideBusyTimer id: hideBusyTimer
interval: 30000 interval: 30000

View File

@@ -1,74 +1,46 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import Controls 1.0 as Controls import Controls 1.0 as Controls
import Cubo 1.0 import Screens 1.0 as Screens
ColumnLayout { RowLayout {
spacing: 20 spacing: 20
Keys.onReturnPressed: sendButton.clicked() property string title: stack.itemAt(stack.currentIndex).title
Keys.onEnterPressed: sendButton.clicked()
Controls.Frame { StackLayout {
Flickable { id: stack
id: outputFlickable
clip: true
anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
TextArea.flickable: Controls.TextArea { Screens.TerminalScreen {
id: outputArea id: terminalScreen
} property string title: qsTr("Terminal")
}
ScrollBar.horizontal: Controls.ScrollBar {} Screens.FirmwareUpdateScreen {
ScrollBar.vertical: Controls.ScrollBar {} id: firmwareUpdateScreen
property string title: qsTr("Firmware update")
} }
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
} }
RowLayout { ColumnLayout {
spacing: 20 spacing: 20
Controls.Button { Repeater {
text: qsTr("Clear") model: [terminalScreen.title, firmwareUpdateScreen.title]
Layout.preferredWidth: 120 delegate: Controls.LinkLabel {
onClicked: outputArea.clear() text: modelData
} onClicked: stack.currentIndex = index
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 { Item {
text: qsTr("Help") Layout.fillHeight: true
Layout.preferredWidth: 120
onClicked: BmsInterface.commands().sendTerminalCmd("help")
} }
Layout.fillWidth: true Layout.preferredWidth: 180
}
Connections {
target: BmsInterface.commands()
onPrintReceived: {
outputArea.append(str)
outputArea.cursorPosition = outputArea.length
}
} }
} }

View File

@@ -38,6 +38,7 @@ ColumnLayout {
Connections { Connections {
target: BmsInterface target: BmsInterface
onStatusMessage: printMessage(msg, isGood) onStatusMessage: printMessage(msg, isGood)
onPortConnectedChanged: printMessage(BmsInterface.getConnectedPortName(), true)
} }
function printMessage(msg, isGood) { function printMessage(msg, isGood) {

View 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();
}
}

View 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
}
}
}

View File

@@ -8,3 +8,5 @@ DebugInformationScreen 1.0 DebugInformationScreen.qml
ConnectionDialog 1.0 ConnectionDialog.qml ConnectionDialog 1.0 ConnectionDialog.qml
MessageDialog 1.0 MessageDialog.qml MessageDialog 1.0 MessageDialog.qml
StatusPopup 1.0 StatusPopup.qml StatusPopup 1.0 StatusPopup.qml
TerminalScreen 1.0 TerminalScreen.qml
FirmwareUpdateScreen 1.0 FirmwareUpdateScreen.qml

View File

@@ -41,5 +41,8 @@
<file>Controls/ScrollIndicator.qml</file> <file>Controls/ScrollIndicator.qml</file>
<file>Controls/OutlineImageButton.qml</file> <file>Controls/OutlineImageButton.qml</file>
<file>Controls/ImageButton.qml</file> <file>Controls/ImageButton.qml</file>
<file>Screens/TerminalScreen.qml</file>
<file>Screens/FirmwareUpdateScreen.qml</file>
<file>Controls/ProgressBar.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -128,80 +128,80 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="645"/> <location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source> <source>Serial port error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="687"/> <location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source> <source>TCP Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="724"/> <location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source> <source>No firmware read response</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="725"/> <location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source> <source>Read Firmware Version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="726"/> <location filename="../bmsinterface.cpp" line="723"/>
<source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source> <source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="802"/> <location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source> <source>Not Supported Firmwares</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="803"/> <location filename="../bmsinterface.cpp" line="804"/>
<source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source> <source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source> <source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="864"/> <location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source> <source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="896"/> <location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source> <source>BMS configuration updated</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="900"/> <location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source> <source>BMS configuration stored to Flash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -209,18 +209,13 @@
<context> <context>
<name>BmsServiceScreen</name> <name>BmsServiceScreen</name>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/> <location filename="../qml/Screens/BmsServiceScreen.qml" line="17"/>
<source>Clear</source> <source>Terminal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/> <location filename="../qml/Screens/BmsServiceScreen.qml" line="22"/>
<source>Send</source> <source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@@ -482,10 +477,53 @@ Wait, please.</source>
<context> <context>
<name>Commands</name> <name>Commands</name>
<message> <message>
<location filename="../commands.cpp" line="237"/> <location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source> <source>BMS configuration is set</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../commands.cpp" line="462"/>
<location filename="../commands.cpp" line="623"/>
<source>Buffer erase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="467"/>
<source>Buffer erase timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="475"/>
<source>CRC/Size write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="484"/>
<source>CRC/Size write timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="503"/>
<source>Firmware data write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="512"/>
<source>Firmware data write timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="540"/>
<source>Firmware update completed!
Reconnect to the board if you want to continue working with it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="660"/>
<source>Cancelled</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ConfigParams</name> <name>ConfigParams</name>
@@ -550,6 +588,62 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>FirmwareUpdateHelper</name>
<message>
<location filename="../firmwareupdatehelper.cpp" line="19"/>
<source>Upload error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firmwareupdatehelper.cpp" line="20"/>
<source>Could not open file. Make sure that the path is valid.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FirmwareUpdateScreen</name>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="20"/>
<source>Board information</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="28"/>
<source>Firmware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="46"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="64"/>
<source>UUID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="83"/>
<source>Upload firmware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="88"/>
<source>Select firmware file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>Firmware files (*.bin)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>All files (*)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
@@ -564,13 +658,13 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="79"/> <location filename="../qml/MainWindow.qml" line="79"/>
<location filename="../qml/MainWindow.qml" line="135"/> <location filename="../qml/MainWindow.qml" line="310"/>
<source>AKB monitor</source> <source>AKB monitor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="80"/> <location filename="../qml/MainWindow.qml" line="80"/>
<location filename="../qml/MainWindow.qml" line="136"/> <location filename="../qml/MainWindow.qml" line="314"/>
<source>Cell monitor</source> <source>Cell monitor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -581,7 +675,7 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="82"/> <location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/> <location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source> <source>Visualization</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -601,38 +695,38 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="137"/> <location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source> <source>BMS settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="139"/> <location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source> <source>Information output</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="140"/> <location filename="../qml/MainWindow.qml" line="156"/>
<source>Terminal</source> <location filename="../qml/MainWindow.qml" line="348"/>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="165"/>
<location filename="../qml/MainWindow.qml" line="352"/>
<source>Disconnected</source> <source>Disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="189"/> <location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source> <source>Serial number</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="352"/> <location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source> <source>Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="505"/> <location filename="../qml/MainWindow.qml" line="397"/>
<source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="558"/>
<source>Tool started</source> <source>Tool started</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -658,6 +752,24 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>TerminalScreen</name>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="37"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="50"/>
<source>Send</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="59"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>Translator</name> <name>Translator</name>
<message> <message>

View File

@@ -128,80 +128,80 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="645"/> <location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source> <source>Serial port error: </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="687"/> <location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source> <source>TCP Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="724"/> <location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source> <source>No firmware read response</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="725"/> <location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source> <source>Read Firmware Version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="726"/> <location filename="../bmsinterface.cpp" line="723"/>
<source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source> <source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="802"/> <location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source> <source>Not Supported Firmwares</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="803"/> <location filename="../bmsinterface.cpp" line="804"/>
<source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source> <source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source> <source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="864"/> <location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source> <source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="896"/> <location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source> <source>BMS configuration updated</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="900"/> <location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source> <source>BMS configuration stored to Flash</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -209,18 +209,13 @@
<context> <context>
<name>BmsServiceScreen</name> <name>BmsServiceScreen</name>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/> <location filename="../qml/Screens/BmsServiceScreen.qml" line="17"/>
<source>Clear</source> <source>Terminal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/> <location filename="../qml/Screens/BmsServiceScreen.qml" line="22"/>
<source>Send</source> <source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@@ -482,10 +477,53 @@ Wait, please.</source>
<context> <context>
<name>Commands</name> <name>Commands</name>
<message> <message>
<location filename="../commands.cpp" line="237"/> <location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source> <source>BMS configuration is set</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../commands.cpp" line="462"/>
<location filename="../commands.cpp" line="623"/>
<source>Buffer erase</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="467"/>
<source>Buffer erase timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="475"/>
<source>CRC/Size write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="484"/>
<source>CRC/Size write timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="503"/>
<source>Firmware data write</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="512"/>
<source>Firmware data write timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="540"/>
<source>Firmware update completed!
Reconnect to the board if you want to continue working with it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../commands.cpp" line="660"/>
<source>Cancelled</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ConfigParams</name> <name>ConfigParams</name>
@@ -550,6 +588,62 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>FirmwareUpdateHelper</name>
<message>
<location filename="../firmwareupdatehelper.cpp" line="19"/>
<source>Upload error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../firmwareupdatehelper.cpp" line="20"/>
<source>Could not open file. Make sure that the path is valid.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FirmwareUpdateScreen</name>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="20"/>
<source>Board information</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="28"/>
<source>Firmware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="46"/>
<source>Hardware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="64"/>
<source>UUID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="83"/>
<source>Upload firmware</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="88"/>
<source>Select firmware file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>Firmware files (*.bin)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>All files (*)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
@@ -564,13 +658,13 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="79"/> <location filename="../qml/MainWindow.qml" line="79"/>
<location filename="../qml/MainWindow.qml" line="135"/> <location filename="../qml/MainWindow.qml" line="310"/>
<source>AKB monitor</source> <source>AKB monitor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="80"/> <location filename="../qml/MainWindow.qml" line="80"/>
<location filename="../qml/MainWindow.qml" line="136"/> <location filename="../qml/MainWindow.qml" line="314"/>
<source>Cell monitor</source> <source>Cell monitor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -581,7 +675,7 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="82"/> <location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/> <location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source> <source>Visualization</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -601,38 +695,38 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="137"/> <location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source> <source>BMS settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="139"/> <location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source> <source>Information output</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="140"/> <location filename="../qml/MainWindow.qml" line="156"/>
<source>Terminal</source> <location filename="../qml/MainWindow.qml" line="348"/>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="165"/>
<location filename="../qml/MainWindow.qml" line="352"/>
<source>Disconnected</source> <source>Disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="189"/> <location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source> <source>Serial number</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="352"/> <location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source> <source>Connected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="505"/> <location filename="../qml/MainWindow.qml" line="397"/>
<source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="558"/>
<source>Tool started</source> <source>Tool started</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@@ -658,6 +752,24 @@ Wait, please.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>TerminalScreen</name>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="37"/>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="50"/>
<source>Send</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="59"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>Translator</name> <name>Translator</name>
<message> <message>

Binary file not shown.

View File

@@ -128,80 +128,80 @@
<translation>Поддержка последовательного порта не включена в этой сборке утилиты.</translation> <translation>Поддержка последовательного порта не включена в этой сборке утилиты.</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="645"/> <location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source> <source>Serial port error: </source>
<translation>Ошибка последовательного порта: </translation> <translation>Ошибка последовательного порта: </translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="687"/> <location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source> <source>TCP Error</source>
<translation>Ошибка TCP</translation> <translation>Ошибка TCP</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="724"/> <location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source> <source>No firmware read response</source>
<translation>Нет ответа на чтение прошивки</translation> <translation>Нет ответа на чтение прошивки</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="725"/> <location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source> <source>Read Firmware Version</source>
<translation>Чтение версии прошивки</translation> <translation>Чтение версии прошивки</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="726"/> <location filename="../bmsinterface.cpp" line="723"/>
<source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source> <source>Could not read firmware version. Make sure that selected port really belongs to the ENNOID-BMS. </source>
<translation>Не удалось прочитать версию прошивки. Убедитесь, что выбранный порт действительно принадлежит ENNOID-BMS. </translation> <translation>Не удалось прочитать версию прошивки. Убедитесь, что выбранный порт действительно принадлежит ENNOID-BMS. </translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="802"/> <location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source> <source>Not Supported Firmwares</source>
<translation>Не поддерживаемые прошивки</translation> <translation>Не поддерживаемые прошивки</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="803"/> <location filename="../bmsinterface.cpp" line="804"/>
<source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source> <source>This version of ENNOID-BMS Tool does not seem to have any supported firmwares. Something is probably wrong with the BMS configuration file.</source>
<translation>Эта версия утилиты не имеет поддерживаемых прошивок. Вероятно, что-то не так с файлом конфигурации BMS.</translation> <translation>Эта версия утилиты не имеет поддерживаемых прошивок. Вероятно, что-то не так с файлом конфигурации BMS.</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source> <source>Error</source>
<translation>Ошибка</translation> <translation>Ошибка</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="823"/> <location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="851"/> <location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source> <source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation>Прошивка подключенного ENNOID-BMS устарела. Пожалуйста, обновите его с помощью программатора.</translation> <translation>Прошивка подключенного ENNOID-BMS устарела. Пожалуйста, обновите его с помощью программатора.</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source> <source>Warning</source>
<translation>Внимание</translation> <translation>Внимание</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="828"/> <location filename="../bmsinterface.cpp" line="829"/>
<source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has newer firmware than this version of the ENNOID-BMS Tool supports. It is recommended that you update the ENNOID-BMS Tool to the latest version. Alternatively, the firmware on the connected ENNOID-BMS can be downgraded in the firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation>Подключенный ENNOID-BMS имеет более новую прошивку, чем поддерживает эта версия инструмента ENNOID-BMS. Рекомендуется обновить инструмент ENNOID-BMS до последней версии. Кроме того, прошивку подключенного ENNOID-BMS можно понизить на странице прошивки. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation> <translation>Подключенный ENNOID-BMS имеет более новую прошивку, чем поддерживает эта версия инструмента ENNOID-BMS. Рекомендуется обновить инструмент ENNOID-BMS до последней версии. Кроме того, прошивку подключенного ENNOID-BMS можно понизить на странице прошивки. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="840"/> <location filename="../bmsinterface.cpp" line="841"/>
<source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source> <source>The connected ENNOID-BMS has too old firmware. Since the connected ENNOID-BMS has firmware with bootloader support, it can be updated from the Firmware page. Until then, limited communication mode will be used where only the firmware can be changed.</source>
<translation>Подключенный ENNOID-BMS имеет слишком старую прошивку. Поскольку подключенный ENNOID-BMS имеет встроенное ПО с поддержкой загрузчика, его можно обновить со страницы встроенного ПО. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation> <translation>Подключенный ENNOID-BMS имеет слишком старую прошивку. Поскольку подключенный ENNOID-BMS имеет встроенное ПО с поддержкой загрузчика, его можно обновить со страницы встроенного ПО. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="864"/> <location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source> <source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation>Версия прошивки: %1.%2, Оборудование: %3, UUID: %4</translation> <translation>Версия прошивки: %1.%2, Оборудование: %3, UUID: %4</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="896"/> <location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source> <source>BMS configuration updated</source>
<translation>Конфигурация BMS обновлена</translation> <translation>Конфигурация BMS обновлена</translation>
</message> </message>
<message> <message>
<location filename="../bmsinterface.cpp" line="900"/> <location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source> <source>BMS configuration stored to Flash</source>
<translation>Конфигурация BMS сохранена во флэш-памяти</translation> <translation>Конфигурация BMS сохранена во флэш-памяти</translation>
</message> </message>
@@ -209,19 +209,26 @@
<context> <context>
<name>BmsServiceScreen</name> <name>BmsServiceScreen</name>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/>
<source>Clear</source> <source>Clear</source>
<translation>Очистить</translation> <translation type="vanished">Очистить</translation>
</message> </message>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/>
<source>Send</source> <source>Send</source>
<translation>Отправить</translation> <translation type="vanished">Отправить</translation>
</message> </message>
<message> <message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<source>Help</source> <source>Help</source>
<translation>Помощь</translation> <translation type="vanished">Помощь</translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="17"/>
<source>Terminal</source>
<translation>Терминал</translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="22"/>
<source>Firmware update</source>
<translation>Обновление прошивки</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -487,10 +494,59 @@ Wait, please.</source>
<context> <context>
<name>Commands</name> <name>Commands</name>
<message> <message>
<location filename="../commands.cpp" line="237"/> <location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source> <source>BMS configuration is set</source>
<translation>Конфигурация BMS установлена</translation> <translation>Конфигурация BMS установлена</translation>
</message> </message>
<message>
<location filename="../commands.cpp" line="462"/>
<location filename="../commands.cpp" line="623"/>
<source>Buffer erase</source>
<translation>Стирание буфера</translation>
</message>
<message>
<location filename="../commands.cpp" line="467"/>
<source>Buffer erase timeout</source>
<translation>Таймаут стирания буфера</translation>
</message>
<message>
<location filename="../commands.cpp" line="475"/>
<source>CRC/Size write</source>
<translation>Запись контрольной суммы</translation>
</message>
<message>
<location filename="../commands.cpp" line="484"/>
<source>CRC/Size write timeout</source>
<translation>Таймаут записи контрольной суммы</translation>
</message>
<message>
<location filename="../commands.cpp" line="503"/>
<source>Firmware data write</source>
<translation>Запись данных прошивки</translation>
</message>
<message>
<location filename="../commands.cpp" line="512"/>
<source>Firmware data write timeout</source>
<translation>Таймаут записи данных прошивки</translation>
</message>
<message>
<location filename="../commands.cpp" line="540"/>
<source>Firmware update completed!
Reconnect to the board if you want to continue working with it.</source>
<translation>Обновление прошивки завершено!
Выполните повторное подключение к плате, если хотите продолжить работу с ней.</translation>
</message>
<message>
<source>Firmware update completed</source>
<translation type="vanished">Обновление прошивки завершено</translation>
</message>
<message>
<location filename="../commands.cpp" line="660"/>
<source>Cancelled</source>
<translation>Отменено</translation>
</message>
</context> </context>
<context> <context>
<name>ConfigParams</name> <name>ConfigParams</name>
@@ -555,6 +611,62 @@ Wait, please.</source>
<translation>Очистить</translation> <translation>Очистить</translation>
</message> </message>
</context> </context>
<context>
<name>FirmwareUpdateHelper</name>
<message>
<location filename="../firmwareupdatehelper.cpp" line="19"/>
<source>Upload error</source>
<translation>Ошибка загрузки</translation>
</message>
<message>
<location filename="../firmwareupdatehelper.cpp" line="20"/>
<source>Could not open file. Make sure that the path is valid.</source>
<translation>Не удалось открыть файл. Убедитесь что путь валидный.</translation>
</message>
</context>
<context>
<name>FirmwareUpdateScreen</name>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="20"/>
<source>Board information</source>
<translation>Информация о плате</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="28"/>
<source>Firmware</source>
<translation>Прошивка</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="46"/>
<source>Hardware</source>
<translation>Оборудование</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="64"/>
<source>UUID</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="83"/>
<source>Upload firmware</source>
<translation>Загрузить прошивку</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="88"/>
<source>Select firmware file</source>
<translation>Выберите файл прошивки</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>Firmware files (*.bin)</source>
<translation>Файлы прошивок (*.bin)</translation>
</message>
<message>
<location filename="../qml/Screens/FirmwareUpdateScreen.qml" line="90"/>
<source>All files (*)</source>
<translation>Все файлы (*)</translation>
</message>
</context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
@@ -573,13 +685,13 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="79"/> <location filename="../qml/MainWindow.qml" line="79"/>
<location filename="../qml/MainWindow.qml" line="135"/> <location filename="../qml/MainWindow.qml" line="310"/>
<source>AKB monitor</source> <source>AKB monitor</source>
<translation>Монитор АКБ</translation> <translation>Монитор АКБ</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="80"/> <location filename="../qml/MainWindow.qml" line="80"/>
<location filename="../qml/MainWindow.qml" line="136"/> <location filename="../qml/MainWindow.qml" line="314"/>
<source>Cell monitor</source> <source>Cell monitor</source>
<translation>Монитор ячеек</translation> <translation>Монитор ячеек</translation>
</message> </message>
@@ -590,7 +702,7 @@ Wait, please.</source>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="82"/> <location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/> <location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source> <source>Visualization</source>
<translation>Визуализация</translation> <translation>Визуализация</translation>
</message> </message>
@@ -610,22 +722,26 @@ Wait, please.</source>
<translation>Подключение</translation> <translation>Подключение</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="137"/> <location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source> <source>BMS settings</source>
<translation>Настройка BMS</translation> <translation>Настройка BMS</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="139"/> <location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source> <source>Information output</source>
<translation>Вывод информации</translation> <translation>Вывод информации</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="140"/> <location filename="../qml/MainWindow.qml" line="397"/>
<source>Terminal</source> <source>Firmware update</source>
<translation>Терминал</translation> <translation>Обновление прошивки</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="505"/> <source>Terminal</source>
<translation type="vanished">Терминал</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="558"/>
<source>Tool started</source> <source>Tool started</source>
<translation>Утилита запущена</translation> <translation>Утилита запущена</translation>
</message> </message>
@@ -634,18 +750,18 @@ Wait, please.</source>
<translation type="vanished">Выход</translation> <translation type="vanished">Выход</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="165"/> <location filename="../qml/MainWindow.qml" line="156"/>
<location filename="../qml/MainWindow.qml" line="352"/> <location filename="../qml/MainWindow.qml" line="348"/>
<source>Disconnected</source> <source>Disconnected</source>
<translation>Отключено</translation> <translation>Отключено</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="189"/> <location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source> <source>Serial number</source>
<translation>Серийный номер</translation> <translation>Серийный номер</translation>
</message> </message>
<message> <message>
<location filename="../qml/MainWindow.qml" line="352"/> <location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source> <source>Connected</source>
<translation>Подключено</translation> <translation>Подключено</translation>
</message> </message>
@@ -671,6 +787,24 @@ Wait, please.</source>
<translation>Не удалось автоматически подключиться. Убедитесь, что USB-кабель подключен и ENNOID-BMS включен.</translation> <translation>Не удалось автоматически подключиться. Убедитесь, что USB-кабель подключен и ENNOID-BMS включен.</translation>
</message> </message>
</context> </context>
<context>
<name>TerminalScreen</name>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="37"/>
<source>Clear</source>
<translation>Очистить</translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="50"/>
<source>Send</source>
<translation>Отправить</translation>
</message>
<message>
<location filename="../qml/Screens/TerminalScreen.qml" line="59"/>
<source>Help</source>
<translation>Помощь</translation>
</message>
</context>
<context> <context>
<name>Translator</name> <name>Translator</name>
<message> <message>