1
0
Fork 0

reuse the sACN framing layer PDU

This commit is contained in:
Kevin Matz 2022-12-09 09:26:42 -05:00
parent 4fa5a2794a
commit b7ca5c36f5
2 changed files with 13 additions and 8 deletions

View File

@ -42,6 +42,7 @@ UniverseSender::UniverseSender(Source * source, Universe * universe)
, keep_alive_interval(800)
, enable_(true)
, dmp_(std::make_shared<ACN::DMP::Pdu>())
, frame_(std::make_shared<DATA::Pdu>())
{
// add ourself as a sender for DMP messages
mUniverse->addDmpSender(std::bind(&UniverseSender::dataFrameSender, this,
@ -60,6 +61,9 @@ UniverseSender::UniverseSender(Source * source, Universe * universe)
dmp_->setHeader(addrtyp);
update_dmp_(); // initial data segment
// sACN framing layer
frame_->setVector(VECTOR_E131_DATA_PACKET);
// start the thread after setting up the PDU
worker_ = std::thread(&UniverseSender::loop_, this);
}
@ -209,22 +213,20 @@ void UniverseSender::update_dmp_()
void UniverseSender::dataFrameSender(ACN::PDU::Message<ACN::DMP::Pdu> dmp) const
{
// sACN Framing Layer
auto frame = std::make_shared<DATA::Pdu>();
frame->setVector(VECTOR_E131_DATA_PACKET);
frame->setHeader(mUniverse->metadata_);
frame->setData(dmp);
frame_->setHeader(mUniverse->metadata_);
frame_->setData(dmp);
// send
switch (mUniverse->destination.type)
{
case ACN::SDT::SDT_ADDR_NULL:
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame,
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame_,
IPv4MulticastAddress(mUniverse->metadata_->universe));
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame,
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame_,
IPv6MulticastAddress(mUniverse->metadata_->universe));
break;
default:
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame, mUniverse->destination);
mSource->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame_, mUniverse->destination);
}
}

View File

@ -23,8 +23,9 @@
*/
#pragma once
#include "../dmx/universe.h"
#include "data.h"
#include "dmp.h"
#include "../dmx/universe.h"
#include <condition_variable>
#include <memory>
#include <thread>
@ -89,6 +90,8 @@ private:
void update_dmp_();
ACN::PDU::Message<ACN::DMP::Pdu> dmp_;
ACN::PDU::Message<DATA::Pdu> frame_;
void dataFrameSender(ACN::PDU::Message<ACN::DMP::Pdu>) const;
};