Skip to content
Snippets Groups Projects
Unverified Commit ec185710 authored by Jake Drahos's avatar Jake Drahos
Browse files

Implementation of controlworker

Mostly done. Signals not connected yet.
parent 227a67cc
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.2.2, 2017-03-24T14:09:55. -->
<!-- Written by QtCreator 3.2.2, 2017-03-28T12:37:18. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
......
#include "controlworker.h"
#include "frontend_nodes.h"
#include "frontend_param.h"
controlworker::controlworker(QObject *parent) :
QObject(parent)
ControlWorker::ControlWorker(QObject *parent) :
QObject(parent), conn(NULL)
{
}
ControlWorker::ControlWorker() :
QObject(), conn(NULL)
{
}
ControlWorker::~ControlWorker()
{
disconnectBackend();
}
void ControlWorker::connectBackend()
{
conn = ucart_backendConnect();
}
void ControlWorker::disconnectBackend()
{
if (conn) {
ucart_backendDisconnect(conn);
conn = NULL;
}
}
ControlWorker::getNodes()
{
if (conn) {
frontend_node_data * nd = NULL;
size_t num_nodes = 0;
frontend_getnodes(conn, &nd, &num_nodes);
QStringList nodes;
for (size_t i = 0; i < num_nodes; i++) {
nodes << QString(nd[i].name);
}
frontend_free_node_data(nd, num_nodes);
emit(gotNodes(nodes));
}
}
ControlWorker::getParams(QString node)
{
if (conn) {
frontend_node_data * nd = NULL;
size_t num_nodes = 0;
frontend_getnodes(conn, &nd, &num_nodes);
for (size_t i = 0; i < num_nodes; i++) {
if (QString(nd[i].name) == node) {
QStringList params;
// TODO: Get list of params based on node type
emit(gotParams(params));
}
}
fontend_free_node_data(nd, num_nodes);
}
}
ControlWorker::getParamValue(QString node, QString param)
{
if (conn) {
frontend_node_data * nd = NULL;
size_t num_nodes = 0;
frontend_getnodes(conn, &nd, &num_nodes);
for (size_t i = 0; i < num_nodes; i++) {
if (QString(nd[i].name) == node) {
frontend_param_data pd;
pd.block = nd[i].block;
pd.param = 0; //TODO: Map string param to param ID based on block type? (Might not be needed...)
frontend_getparam(conn, &pd);
emit(gotParamValue(pd.value));
}
}
fontend_free_node_data(nd, num_nodes);
}
}
......@@ -4,15 +4,23 @@
#include <QObject>
#include "frontend_common.h"
class controlworker : public QObject
class ControlWorker : public QObject
{
Q_OBJECT
public:
explicit controlworker(QObject *parent = 0);
explicit ControlWorker(QObject *parent = 0);
signals:
void gotNodes(QStringList nodes);
void gotParams(QStringList params);
void gotParamValue(float value);
public slots:
void connectBackend();
void disconnectBackend();
void getNodes();
void getParams(QString node);
void getParamValue(QString node, QString param);
private:
......
......@@ -30,13 +30,17 @@ MainWindow::MainWindow(QWidget *parent) :
connect(trackerWorker, SIGNAL (finished(float, float, float, float, float, float)),
this, SLOT (updateTracker(float, float, float, float, float, float)));
/* Create another worker for the control graph */
QThread * cwThread = new QThread(this);
ControlWorker * controlWorker = new ControlWorker();
controlWorker->moveToThread(cwThread);
/* Connect and disconnect from backend when signals emitted */
connect(this, SIGNAL (connectWorkers()), trackerWorker, SLOT (connectBackend()));
connect(this, SIGNAL (disconnectWorkers()), trackerWorker, SLOT (disconnectBackend()));
connect(this, SIGNAL (connectWorkers()), controlWorker, SLOT (connectBackend()));
connect(this, SIGNAL (disconnectWorkers()), controlWorker, SLOT (disconnectBackend()));
/* Create other workers and add them to the worker thread, then connect them */
/* Now we can activate the slots of the workers with impunity and not block the UI thread */
/* Connect refresh button and refresh timer to tracker worker */
QTimer * trackerTimer = new QTimer(this);
connect(trackerTimer, SIGNAL(timeout()), trackerWorker, SLOT(process()));
......
......@@ -3,6 +3,10 @@
#include "frontend_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Get the block_id, type_id and name of
* all of the nodes in the current comp_graph.
*
......@@ -32,4 +36,8 @@ void frontend_free_node_data(
struct frontend_node_data * nd,
size_t num_nodes);
#ifdef __cplusplus
}
#endif
#endif /* __FRONTEND_NODES_H */
......@@ -3,6 +3,10 @@
#include "frontend_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Get the value of block.param
*
* Returns 0 on success, 1 on error
......@@ -19,5 +23,9 @@ int frontend_setparam(
struct backend_conn * conn,
struct frontend_param_data * param_data);
#ifdef __cplusplus
}
#endif
#endif /* __FRONTEND_PARAM_H */
\ No newline at end of file
#endif /* __FRONTEND_PARAM_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment