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
}
build_mobile {
DEFINES += USE_MOBILE
}
#build_mobile {
# DEFINES += USE_MOBILE
#}
SOURCES += main.cpp\
# akbmonitorpage.cpp \
@@ -104,6 +104,7 @@ SOURCES += main.cpp\
utility.cpp \
bmsinterface.cpp \
translator.cpp \
firmwareupdatehelper.cpp \
# visualizationchart.cpp \
# visualizationpage.cpp
@@ -138,6 +139,7 @@ HEADERS += \ #mainwindow.h \
utility.h \
bmsinterface.h \
translator.h \
firmwareupdatehelper.h \
# visualizationchart.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(fwVersionReceived(int,int,QString,QByteArray)),this, SLOT(fwVersionReceived(int,int,QString,QByteArray)));
connect(mCommands, SIGNAL(ackReceived(QString)), this, SLOT(ackReceived(QString)));
connect(mbmsConfig, SIGNAL(updated()), this, SLOT(bmsconfUpdated()));
connect(mbmsConfig, SIGNAL(stored()), this, SLOT(bmsconfStored()));
connect(mbmsConfig, SIGNAL(updated()), this, SLOT(bmsConfUpdated()));
connect(mbmsConfig, SIGNAL(stored()), this, SLOT(bmsConfStored()));
}
BMSInterface::~BMSInterface()
@@ -628,7 +628,6 @@ void BMSInterface::ignoreCanChange(bool ignore)
#ifdef HAS_SERIALPORT
void BMSInterface::serialDataAvailable()
{
bool b = true;
while (mSerialPort->bytesAvailable() > 0) {
mPacket->processData(mSerialPort->readAll());
}
@@ -660,7 +659,6 @@ void BMSInterface::serialPortError(QSerialPort::SerialPortError error)
void BMSInterface::tcpInputConnected()
{
bool b = true;
mTcpConnected = true;
updateFwRx(false);
}
@@ -673,7 +671,6 @@ void BMSInterface::tcpInputDisconnected()
void BMSInterface::tcpInputDataAvailable()
{
bool b = true;
while (mTcpSocket->bytesAvailable() > 0) {
mPacket->processData(mTcpSocket->readAll());
}
@@ -748,9 +745,13 @@ void BMSInterface::timerSlot()
if (mIsUploadingFw) {
updateFwRx(false);
mFwRetries = 0;
if (fwStatus.compare("FW Upload Done") == 0) {
if (mCommands->getFirmwareUploadSuccess())
{
disconnectPort();
emit fwUploadStatus(fwStatus, 1.0, false);
} else {
}
else
{
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();
QString strUuid = Utility::uuid2Str(uuid, true);
QString strUuid = uuid.toHex().toUpper();
if (fwPairs.isEmpty()) {
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);
// 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);
#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 bmsConfigurationUpdated();
}
void BMSInterface::bmsconfStored() {
void BMSInterface::bmsConfStored() {
emit statusMessage(tr("BMS configuration stored to Flash"), true);
emit bmsConfigurationStored();
}
void BMSInterface::ackReceived(QString ackType)

View File

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

View File

@@ -39,6 +39,8 @@ Commands::Commands(QObject *parent) : QObject(parent)
mFimwarePtr = 0;
mFirmwareTimer = 0;
mFirmwareRetries = 0;
mFirmwareIsBootloader = false;
mFirmwareUploadSuccess = false;
mFirmwareUploadStatus = "FW Upload Status";
mCheckNextbmsConfig = false;
@@ -457,12 +459,12 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
const int timeout = 350;
if (mFirmwareState == 0) {
mFirmwareUploadStatus = "Buffer Erase";
mFirmwareUploadStatus = tr("Buffer erase");
if (isTimeout) {
// Erase timed out, abort.
mFirmwareIsUploading = false;
mFimwarePtr = 0;
mFirmwareUploadStatus = "Buffer Erase Timeout";
mFirmwareUploadStatus = tr("Buffer erase timeout");
} else {
mFirmwareState++;
mFirmwareRetries = retries;
@@ -470,7 +472,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
firmwareUploadUpdate(true);
}
} else if (mFirmwareState == 1) {
mFirmwareUploadStatus = "CRC/Size Write";
mFirmwareUploadStatus = tr("CRC/Size write");
if (isTimeout) {
if (mFirmwareRetries > 0) {
mFirmwareRetries--;
@@ -479,7 +481,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false;
mFimwarePtr = 0;
mFirmwareState = 0;
mFirmwareUploadStatus = "CRC/Size Write Timeout";
mFirmwareUploadStatus = tr("CRC/Size write timeout");
return;
}
@@ -498,7 +500,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
firmwareUploadUpdate(true);
}
} else if (mFirmwareState == 2) {
mFirmwareUploadStatus = "FW Data Write";
mFirmwareUploadStatus = tr("Firmware data write");
if (isTimeout) {
if (mFirmwareRetries > 0) {
mFirmwareRetries--;
@@ -507,7 +509,7 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false;
mFimwarePtr = 0;
mFirmwareState = 0;
mFirmwareUploadStatus = "FW Data Write Timeout";
mFirmwareUploadStatus = tr("Firmware data write timeout");
return;
}
@@ -534,7 +536,8 @@ void Commands::firmwareUploadUpdate(bool isTimeout)
mFirmwareIsUploading = false;
mFimwarePtr = 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!
if (!mFirmwareIsBootloader) {
@@ -616,7 +619,8 @@ void Commands::startFirmwareUpload(QByteArray &newFirmware, bool isBootloader)
mFirmwareRetries = 5;
mNewFirmware.clear();
mNewFirmware.append(newFirmware);
mFirmwareUploadStatus = "Buffer Erase";
mFirmwareUploadSuccess = false;
mFirmwareUploadStatus = tr("Buffer erase");
if (mFirmwareIsBootloader) {
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) {
return (double)mFimwarePtr / (double)mNewFirmware.size();
@@ -637,7 +646,7 @@ double Commands::getFirmwareUploadProgress()
}
}
QString Commands::getFirmwareUploadStatus()
QString Commands::getFirmwareUploadStatus() const
{
return mFirmwareUploadStatus;
}
@@ -648,7 +657,7 @@ void Commands::cancelFirmwareUpload()
mFirmwareIsUploading = false;
mFimwarePtr = 0;
mFirmwareState = 0;
mFirmwareUploadStatus = "Cancelled";
mFirmwareUploadStatus = tr("Cancelled");
}
}

View File

@@ -47,8 +47,9 @@ public:
Q_INVOKABLE int getCanSendId();
void setbmsConfig(ConfigParams *bmsConfig);
Q_INVOKABLE void startFirmwareUpload(QByteArray &newFirmware, bool isBootloader = false);
Q_INVOKABLE double getFirmwareUploadProgress();
Q_INVOKABLE QString getFirmwareUploadStatus();
Q_INVOKABLE double getFirmwareUploadProgress() const;
Q_INVOKABLE QString getFirmwareUploadStatus() const;
Q_INVOKABLE bool getFirmwareUploadSuccess() const;
Q_INVOKABLE void cancelFirmwareUpload();
void checkbmsConfig();
Q_INVOKABLE void storeBMSConfig();
@@ -112,6 +113,7 @@ private:
int mFirmwareTimer;
int mFirmwareRetries;
bool mFirmwareIsBootloader;
bool mFirmwareUploadSuccess;
QString mFirmwareUploadStatus;
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 "utility.h"
#include "translator.h"
#include "firmwareupdatehelper.h"
#include <QApplication>
#include <QFontDatabase>
@@ -73,6 +74,7 @@ int main(int argc, char *argv[])
qmlRegisterSingletonType<Translator>("Cubo", 1, 0, "Translator", translatorSingletontypeProvider);
qmlRegisterType<Commands>("Cubo", 1, 0, "Commands");
qmlRegisterType<ConfigParams>("Cubo", 1, 0, "ConfigParams");
qmlRegisterType<FirmwareUpdateHelper>("Cubo", 1, 0, "FirmwareUpdateHelper");
engine.addImportPath(QStringLiteral("qrc:/"));
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
OutlineImageButton 1.0 OutlineImageButton.qml
ImageButton 1.0 ImageButton.qml
ProgressBar 1.0 ProgressBar.qml

View File

@@ -131,17 +131,8 @@ ApplicationWindow {
RowLayout {
id: topBar
property var labels: [
qsTr("AKB monitor"),
qsTr("Cell monitor"),
qsTr("BMS settings"),
qsTr("Visualization"),
qsTr("Information output"),
qsTr("Terminal"),
]
Label {
text: topBar.labels[stack.currentIndex]
text: stack.itemAt(stack.currentIndex).title
font.pixelSize: 38
font.weight: Font.Bold
color: Palette.textColor
@@ -316,12 +307,15 @@ ApplicationWindow {
Layout.bottomMargin: 30
Screens.AkbMonitorScreen {
property string title: qsTr("AKB monitor")
}
Screens.CellMonitorScreen {
property string title: qsTr("Cell monitor")
}
Screens.BmsSettingsScreen {
property string title: qsTr("BMS settings")
onNeedWait: {
if (active) {
busyPopup.text = text
@@ -333,10 +327,12 @@ ApplicationWindow {
}
Screens.VisualizationScreen {
property string title: qsTr("Visualization")
}
Screens.DebugInformationScreen {
id: debugScreen
property string title: qsTr("Information output")
}
Screens.BmsServiceScreen {
@@ -357,8 +353,6 @@ ApplicationWindow {
serialLabel.text = "-"
firmwareLabel.text = "-"
}
debugScreen.printMessage(BmsInterface.getConnectedPortName(), true)
}
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 {
@@ -440,7 +450,6 @@ ApplicationWindow {
onOpened: {
hideStatusTimer.start()
busyPopup.close()
}
}
@@ -477,6 +486,8 @@ ApplicationWindow {
font.pixelSize: 20
Layout.alignment: Qt.AlignCenter
horizontalAlignment: Text.AlignHCenter
leftPadding: 10
rightPadding: 10
background: Rectangle {
color: Palette.textColor
@@ -490,6 +501,48 @@ ApplicationWindow {
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 {
id: hideBusyTimer
interval: 30000

View File

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

View File

@@ -38,6 +38,7 @@ ColumnLayout {
Connections {
target: BmsInterface
onStatusMessage: printMessage(msg, isGood)
onPortConnectedChanged: printMessage(BmsInterface.getConnectedPortName(), true)
}
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
MessageDialog 1.0 MessageDialog.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/OutlineImageButton.qml</file>
<file>Controls/ImageButton.qml</file>
<file>Screens/TerminalScreen.qml</file>
<file>Screens/FirmwareUpdateScreen.qml</file>
<file>Controls/ProgressBar.qml</file>
</qresource>
</RCC>

View File

@@ -128,80 +128,80 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="645"/>
<location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="687"/>
<location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="724"/>
<location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="725"/>
<location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="802"/>
<location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="828"/>
<location filename="../bmsinterface.cpp" line="840"/>
<location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="864"/>
<location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="896"/>
<location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="900"/>
<location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source>
<translation type="unfinished"></translation>
</message>
@@ -209,18 +209,13 @@
<context>
<name>BmsServiceScreen</name>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/>
<source>Clear</source>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="17"/>
<source>Terminal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/>
<source>Send</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<source>Help</source>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="22"/>
<source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -482,10 +477,53 @@ Wait, please.</source>
<context>
<name>Commands</name>
<message>
<location filename="../commands.cpp" line="237"/>
<location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source>
<translation type="unfinished"></translation>
</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>
<name>ConfigParams</name>
@@ -550,6 +588,62 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
</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>
<name>MainWindow</name>
<message>
@@ -564,13 +658,13 @@ Wait, please.</source>
</message>
<message>
<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>
<translation type="unfinished"></translation>
</message>
<message>
<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>
<translation type="unfinished"></translation>
</message>
@@ -581,7 +675,7 @@ Wait, please.</source>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/>
<location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source>
<translation type="unfinished"></translation>
</message>
@@ -601,38 +695,38 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="137"/>
<location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="139"/>
<location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="140"/>
<source>Terminal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="165"/>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="156"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="189"/>
<location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
@@ -658,6 +752,24 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
</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>
<name>Translator</name>
<message>

View File

@@ -128,80 +128,80 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="645"/>
<location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="687"/>
<location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="724"/>
<location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="725"/>
<location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="802"/>
<location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="828"/>
<location filename="../bmsinterface.cpp" line="840"/>
<location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="864"/>
<location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="896"/>
<location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="900"/>
<location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source>
<translation type="unfinished"></translation>
</message>
@@ -209,18 +209,13 @@
<context>
<name>BmsServiceScreen</name>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/>
<source>Clear</source>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="17"/>
<source>Terminal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/>
<source>Send</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<source>Help</source>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="22"/>
<source>Firmware update</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -482,10 +477,53 @@ Wait, please.</source>
<context>
<name>Commands</name>
<message>
<location filename="../commands.cpp" line="237"/>
<location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source>
<translation type="unfinished"></translation>
</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>
<name>ConfigParams</name>
@@ -550,6 +588,62 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
</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>
<name>MainWindow</name>
<message>
@@ -564,13 +658,13 @@ Wait, please.</source>
</message>
<message>
<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>
<translation type="unfinished"></translation>
</message>
<message>
<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>
<translation type="unfinished"></translation>
</message>
@@ -581,7 +675,7 @@ Wait, please.</source>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/>
<location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source>
<translation type="unfinished"></translation>
</message>
@@ -601,38 +695,38 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="137"/>
<location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="139"/>
<location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="140"/>
<source>Terminal</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="165"/>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="156"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="189"/>
<location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source>
<translation type="unfinished"></translation>
</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>
<translation type="unfinished"></translation>
</message>
@@ -658,6 +752,24 @@ Wait, please.</source>
<translation type="unfinished"></translation>
</message>
</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>
<name>Translator</name>
<message>

Binary file not shown.

View File

@@ -128,80 +128,80 @@
<translation>Поддержка последовательного порта не включена в этой сборке утилиты.</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="645"/>
<location filename="../bmsinterface.cpp" line="644"/>
<source>Serial port error: </source>
<translation>Ошибка последовательного порта: </translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="687"/>
<location filename="../bmsinterface.cpp" line="684"/>
<source>TCP Error</source>
<translation>Ошибка TCP</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="724"/>
<location filename="../bmsinterface.cpp" line="721"/>
<source>No firmware read response</source>
<translation>Нет ответа на чтение прошивки</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="725"/>
<location filename="../bmsinterface.cpp" line="722"/>
<source>Read Firmware Version</source>
<translation>Чтение версии прошивки</translation>
</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>
<translation>Не удалось прочитать версию прошивки. Убедитесь, что выбранный порт действительно принадлежит ENNOID-BMS. </translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="802"/>
<location filename="../bmsinterface.cpp" line="803"/>
<source>Not Supported Firmwares</source>
<translation>Не поддерживаемые прошивки</translation>
</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>
<translation>Эта версия утилиты не имеет поддерживаемых прошивок. Вероятно, что-то не так с файлом конфигурации BMS.</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="823"/>
<location filename="../bmsinterface.cpp" line="851"/>
<location filename="../bmsinterface.cpp" line="824"/>
<location filename="../bmsinterface.cpp" line="852"/>
<source>The firmware on the connected ENNOID-BMS is too old. Please update it using a programmer.</source>
<translation>Прошивка подключенного ENNOID-BMS устарела. Пожалуйста, обновите его с помощью программатора.</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="828"/>
<location filename="../bmsinterface.cpp" line="840"/>
<location filename="../bmsinterface.cpp" line="829"/>
<location filename="../bmsinterface.cpp" line="841"/>
<source>Warning</source>
<translation>Внимание</translation>
</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>
<translation>Подключенный ENNOID-BMS имеет более новую прошивку, чем поддерживает эта версия инструмента ENNOID-BMS. Рекомендуется обновить инструмент ENNOID-BMS до последней версии. Кроме того, прошивку подключенного ENNOID-BMS можно понизить на странице прошивки. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation>
</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>
<translation>Подключенный ENNOID-BMS имеет слишком старую прошивку. Поскольку подключенный ENNOID-BMS имеет встроенное ПО с поддержкой загрузчика, его можно обновить со страницы встроенного ПО. До тех пор будет использоваться ограниченный режим связи, при котором можно будет изменить только прошивку.</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="864"/>
<location filename="../bmsinterface.cpp" line="865"/>
<source>Firmware version: %1.%2, Hardware: %3, UUID: %4</source>
<translation>Версия прошивки: %1.%2, Оборудование: %3, UUID: %4</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="896"/>
<location filename="../bmsinterface.cpp" line="886"/>
<source>BMS configuration updated</source>
<translation>Конфигурация BMS обновлена</translation>
</message>
<message>
<location filename="../bmsinterface.cpp" line="900"/>
<location filename="../bmsinterface.cpp" line="891"/>
<source>BMS configuration stored to Flash</source>
<translation>Конфигурация BMS сохранена во флэш-памяти</translation>
</message>
@@ -209,19 +209,26 @@
<context>
<name>BmsServiceScreen</name>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="37"/>
<source>Clear</source>
<translation>Очистить</translation>
<translation type="vanished">Очистить</translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="50"/>
<source>Send</source>
<translation>Отправить</translation>
<translation type="vanished">Отправить</translation>
</message>
<message>
<location filename="../qml/Screens/BmsServiceScreen.qml" line="59"/>
<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>
</context>
<context>
@@ -487,10 +494,59 @@ Wait, please.</source>
<context>
<name>Commands</name>
<message>
<location filename="../commands.cpp" line="237"/>
<location filename="../commands.cpp" line="239"/>
<source>BMS configuration is set</source>
<translation>Конфигурация BMS установлена</translation>
</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>
<name>ConfigParams</name>
@@ -555,6 +611,62 @@ Wait, please.</source>
<translation>Очистить</translation>
</message>
</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>
<name>MainWindow</name>
<message>
@@ -573,13 +685,13 @@ Wait, please.</source>
</message>
<message>
<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>
<translation>Монитор АКБ</translation>
</message>
<message>
<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>
<translation>Монитор ячеек</translation>
</message>
@@ -590,7 +702,7 @@ Wait, please.</source>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="82"/>
<location filename="../qml/MainWindow.qml" line="138"/>
<location filename="../qml/MainWindow.qml" line="330"/>
<source>Visualization</source>
<translation>Визуализация</translation>
</message>
@@ -610,22 +722,26 @@ Wait, please.</source>
<translation>Подключение</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="137"/>
<location filename="../qml/MainWindow.qml" line="318"/>
<source>BMS settings</source>
<translation>Настройка BMS</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="139"/>
<location filename="../qml/MainWindow.qml" line="335"/>
<source>Information output</source>
<translation>Вывод информации</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="140"/>
<source>Terminal</source>
<translation>Терминал</translation>
<location filename="../qml/MainWindow.qml" line="397"/>
<source>Firmware update</source>
<translation>Обновление прошивки</translation>
</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>
<translation>Утилита запущена</translation>
</message>
@@ -634,18 +750,18 @@ Wait, please.</source>
<translation type="vanished">Выход</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="165"/>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="156"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Disconnected</source>
<translation>Отключено</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="189"/>
<location filename="../qml/MainWindow.qml" line="180"/>
<source>Serial number</source>
<translation>Серийный номер</translation>
</message>
<message>
<location filename="../qml/MainWindow.qml" line="352"/>
<location filename="../qml/MainWindow.qml" line="348"/>
<source>Connected</source>
<translation>Подключено</translation>
</message>
@@ -671,6 +787,24 @@ Wait, please.</source>
<translation>Не удалось автоматически подключиться. Убедитесь, что USB-кабель подключен и ENNOID-BMS включен.</translation>
</message>
</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>
<name>Translator</name>
<message>