From 6fc8cf73c74b43406f213078f7aa3419d311bd8b Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Mon, 27 Apr 2015 17:14:53 -0400 Subject: [PATCH] Initial check-in --- SavvyCAN.pro | 21 +++ SavvyCAN.pro.user | 447 ++++++++++++++++++++++++++++++++++++++++++++++ can_structs.h | 27 +++ main.cpp | 11 ++ mainwindow.cpp | 159 +++++++++++++++++ mainwindow.h | 34 ++++ mainwindow.ui | 158 ++++++++++++++++ 7 files changed, 857 insertions(+) create mode 100644 SavvyCAN.pro create mode 100644 SavvyCAN.pro.user create mode 100644 can_structs.h create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui diff --git a/SavvyCAN.pro b/SavvyCAN.pro new file mode 100644 index 0000000..ed41d60 --- /dev/null +++ b/SavvyCAN.pro @@ -0,0 +1,21 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2015-04-25T22:57:44 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = SavvyCAN +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h \ + can_structs.h + +FORMS += mainwindow.ui diff --git a/SavvyCAN.pro.user b/SavvyCAN.pro.user new file mode 100644 index 0000000..90673d2 --- /dev/null +++ b/SavvyCAN.pro.user @@ -0,0 +1,447 @@ + + + + + + EnvironmentId + {4d16b929-8ed6-4c97-9e6c-66f0036d54be} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.4.1 MSVC2012 OpenGL 32bit + Desktop Qt 5.4.1 MSVC2012 OpenGL 32bit + qt.54.win32_msvc2012_opengl_kit + 0 + 0 + 0 + + C:/Users/Collin/Documents/build-ReverseCAN-Desktop_Qt_5_4_1_MSVC2012_OpenGL_32bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/Collin/Documents/build-ReverseCAN-Desktop_Qt_5_4_1_MSVC2012_OpenGL_32bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + ReverseCAN + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Collin/Documents/ReverseCAN/ReverseCAN.pro + + ReverseCAN.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.4.1 MSVC2013 64bit + Desktop Qt 5.4.1 MSVC2013 64bit + qt.54.win64_msvc2013_64_kit + 0 + 0 + 0 + + C:/Users/Collin/Documents/build-ReverseCAN-Desktop_Qt_5_4_1_MSVC2013_64bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/Collin/Documents/build-ReverseCAN-Desktop_Qt_5_4_1_MSVC2013_64bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + -1 + + + + false + %{buildDir} + Custom Executable + + ProjectExplorer.CustomExecutableRunConfiguration + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 2 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/can_structs.h b/can_structs.h new file mode 100644 index 0000000..ac6297c --- /dev/null +++ b/can_structs.h @@ -0,0 +1,27 @@ +#ifndef CAN_STRUCTS_H +#define CAN_STRUCTS_H + +struct CANFrame +{ +public: + int ID; + int bus; + bool extended; + int len; + unsigned char data[8]; + long long timestamp; +}; + +struct J1939ID +{ +public: + int src; + int dest; + int pgn; + int pf; + int ps; + int priority; + bool isBroadcast; +}; +#endif // CAN_STRUCTS_H + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..f9523fb --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,159 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "can_structs.h" +#include +#include +#include + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + model = new QStandardItemModel(); + ui->canFramesView->setModel(model); + + QStringList headers; + headers << "Timestamp" << "ID" << "Ext" << "Bus" << "Len" << "Data"; + model->setHorizontalHeaderLabels(headers); + ui->canFramesView->setColumnWidth(0, 110); + ui->canFramesView->setColumnWidth(1, 70); + ui->canFramesView->setColumnWidth(2, 40); + ui->canFramesView->setColumnWidth(3, 40); + ui->canFramesView->setColumnWidth(4, 40); + ui->canFramesView->setColumnWidth(5, 300); + + /* + for (int row = 0; row < 4000; row++) + { + QStandardItem *item = new QStandardItem(QString("10000ms")); + model->setItem(row, 0, item); + item = new QStandardItem(QString("0x107")); + model->setItem(row, 1, item); + item = new QStandardItem(QString("F")); + model->setItem(row, 2, item); + item = new QStandardItem(QString("1")); + model->setItem(row, 3, item); + item = new QStandardItem(QString("8")); + model->setItem(row, 4, item); + item = new QStandardItem(QString("0x10 0xE0 0x10 0x30 0x40 0x50 0xFF 0x23")); + model->setItem(row, 5, item); + } + */ +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::addFrameToDisplay(CANFrame frame) +{ + int row = model->rowCount(); + QStandardItem *item = new QStandardItem(QString::number(frame.timestamp)); + model->setItem(row, 0, item); + item = new QStandardItem(QString::number(frame.ID, 16)); + model->setItem(row, 1, item); + item = new QStandardItem(QString::number(frame.extended)); + model->setItem(row, 2, item); + item = new QStandardItem(QString::number(frame.bus)); + model->setItem(row, 3, item); + item = new QStandardItem(QString::number(frame.len)); + model->setItem(row, 4, item); + QString tempString; + for (int i = 0; i < frame.len; i++) + { + tempString.append(QString::number(frame.data[i], 16)); + tempString.append(" "); + } + item = new QStandardItem(tempString); + model->setItem(row, 5, item); +} + +void MainWindow::loadCRTDFile(QString filename) +{ + +} + +void MainWindow::loadNativeCSVFile(QString filename) +{ + QFile *inFile = new QFile(filename); + CANFrame thisFrame; + + if (!inFile->open(QIODevice::ReadOnly | QIODevice::Text)) + return; + + while (!inFile->atEnd()) { + QByteArray line = inFile->readLine(); + if (line.length() > 2) + { + QList tokens = line.split(','); + if (tokens[0].length() > 10) + { + long long temp = tokens[0].toInt(); + thisFrame.timestamp = temp; + } + else + { + QDateTime stamp = QDateTime::currentDateTime(); + thisFrame.timestamp = (long)(((stamp.time().hour() * 3600) + (stamp.time().minute() * 60) + (stamp.time().second()) * 1000) + stamp.time().msec()); + } + + thisFrame.ID = tokens[1].toInt(NULL, 16); + thisFrame.extended = tokens[2].toInt(); + thisFrame.bus = tokens[3].toInt(); + thisFrame.len = tokens[4].toInt(); + for (int c = 0; c < 8; c++) thisFrame.data[c] = 0; + for (int d = 0; d < thisFrame.len; d++) + thisFrame.data[d] = tokens[5 + d].toInt(NULL, 16); + addFrameToDisplay(thisFrame); + } + } + inFile->close(); + +} + +void MainWindow::loadGenericCSVFile(QString filename) +{ + +} + +void MainWindow::loadLogFile(QString filename) +{ + +} + +void MainWindow::loadMicrochipFile(QString filename) +{ + +} + + + +void MainWindow::handleLoadFile() +{ + QString filename; + QFileDialog dialog(this); + + QStringList filters; + filters.append(QString(tr("CRTD Logs (*.txt)"))); + filters.append(QString(tr("GVRET Logs (*.csv)"))); + filters.append(QString(tr("Generic ID/Data CSV (*.csv)"))); + filters.append(QString(tr("BusMaster Log (*.log)"))); + filters.append(QString(tr("Microchip Log (*.log)"))); + + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setNameFilters(filters); + dialog.setViewMode(QFileDialog::Detail); + + if (dialog.exec()) + { + filename = dialog.selectedFiles()[0]; + } + + if (dialog.selectedNameFilter() == filters[0]) loadCRTDFile(filename); + if (dialog.selectedNameFilter() == filters[1]) loadNativeCSVFile(filename); + if (dialog.selectedNameFilter() == filters[2]) loadGenericCSVFile(filename); + if (dialog.selectedNameFilter() == filters[3]) loadLogFile(filename); + if (dialog.selectedNameFilter() == filters[4]) loadMicrochipFile(filename); +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..6b87173 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,34 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include "can_structs.h" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private slots: + void handleLoadFile(); + +private: + Ui::MainWindow *ui; + QStandardItemModel *model; + void loadCRTDFile(QString); + void loadNativeCSVFile(QString); + void loadGenericCSVFile(QString); + void loadLogFile(QString); + void loadMicrochipFile(QString); + void addFrameToDisplay(CANFrame); +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..e7ff48e --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,158 @@ + + + MainWindow + + + + 0 + 0 + 1016 + 600 + + + + + 0 + 0 + + + + + 800 + 600 + + + + MainWindow + + + + + + 20 + 10 + 675 + 400 + + + + true + + + + + + + 0 + 0 + 1016 + 26 + + + + + RE Tools + + + + + + + + + + Send Frames + + + + + + + File + + + + + + + + + + + TopToolBarArea + + + true + + + + + + Playback + + + + + Custom + + + + + Single / Multi State + + + + + Range State + + + + + Flow View + + + + + Fuzzy Scope + + + + + Graph Data + + + + + Open Log File + + + + + Save Log File + + + + + + + + actionOpen_Log_File + triggered() + MainWindow + handleLoadFile() + + + 244 + 50 + + + 507 + 299 + + + + + + handleLoadFile() + +