1
0
Fork 0

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
// as of 1/14/21
// Session Data Transport Protocol
/// @brief Session Data Transport Protocol
static const uint32_t PLASA_SDT = 0x00000001;
// Device Management Protocol
/// @brief Device Management Protocol
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;
// RDMnet
/// @brief RDMnet
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;
// Open Lighting Architecture
/// @brief Open Lighting Architecture
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;
// E1.59 Object Transform Protocol (OTP)
/// @brief E1.59 Object Transform Protocol (OTP)
const static uint32_t ESTA_OTP = 0x00000009;
} // ACN

View File

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

View File

@ -28,7 +28,9 @@
namespace ACN {
// 2.1. ACN Components and Component Identifiers (CIDs)
/**
* @brief 2.1. ACN Components and Component Identifiers (CIDs)
*/
class Component {
public:
Component(UUID::uuid cid = UUID::uuid())
@ -53,12 +55,16 @@ private:
// indicate the function of the component in human readable terms for browsing
// 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_;
// 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_;
};

View File

@ -32,13 +32,9 @@
namespace ACN {
namespace DMP {
using std::uint8_t;
using std::uint32_t;
using std::vector;
using std::pair;
using PDU::Block;
// 5.1.4 Address and Data Types
/**
* @brief 5.1.4 Address and Data Types
*/
enum data_type {
SINGLE = 0b00, // 0
RANGE = 0b01, // 1
@ -46,6 +42,10 @@ enum data_type {
SERIES = 0b11 // 3
};
/**
* @brief The address_length enum
*/
enum address_length {
ONE = 0b00, // 0
TWO = 0b01, // 1
@ -53,6 +53,10 @@ enum address_length {
ZERO = 0b11 // 3 (reserved)
};
/**
* @brief The address_type struct
*/
struct address_type : PDU::pdu_header {
bool z_reserved : 1; // Z
bool relative : 1; // R
@ -64,7 +68,10 @@ struct address_type : PDU::pdu_header {
void oStream(PDU::Stream) const override;
};
// 5.1.5
/**
* @brief 5.1.5 The range struct
*/
struct range {
uint32_t address = 0;
uint32_t incriment = 0;
@ -74,15 +81,27 @@ private:
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 {
vector<set_property> properties;
std::vector<set_property> properties;
size_t streamSize() const override;
void iStream(PDU::Stream) override {};
void oStream(PDU::Stream) const override {};
};
// 7 Response Messages
/**
* @brief 7 Response Messages
*/
enum failure_reason {
NONSPECIFIC = 1, // Non-specific or non-DMP reason.
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).
};
// 13.1 Protocol Codes
/**
* @brief 13.1 Protocol Codes
*/
static const uint32_t DMP_PROTOCOL_ID = 2; // PDU protocol value
// 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 SYNC_EVENT = 17;
/**
* @brief The DMP::Pdu class
*/
class Pdu
: public PDU::Pdu
{
public:
Pdu();
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
private:
void readSetData();
};

View File

@ -33,7 +33,9 @@ namespace ACN {
namespace RLP {
namespace TCP {
// 3. Frame Preamble Format
/**
* @brief 3. Frame Preamble Format
*/
struct preamble_t {
uint8_t acn_id[12]; // 3.1 Packet Identifier
uint32_t length; // 3.2 PDU Block Size
@ -41,12 +43,18 @@ struct preamble_t {
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 };
// 3.2 PDU Block Size
/**
* @brief 3.2 PDU Block Size INDEFINITE
*/
static const uint32_t INDEFINITE = 0xffffffff;

View File

@ -57,7 +57,6 @@ class Pdu
public:
Pdu();
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
};
} // 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 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 {
SDT_ADDR_NULL = 0, // Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, // Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 // Address specified is in IP v6 format
SDT_ADDR_NULL = 0, //!< Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, //!< Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 //!< Address specified is in IP v6 format
};
// 3 Address Specification
/**
* @brief 3 Address Specification
*/
struct address_t {
uint8_t type = SDT_ADDR_NULL;
uint16_t port = SDT_MULTICAST_PORT;

141
acn/sdt.h
View File

@ -36,7 +36,9 @@
namespace ACN {
namespace SDT {
// 3.1 Session Identity
/**
* @brief 3.1 Session Identity
*/
struct SessionId {
UUID::uuid cid; // the component ID (CID) of the session leader
uint16_t number; // the session number the leader has assigned
@ -44,18 +46,25 @@ struct SessionId {
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 {
internal, // SDT internal traffic
downstream, // Session downstream traffic
upstream // Session upstream traffic
};
// 3.5.1.1 Member Identifiers
using MID = uint16_t;
// 4.4.1.2 Channel Parameter Block
/**
* @brief 4.4.1.2 Channel Parameter Block
*/
struct params_t {
uint8_t Expiry; // number of seconds without traffic before leaving
struct {
@ -68,7 +77,10 @@ struct params_t {
void iStream(PDU::Stream);
};
// 4.4.1 Join
/**
* @brief 4.4.1 Join
*/
struct join_data_t : PDU::pdu_data {
MID mid;
uint16_t number;
@ -83,7 +95,10 @@ struct join_data_t : PDU::pdu_data {
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 {
UUID::uuid leader;
uint16_t number;
@ -95,8 +110,10 @@ struct join_accept_data_t : PDU::pdu_data {
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 {
UUID::uuid leader;
uint16_t number;
@ -108,7 +125,10 @@ struct join_refuse_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {};
};
// 4.4.5 NAK
/**
* @brief 4.4.5 NAK
*/
struct nak_data_t : PDU::pdu_data {
UUID::uuid leader;
uint16_t number;
@ -121,7 +141,10 @@ struct nak_data_t : PDU::pdu_data {
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 {
uint16_t number;
uint32_t sequence;
@ -135,7 +158,10 @@ struct wrapper_data_t : PDU::pdu_data {
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 {
uint32_t protocol;
uint16_t association;
@ -144,17 +170,22 @@ struct client_pdu_header_t : PDU::pdu_header {
void oStream(PDU::Stream) const override {};
};
// Client Block PDU
/**
* @brief The ClientPdu class
*/
class ClientPdu
: public PDU::Pdu
{
public:
ClientPdu();
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 {
UUID::uuid cid;
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 {
MID mid;
UUID::uuid owner;
@ -175,7 +208,10 @@ struct channel_info_block_t {
std::list<uint32_t> protocols;
};
// 4.4.9 Sessions
/**
* @brief 4.4.9 Sessions
*/
struct sessions_data_t : PDU::pdu_data {
std::list<channel_info_block_t> list;
size_t streamSize() const override { return 0; }
@ -183,7 +219,10 @@ struct sessions_data_t : PDU::pdu_data {
void oStream(PDU::Stream) const override {};
};
// 4.5.1 ACK
/**
* @brief 4.5.1 ACK
*/
struct ack_data_t : PDU::pdu_data {
uint32_t reliable;
size_t streamSize() const override { return 4; }
@ -191,7 +230,10 @@ struct ack_data_t : PDU::pdu_data {
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 {
params_t parameters;
UDP::address_t address;
@ -201,18 +243,21 @@ struct channel_params_data_t : PDU::pdu_data {
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 {
uint32_t protocol;
size_t streamSize() const override { return 0; }
size_t streamSize() const override { return 4; }
void iStream(PDU::Stream) 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 {
uint32_t protocol;
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
// 7.2 PDU Vector Codes
/**
* @brief 7.2 PDU Vector Codes
*/
enum sdt_vector_t {
REL_WRAP = 1,
UNREL_WRAP = 2,
@ -248,7 +298,9 @@ enum sdt_vector_t {
// 7.4 Other Symbolic Parameters
// Table 6: Reason Codes
/**
* @brief Table 6: Reason Codes
*/
enum reason_code_t {
NONSPECIFIC = 1, // Non-specific, non-SDT reason.
ILLEGAL_PARAMETERS = 2, // Illegal channel parameters.
@ -265,26 +317,34 @@ enum reason_code_t {
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 {
SDT_ADDR_NULL = 0, // Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, // Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 // Address specified is in IP v6 format
SDT_ADDR_NULL = 0, //!< Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, //!< Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 //!< Address specified is in IP v6 format
};
// PDU type for this protocol
/**
* @brief The SDT::Pdu class
*/
class Pdu
: public PDU::Pdu
{
public:
Pdu();
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 {
public:
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
// leader on the upstream address. A unique session identifier identifies a
// session.
/**
* @brief The Session class
* 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 leader on the upstream address. A unique session identifier identifies
* a session.
*/
class Session {
public:
Session();

View File

@ -31,7 +31,9 @@ namespace DATA {
using std::uint8_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 {
uint8_t source_name[64];
uint8_t priority;
@ -44,20 +46,26 @@ struct frame_header : PDU::pdu_header {
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 {
PREVIEW_DATA = 0b10000000, // Bit 7 = Preview_Data
STREAM_TERMINATED = 0b01000000, // Bit 6 = Stream_Terminated
FORCE_SYNCHRONIZATION = 0b00100000, // Bit 5 = Force_Synchronization
};
/**
* @brief The DATA::Pdu class
*/
class Pdu
: public PDU::Pdu
{
public:
Pdu();
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
};
} // DATA

View File

@ -30,10 +30,10 @@ namespace SACN {
using namespace ACN;
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 {
uint8_t sequence_number;
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 {
uint8_t source_name[64];
uint8_t reserved[4];
@ -54,19 +56,23 @@ struct frame_discovery_header : PDU::pdu_header {
};
/**
* @brief The EXTENDED::Pdu class
*/
class Pdu
: public PDU::Pdu
{
public:
Pdu();
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
};
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 {
uint8_t page;
uint8_t last_page;
@ -75,19 +81,22 @@ struct discovery_list_header : PDU::pdu_header {
void oStream(PDU::Stream) const override;
};
/**
* @brief The EXTENDED::DISCOVERY::Pdu class
*/
class Pdu
: public PDU::Pdu
{
public:
Pdu();
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override {};
};
/**
universe metadata
*/
* @brief The DiscoveredUniverse class
*/
class DiscoveredUniverse
{
public: