input stream overload operators
This commit is contained in:
parent
237943489f
commit
44f5992340
32
acn/rlp.cpp
32
acn/rlp.cpp
|
@ -27,17 +27,39 @@
|
|||
namespace ACN {
|
||||
namespace RLP {
|
||||
|
||||
/**
|
||||
* @brief rlp_header::rlp_header
|
||||
* @param stream
|
||||
*/
|
||||
rlp_header::rlp_header(PDU::Stream stream)
|
||||
: PDU::pdu_header()
|
||||
, cid()
|
||||
{
|
||||
uint8_t buf[16];
|
||||
stream->read(buf, 16);
|
||||
if (stream->gcount() != 16)
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
cid = UUID::uuid(buf);
|
||||
stream >> *this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator >>
|
||||
* @param stream
|
||||
* @param h
|
||||
* @return
|
||||
*/
|
||||
PDU::Stream& operator>> (PDU::Stream &stream, rlp_header &h)
|
||||
{
|
||||
uint8_t buf[16];
|
||||
stream->read(buf, 16);
|
||||
if (stream->gcount() != 16)
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
h.cid = UUID::uuid(buf);
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Pdu::Pdu
|
||||
* @param stream
|
||||
*/
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: ACN::PDU::Pdu(stream, 4)
|
||||
{
|
||||
|
|
|
@ -37,6 +37,7 @@ namespace RLP {
|
|||
struct rlp_header : PDU::pdu_header {
|
||||
UUID::uuid cid;
|
||||
rlp_header(PDU::Stream);
|
||||
friend PDU::Stream& operator>> (PDU::Stream &stream, rlp_header &h);
|
||||
};
|
||||
|
||||
class Pdu
|
||||
|
|
|
@ -27,17 +27,41 @@
|
|||
namespace SACN {
|
||||
namespace DATA {
|
||||
|
||||
frame_header::frame_header(PDU::Stream stream) {
|
||||
stream->read(source_name, 64);
|
||||
if (stream->gcount() != 64)
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
priority = stream->readType<decltype(priority)>();
|
||||
sync_address = stream->readType<decltype(sync_address)>();
|
||||
sequence_number = stream->readType<decltype(sequence_number)>();
|
||||
options = stream->readType<decltype(options)>();
|
||||
universe = stream->readType<decltype(universe)>();
|
||||
|
||||
/**
|
||||
* @brief frame_header::frame_header
|
||||
* @param stream
|
||||
*/
|
||||
frame_header::frame_header(PDU::Stream stream)
|
||||
{
|
||||
stream >> *this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator >>
|
||||
* @param stream
|
||||
* @param h
|
||||
* @return
|
||||
*/
|
||||
PDU::Stream& operator>> (PDU::Stream& stream, frame_header& h)
|
||||
{
|
||||
stream->read(h.source_name, 64);
|
||||
if (stream->gcount() != 64)
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
*stream >> h.priority;
|
||||
*stream >> h.sync_address;
|
||||
*stream >> h.sequence_number;
|
||||
*stream >> h.options;
|
||||
*stream >> h.universe;
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Pdu::Pdu
|
||||
* @param stream
|
||||
*/
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: PDU::Pdu(stream, 4) // vectors are 4 octets
|
||||
{
|
||||
|
|
|
@ -40,6 +40,7 @@ struct frame_header : PDU::pdu_header {
|
|||
uint8_t options;
|
||||
uint16_t universe;
|
||||
frame_header(PDU::Stream);
|
||||
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_header &h);
|
||||
};
|
||||
|
||||
// 6.2.6 E1.31 Data Packet: Options
|
||||
|
|
|
@ -28,22 +28,58 @@ namespace SACN {
|
|||
namespace EXTENDED {
|
||||
|
||||
|
||||
frame_sync_header::frame_sync_header(PDU::Stream stream) {
|
||||
sequence_number = stream->readType<decltype(sequence_number)>();
|
||||
sync_address = stream->readType<decltype(sync_address)>();
|
||||
stream->read(reserved, sizeof(reserved));
|
||||
if (stream->gcount() != sizeof(reserved))
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
/**
|
||||
* @brief frame_sync_header::frame_sync_header
|
||||
* @param stream
|
||||
*/
|
||||
frame_sync_header::frame_sync_header(PDU::Stream stream)
|
||||
{
|
||||
stream >> *this;
|
||||
}
|
||||
|
||||
|
||||
frame_discovery_header::frame_discovery_header(PDU::Stream stream) {
|
||||
stream->read(source_name, sizeof(source_name));
|
||||
if (stream->gcount() != sizeof(source_name))
|
||||
/**
|
||||
* @brief operator >>
|
||||
* @param stream
|
||||
* @param h
|
||||
* @return
|
||||
*/
|
||||
PDU::Stream& operator>> (PDU::Stream &stream, frame_sync_header &h)
|
||||
{
|
||||
*stream >> h.sequence_number;
|
||||
*stream >> h.sync_address;
|
||||
stream->read(h.reserved, sizeof(h.reserved));
|
||||
if (stream->gcount() != sizeof(h.reserved))
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
stream->read(reserved, sizeof(reserved));
|
||||
if (stream->gcount() != sizeof(reserved))
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief frame_discovery_header::frame_discovery_header
|
||||
* @param stream
|
||||
*/
|
||||
frame_discovery_header::frame_discovery_header(PDU::Stream stream)
|
||||
{
|
||||
stream >> *this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator >>
|
||||
* @param stream
|
||||
* @param h
|
||||
* @return
|
||||
*/
|
||||
PDU::Stream& operator>> (PDU::Stream &stream, frame_discovery_header &h)
|
||||
{
|
||||
stream->read(h.source_name, sizeof(h.source_name));
|
||||
if (stream->gcount() != sizeof(h.source_name))
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
stream->read(h.reserved, sizeof(h.reserved));
|
||||
if (stream->gcount() != sizeof(h.reserved))
|
||||
stream->setstate(std::ios_base::failbit);
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
|
@ -68,12 +104,33 @@ Pdu::Pdu(PDU::Stream stream)
|
|||
|
||||
namespace DISCOVERY {
|
||||
|
||||
/**
|
||||
* @brief discovery_list_header::discovery_list_header
|
||||
* @param stream
|
||||
*/
|
||||
discovery_list_header::discovery_list_header(PDU::Stream stream) {
|
||||
page = stream->readType<decltype(page)>();
|
||||
last_page = stream->readType<decltype(last_page)>();
|
||||
stream >> *this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief operator >>
|
||||
* @param stream
|
||||
* @param h
|
||||
* @return
|
||||
*/
|
||||
PDU::Stream& operator>> (PDU::Stream &stream, discovery_list_header &h)
|
||||
{
|
||||
*stream >> h.page;
|
||||
*stream >> h.last_page;
|
||||
return stream;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Pdu::Pdu
|
||||
* @param stream
|
||||
*/
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: PDU::Pdu(stream, 4) // vectors are 4 octets
|
||||
{
|
||||
|
|
|
@ -39,6 +39,7 @@ struct frame_sync_header : PDU::pdu_header {
|
|||
uint16_t sync_address;
|
||||
uint8_t reserved[2];
|
||||
frame_sync_header(PDU::Stream);
|
||||
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_sync_header &h);
|
||||
};
|
||||
|
||||
|
||||
|
@ -47,6 +48,7 @@ struct frame_discovery_header : PDU::pdu_header {
|
|||
uint8_t source_name[64];
|
||||
uint8_t reserved[4];
|
||||
frame_discovery_header(PDU::Stream);
|
||||
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_discovery_header &h);
|
||||
};
|
||||
|
||||
|
||||
|
@ -65,6 +67,7 @@ struct discovery_list_header : PDU::pdu_header {
|
|||
uint8_t page;
|
||||
uint8_t last_page;
|
||||
discovery_list_header(PDU::Stream);
|
||||
friend PDU::Stream& operator>> (PDU::Stream &stream, discovery_list_header &h);
|
||||
};
|
||||
|
||||
class Pdu
|
||||
|
|
Loading…
Reference in New Issue