diff --git a/scriptcontainer.cpp b/scriptcontainer.cpp index 84b7280..5c4bfa4 100644 --- a/scriptcontainer.cpp +++ b/scriptcontainer.cpp @@ -1,14 +1,12 @@ -#include "scriptcontainer.h" - #include #include -ScriptContainer::ScriptContainer() -{ - fileName = QString(); - filePath = QString(); - scriptText = QString(); +#include "scriptcontainer.h" +#include "connections/canconmanager.h" +ScriptContainer::ScriptContainer(QString& pConName): + mConName(pConName) +{ connect(&timer, SIGNAL(timeout()), this, SLOT(tick())); } @@ -68,6 +66,25 @@ void ScriptContainer::setFilter(QJSValue id, QJSValue mask, QJSValue bus) CANFilter filter; filter.setFilter(idVal, maskVal, busVal); filters.append(filter); + + qDebug() << "FIXME setFilter"; + CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName); + if(conn_p) + { + for(int i=0 ; igetNumBuses() ; i++) + { + QVector fltrs; + foreach(const CANFilter& flt, filters) + { + if(flt.bus==i) { + fltrs.append({flt.ID, flt.mask, true}); + } + } + + if(fltrs.size()) + conn_p->setFilters(i, fltrs, false); + } + } } void ScriptContainer::setTickInterval(QJSValue interval) @@ -86,6 +103,14 @@ void ScriptContainer::clearFilters() { qDebug() << "Called clear filters"; filters.clear(); + + qDebug() << "FIXME clearFilters"; + CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName); + if(conn_p) + { + for(int i=0 ; igetNumBuses() ; i++) + conn_p->setFilters(i, QVector(), false); + } } void ScriptContainer::sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSValue data) @@ -109,8 +134,10 @@ void ScriptContainer::sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSV if (frame.ID > 0x7FF) frame.extended = true; - //qDebug() << "Sending frame from script"; - emit sendCANFrame(&frame); + qDebug() << "sending frame from script"; + CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName); + if(conn_p) + conn_p->sendFrame(frame); } void ScriptContainer::gotFrame(const CANFrame &frame) diff --git a/scriptcontainer.h b/scriptcontainer.h index fd4b33d..75caec2 100644 --- a/scriptcontainer.h +++ b/scriptcontainer.h @@ -13,12 +13,13 @@ class ScriptContainer : public QObject Q_OBJECT public: - ScriptContainer(); + ScriptContainer(QString&); void gotFrame(const CANFrame &frame); QString fileName; QString filePath; QString scriptText; + QString mConName; public slots: void compileScript(); diff --git a/scriptingwindow.cpp b/scriptingwindow.cpp index 19ab11d..58115dd 100644 --- a/scriptingwindow.cpp +++ b/scriptingwindow.cpp @@ -3,9 +3,10 @@ #include #include +#include #include -#include "mainwindow.h" +#include "connections/canconmanager.h" ScriptingWindow::ScriptingWindow(const QVector *frames, QWidget *parent) : QDialog(parent), @@ -23,7 +24,8 @@ ScriptingWindow::ScriptingWindow(const QVector *frames, QWidget *paren connect(ui->btnRemoveScript, &QAbstractButton::pressed, this, &ScriptingWindow::deleteCurrentScript); connect(ui->btnRevertScript, &QAbstractButton::pressed, this, &ScriptingWindow::revertScript); connect(ui->btnSaveScript, &QAbstractButton::pressed, this, &ScriptingWindow::saveScript); - connect(MainWindow::getReference(), &MainWindow::framesUpdated, this, &ScriptingWindow::updatedFrames); + + connect(CANConManager::getInstance(), &CANConManager::framesReceived, this, &ScriptingWindow::newFrames); ui->txtScriptSource->setLexer(new QsciLexerJavaScript(ui->txtScriptSource)); } @@ -33,27 +35,22 @@ ScriptingWindow::~ScriptingWindow() delete ui; } -void ScriptingWindow::updatedFrames(int numFrames) + +void ScriptingWindow::newFrames(const CANConnection* pConn, const QVector& pFrames) { - CANFrame thisFrame; - //-1 means all frames deleted and -2 means a full refresh, neither of which we care about here. - if (numFrames > 0) + /*FIXME: name of the probe and bus should be checked */ + Q_UNUSED(pConn); + + for (int j = 0; j < scripts.length(); j++) { - if (numFrames > modelFrames->count()) return; - qDebug() << "Got frames into script window: " << numFrames; - //for every new frame pass it on to each script container. The container will determine if it needs to actually - //notify the script and do that if applicable. - for (int i = modelFrames->count() - numFrames; i < modelFrames->count(); i++) + foreach(const CANFrame& frame, pFrames) { - thisFrame = modelFrames->at(i); - for (int j = 0; j < scripts.length(); j++) - { - scripts[j]->gotFrame(thisFrame); - } + scripts[j]->gotFrame(frame); } } } + void ScriptingWindow::closeEvent(QCloseEvent *event) { Q_UNUSED(event); @@ -115,13 +112,19 @@ void ScriptingWindow::loadNewScript() QStringList fileList = filename.split('/'); QString justFileName = fileList[fileList.length() - 1]; ui->listLoadedScripts->addItem(justFileName); - container = new ScriptContainer(); + /* get the first connection in the list for now */ + qDebug() << "FIXME: connection is always the first in list"; + QString portName; + QList list = CANConManager::getInstance()->getConnections(); + if(!list.isEmpty()) + portName = list.first()->getPort(); + + container = new ScriptContainer(portName); container->fileName = justFileName; container->filePath = filename; container->scriptText = contents; container->setErrorWidget(ui->listErrors); container->compileScript(); - connect(container, &ScriptContainer::sendCANFrame, this, &ScriptingWindow::sendCANFrame); scripts.append(container); currentScript = container; ui->txtScriptSource->setText(container->scriptText); @@ -135,13 +138,17 @@ void ScriptingWindow::createNewScript() { ScriptContainer *container; - container = new ScriptContainer(); + QString portName; + QList list = CANConManager::getInstance()->getConnections(); + if(!list.isEmpty()) + portName = list.first()->getPort(); + + container = new ScriptContainer(portName); container->fileName = "UNNAMED_" + QString::number((qrand() % 10000)) + ".js"; container->filePath = QString(); container->scriptText = QString(); container->setErrorWidget(ui->listErrors); - connect(container, &ScriptContainer::sendCANFrame, this, &ScriptingWindow::sendCANFrame); scripts.append(container); ui->listLoadedScripts->addItem(container->fileName); currentScript = container; diff --git a/scriptingwindow.h b/scriptingwindow.h index 179e672..6713460 100644 --- a/scriptingwindow.h +++ b/scriptingwindow.h @@ -3,6 +3,7 @@ #include "can_structs.h" #include "scriptcontainer.h" +#include "connections/canconnection.h" #include #include @@ -28,12 +29,7 @@ private slots: void saveScript(); void revertScript(); void recompileScript(); - void updatedFrames(int); - -public slots: - -signals: - void sendCANFrame(const CANFrame *); + void newFrames(const CANConnection*, const QVector&); private: void closeEvent(QCloseEvent *event);