Branch data Line data Source code
1 : : #include "DataManager.hpp"
2 : :
3 : : #include "applications/instrument-cluster/mq/ZMQSubscriber.hpp"
4 : :
5 : 0 : DataManager::DataManager(QObject* parent) : QObject{parent}, context(1) {
6 : : // ZeroMQ setup (in a separate thread)
7 : : // move the task object to the thread BEFORE connecting any signal/slots
8 : 0 : thread = new QThread(this);
9 : : std::unique_ptr<MQ::ZeroMQSocket> sub_socket =
10 : 0 : std::make_unique<MQ::ZeroMQSocket>(context, zmq::socket_type::sub);
11 : 0 : sub_socket->bind("ipc:///tmp/speed.ipc");
12 : 0 : worker = new ZmqSubscriber(std::move(sub_socket));
13 : 0 : worker->moveToThread(thread);
14 : :
15 : 0 : connect(this, &DataManager::startZeroMQ, worker, &ZmqSubscriber::checkForMessages);
16 : 0 : connect(worker, &ZmqSubscriber::messageReceived, this, &DataManager::updateData);
17 : 0 : connect(worker, &ZmqSubscriber::batteryMessageReceived, this, &DataManager::setBattery);
18 : 0 : connect(worker, &ZmqSubscriber::temperatureMessageReceived, this, &DataManager::setTemperature);
19 : :
20 : : // automatically delete thread and task object when work is done:
21 : 0 : connect(thread, &QThread::finished, worker, &DataManager::deleteLater); // Clean up
22 : 0 : connect(thread, &QThread::finished, this, &DataManager::deleteLater);
23 : :
24 : : // Start ZeroMQ
25 : 0 : thread->start();
26 : 0 : emit startZeroMQ();
27 : 0 : }
28 : :
29 : 0 : DataManager::~DataManager() {
30 : 0 : qDebug() << "DataManager::shutting down context";
31 : 0 : context.shutdown();
32 : 0 : qDebug() << "DataManager::quitting thread";
33 : 0 : thread->quit();
34 : 0 : qDebug() << "DataManager::waiting thread finishes";
35 : 0 : thread->wait(); // Ensure thread finishes
36 : 0 : qDebug() << "DataManager::closing context";
37 : 0 : context.close();
38 : 0 : qDebug() << "DataManager::finished";
39 : 0 : }
40 : :
41 : 0 : void DataManager::setSpeed(float speed) {
42 : 0 : if (m_speed != speed) {
43 : 0 : m_speed = speed;
44 : 0 : emit speedChanged();
45 : : }
46 : 0 : }
47 : :
48 : 0 : void DataManager::setRpm(float rpm) {
49 : 0 : if (m_rpm != rpm) {
50 : 0 : m_rpm = rpm;
51 : 0 : emit rpmChanged();
52 : : }
53 : 0 : }
54 : :
55 : 0 : void DataManager::setBattery(uint8_t battery) {
56 : 0 : if (m_battery != battery) {
57 : 0 : m_battery = battery;
58 : 0 : emit batteryChanged();
59 : : }
60 : 0 : }
61 : :
62 : 0 : void DataManager::setTemperature(uint8_t temperature) {
63 : 0 : if (m_temperature != temperature) {
64 : 0 : m_temperature = temperature;
65 : 0 : emit temperatureChanged();
66 : : }
67 : 0 : }
68 : :
69 : 0 : void DataManager::updateData(float speed, float rpm) {
70 : 0 : setSpeed(speed);
71 : 0 : setRpm(rpm);
72 : 0 : }
|