remove silly typedefs
This commit is contained in:
parent
56a0bf0f25
commit
4f268fffde
|
@ -35,14 +35,14 @@ address_type::address_type(uint8_t val) {
|
|||
width = (address_length)(val & 0b11);
|
||||
}
|
||||
|
||||
range::range(stream_ptr stream, data_type t, address_length l) {
|
||||
range::range(PDU::Stream stream, data_type t, address_length l) {
|
||||
address = read(stream, l);
|
||||
if (t == SINGLE) return;
|
||||
incriment = read(stream, l);
|
||||
count = read(stream, l);
|
||||
}
|
||||
|
||||
uint32_t range::read(stream_ptr stream, address_length length) {
|
||||
uint32_t range::read(PDU::Stream stream, address_length length) {
|
||||
switch (length) {
|
||||
case ONE:
|
||||
return stream->read8();
|
||||
|
@ -56,7 +56,7 @@ uint32_t range::read(stream_ptr stream, address_length length) {
|
|||
}
|
||||
|
||||
|
||||
Pdu::Pdu(stream_ptr stream)
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: PDU::Pdu(stream, 1) // vectors are 1 octet
|
||||
{
|
||||
if (stream->fail()) return;
|
||||
|
|
|
@ -36,8 +36,7 @@ using std::uint8_t;
|
|||
using std::uint32_t;
|
||||
using std::vector;
|
||||
using std::pair;
|
||||
using std::shared_ptr;
|
||||
using PDU::stream_ptr;
|
||||
using PDU::Block;
|
||||
|
||||
// 5.1.4 Address and Data Types
|
||||
enum data_type {
|
||||
|
@ -69,9 +68,9 @@ struct range {
|
|||
uint32_t incriment;
|
||||
uint32_t count;
|
||||
range() {};
|
||||
range(stream_ptr, data_type, address_length);
|
||||
range(PDU::Stream, data_type, address_length);
|
||||
private:
|
||||
uint32_t read(stream_ptr, address_length);
|
||||
uint32_t read(PDU::Stream, address_length);
|
||||
};
|
||||
|
||||
typedef pair<range, vector<uint8_t>> set_property;
|
||||
|
@ -112,11 +111,10 @@ class Pdu
|
|||
: public PDU::Pdu
|
||||
{
|
||||
public:
|
||||
Pdu(stream_ptr);
|
||||
Pdu(PDU::Stream);
|
||||
private:
|
||||
void readSetData();
|
||||
};
|
||||
typedef std::shared_ptr<Pdu> pdu_ptr;
|
||||
|
||||
|
||||
} // DMP
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
namespace ACN {
|
||||
namespace PDU {
|
||||
|
||||
Pdu::Pdu(stream_ptr stream, size_t vector_size)
|
||||
Pdu::Pdu(Stream stream, size_t vector_size)
|
||||
: flags_(stream->peek())
|
||||
{
|
||||
header_ = 0;
|
||||
|
@ -59,7 +59,7 @@ Pdu::Pdu(stream_ptr stream, size_t vector_size)
|
|||
}
|
||||
|
||||
// create a stream buffer for the header and data
|
||||
buffer_ = stream_ptr(new pdu_stream(stream->data(), len));
|
||||
buffer_ = Stream(new pdu_stream(stream->data(), len));
|
||||
if (buffer_->available() != len) {
|
||||
stream->setstate(stream->rdstate() | std::ios_base::failbit);
|
||||
return;
|
||||
|
@ -109,7 +109,7 @@ pdu_data * Pdu::data() {
|
|||
}
|
||||
|
||||
|
||||
void Pdu::readLength(stream_ptr stream) {
|
||||
void Pdu::readLength(Stream stream) {
|
||||
length_ = stream->read16() & 0x0fff; // high 4 bytes are flags
|
||||
if (flags_.hasLength)
|
||||
length_ = (length_ << 8 ) | stream->read8();
|
||||
|
|
|
@ -50,13 +50,6 @@ struct pdu_flags {
|
|||
pdu_flags(uint8_t);
|
||||
};
|
||||
|
||||
class pdu_stream;
|
||||
class Pdu;
|
||||
typedef shared_ptr<pdu_stream> stream_ptr;
|
||||
typedef shared_ptr<Pdu> pdu_ptr;
|
||||
typedef vector<pdu_ptr> pdu_block;
|
||||
typedef shared_ptr<pdu_block> block_ptr;
|
||||
|
||||
// MAYBE: remove virtuals?
|
||||
// Arduino doen't enable RTTI for run-time polymorphism.
|
||||
struct pdu_header { virtual ~pdu_header() {} };
|
||||
|
@ -91,6 +84,7 @@ public:
|
|||
private:
|
||||
pdu_buffer _buffer;
|
||||
};
|
||||
using Stream = shared_ptr<pdu_stream>;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -106,7 +100,7 @@ private:
|
|||
*/
|
||||
class Pdu {
|
||||
public:
|
||||
Pdu(stream_ptr, size_t vector_size);
|
||||
Pdu(Stream, size_t vector_size);
|
||||
~Pdu();
|
||||
|
||||
// getters
|
||||
|
@ -115,20 +109,20 @@ public:
|
|||
const uint32_t vector();
|
||||
pdu_header * header();
|
||||
pdu_data * data();
|
||||
pdu_ptr parent() {return parent_;}
|
||||
stream_ptr buffer() {return buffer_;}
|
||||
shared_ptr<Pdu> parent() {return parent_;}
|
||||
Stream buffer() {return buffer_;}
|
||||
|
||||
// setters
|
||||
void setParent (pdu_ptr pdu) {parent_ = pdu;}
|
||||
void setInherit(pdu_ptr pdu) {inherit_ = pdu;}
|
||||
void setParent (shared_ptr<Pdu> pdu) {parent_ = pdu;}
|
||||
void setInherit(shared_ptr<Pdu> pdu) {inherit_ = pdu;}
|
||||
|
||||
protected:
|
||||
pdu_flags flags_;
|
||||
uint32_t length_;
|
||||
uint32_t vector_;
|
||||
pdu_ptr parent_;
|
||||
pdu_ptr inherit_;
|
||||
stream_ptr buffer_;
|
||||
pdu_flags flags_;
|
||||
uint32_t length_;
|
||||
uint32_t vector_;
|
||||
shared_ptr<Pdu> parent_;
|
||||
shared_ptr<Pdu> inherit_;
|
||||
Stream buffer_;
|
||||
|
||||
// private setters
|
||||
void setHeader (pdu_header * h) {header_ = h;}
|
||||
|
@ -138,7 +132,7 @@ private:
|
|||
pdu_header * header_;
|
||||
pdu_data * data_;
|
||||
|
||||
void readLength(stream_ptr);
|
||||
void readLength(Stream);
|
||||
void readVector(uint8_t);
|
||||
};
|
||||
|
||||
|
@ -153,7 +147,7 @@ using Block = std::shared_ptr<std::vector<std::shared_ptr<T>>>;
|
|||
@return std::shared_ptr<std::vector<std::shared_ptr<T>>> A block of PDU
|
||||
*/
|
||||
template<typename T>
|
||||
Block<T> readBlock(stream_ptr buffer, shared_ptr<PDU::Pdu> parent = 0) {
|
||||
Block<T> readBlock(Stream buffer, shared_ptr<PDU::Pdu> parent = 0) {
|
||||
auto block = Block<T>(new vector<shared_ptr<T>>);
|
||||
while(buffer->good()) {
|
||||
shared_ptr<T> pdu(new T(buffer));
|
||||
|
@ -171,5 +165,6 @@ Block<T> readBlock(stream_ptr buffer, shared_ptr<PDU::Pdu> parent = 0) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
} // PDU
|
||||
} // ACN
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace ACN {
|
|||
namespace RLP {
|
||||
namespace UDP {
|
||||
|
||||
preamble_t::preamble_t(PDU::stream_ptr stream) {
|
||||
preamble_t::preamble_t(PDU::Stream stream) {
|
||||
length = stream->read16();
|
||||
postamble_size = stream->read16();
|
||||
stream->read(acn_id, 12);
|
||||
|
|
|
@ -35,7 +35,6 @@ namespace UDP {
|
|||
|
||||
using std::uint8_t;
|
||||
using std::uint16_t;
|
||||
using PDU::stream_ptr;
|
||||
|
||||
// The ACN Packet Identifier shall be the text string
|
||||
// “ASC-E1.17\0\0\0” encoded in [ASCII].
|
||||
|
@ -50,7 +49,7 @@ struct preamble_t {
|
|||
uint16_t length;
|
||||
uint16_t postamble_size;
|
||||
uint8_t acn_id[12];
|
||||
preamble_t(stream_ptr);
|
||||
preamble_t(PDU::Stream);
|
||||
operator bool();
|
||||
};
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
namespace ACN {
|
||||
namespace RLP {
|
||||
|
||||
rlp_header::rlp_header(PDU::stream_ptr stream)
|
||||
rlp_header::rlp_header(PDU::Stream stream)
|
||||
: PDU::pdu_header()
|
||||
{
|
||||
stream->read(cid, 16);
|
||||
|
@ -35,7 +35,7 @@ rlp_header::rlp_header(PDU::stream_ptr stream)
|
|||
stream->setstate(stream->rdstate() | std::ios_base::failbit);
|
||||
}
|
||||
|
||||
Pdu::Pdu(PDU::stream_ptr stream)
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: ACN::PDU::Pdu(stream, 4)
|
||||
{
|
||||
if (stream->fail()) return;
|
||||
|
|
|
@ -30,23 +30,20 @@
|
|||
namespace ACN {
|
||||
namespace RLP {
|
||||
|
||||
using PDU::stream_ptr;
|
||||
|
||||
// 2.6.1.2.2. Header Field in Root Layer PDUs
|
||||
// The Header field in Root Layer PDUs shall contain the CID of the component
|
||||
// that generated the PDU (the Source CID).
|
||||
struct rlp_header : PDU::pdu_header {
|
||||
uint8_t cid[16];
|
||||
rlp_header(stream_ptr);
|
||||
rlp_header(PDU::Stream);
|
||||
};
|
||||
|
||||
class Pdu
|
||||
: public PDU::Pdu
|
||||
{
|
||||
public:
|
||||
Pdu(PDU::stream_ptr);
|
||||
Pdu(PDU::Stream);
|
||||
};
|
||||
typedef std::shared_ptr<Pdu> pdu_ptr;
|
||||
|
||||
} // RLP
|
||||
} // ACN
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
namespace SACN {
|
||||
namespace DATA {
|
||||
|
||||
frame_header::frame_header(PDU::stream_ptr stream) {
|
||||
frame_header::frame_header(PDU::Stream stream) {
|
||||
stream->read(source_name, 64);
|
||||
if (stream->gcount() != 64)
|
||||
stream->setstate(stream->rdstate() | std::ios_base::failbit);
|
||||
|
@ -38,7 +38,7 @@ frame_header::frame_header(PDU::stream_ptr stream) {
|
|||
universe = stream->read16();
|
||||
}
|
||||
|
||||
Pdu::Pdu(PDU::stream_ptr stream)
|
||||
Pdu::Pdu(PDU::Stream stream)
|
||||
: PDU::Pdu(stream, 4) // vectors are 4 octets
|
||||
{
|
||||
if (stream->fail()) return;
|
||||
|
|
|
@ -30,7 +30,6 @@ namespace DATA {
|
|||
|
||||
using std::uint8_t;
|
||||
using std::uint16_t;
|
||||
using PDU::stream_ptr;
|
||||
|
||||
// Table 6-1: E1.31 Data Packet Framing Layer
|
||||
struct frame_header : PDU::pdu_header {
|
||||
|
@ -40,7 +39,7 @@ struct frame_header : PDU::pdu_header {
|
|||
uint8_t sequence_number;
|
||||
uint8_t options;
|
||||
uint16_t universe;
|
||||
frame_header(stream_ptr);
|
||||
frame_header(PDU::Stream);
|
||||
};
|
||||
|
||||
// 6.2.6 E1.31 Data Packet: Options
|
||||
|
@ -54,10 +53,8 @@ class Pdu
|
|||
: public PDU::Pdu
|
||||
{
|
||||
public:
|
||||
Pdu(PDU::stream_ptr);
|
||||
Pdu(PDU::Stream);
|
||||
};
|
||||
typedef std::shared_ptr<Pdu> pdu_ptr;
|
||||
|
||||
|
||||
} // DATA
|
||||
} // SACN
|
||||
|
|
|
@ -61,7 +61,7 @@ void EspReceiver::udpHandler(AsyncUDPPacket udp) {
|
|||
if (!udp.localPort() == ACN_SDT_MULTICAST_PORT)
|
||||
return;
|
||||
|
||||
PDU::stream_ptr packet(new PDU::pdu_stream(udp.data(), udp.available()));
|
||||
PDU::Stream packet(new PDU::pdu_stream(udp.data(), udp.available()));
|
||||
packetHandler(packet); // from base class, SACN::Receiver
|
||||
}
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ Layer 4 only. Verificiton of layer 3 (UDP port) must be handled prior to callin
|
|||
|
||||
@param packet is a shared pointer to the UDP data buffer.
|
||||
*/
|
||||
void Receiver::packetHandler(PDU::stream_ptr packet) {
|
||||
void Receiver::packetHandler(PDU::Stream packet) {
|
||||
// verify the UDP preamble
|
||||
RLP::UDP::preamble_t preamble(packet);
|
||||
|
||||
|
@ -101,7 +101,7 @@ Receive VECTOR_ROOT_E131_DATA vector'd packets.
|
|||
|
||||
@param pdu is a shared pointer to the PDU
|
||||
*/
|
||||
void Receiver::rootDataHandler(RLP::pdu_ptr root) {
|
||||
void Receiver::rootDataHandler(shared_ptr<RLP::Pdu> root) {
|
||||
auto block = PDU::readBlock<DATA::Pdu>(root->buffer(), root);
|
||||
if (root->buffer()->fail())
|
||||
return;
|
||||
|
@ -128,7 +128,7 @@ Merging will be based on frame header. PDU data will be read as a block of DMP
|
|||
|
||||
@param pdu is a shared pointer to the PDU
|
||||
*/
|
||||
void Receiver::dataPacketHandler(DATA::pdu_ptr frame) {
|
||||
void Receiver::dataPacketHandler(shared_ptr<DATA::Pdu> frame) {
|
||||
// header may be inherited. check that one exists
|
||||
if (!frame->header())
|
||||
return;
|
||||
|
|
|
@ -39,10 +39,10 @@ public:
|
|||
SACN::Universe * universe(uint16_t universe);
|
||||
|
||||
protected:
|
||||
void packetHandler(PDU::stream_ptr);
|
||||
void packetHandler(PDU::Stream);
|
||||
|
||||
void rootDataHandler(RLP::pdu_ptr);
|
||||
void dataPacketHandler(DATA::pdu_ptr);
|
||||
void rootDataHandler(shared_ptr<RLP::Pdu>);
|
||||
void dataPacketHandler(shared_ptr<DATA::Pdu>);
|
||||
|
||||
private:
|
||||
std::unordered_map <uint16_t, SACN::Universe *> universes_;
|
||||
|
|
|
@ -32,13 +32,13 @@ Universe::Universe()
|
|||
synchronized_ = false;
|
||||
}
|
||||
|
||||
void Universe::set(pdu_ptr pdu) {
|
||||
void Universe::set(shared_ptr<DMP::Pdu> dmp) {
|
||||
// 7.3 Address Type and Data Type
|
||||
// Sources shall set the DMP Layer's Address Type and Data Type to 0xa1.
|
||||
// Receivers shall discard the packet if the received value is not 0xa1.
|
||||
if (!pdu->header())
|
||||
if (!dmp->header())
|
||||
return;
|
||||
auto type = (ACN::DMP::address_type*)pdu->header();
|
||||
auto type = (ACN::DMP::address_type*)dmp->header();
|
||||
if (!type->z_reserved) return; // needs to be true, but why?
|
||||
if (type->relative) return;
|
||||
if (type->type != ACN::DMP::ARRAY) return;
|
||||
|
@ -46,9 +46,9 @@ void Universe::set(pdu_ptr pdu) {
|
|||
if (type->width != ACN::DMP::TWO) return;
|
||||
|
||||
// only act on the first property pair in the data
|
||||
if (!pdu->data())
|
||||
if (!dmp->data())
|
||||
return;
|
||||
auto data = (ACN::DMP::dmp_set_data*)pdu->data();
|
||||
auto data = (ACN::DMP::dmp_set_data*)dmp->data();
|
||||
auto prop = data->properties.front();
|
||||
auto pr = prop.first;
|
||||
|
||||
|
@ -76,4 +76,4 @@ void Universe::set(pdu_ptr pdu) {
|
|||
DMX::Universe::set(prop.second);
|
||||
}
|
||||
|
||||
};
|
||||
}; // SACN
|
||||
|
|
|
@ -25,18 +25,20 @@
|
|||
|
||||
#include "sacn.h"
|
||||
#include "../dmx/universe.h"
|
||||
#include <memory>
|
||||
|
||||
namespace SACN {
|
||||
using ACN::PDU::pdu_ptr;
|
||||
using std::shared_ptr;
|
||||
|
||||
class Universe
|
||||
: public DMX::Universe
|
||||
{
|
||||
public:
|
||||
Universe();
|
||||
void set(pdu_ptr);
|
||||
bool isSyncronized() const {return synchronized_;};
|
||||
|
||||
void set(shared_ptr<DMP::Pdu>);
|
||||
|
||||
private:
|
||||
bool synchronized_;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue