OpenLCP/platform/qt/sacn/qsacnnode.h

70 lines
1.9 KiB
C
Raw Normal View History

2021-07-30 13:57:27 -04:00
#pragma once
2021-09-06 07:02:22 -04:00
#include "qsacn_global.h"
#include "qsacnuniverse.h"
2022-11-28 15:06:48 -05:00
#include "node.h"
#include <QHash>
#include <QHostAddress>
#include <QUdpSocket>
#include <QUuid>
2021-08-06 12:14:29 -04:00
/**
* @brief The QSacnNode class
*/
class QT_EXPORT QSacnNode
2022-12-09 21:00:38 -05:00
: public QObject
, public sACN::Node
{
Q_OBJECT
public:
explicit QSacnNode(QObject *parent = nullptr,
QUuid = QUuid::createUuid(), QString fctn = "OpenLCP QSacnNode",
bool ipv4 = true, bool ipv6 = true);
virtual ~QSacnNode();
2021-07-30 13:57:27 -04:00
// sACN::RLP::Component
2022-12-09 21:00:38 -05:00
void sendUDP(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) const override;
void sendTCP(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) const override;
2021-09-06 07:02:22 -04:00
public slots:
void setIPv4(const bool) override;
void setIPv6(const bool) override;
2021-09-06 07:02:22 -04:00
void subscribe(const uint16_t) override;
void unsubscribe(const uint16_t) override;
void create(const uint16_t) override;
void terminate(const uint16_t) override;
signals:
2021-09-07 09:15:11 -04:00
void discoveryUpdates();
2021-09-06 07:02:22 -04:00
void subscribing(QSacnUniverse*);
void unsubscribing(QSacnUniverse*);
void creating(QSacnUniverse*);
void terminating(QSacnUniverse*);
private:
2021-08-06 12:14:29 -04:00
void udpReceive();
2022-12-09 21:00:38 -05:00
QUdpSocket * rx_socket_;
QUdpSocket * tx_socket_;
2021-09-06 07:02:22 -04:00
QHash<uint16_t, QSacnUniverse*> rx_universes;
QHash<uint16_t, QSacnUniverse*> tx_universes;
2021-08-06 12:14:29 -04:00
public:
/// \cite sACN 9.3.1 Allocation of IPv4 Multicast Addresses
///
/// Multicast addresses are from the IPv4 Local Scope.
static QHostAddress IPv4MulticastAddress(const uint16_t universe) {
sACN::ipAddress ip = sACN::IPv4MulticastAddress(universe);
return QHostAddress(ip.address.ipv4.value);
2021-08-06 12:14:29 -04:00
};
/// \cite sACN 9.3.2 Allocation of IPv6 Multicast Addresses
static QHostAddress IPv6MulticastAddress(const uint16_t universe) {
sACN::ipAddress ip = sACN::IPv6MulticastAddress(universe);
return QHostAddress(ip.address.ipv6.bytes);
2021-08-06 12:14:29 -04:00
};
};