summaryrefslogtreecommitdiffstats
path: root/examples/protobuf/sensors/emulator/sensoremulator.cpp
blob: eee4340909535dd274a6d889061141bb51677bb4 (plain)
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
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

#include "sensoremulator.h"

#include <QDebug>
#include <QNetworkDatagram>

#include "tlv.qpb.h"
#include "sensors.qpb.h"

namespace {
QByteArray makeTlvMessage(QProtobufSerializer *serializer, const QByteArray &data,
                          qt::examples::sensors::tlv::MessageTypeGadget::MessageType type)
{
//! [0]
    Q_ASSERT(serializer != nullptr);
    qt::examples::sensors::tlv::TlvMessage msg;
    msg.setType(type);
    msg.setValue(data);
    return msg.serialize(serializer);
//! [0]
}
} // namespace

SensorEmulator::SensorEmulator(QObject *parent) : QObject(parent) { }

void SensorEmulator::send(const QByteArray &data)
{
    if (m_socket.writeDatagram(data, QHostAddress::LocalHost, 65500) == -1)
        qWarning() << "Unable to send data of size: " << data.size() << "to UDP port 65500";
}

void SensorEmulator::sendCoordinates(const qt::examples::sensors::Coordinates &coords)
{
    send(makeTlvMessage(&m_serializer, coords.serialize(&m_serializer),
                        qt::examples::sensors::tlv::MessageTypeGadget::Coordinates));
}

void SensorEmulator::sendTemperature(const qt::examples::sensors::Temperature &temp)
{
    send(makeTlvMessage(&m_serializer, temp.serialize(&m_serializer),
                        qt::examples::sensors::tlv::MessageTypeGadget::Temperature));
}

void SensorEmulator::sendWarning(const qt::examples::sensors::WarningNotification &warn)
{
    send(makeTlvMessage(&m_serializer, warn.serialize(&m_serializer),
                        qt::examples::sensors::tlv::MessageTypeGadget::WarningNotification));
}

#include "moc_sensoremulator.cpp"