1
0
Fork 0

EPT PDU i/o

This commit is contained in:
Kevin Matz 2021-08-17 16:18:40 -04:00
parent ba3e17361d
commit 01deea9613
2 changed files with 61 additions and 6 deletions

View File

@ -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<ept_header>(); // header
switch (vector()) // data
{
case VECTOR_EPT_DATA:
createData<DATA::Pdu>();
break;
case VECTOR_EPT_STATUS:
createData<STATUS::Pdu>();
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_data>(); // data
}
/**
* @brief data_data::iStream
* @param stream
*/
void data_data::iStream(ACN::PDU::Stream stream)
{
while (stream->good())
data.push_back(stream->readType<uint8_t>());
}
/**
* @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

View File

@ -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<uint8_t> 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 {