diff --git a/rdmnet/ept.cpp b/rdmnet/ept.cpp index 5afe10c..73b1ef6 100644 --- a/rdmnet/ept.cpp +++ b/rdmnet/ept.cpp @@ -23,6 +23,8 @@ */ #include "ept.h" +#include "rdmnet.h" +#include "rpt.h" namespace RDMnet { namespace EPT { @@ -43,8 +45,18 @@ Pdu::Pdu() void Pdu::iStream(ACN::PDU::Stream stream) { RDMnet::Pdu::iStream(stream); // flags, length, and vector - // TODO: header segment // header - // TODO: data segment // data + createHeader(); // header + switch (vector()) // data + { + case VECTOR_EPT_DATA: + createData(); + break; + case VECTOR_EPT_STATUS: + createData(); + break; + default: + return; + } } @@ -66,8 +78,30 @@ Pdu::Pdu() void Pdu::iStream(ACN::PDU::Stream stream) { RDMnet::Pdu::iStream(stream); // flags, length, and vector - // TODO: header segment // header - // TODO: data segment // data + // has no header segment // header + createData(); // data +} + + +/** + * @brief data_data::iStream + * @param stream + */ +void data_data::iStream(ACN::PDU::Stream stream) +{ + while (stream->good()) + data.push_back(stream->readType()); +} + + +/** + * @brief data_data::oStream + * @param stream + */ +void data_data::oStream(ACN::PDU::Stream stream) const +{ + for (const auto & byte : data) + *stream << byte; } } // namespace DATA @@ -91,8 +125,8 @@ Pdu::Pdu() void Pdu::iStream(ACN::PDU::Stream stream) { RDMnet::Pdu::iStream(stream); // flags, length, and vector - // TODO: header segment // header - // TODO: data segment // data + // has no header segment // header + createData< // data } } // namespace STATUS diff --git a/rdmnet/ept.h b/rdmnet/ept.h index 388b16b..b5cf615 100644 --- a/rdmnet/ept.h +++ b/rdmnet/ept.h @@ -24,6 +24,7 @@ #pragma once #include "pdu.h" +#include "uuid/uuid.h" namespace RDMnet { namespace EPT { @@ -50,6 +51,17 @@ public: }; +struct ept_header + : ACN::PDU::pdu_header +{ + UUID::uuid destination_cid; + + size_t streamSize() const override { return UUID_LENGTH; } + void iStream(ACN::PDU::Stream s) override { *s >> destination_cid; } + void oStream(ACN::PDU::Stream s) const override { *s << destination_cid; } +}; + + namespace DATA { /** @@ -63,6 +75,15 @@ public: void iStream(ACN::PDU::Stream) override; }; +struct data_data + : ACN::PDU::pdu_data +{ + std::vector data; + size_t streamSize() const override { return data.size(); } + void iStream(ACN::PDU::Stream) override; + void oStream(ACN::PDU::Stream) const override; +}; + } // namespace DATA namespace STATUS {