1
0
Fork 0

sACN universe sending

This commit is contained in:
Kevin Matz 2021-08-31 10:27:30 -04:00
parent b9e752e87e
commit decf1f7cb1
2 changed files with 57 additions and 0 deletions

View File

@ -22,6 +22,7 @@
SOFTWARE.
*/
#include "source.h"
#include "universe.h"
namespace sACN {
@ -194,4 +195,58 @@ void Universe::synchronize(uint8_t sequence_number)
sync_data_ = nullptr;
}
/**
* @brief Universe::sACNsend
*/
void Universe::sACNsend() const
{
// header
ACN::DMP::address_type addrtyp;
addrtyp.byte = 0;
addrtyp.address_length = ACN::DMP::TWO;
addrtyp.data_type = ACN::DMP::ARRAY;
addrtyp.relative = false;
// property range
ACN::DMP::range pr(addrtyp);
pr.address = 0;
pr.incriment = 1;
pr.count = (active_data_slots <= 513 ? active_data_slots : 513);
// property data
std::vector<octet> pd;
std::copy(null_start_data.begin(), null_start_data.begin() + pr.count,
std::back_inserter(pd));
// data segment
ACN::DMP::address_pair_list addrlst(addrtyp);
addrlst.properties.push_back(ACN::DMP::address_data_pair(pr, pd));
// DMP layer
auto dmp = std::make_shared<ACN::DMP::Pdu>();
dmp->setVector(ACN::DMP::SET_PROPERTY);
dmp->setHeader(&addrtyp);
dmp->setData(&addrlst);
// sACN Framing Layer
auto frame = std::make_shared<DATA::Pdu>();
frame->setVector(VECTOR_E131_DATA_PACKET);
frame->setHeader(provenance_.get());
frame->setData(dmp.get());
// send
switch (destination.type)
{
case ACN::SDT::SDT_ADDR_NULL:
source_->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame,
IPv4MulticastAddress(provenance_->universe));
source_->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame,
IPv6MulticastAddress(provenance_->universe));
break;
default:
source_->rlpSendUdp(VECTOR_ROOT_E131_DATA, frame, destination);
}
}
}; // namespace SACN

View File

@ -77,6 +77,8 @@ protected:
*/
uint16_t active_data_slots;
virtual void sACNsend() const;
private:
std::shared_ptr<DATA::data_header> provenance_;
std::vector<uint8_t> * sync_data_ = nullptr;