sACN universe sending
This commit is contained in:
parent
b9e752e87e
commit
decf1f7cb1
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue