1
0
Fork 0

track rx universes seperately from tx universes

This commit is contained in:
Kevin Matz 2021-09-02 13:20:37 -04:00
parent f3f5aa3d3e
commit 79be37d38a
2 changed files with 37 additions and 4 deletions

View File

@ -34,7 +34,7 @@ void QSacnNode::subscribe(const uint16_t num)
if (num != sACN::E131_DISCOVERY_UNIVERSE) {
qDebug() << "Subscribing to universe" << QString::number(num);
Receiver::subscribe(num);
universes_.insert(num, new QSacnUniverse(this, Receiver::universe(num)));
rx_universes_.insert(num, new QSacnUniverse(this, Receiver::universe(num)));
}
for (QNetworkInterface &iface : QNetworkInterface::allInterfaces())
joinMulticastGroup(IPv4MulticastAddress(num), iface);
@ -52,12 +52,39 @@ void QSacnNode::unsubscribe(const uint16_t num)
if (Receiver::universe(num)) {
qDebug() << "Unsubscribing from universe " << QString::number(num);
delete universes_.take(num);
delete rx_universes_.take(num);
Receiver::unsubscribe(num);
}
}
/**
* @brief QSacnNode::create
* @param num
*/
void QSacnNode::create(const uint16_t num)
{
if (Source::universe(num)) // already subscribed
return;
Source::create(num);
tx_universes_.insert(num, new QSacnUniverse(this, Source::universe(num)));
}
/**
* @brief QSacnNode::terminate
* @param num
*/
void QSacnNode::terminate(const uint16_t num)
{
if (Source::universe(num)) {
qDebug() << "terminating universe " << QString::number(num);
delete tx_universes_.take(num);
Source::terminate(num);
}
}
/**
* @brief QSacnNode::UdpPayloadReceiver
*/

View File

@ -21,15 +21,20 @@ class QT_EXPORT QSacnNode
public:
explicit QSacnNode(QObject *parent = nullptr, QUuid = QUuid::createUuid());
QSacnUniverse * universe(const uint16_t u) {return universes_.value(u); }
// rlp component
void rlpSend(const ACN::PDU::Stream, const ACN::SDT::UDP::ipAddress&) override;
// reciever
QSacnUniverse * universe(const uint16_t u) {return rx_universes_.value(u); }
void subscribe(const uint16_t universe = 1) override;
void unsubscribe(const uint16_t) override;
// source
QSacnUniverse * source(const uint16_t u) {return tx_universes_.value(u); }
void create(const uint16_t) override;
void terminate(const uint16_t) override;
signals:
void foundUniverse(
std::shared_ptr<sACN::EXTENDED::DISCOVERY::discoveredUniverse>);
@ -37,7 +42,8 @@ signals:
private:
void udpReceive();
QHash<uint16_t, QSacnUniverse*> universes_;
QHash<uint16_t, QSacnUniverse*> rx_universes_;
QHash<uint16_t, QSacnUniverse*> tx_universes_;
public:
// 9.3.1 Allocation of IPv4 Multicast Addresses