attempt to use new canconnection abstraction

This commit is contained in:
canpadawan
2016-06-29 11:57:05 +02:00
parent e402ea76fa
commit 9addf43651
4 changed files with 67 additions and 36 deletions
+36 -9
View File
@@ -1,14 +1,12 @@
#include "scriptcontainer.h"
#include <QJSValueIterator> #include <QJSValueIterator>
#include <QDebug> #include <QDebug>
ScriptContainer::ScriptContainer() #include "scriptcontainer.h"
{ #include "connections/canconmanager.h"
fileName = QString();
filePath = QString();
scriptText = QString();
ScriptContainer::ScriptContainer(QString& pConName):
mConName(pConName)
{
connect(&timer, SIGNAL(timeout()), this, SLOT(tick())); connect(&timer, SIGNAL(timeout()), this, SLOT(tick()));
} }
@@ -68,6 +66,25 @@ void ScriptContainer::setFilter(QJSValue id, QJSValue mask, QJSValue bus)
CANFilter filter; CANFilter filter;
filter.setFilter(idVal, maskVal, busVal); filter.setFilter(idVal, maskVal, busVal);
filters.append(filter); filters.append(filter);
qDebug() << "FIXME setFilter";
CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName);
if(conn_p)
{
for(int i=0 ; i<conn_p->getNumBuses() ; i++)
{
QVector<CANFlt> 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) void ScriptContainer::setTickInterval(QJSValue interval)
@@ -86,6 +103,14 @@ void ScriptContainer::clearFilters()
{ {
qDebug() << "Called clear filters"; qDebug() << "Called clear filters";
filters.clear(); filters.clear();
qDebug() << "FIXME clearFilters";
CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName);
if(conn_p)
{
for(int i=0 ; i<conn_p->getNumBuses() ; i++)
conn_p->setFilters(i, QVector<CANFlt>(), false);
}
} }
void ScriptContainer::sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSValue data) 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; if (frame.ID > 0x7FF) frame.extended = true;
//qDebug() << "Sending frame from script"; qDebug() << "sending frame from script";
emit sendCANFrame(&frame); CANConnection* conn_p = CANConManager::getInstance()->getByName(mConName);
if(conn_p)
conn_p->sendFrame(frame);
} }
void ScriptContainer::gotFrame(const CANFrame &frame) void ScriptContainer::gotFrame(const CANFrame &frame)
+2 -1
View File
@@ -13,12 +13,13 @@ class ScriptContainer : public QObject
Q_OBJECT Q_OBJECT
public: public:
ScriptContainer(); ScriptContainer(QString&);
void gotFrame(const CANFrame &frame); void gotFrame(const CANFrame &frame);
QString fileName; QString fileName;
QString filePath; QString filePath;
QString scriptText; QString scriptText;
QString mConName;
public slots: public slots:
void compileScript(); void compileScript();
+27 -20
View File
@@ -3,9 +3,10 @@
#include <QFile> #include <QFile>
#include <QFileDialog> #include <QFileDialog>
#include <QSettings>
#include <Qsci/qscilexerjavascript.h> #include <Qsci/qscilexerjavascript.h>
#include "mainwindow.h" #include "connections/canconmanager.h"
ScriptingWindow::ScriptingWindow(const QVector<CANFrame> *frames, QWidget *parent) : ScriptingWindow::ScriptingWindow(const QVector<CANFrame> *frames, QWidget *parent) :
QDialog(parent), QDialog(parent),
@@ -23,7 +24,8 @@ ScriptingWindow::ScriptingWindow(const QVector<CANFrame> *frames, QWidget *paren
connect(ui->btnRemoveScript, &QAbstractButton::pressed, this, &ScriptingWindow::deleteCurrentScript); connect(ui->btnRemoveScript, &QAbstractButton::pressed, this, &ScriptingWindow::deleteCurrentScript);
connect(ui->btnRevertScript, &QAbstractButton::pressed, this, &ScriptingWindow::revertScript); connect(ui->btnRevertScript, &QAbstractButton::pressed, this, &ScriptingWindow::revertScript);
connect(ui->btnSaveScript, &QAbstractButton::pressed, this, &ScriptingWindow::saveScript); 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)); ui->txtScriptSource->setLexer(new QsciLexerJavaScript(ui->txtScriptSource));
} }
@@ -33,27 +35,22 @@ ScriptingWindow::~ScriptingWindow()
delete ui; delete ui;
} }
void ScriptingWindow::updatedFrames(int numFrames)
void ScriptingWindow::newFrames(const CANConnection* pConn, const QVector<CANFrame>& pFrames)
{ {
CANFrame thisFrame; /*FIXME: name of the probe and bus should be checked */
//-1 means all frames deleted and -2 means a full refresh, neither of which we care about here. Q_UNUSED(pConn);
if (numFrames > 0)
for (int j = 0; j < scripts.length(); j++)
{ {
if (numFrames > modelFrames->count()) return; foreach(const CANFrame& frame, pFrames)
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++)
{ {
thisFrame = modelFrames->at(i); scripts[j]->gotFrame(frame);
for (int j = 0; j < scripts.length(); j++)
{
scripts[j]->gotFrame(thisFrame);
}
} }
} }
} }
void ScriptingWindow::closeEvent(QCloseEvent *event) void ScriptingWindow::closeEvent(QCloseEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
@@ -115,13 +112,19 @@ void ScriptingWindow::loadNewScript()
QStringList fileList = filename.split('/'); QStringList fileList = filename.split('/');
QString justFileName = fileList[fileList.length() - 1]; QString justFileName = fileList[fileList.length() - 1];
ui->listLoadedScripts->addItem(justFileName); 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<CANConnection*> list = CANConManager::getInstance()->getConnections();
if(!list.isEmpty())
portName = list.first()->getPort();
container = new ScriptContainer(portName);
container->fileName = justFileName; container->fileName = justFileName;
container->filePath = filename; container->filePath = filename;
container->scriptText = contents; container->scriptText = contents;
container->setErrorWidget(ui->listErrors); container->setErrorWidget(ui->listErrors);
container->compileScript(); container->compileScript();
connect(container, &ScriptContainer::sendCANFrame, this, &ScriptingWindow::sendCANFrame);
scripts.append(container); scripts.append(container);
currentScript = container; currentScript = container;
ui->txtScriptSource->setText(container->scriptText); ui->txtScriptSource->setText(container->scriptText);
@@ -135,13 +138,17 @@ void ScriptingWindow::createNewScript()
{ {
ScriptContainer *container; ScriptContainer *container;
container = new ScriptContainer(); QString portName;
QList<CANConnection*> list = CANConManager::getInstance()->getConnections();
if(!list.isEmpty())
portName = list.first()->getPort();
container = new ScriptContainer(portName);
container->fileName = "UNNAMED_" + QString::number((qrand() % 10000)) + ".js"; container->fileName = "UNNAMED_" + QString::number((qrand() % 10000)) + ".js";
container->filePath = QString(); container->filePath = QString();
container->scriptText = QString(); container->scriptText = QString();
container->setErrorWidget(ui->listErrors); container->setErrorWidget(ui->listErrors);
connect(container, &ScriptContainer::sendCANFrame, this, &ScriptingWindow::sendCANFrame);
scripts.append(container); scripts.append(container);
ui->listLoadedScripts->addItem(container->fileName); ui->listLoadedScripts->addItem(container->fileName);
currentScript = container; currentScript = container;
+2 -6
View File
@@ -3,6 +3,7 @@
#include "can_structs.h" #include "can_structs.h"
#include "scriptcontainer.h" #include "scriptcontainer.h"
#include "connections/canconnection.h"
#include <QDialog> #include <QDialog>
#include <QJSEngine> #include <QJSEngine>
@@ -28,12 +29,7 @@ private slots:
void saveScript(); void saveScript();
void revertScript(); void revertScript();
void recompileScript(); void recompileScript();
void updatedFrames(int); void newFrames(const CANConnection*, const QVector<CANFrame>&);
public slots:
signals:
void sendCANFrame(const CANFrame *);
private: private:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);