Add reading of the version map from firmware that shows which files to flash onto a given controller
given its buildid.
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QTextStream>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -47,6 +48,7 @@ UDSFirmwareUploaderWindow::UDSFirmwareUploaderWindow(const QVector<CANFrame> *fr
|
|||||||
connect(ui->btnStartStop, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleStartStop);
|
connect(ui->btnStartStop, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleStartStop);
|
||||||
connect(ui->btnAbort, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleAbort);
|
connect(ui->btnAbort, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleAbort);
|
||||||
connect(ui->btnReadBuildID, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleReadBuildID);
|
connect(ui->btnReadBuildID, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleReadBuildID);
|
||||||
|
connect(ui->btnLookupVersion, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleLookupVersion);
|
||||||
connect(ui->btnBrowseTeslaDir, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleBrowseTeslaDir);
|
connect(ui->btnBrowseTeslaDir, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleBrowseTeslaDir);
|
||||||
connect(ui->btnReloadNodes, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleReloadNodes);
|
connect(ui->btnReloadNodes, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleReloadNodes);
|
||||||
connect(udsHandler, &UDS_HANDLER::newUDSMessage, this, &UDSFirmwareUploaderWindow::gotUDSReply);
|
connect(udsHandler, &UDS_HANDLER::newUDSMessage, this, &UDSFirmwareUploaderWindow::gotUDSReply);
|
||||||
@@ -502,6 +504,7 @@ void UDSFirmwareUploaderWindow::gotUDSReply(UDS_MESSAGE msg)
|
|||||||
{
|
{
|
||||||
quint32 buildId = (data[6] << 24) + (data[7] << 16) + (data[8] << 8) + data[9];
|
quint32 buildId = (data[6] << 24) + (data[7] << 16) + (data[8] << 8) + data[9];
|
||||||
QString buildIdStr = QString::number(buildId);
|
QString buildIdStr = QString::number(buildId);
|
||||||
|
lastBuildId = buildIdStr;
|
||||||
logMessage("Build ID: " + buildIdStr);
|
logMessage("Build ID: " + buildIdStr);
|
||||||
ui->lblBuildID->setText(buildIdStr);
|
ui->lblBuildID->setText(buildIdStr);
|
||||||
}
|
}
|
||||||
@@ -713,6 +716,76 @@ void UDSFirmwareUploaderWindow::testerPresentTick()
|
|||||||
logMessage("Tester Present keep-alive sent");
|
logMessage("Tester Present keep-alive sent");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UDSFirmwareUploaderWindow::handleLookupVersion()
|
||||||
|
{
|
||||||
|
lookupVersionMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UDSFirmwareUploaderWindow::lookupVersionMap()
|
||||||
|
{
|
||||||
|
int nodeIdx = ui->cmbTeslaNode->currentIndex();
|
||||||
|
if (nodeIdx <= 0)
|
||||||
|
{
|
||||||
|
logMessage("Version lookup: select a target ECU node first");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (lastBuildId.isEmpty())
|
||||||
|
{
|
||||||
|
logMessage("Version lookup: read the build ID first");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ecuName = ui->cmbTeslaNode->currentText().toLower();
|
||||||
|
|
||||||
|
QStringList searchPaths;
|
||||||
|
if (!teslaDir.isEmpty()) searchPaths.append(teslaDir + "/deploy/seed_artifacts_v2");
|
||||||
|
searchPaths.append(QCoreApplication::applicationDirPath());
|
||||||
|
searchPaths.append(QDir::currentPath());
|
||||||
|
|
||||||
|
QString tsvPath;
|
||||||
|
for (const QString &path : searchPaths)
|
||||||
|
{
|
||||||
|
QString candidate = path + "/version_map2.tsv";
|
||||||
|
if (QFile::exists(candidate)) { tsvPath = candidate; break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tsvPath.isEmpty())
|
||||||
|
{
|
||||||
|
logMessage("Version lookup: version_map2.tsv not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QFile f(tsvPath);
|
||||||
|
if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||||
|
{
|
||||||
|
logMessage("Version lookup: could not open " + tsvPath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logMessage(QString("Version lookup: ECU='%1' build='%2'").arg(ecuName).arg(lastBuildId));
|
||||||
|
QString searchTerm = ecuName + ":" + lastBuildId.trimmed();
|
||||||
|
|
||||||
|
int matchCount = 0;
|
||||||
|
QTextStream in(&f);
|
||||||
|
while (!in.atEnd())
|
||||||
|
{
|
||||||
|
QString line = in.readLine();
|
||||||
|
QStringList cols = line.split('\t');
|
||||||
|
if (cols.size() < 2) continue;
|
||||||
|
if (cols[0] == searchTerm)
|
||||||
|
{
|
||||||
|
logMessage("Match: " + line);
|
||||||
|
matchCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
|
||||||
|
if (matchCount == 0)
|
||||||
|
logMessage("Version lookup: no matches found");
|
||||||
|
else
|
||||||
|
logMessage(QString("Version lookup: %1 match(es) found").arg(matchCount));
|
||||||
|
}
|
||||||
|
|
||||||
void UDSFirmwareUploaderWindow::advanceState()
|
void UDSFirmwareUploaderWindow::advanceState()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ private slots:
|
|||||||
void handleStartStop();
|
void handleStartStop();
|
||||||
void handleAbort();
|
void handleAbort();
|
||||||
void handleReadBuildID();
|
void handleReadBuildID();
|
||||||
|
void handleLookupVersion();
|
||||||
void handleBrowseTeslaDir();
|
void handleBrowseTeslaDir();
|
||||||
void handleReloadNodes();
|
void handleReloadNodes();
|
||||||
void handleNodeChanged(int index);
|
void handleNodeChanged(int index);
|
||||||
@@ -86,6 +87,7 @@ private:
|
|||||||
void sendECUReset();
|
void sendECUReset();
|
||||||
void sendTesterPresent();
|
void sendTesterPresent();
|
||||||
void sendReadBuildID();
|
void sendReadBuildID();
|
||||||
|
void lookupVersionMap();
|
||||||
void handleNRC(int nrc);
|
void handleNRC(int nrc);
|
||||||
void advanceState();
|
void advanceState();
|
||||||
|
|
||||||
@@ -111,6 +113,7 @@ private:
|
|||||||
bool useSecurity;
|
bool useSecurity;
|
||||||
|
|
||||||
QString teslaDir;
|
QString teslaDir;
|
||||||
|
QString lastBuildId;
|
||||||
QVector<TeslaNodeInfo> teslaNodes;
|
QVector<TeslaNodeInfo> teslaNodes;
|
||||||
QMap<QString, uint32_t> messageIdMap;
|
QMap<QString, uint32_t> messageIdMap;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -119,6 +119,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btnLookupVersion">
|
||||||
|
<property name="text">
|
||||||
|
<string>Lookup Version</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="8" column="0">
|
||||||
|
|||||||
Reference in New Issue
Block a user