-
Notifications
You must be signed in to change notification settings - Fork 15
/
simrunner.cpp
77 lines (65 loc) · 2.22 KB
/
simrunner.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* Open-BLDC QSim - Open BrushLess DC Motor Controller QT Simulator GUI
* Copyright (C) 2012 by Piotr Esden-Tempski <piotr@esden.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "simrunner.h"
#include <QDebug>
SimRunner::SimRunner(QObject *parent) :
QObject(parent)
{
running = false;
thread = NULL;
sim = new Sim();
}
void SimRunner::runSim(void)
{
if ((thread == NULL) || (thread->isFinished())) {
running = true;
qDebug() << "Activating simulation.";
if (thread == NULL) {
thread = new QThread();
}
sim->moveToThread(thread);
connect(thread, SIGNAL(started()), sim, SLOT(start()), Qt::QueuedConnection);
connect(sim, SIGNAL(newDataPoints(QVector<double>*,QVector<QVector<double> *>*)), this, SLOT(onNewDataPoints(QVector<double>*,QVector<QVector<double> *>*)), Qt::QueuedConnection);
//connect(sim, SIGNAL(finished()), thread, SLOT(quit()), Qt::QueuedConnection);
//connect(sim, SIGNAL(finished()), sim, SLOT(deleteLater()), Qt::QueuedConnection);
connect(sim, SIGNAL(finished()), this, SLOT(simFinished()));
thread->start();
} else {
qDebug() << "Thread still running ...";
}
}
void SimRunner::onNewDataPoints(QVector<double> *dataTimes, QVector<QVector<double> *> *dataValues)
{
emit newDataPoints(dataTimes, dataValues);
}
void SimRunner::simFinished()
{
qDebug() << "Simulator finished signal...";
}
void SimRunner::stopSim()
{
sim->stopSim();
}
void SimRunner::setPWMDuty(double duty)
{
sim->setPWMDuty(duty);
}
double SimRunner::getPWMDuty()
{
return sim->getPWMDuty();
}