documentation and namespace cleanup

This commit is contained in:
Kevin Matz 2021-07-30 09:11:32 -04:00
parent 51de1b2164
commit 6c20317de3
10 changed files with 215 additions and 88 deletions

View File

@ -40,21 +40,21 @@ namespace ACN {
// from https://tsp.esta.org/tsp/working_groups/CP/epi16ids.php // from https://tsp.esta.org/tsp/working_groups/CP/epi16ids.php
// as of 1/14/21 // as of 1/14/21
// Session Data Transport Protocol /// @brief Session Data Transport Protocol
static const uint32_t PLASA_SDT = 0x00000001; static const uint32_t PLASA_SDT = 0x00000001;
// Device Management Protocol /// @brief Device Management Protocol
static const uint32_t PLASA_DMP = 0x00000002; static const uint32_t PLASA_DMP = 0x00000002;
// Lightweight streaming protocol for transport of DMX512 /// @brief Lightweight streaming protocol for transport of DMX512
static const uint32_t PLASA_E1_31 = 0x00000004; static const uint32_t PLASA_E1_31 = 0x00000004;
// RDMnet /// @brief RDMnet
static const uint32_t PLASA_E1_33 = 0x00000005; static const uint32_t PLASA_E1_33 = 0x00000005;
// Empty data used for health checking connections in E1.33 /// @brief Empty data used for health checking connections in E1.33
static const uint32_t PLASA_NULL = 0x00000006; static const uint32_t PLASA_NULL = 0x00000006;
// Open Lighting Architecture /// @brief Open Lighting Architecture
static const uint32_t OpenLightingProject_OLA = 0x00000007; static const uint32_t OpenLightingProject_OLA = 0x00000007;
// Extended functionality for sACN /// @brief Extended functionality for sACN
static const uint32_t PLASA_E1_31_EXTENDED = 0x00000008; static const uint32_t PLASA_E1_31_EXTENDED = 0x00000008;
// E1.59 Object Transform Protocol (OTP) /// @brief E1.59 Object Transform Protocol (OTP)
const static uint32_t ESTA_OTP = 0x00000009; const static uint32_t ESTA_OTP = 0x00000009;
} // ACN } // ACN

View File

@ -48,6 +48,9 @@
namespace ACN { namespace ACN {
/**
* @brief The Appliance class
*/
class Appliance class Appliance
: public Component : public Component
{ {

View File

@ -28,7 +28,9 @@
namespace ACN { namespace ACN {
// 2.1. ACN Components and Component Identifiers (CIDs) /**
* @brief 2.1. ACN Components and Component Identifiers (CIDs)
*/
class Component { class Component {
public: public:
Component(UUID::uuid cid = UUID::uuid()) Component(UUID::uuid cid = UUID::uuid())
@ -53,12 +55,16 @@ private:
// indicate the function of the component in human readable terms for browsing // indicate the function of the component in human readable terms for browsing
// purposes. // purposes.
// 3.1. Fixed Component Type Name (FCTN) /**
// shall be a UTF-8 string that is assigned during manufacture. * @brief 3.1. Fixed Component Type Name (FCTN)
* shall be a UTF-8 string that is assigned during manufacture.
*/
const std::string fctn_; const std::string fctn_;
// 3.2. User Assigned Component Name (UACN) /**
// shall be a UTF-8 string that may be assigned by the user. * @brief 3.2. User Assigned Component Name (UACN)
* shall be a UTF-8 string that may be assigned by the user.
*/
std::string uacn_; std::string uacn_;
}; };

View File

@ -32,13 +32,9 @@
namespace ACN { namespace ACN {
namespace DMP { namespace DMP {
using std::uint8_t; /**
using std::uint32_t; * @brief 5.1.4 Address and Data Types
using std::vector; */
using std::pair;
using PDU::Block;
// 5.1.4 Address and Data Types
enum data_type { enum data_type {
SINGLE = 0b00, // 0 SINGLE = 0b00, // 0
RANGE = 0b01, // 1 RANGE = 0b01, // 1
@ -46,6 +42,10 @@ enum data_type {
SERIES = 0b11 // 3 SERIES = 0b11 // 3
}; };
/**
* @brief The address_length enum
*/
enum address_length { enum address_length {
ONE = 0b00, // 0 ONE = 0b00, // 0
TWO = 0b01, // 1 TWO = 0b01, // 1
@ -53,6 +53,10 @@ enum address_length {
ZERO = 0b11 // 3 (reserved) ZERO = 0b11 // 3 (reserved)
}; };
/**
* @brief The address_type struct
*/
struct address_type : PDU::pdu_header { struct address_type : PDU::pdu_header {
bool z_reserved : 1; // Z bool z_reserved : 1; // Z
bool relative : 1; // R bool relative : 1; // R
@ -64,7 +68,10 @@ struct address_type : PDU::pdu_header {
void oStream(PDU::Stream) const override; void oStream(PDU::Stream) const override;
}; };
// 5.1.5
/**
* @brief 5.1.5 The range struct
*/
struct range { struct range {
uint32_t address = 0; uint32_t address = 0;
uint32_t incriment = 0; uint32_t incriment = 0;
@ -74,15 +81,27 @@ private:
uint32_t read(PDU::Stream, const address_length); uint32_t read(PDU::Stream, const address_length);
}; };
typedef pair<range, vector<uint8_t>> set_property;
/**
* @brief set_property
*/
typedef std::pair<range, std::vector<uint8_t>> set_property;
/**
* @brief The dmp_set_data struct
*/
struct dmp_set_data : PDU::pdu_data { struct dmp_set_data : PDU::pdu_data {
vector<set_property> properties; std::vector<set_property> properties;
size_t streamSize() const override; size_t streamSize() const override;
void iStream(PDU::Stream) override {}; void iStream(PDU::Stream) override {};
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 7 Response Messages
/**
* @brief 7 Response Messages
*/
enum failure_reason { enum failure_reason {
NONSPECIFIC = 1, // Non-specific or non-DMP reason. NONSPECIFIC = 1, // Non-specific or non-DMP reason.
NOT_PROPERTY = 2, // The address does not correspond to a property. NOT_PROPERTY = 2, // The address does not correspond to a property.
@ -95,7 +114,10 @@ enum failure_reason {
UNAVAILABLE = 13 // The propertys value is not available due to restrictions imposed by device specific functionality (e.g., access permission mechanisms). UNAVAILABLE = 13 // The propertys value is not available due to restrictions imposed by device specific functionality (e.g., access permission mechanisms).
}; };
// 13.1 Protocol Codes
/**
* @brief 13.1 Protocol Codes
*/
static const uint32_t DMP_PROTOCOL_ID = 2; // PDU protocol value static const uint32_t DMP_PROTOCOL_ID = 2; // PDU protocol value
// 13.2 Message Codes // 13.2 Message Codes
@ -111,13 +133,16 @@ static const uint8_t SUBSCRIBE_ACCEPT = 12;
static const uint8_t SUBSCRIBE_REJECT = 13; static const uint8_t SUBSCRIBE_REJECT = 13;
static const uint8_t SYNC_EVENT = 17; static const uint8_t SYNC_EVENT = 17;
/**
* @brief The DMP::Pdu class
*/
class Pdu class Pdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
private: private:
void readSetData(); void readSetData();
}; };

View File

@ -33,7 +33,9 @@ namespace ACN {
namespace RLP { namespace RLP {
namespace TCP { namespace TCP {
// 3. Frame Preamble Format /**
* @brief 3. Frame Preamble Format
*/
struct preamble_t { struct preamble_t {
uint8_t acn_id[12]; // 3.1 Packet Identifier uint8_t acn_id[12]; // 3.1 Packet Identifier
uint32_t length; // 3.2 PDU Block Size uint32_t length; // 3.2 PDU Block Size
@ -41,12 +43,18 @@ struct preamble_t {
operator bool(); operator bool();
}; };
// 3.1 Packet Identifier
// The ACN Packet Identifier shall be the text string /**
// “ASC-E1.17\0\0\0” encoded in [ASCII]. * @brief 3.1 Packet Identifier
* The ACN Packet Identifier shall be the text string ASC-E1.17\0\0\0
* encoded in [ASCII].
*/
static constexpr uint8_t ACN_PACKET_IDENTIFIER[] = { 0x41, 0x53, 0x43, 0x2d, 0x45, 0x31, 0x2e, 0x31, 0x37, 0x00, 0x00, 0x00 }; static constexpr uint8_t ACN_PACKET_IDENTIFIER[] = { 0x41, 0x53, 0x43, 0x2d, 0x45, 0x31, 0x2e, 0x31, 0x37, 0x00, 0x00, 0x00 };
// 3.2 PDU Block Size
/**
* @brief 3.2 PDU Block Size INDEFINITE
*/
static const uint32_t INDEFINITE = 0xffffffff; static const uint32_t INDEFINITE = 0xffffffff;

View File

@ -57,7 +57,6 @@ class Pdu
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
} // RLP } // RLP

View File

@ -45,14 +45,20 @@ static const uint8_t NAK_MAX_TIME = 10 * NAK_HOLDOFF_INTERVAL;
static const uint8_t NAK_BLANKTIME = 3 * NAK_HOLDOFF_INTERVAL; static const uint8_t NAK_BLANKTIME = 3 * NAK_HOLDOFF_INTERVAL;
static const uint16_t SDT_MULTICAST_PORT = 5568; // IANA registered “sdt” static const uint16_t SDT_MULTICAST_PORT = 5568; // IANA registered “sdt”
// defined in SDT, but needed here without including that header
/**
* @brief The ip_addr_spec_t enum
* defined in SDT, but needed here without including that header
*/
enum ip_addr_spec_t { enum ip_addr_spec_t {
SDT_ADDR_NULL = 0, // Address is not present (0 octets). SDT_ADDR_NULL = 0, //!< Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, // Address specified is in IP v4 format SDT_ADDR_IPV4 = 1, //!< Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 // Address specified is in IP v6 format SDT_ADDR_IPV6 = 2 //!< Address specified is in IP v6 format
}; };
// 3 Address Specification /**
* @brief 3 Address Specification
*/
struct address_t { struct address_t {
uint8_t type = SDT_ADDR_NULL; uint8_t type = SDT_ADDR_NULL;
uint16_t port = SDT_MULTICAST_PORT; uint16_t port = SDT_MULTICAST_PORT;

141
acn/sdt.h
View File

@ -36,7 +36,9 @@
namespace ACN { namespace ACN {
namespace SDT { namespace SDT {
// 3.1 Session Identity /**
* @brief 3.1 Session Identity
*/
struct SessionId { struct SessionId {
UUID::uuid cid; // the component ID (CID) of the session leader UUID::uuid cid; // the component ID (CID) of the session leader
uint16_t number; // the session number the leader has assigned uint16_t number; // the session number the leader has assigned
@ -44,18 +46,25 @@ struct SessionId {
bool operator== (const SessionId &) const; bool operator== (const SessionId &) const;
}; };
// 3.3 Sequenced Channels
// Sequenced channels transport three categories of traffic: /**
* @brief 3.3 Sequenced Channels
* Sequenced channels transport three categories of traffic:
*/
enum Direction { enum Direction {
internal, // SDT internal traffic internal, // SDT internal traffic
downstream, // Session downstream traffic downstream, // Session downstream traffic
upstream // Session upstream traffic upstream // Session upstream traffic
}; };
// 3.5.1.1 Member Identifiers // 3.5.1.1 Member Identifiers
using MID = uint16_t; using MID = uint16_t;
// 4.4.1.2 Channel Parameter Block
/**
* @brief 4.4.1.2 Channel Parameter Block
*/
struct params_t { struct params_t {
uint8_t Expiry; // number of seconds without traffic before leaving uint8_t Expiry; // number of seconds without traffic before leaving
struct { struct {
@ -68,7 +77,10 @@ struct params_t {
void iStream(PDU::Stream); void iStream(PDU::Stream);
}; };
// 4.4.1 Join
/**
* @brief 4.4.1 Join
*/
struct join_data_t : PDU::pdu_data { struct join_data_t : PDU::pdu_data {
MID mid; MID mid;
uint16_t number; uint16_t number;
@ -83,7 +95,10 @@ struct join_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.4.2 Join Accept
/**
* @brief 4.4.2 Join Accept
*/
struct join_accept_data_t : PDU::pdu_data { struct join_accept_data_t : PDU::pdu_data {
UUID::uuid leader; UUID::uuid leader;
uint16_t number; uint16_t number;
@ -95,8 +110,10 @@ struct join_accept_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.4.3 Join Refuse
// 4.4.4 Leaving /**
* @brief 4.4.3 Join Refuse & 4.4.4 Leaving
*/
struct join_refuse_data_t : PDU::pdu_data { struct join_refuse_data_t : PDU::pdu_data {
UUID::uuid leader; UUID::uuid leader;
uint16_t number; uint16_t number;
@ -108,7 +125,10 @@ struct join_refuse_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.4.5 NAK
/**
* @brief 4.4.5 NAK
*/
struct nak_data_t : PDU::pdu_data { struct nak_data_t : PDU::pdu_data {
UUID::uuid leader; UUID::uuid leader;
uint16_t number; uint16_t number;
@ -121,7 +141,10 @@ struct nak_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.4.6 Reliable Wrapper and Unreliable Wrapper
/**
* @brief 4.4.6 Reliable Wrapper and Unreliable Wrapper
*/
struct wrapper_data_t : PDU::pdu_data { struct wrapper_data_t : PDU::pdu_data {
uint16_t number; uint16_t number;
uint32_t sequence; uint32_t sequence;
@ -135,7 +158,10 @@ struct wrapper_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.4.7 SDT Client Block
/**
* @brief 4.4.7 SDT Client Block
*/
struct client_pdu_header_t : PDU::pdu_header { struct client_pdu_header_t : PDU::pdu_header {
uint32_t protocol; uint32_t protocol;
uint16_t association; uint16_t association;
@ -144,17 +170,22 @@ struct client_pdu_header_t : PDU::pdu_header {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// Client Block PDU
/**
* @brief The ClientPdu class
*/
class ClientPdu class ClientPdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
ClientPdu(); ClientPdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
// 4.4.8 Get Sessions
/**
* @brief 4.4.8 Get Sessions
*/
struct get_sessions_data_t : PDU::pdu_data { struct get_sessions_data_t : PDU::pdu_data {
UUID::uuid cid; UUID::uuid cid;
size_t streamSize() const override { return 0; } size_t streamSize() const override { return 0; }
@ -163,7 +194,9 @@ struct get_sessions_data_t : PDU::pdu_data {
}; };
// 4.4.9.1 Channel Owner Info Block /**
* @brief 4.4.9.1 Channel Owner Info Block
*/
struct channel_info_block_t { struct channel_info_block_t {
MID mid; MID mid;
UUID::uuid owner; UUID::uuid owner;
@ -175,7 +208,10 @@ struct channel_info_block_t {
std::list<uint32_t> protocols; std::list<uint32_t> protocols;
}; };
// 4.4.9 Sessions
/**
* @brief 4.4.9 Sessions
*/
struct sessions_data_t : PDU::pdu_data { struct sessions_data_t : PDU::pdu_data {
std::list<channel_info_block_t> list; std::list<channel_info_block_t> list;
size_t streamSize() const override { return 0; } size_t streamSize() const override { return 0; }
@ -183,7 +219,10 @@ struct sessions_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.5.1 ACK
/**
* @brief 4.5.1 ACK
*/
struct ack_data_t : PDU::pdu_data { struct ack_data_t : PDU::pdu_data {
uint32_t reliable; uint32_t reliable;
size_t streamSize() const override { return 4; } size_t streamSize() const override { return 4; }
@ -191,7 +230,10 @@ struct ack_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.5.2 Channel Params
/**
* @brief 4.5.2 Channel Params
*/
struct channel_params_data_t : PDU::pdu_data { struct channel_params_data_t : PDU::pdu_data {
params_t parameters; params_t parameters;
UDP::address_t address; UDP::address_t address;
@ -201,18 +243,21 @@ struct channel_params_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.5.3 Connect
// 4.5.4 Connect Accept /**
// 4.5.6 Disconnect * @brief 4.5.3 Connect, 4.5.4 Connect Accept, & 4.5.6 Disconnect
*/
struct connect_data_t : PDU::pdu_data { struct connect_data_t : PDU::pdu_data {
uint32_t protocol; uint32_t protocol;
size_t streamSize() const override { return 0; } size_t streamSize() const override { return 4; }
void iStream(PDU::Stream) override {}; void iStream(PDU::Stream) override {};
void oStream(PDU::Stream) const override {}; void oStream(PDU::Stream) const override {};
}; };
// 4.5.5 Connect Refuse
// 4.5.7 Disconnecting /**
* @brief 4.5.5 Connect Refuse & 4.5.7 Disconnecting
*/
struct connect_refuse_data_t : PDU::pdu_data { struct connect_refuse_data_t : PDU::pdu_data {
uint32_t protocol; uint32_t protocol;
uint8_t code; uint8_t code;
@ -222,10 +267,15 @@ struct connect_refuse_data_t : PDU::pdu_data {
}; };
// 7.1 Protocol Code /**
* @brief 7.1 Protocol Code
*/
static const uint32_t SDT_PROTOCOL_ID = 1; // PDU protocol value static const uint32_t SDT_PROTOCOL_ID = 1; // PDU protocol value
// 7.2 PDU Vector Codes
/**
* @brief 7.2 PDU Vector Codes
*/
enum sdt_vector_t { enum sdt_vector_t {
REL_WRAP = 1, REL_WRAP = 1,
UNREL_WRAP = 2, UNREL_WRAP = 2,
@ -248,7 +298,9 @@ enum sdt_vector_t {
// 7.4 Other Symbolic Parameters // 7.4 Other Symbolic Parameters
// Table 6: Reason Codes /**
* @brief Table 6: Reason Codes
*/
enum reason_code_t { enum reason_code_t {
NONSPECIFIC = 1, // Non-specific, non-SDT reason. NONSPECIFIC = 1, // Non-specific, non-SDT reason.
ILLEGAL_PARAMETERS = 2, // Illegal channel parameters. ILLEGAL_PARAMETERS = 2, // Illegal channel parameters.
@ -265,26 +317,34 @@ enum reason_code_t {
ONLY_UNICAST_SUPPORTED = 13 // Only unicast channels are supported ONLY_UNICAST_SUPPORTED = 13 // Only unicast channels are supported
}; };
// Table 7: Address Specification Types
/**
* @brief Table 7: Address Specification Types
*/
enum ip_addr_spec_t { enum ip_addr_spec_t {
SDT_ADDR_NULL = 0, // Address is not present (0 octets). SDT_ADDR_NULL = 0, //!< Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, // Address specified is in IP v4 format SDT_ADDR_IPV4 = 1, //!< Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 // Address specified is in IP v6 format SDT_ADDR_IPV6 = 2 //!< Address specified is in IP v6 format
}; };
// PDU type for this protocol
/**
* @brief The SDT::Pdu class
*/
class Pdu class Pdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
// Sequenced channels are unidirectional communication channels (unicast or /**
// multicast) from an owner component to one or more member components. * @brief The Channel class
* Sequenced channels are unidirectional communication channels (unicast or
* multicast) from an owner component to one or more member components.
*/
class Channel { class Channel {
public: public:
Channel(std::shared_ptr<Component>, Direction); Channel(std::shared_ptr<Component>, Direction);
@ -296,10 +356,13 @@ private:
}; };
// A session has a single leader and zero or more session members. The leader /**
// communicates to members using the downstream address. Members respond to the * @brief The Session class
// leader on the upstream address. A unique session identifier identifies a * A session has a single leader and zero or more session members. The leader
// session. * communicates to members using the downstream address. Members respond to
* the leader on the upstream address. A unique session identifier identifies
* a session.
*/
class Session { class Session {
public: public:
Session(); Session();

View File

@ -31,7 +31,9 @@ namespace DATA {
using std::uint8_t; using std::uint8_t;
using std::uint16_t; using std::uint16_t;
// Table 6-1: E1.31 Data Packet Framing Layer /**
* @brief Table 6-1: E1.31 Data Packet Framing Layer
*/
struct frame_header : PDU::pdu_header { struct frame_header : PDU::pdu_header {
uint8_t source_name[64]; uint8_t source_name[64];
uint8_t priority; uint8_t priority;
@ -44,20 +46,26 @@ struct frame_header : PDU::pdu_header {
void oStream(PDU::Stream) const override; void oStream(PDU::Stream) const override;
}; };
// 6.2.6 E1.31 Data Packet: Options
/**
* @brief 6.2.6 E1.31 Data Packet: Options
*/
enum options_t : uint8_t { enum options_t : uint8_t {
PREVIEW_DATA = 0b10000000, // Bit 7 = Preview_Data PREVIEW_DATA = 0b10000000, // Bit 7 = Preview_Data
STREAM_TERMINATED = 0b01000000, // Bit 6 = Stream_Terminated STREAM_TERMINATED = 0b01000000, // Bit 6 = Stream_Terminated
FORCE_SYNCHRONIZATION = 0b00100000, // Bit 5 = Force_Synchronization FORCE_SYNCHRONIZATION = 0b00100000, // Bit 5 = Force_Synchronization
}; };
/**
* @brief The DATA::Pdu class
*/
class Pdu class Pdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
} // DATA } // DATA

View File

@ -30,10 +30,10 @@ namespace SACN {
using namespace ACN; using namespace ACN;
namespace EXTENDED { namespace EXTENDED {
using std::uint8_t;
using std::uint16_t;
// 6.3 E1.31 Synchronization Packet Framing Layer /**
* @brief 6.3 E1.31 Synchronization Packet Framing Layer
*/
struct frame_sync_header : PDU::pdu_header { struct frame_sync_header : PDU::pdu_header {
uint8_t sequence_number; uint8_t sequence_number;
uint16_t sync_address; uint16_t sync_address;
@ -44,7 +44,9 @@ struct frame_sync_header : PDU::pdu_header {
}; };
// 6.4 E1.31 Universe Discovery Packet Framing Layer /**
* @brief 6.4 E1.31 Universe Discovery Packet Framing Layer
*/
struct frame_discovery_header : PDU::pdu_header { struct frame_discovery_header : PDU::pdu_header {
uint8_t source_name[64]; uint8_t source_name[64];
uint8_t reserved[4]; uint8_t reserved[4];
@ -54,19 +56,23 @@ struct frame_discovery_header : PDU::pdu_header {
}; };
/**
* @brief The EXTENDED::Pdu class
*/
class Pdu class Pdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
namespace DISCOVERY { namespace DISCOVERY {
// Table 8-9: E1.31 Universe Discovery Packet Universe Discovery Layer /**
* @brief Table 8-9: E1.31 Universe Discovery Packet Universe Discovery Layer
*/
struct discovery_list_header : PDU::pdu_header { struct discovery_list_header : PDU::pdu_header {
uint8_t page; uint8_t page;
uint8_t last_page; uint8_t last_page;
@ -75,19 +81,22 @@ struct discovery_list_header : PDU::pdu_header {
void oStream(PDU::Stream) const override; void oStream(PDU::Stream) const override;
}; };
/**
* @brief The EXTENDED::DISCOVERY::Pdu class
*/
class Pdu class Pdu
: public PDU::Pdu : public PDU::Pdu
{ {
public: public:
Pdu(); Pdu();
void iStream(PDU::Stream) override; void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
}; };
/** /**
universe metadata * @brief The DiscoveredUniverse class
*/ */
class DiscoveredUniverse class DiscoveredUniverse
{ {
public: public: