From f3cccc2231b078d44ebac26fe7834e8c2b10b985 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 26 Jan 2016 19:53:15 -0500 Subject: [PATCH] Updated version, added two new windows (not done), fixed more issues with how connecting works - it now also stores the last connection so you can resume using it the next time the program is run. --- SavvyCAN.pro | 12 ++- connectionwindow.cpp | 50 +++++++++-- connectionwindow.h | 6 ++ fuzzingwindow.cpp | 17 ++++ fuzzingwindow.h | 27 ++++++ fuzzingwindow.ui | 210 +++++++++++++++++++++++++++++++++++++++++++ mainwindow.cpp | 64 ++++++++++++- mainwindow.h | 6 ++ mainwindow.ui | 14 ++- udsscanwindow.cpp | 14 +++ udsscanwindow.h | 22 +++++ udsscanwindow.ui | 18 ++++ 12 files changed, 447 insertions(+), 13 deletions(-) create mode 100644 fuzzingwindow.cpp create mode 100644 fuzzingwindow.h create mode 100644 fuzzingwindow.ui create mode 100644 udsscanwindow.cpp create mode 100644 udsscanwindow.h create mode 100644 udsscanwindow.ui diff --git a/SavvyCAN.pro b/SavvyCAN.pro index 2657522..7052c48 100644 --- a/SavvyCAN.pro +++ b/SavvyCAN.pro @@ -43,7 +43,9 @@ SOURCES += main.cpp\ canfilter.cpp \ rangestatewindow.cpp \ dbc_classes.cpp \ - dbcloadsavewindow.cpp + dbcloadsavewindow.cpp \ + fuzzingwindow.cpp \ + udsscanwindow.cpp HEADERS += mainwindow.h \ can_structs.h \ @@ -74,7 +76,9 @@ HEADERS += mainwindow.h \ scriptcontainer.h \ canfilter.h \ rangestatewindow.h \ - dbcloadsavewindow.h + dbcloadsavewindow.h \ + fuzzingwindow.h \ + udsscanwindow.h FORMS += mainwindow.ui \ graphingwindow.ui \ @@ -93,7 +97,9 @@ FORMS += mainwindow.ui \ connectionwindow.ui \ scriptingwindow.ui \ rangestatewindow.ui \ - dbcloadsavewindow.ui + dbcloadsavewindow.ui \ + fuzzingwindow.ui \ + udsscanwindow.ui DISTFILES += diff --git a/connectionwindow.cpp b/connectionwindow.cpp index 81826f7..ad46e77 100644 --- a/connectionwindow.cpp +++ b/connectionwindow.cpp @@ -8,8 +8,20 @@ ConnectionWindow::ConnectionWindow(QWidget *parent) : { ui->setupUi(this); - //getSerialPorts(); - getSocketcanPorts(); + settings = new QSettings(); + + int temp = settings->value("Main/DefaultConnectionType", 0).toInt(); + + if (temp == 0) currentConnType = ConnectionType::GVRET_SERIAL; + if (temp == 1) currentConnType = ConnectionType::KVASER; + if (temp == 2) currentConnType = ConnectionType::SOCKETCAN; + + currentPortName = settings->value("Main/DefaultConnectionPort", "").toString(); + + currentSpeed1 = -1; + currentSpeed2 = -1; + + ui->ckSingleWire->setChecked(settings->value("Main/SingleWireMode", false).toBool()); ui->cbSpeed0->addItem(tr("")); ui->cbSpeed0->addItem(tr("Disabled")); @@ -40,6 +52,7 @@ ConnectionWindow::ConnectionWindow(QWidget *parent) : ConnectionWindow::~ConnectionWindow() { + delete settings; delete ui; } @@ -55,10 +68,36 @@ void ConnectionWindow::showEvent(QShowEvent* event) void ConnectionWindow::handleOKButton() { QString conn; + int connType = 0; - if (ui->rbGVRET->isChecked()) conn = "GVRET"; - if (ui->rbKvaser->isChecked()) conn = "KVASER"; - if (ui->rbSocketCAN->isChecked()) conn = "SOCKETCAN"; + if (ui->rbGVRET->isChecked()) + { + conn = "GVRET"; + connType = 0; + currentConnType = ConnectionType::GVRET_SERIAL; + } + + if (ui->rbKvaser->isChecked()) + { + conn = "KVASER"; + connType = 1; + currentConnType = ConnectionType::KVASER; + } + + if (ui->rbSocketCAN->isChecked()) + { + conn = "SOCKETCAN"; + connType = 2; + currentConnType = ConnectionType::SOCKETCAN; + } + + currentPortName = getPortName(); + currentSpeed1 = getSpeed0(); + currentSpeed2 = getSpeed1(); + + settings->setValue("Main/DefaultConnectionPort", currentPortName); + settings->setValue("Main/DefaultConnectionType", connType); + settings->setValue("Main/SingleWireMode", ui->ckSingleWire->isChecked()); emit updateConnectionSettings(conn, getPortName(), getSpeed0(), getSpeed1()); @@ -73,6 +112,7 @@ void ConnectionWindow::getSerialPorts() for (int i = 0; i < ports.count(); i++) { ui->cbPort->addItem(ports[i].portName()); + if (currentPortName == ports[i].portName()) ui->cbPort->setCurrentIndex(i); } } diff --git a/connectionwindow.h b/connectionwindow.h index 78df402..3315006 100644 --- a/connectionwindow.h +++ b/connectionwindow.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace Ui { class ConnectionWindow; @@ -46,6 +47,11 @@ private slots: private: Ui::ConnectionWindow *ui; QList ports; + QSettings *settings; + + ConnectionType::ConnectionType currentConnType; + QString currentPortName; + int currentSpeed1, currentSpeed2; void getSerialPorts(); void getKvaserPorts(); diff --git a/fuzzingwindow.cpp b/fuzzingwindow.cpp new file mode 100644 index 0000000..f038269 --- /dev/null +++ b/fuzzingwindow.cpp @@ -0,0 +1,17 @@ +#include "fuzzingwindow.h" +#include "ui_fuzzingwindow.h" + +FuzzingWindow::FuzzingWindow(const QVector *frames, SerialWorker *worker, QWidget *parent) : + QDialog(parent), + ui(new Ui::FuzzingWindow) +{ + ui->setupUi(this); + + modelFrames = frames; + serialWorker = worker; +} + +FuzzingWindow::~FuzzingWindow() +{ + delete ui; +} diff --git a/fuzzingwindow.h b/fuzzingwindow.h new file mode 100644 index 0000000..2e13882 --- /dev/null +++ b/fuzzingwindow.h @@ -0,0 +1,27 @@ +#ifndef FUZZINGWINDOW_H +#define FUZZINGWINDOW_H + +#include +#include "can_structs.h" +#include "serialworker.h" + +namespace Ui { +class FuzzingWindow; +} + +class FuzzingWindow : public QDialog +{ + Q_OBJECT + +public: + explicit FuzzingWindow(const QVector *frames, SerialWorker *worker, QWidget *parent = 0); + ~FuzzingWindow(); + +private: + Ui::FuzzingWindow *ui; + const QVector *modelFrames; + QTimer *fuzzTimer; + SerialWorker *serialWorker; +}; + +#endif // FUZZINGWINDOW_H diff --git a/fuzzingwindow.ui b/fuzzingwindow.ui new file mode 100644 index 0000000..943e5a1 --- /dev/null +++ b/fuzzingwindow.ui @@ -0,0 +1,210 @@ + + + FuzzingWindow + + + + 0 + 0 + 760 + 671 + + + + Fuzzing Window + + + + + + + + + + Interframe Timing + + + + + + + + + + + + + + Burst Rate: + + + + + + + + + + + + + + + + ID Scanning + + + + + + Seqential + + + + + + + Random + + + + + + + + + + ID Selection + + + + + + Range of IDs + + + + + + + Filter List + + + + + + + + + + Bit Scanning + + + + + + Sequential + + + + + + + Random + + + + + + + + + + + + + + IDs + + + + + + + + Start ID: + + + + + + + + + + + + + + End ID: + + + + + + + + + + + + + + + + + + + + + + All + + + + + + + None + + + + + + + + + + + + + + 0 + 200 + + + + + + + + + CANDataGrid + QWidget +
candatagrid.h
+ 1 +
+
+ + +
diff --git a/mainwindow.cpp b/mainwindow.cpp index ecbbfd2..fe94de8 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -18,7 +18,6 @@ Single / Multi state - The goal is to find bits that change based on toggles or fuzzy scope - Try to find potential places where a given value might be stored - offer guesses and the program tries to find candidates for you or, try to find things that appear to be multi-byte integers -Finish coding up support for associating a DBC file with a specific bus Allow scripts to read/write signals from DBC files allow scripts to load DBC files in support of the script - maybe the graphing system too. */ @@ -97,6 +96,8 @@ MainWindow::MainWindow(QWidget *parent) : scriptingWindow = NULL; rangeWindow = NULL; dbcFileWindow = NULL; + fuzzingWindow = NULL; + udsScanWindow = NULL; dbcHandler = new DBCHandler; bDirty = false; inhibitFilterUpdate = false; @@ -136,6 +137,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->btnFilterNone, &QAbstractButton::clicked, this, &MainWindow::filterClearAll); connect(ui->actionFirmware_Uploader, &QAction::triggered, this, &MainWindow::showFirmwareUploaderWindow); connect(ui->actionDBC_File_Manager, &QAction::triggered, this, &MainWindow::showDBCFileWindow); + connect(ui->actionFuzzing, &QAction::triggered, this, &MainWindow::showFuzzingWindow); + connect(ui->actionUDS_Scanner, &QAction::triggered, this, &MainWindow::showUDSScanWindow); lbStatusConnected.setText(tr("Not connected")); updateFileStatus(); @@ -161,6 +164,10 @@ MainWindow::MainWindow(QWidget *parent) : normalRowHeight = ui->canFramesView->rowHeight(0); qDebug() << "normal row height = " << normalRowHeight; model->clearFrames(); + + //Automatically create the connection window so it can be updated even if we never opened it. + connectionWindow = new ConnectionWindow(); + connect(connectionWindow, SIGNAL(updateConnectionSettings(QString,QString,int,int)), this, SLOT(updateConnectionSettings(QString,QString,int,int))); } MainWindow::~MainWindow() @@ -247,6 +254,18 @@ MainWindow::~MainWindow() delete dbcFileWindow; } + if (fuzzingWindow) + { + fuzzingWindow->close(); + delete fuzzingWindow; + } + + if (udsScanWindow) + { + udsScanWindow->close(); + delete udsScanWindow; + } + delete ui; delete dbcHandler; model->clearFrames(); @@ -268,6 +287,8 @@ void MainWindow::exitApp() if (scriptingWindow) scriptingWindow->close(); if (rangeWindow) rangeWindow->close(); if (dbcFileWindow) dbcFileWindow->close(); + if (fuzzingWindow) fuzzingWindow->close(); + if (udsScanWindow) udsScanWindow->close(); this->close(); } @@ -296,6 +317,20 @@ void MainWindow::readSettings() { ui->cbAutoScroll->setChecked(true); } + + int cType = settings.value("Main/DefaultConnectionType", 0).toInt(); + if (cType == 0) connType = "GVRET"; + if (cType == 1) connType = "KVASER"; + if (cType == 2) connType = "SOCKETCAN"; + portName = settings.value("Main/DefaultConnectionPort", "").toString(); + canSpeed0 = -1; + canSpeed1 = -1; + + qDebug() << connType; + qDebug() << portName; + + //"Main/SingleWireMode" + readUpdateableSettings(); } @@ -721,7 +756,7 @@ void MainWindow::connectionSucceeded(int baud0, int baud1) ui->cbSpeed2->setCurrentIndex(ui->cbSpeed2->count() - 1); } */ - connectionWindow->setSpeeds(baud0, baud1); + if (connectionWindow) connectionWindow->setSpeeds(baud0, baud1); //ui->btnConnect->setEnabled(false); ui->actionConnect->setText(tr("Disconnect")); isConnected = true; @@ -777,8 +812,11 @@ void MainWindow::gotDeviceInfo(int build, int swCAN) msgBox.exec(); } - if (swCAN == 1) connectionWindow->setCAN1SWMode(true); - else connectionWindow->setCAN1SWMode(false); + if (connectionWindow) + { + if (swCAN == 1) connectionWindow->setCAN1SWMode(true); + else connectionWindow->setCAN1SWMode(false); + } } void MainWindow::setTargettedID(int id) @@ -881,6 +919,24 @@ void MainWindow::showSingleMultiWindow() discreteStateWindow->show(); } +void MainWindow::showFuzzingWindow() +{ + if (!fuzzingWindow) + { + fuzzingWindow = new FuzzingWindow(model->getListReference(), worker); + } + fuzzingWindow->show(); +} + +void MainWindow::showUDSScanWindow() +{ + if (!udsScanWindow) + { + udsScanWindow = new UDSScanWindow; + } + udsScanWindow->show(); +} + void MainWindow::showScriptingWindow() { if (!scriptingWindow) diff --git a/mainwindow.h b/mainwindow.h index d377ac6..cf99eba 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -23,6 +23,8 @@ #include "scriptingwindow.h" #include "rangestatewindow.h" #include "dbcloadsavewindow.h" +#include "fuzzingwindow.h" +#include "udsscanwindow.h" namespace Ui { class MainWindow; @@ -61,6 +63,8 @@ private slots: void showConnectionSettingsWindow(); void showScriptingWindow(); void showDBCFileWindow(); + void showFuzzingWindow(); + void showUDSScanWindow(); void exitApp(); void handleSaveDecoded(); void changeBaudRates(); @@ -129,6 +133,8 @@ private: ScriptingWindow *scriptingWindow; RangeStateWindow *rangeWindow; DBCLoadSaveWindow *dbcFileWindow; + FuzzingWindow *fuzzingWindow; + UDSScanWindow *udsScanWindow; //various private storage QLabel lbStatusConnected; diff --git a/mainwindow.ui b/mainwindow.ui index 07b6e44..f590733 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -218,6 +218,8 @@ + + @@ -347,7 +349,7 @@ - Setup + Configure Port @@ -375,6 +377,16 @@ DBC File Manager + + + Fuzzing + + + + + UDS Scanner + + diff --git a/udsscanwindow.cpp b/udsscanwindow.cpp new file mode 100644 index 0000000..858235e --- /dev/null +++ b/udsscanwindow.cpp @@ -0,0 +1,14 @@ +#include "udsscanwindow.h" +#include "ui_udsscanwindow.h" + +UDSScanWindow::UDSScanWindow(QWidget *parent) : + QDialog(parent), + ui(new Ui::UDSScanWindow) +{ + ui->setupUi(this); +} + +UDSScanWindow::~UDSScanWindow() +{ + delete ui; +} diff --git a/udsscanwindow.h b/udsscanwindow.h new file mode 100644 index 0000000..60301f2 --- /dev/null +++ b/udsscanwindow.h @@ -0,0 +1,22 @@ +#ifndef UDSSCANWINDOW_H +#define UDSSCANWINDOW_H + +#include + +namespace Ui { +class UDSScanWindow; +} + +class UDSScanWindow : public QDialog +{ + Q_OBJECT + +public: + explicit UDSScanWindow(QWidget *parent = 0); + ~UDSScanWindow(); + +private: + Ui::UDSScanWindow *ui; +}; + +#endif // UDSSCANWINDOW_H diff --git a/udsscanwindow.ui b/udsscanwindow.ui new file mode 100644 index 0000000..b81b93e --- /dev/null +++ b/udsscanwindow.ui @@ -0,0 +1,18 @@ + + UDSScanWindow + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + +