From bb26f52c3d1297198634bc4247cabf4f2eb83919 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 14 May 2026 21:01:43 -0400 Subject: [PATCH] Add reading of the version map from firmware that shows which files to flash onto a given controller given its buildid. --- re/udsfirmwareuploaderwindow.cpp | 73 ++++++++++++++++++++++++++++++++ re/udsfirmwareuploaderwindow.h | 3 ++ ui/udsfirmwareuploaderwindow.ui | 7 +++ 3 files changed, 83 insertions(+) diff --git a/re/udsfirmwareuploaderwindow.cpp b/re/udsfirmwareuploaderwindow.cpp index 7b2c4b5..9dc9f1e 100644 --- a/re/udsfirmwareuploaderwindow.cpp +++ b/re/udsfirmwareuploaderwindow.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,7 @@ UDSFirmwareUploaderWindow::UDSFirmwareUploaderWindow(const QVector *fr connect(ui->btnStartStop, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleStartStop); connect(ui->btnAbort, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleAbort); 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->btnReloadNodes, &QPushButton::clicked, this, &UDSFirmwareUploaderWindow::handleReloadNodes); 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]; QString buildIdStr = QString::number(buildId); + lastBuildId = buildIdStr; logMessage("Build ID: " + buildIdStr); ui->lblBuildID->setText(buildIdStr); } @@ -713,6 +716,76 @@ void UDSFirmwareUploaderWindow::testerPresentTick() 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() { } diff --git a/re/udsfirmwareuploaderwindow.h b/re/udsfirmwareuploaderwindow.h index 2fddc5c..957e06f 100644 --- a/re/udsfirmwareuploaderwindow.h +++ b/re/udsfirmwareuploaderwindow.h @@ -62,6 +62,7 @@ private slots: void handleStartStop(); void handleAbort(); void handleReadBuildID(); + void handleLookupVersion(); void handleBrowseTeslaDir(); void handleReloadNodes(); void handleNodeChanged(int index); @@ -86,6 +87,7 @@ private: void sendECUReset(); void sendTesterPresent(); void sendReadBuildID(); + void lookupVersionMap(); void handleNRC(int nrc); void advanceState(); @@ -111,6 +113,7 @@ private: bool useSecurity; QString teslaDir; + QString lastBuildId; QVector teslaNodes; QMap messageIdMap; }; diff --git a/ui/udsfirmwareuploaderwindow.ui b/ui/udsfirmwareuploaderwindow.ui index 873cb8f..7b048da 100644 --- a/ui/udsfirmwareuploaderwindow.ui +++ b/ui/udsfirmwareuploaderwindow.ui @@ -119,6 +119,13 @@ + + + + Lookup Version + + +