From 521009ec2b100282c3db3d4809a6b0abc4f6da9b Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 11 May 2017 21:58:55 -0400 Subject: [PATCH] Added ability to save UDS scan log, fixed bug with aborting a UDS scan --- re/udsscanwindow.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ re/udsscanwindow.h | 1 + ui/udsscanwindow.ui | 7 +++++++ 3 files changed, 48 insertions(+) diff --git a/re/udsscanwindow.cpp b/re/udsscanwindow.cpp index 7d8b3cf..0ff08e1 100644 --- a/re/udsscanwindow.cpp +++ b/re/udsscanwindow.cpp @@ -20,6 +20,7 @@ UDSScanWindow::UDSScanWindow(const QVector *frames, QWidget *parent) : connect(CANConManager::getInstance(), &CANConManager::framesReceived, this, &UDSScanWindow::rapidFrames); connect(ui->btnScan, &QPushButton::clicked, this, &UDSScanWindow::scanUDS); connect(waitTimer, &QTimer::timeout, this, &UDSScanWindow::timeOut); + connect(ui->btnSaveResults, &QPushButton::clicked, this, &UDSScanWindow::saveResults); int numBuses = CANConManager::getInstance()->getNumBuses(); for (int n = 0; n < numBuses; n++) ui->cbBuses->addItem(QString::number(n)); @@ -33,6 +34,44 @@ UDSScanWindow::~UDSScanWindow() delete waitTimer; } +void UDSScanWindow::saveResults() +{ + QString filename; + QFileDialog dialog(this); + + QStringList filters; + filters.append(QString(tr("Text File (*.txt)"))); + + dialog.setFileMode(QFileDialog::AnyFile); + dialog.setNameFilters(filters); + dialog.setViewMode(QFileDialog::Detail); + dialog.setAcceptMode(QFileDialog::AcceptSave); + + if (dialog.exec() == QDialog::Accepted) + { + filename = dialog.selectedFiles()[0]; + if (!filename.contains('.')) filename += ".txt"; + if (dialog.selectedNameFilter() == filters[0]) + { + QFile *outFile = new QFile(filename); + + if (!outFile->open(QIODevice::WriteOnly | QIODevice::Text)) + { + delete outFile; + return; + } + + for (int i = 0; i < ui->listResults->count(); i++) + { + outFile->write(ui->listResults->item(i)->text().toUtf8()); + outFile->write("\n"); + } + outFile->close(); + delete outFile; + } + } +} + void UDSScanWindow::sendOnBuses(CANFrame &frame, int buses) { if (buses < ui->cbBuses->count()- 1) @@ -58,6 +97,7 @@ void UDSScanWindow::scanUDS() sendingFrames.clear(); currentlyRunning = false; ui->btnScan->setText("Start Scan"); + return; } waitTimer->setInterval(ui->spinDelay->value()); diff --git a/re/udsscanwindow.h b/re/udsscanwindow.h index 7f232d4..0ffc42e 100644 --- a/re/udsscanwindow.h +++ b/re/udsscanwindow.h @@ -22,6 +22,7 @@ private slots: void updatedFrames(int numFrames); void rapidFrames(const CANConnection* conn, const QVector& pFrames); void scanUDS(); + void saveResults(); void timeOut(); private: diff --git a/ui/udsscanwindow.ui b/ui/udsscanwindow.ui index ca477ab..ab19fcd 100644 --- a/ui/udsscanwindow.ui +++ b/ui/udsscanwindow.ui @@ -24,6 +24,13 @@ + + + + Save Scan Results + + +