From 2ebc026af7b9cd068e4170be894a59735e2e5c2d Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Fri, 13 Aug 2021 10:04:30 -0400 Subject: [PATCH] assignable ID numbers at construction --- rdm/device.cpp | 5 +++-- rdm/device.h | 4 ++-- rdm/responder.cpp | 16 ++++++++-------- rdm/responder.h | 2 +- rdmnet/broker.h | 2 +- rdmnet/device.cpp | 5 +++-- rdmnet/device.h | 7 ++++++- 7 files changed, 24 insertions(+), 17 deletions(-) diff --git a/rdm/device.cpp b/rdm/device.cpp index c61e225..1a3fed7 100644 --- a/rdm/device.cpp +++ b/rdm/device.cpp @@ -30,15 +30,16 @@ namespace RDM { /** * @brief Device::Device */ -Device::Device(Device* parent) +Device::Device(UID id, Device* parent) : DMX::Device() , deviceModelID(0) , deviceModelDescription("Basic RDM Device") , deviceProductCategory(PRODUCT_CATEGORY_NOT_DECLARED) + , id_(id) , parent_(parent) , status_reporting_threshold_(STATUS_ADVISORY) { - id.manufacturer = MY_ESTA_MANUFACTURER_ID; + id_.manufacturer = MY_ESTA_MANUFACTURER_ID; queued_statuses_.emplace(STATUS_ADVISORY, std::queue()); queued_statuses_.emplace(STATUS_WARNING, std::queue()); diff --git a/rdm/device.h b/rdm/device.h index dcca905..3f1a9b9 100644 --- a/rdm/device.h +++ b/rdm/device.h @@ -41,7 +41,7 @@ class Device : public DMX::Device { public: - Device(Device* parent = nullptr); + Device(UID id = UID(), Device* parent = nullptr); virtual ~Device(); void addSubDevice(uint16_t number, Device* dev); @@ -55,13 +55,13 @@ public: virtual void identify(bool state) { identifying_ = state; } virtual void reset(bool hard) { (void)hard; } - UID id; uint16_t deviceModelID; std::string deviceModelDescription; uint16_t deviceProductCategory; protected: friend class Responder; + UID id_; std::unordered_map sub_devices_; std::unordered_map parameters_; std::vector sensors_; diff --git a/rdm/responder.cpp b/rdm/responder.cpp index 4804c5b..d45de44 100644 --- a/rdm/responder.cpp +++ b/rdm/responder.cpp @@ -31,8 +31,8 @@ namespace RDM { /** * @brief Responder::Responder */ -Responder::Responder() - : Device() +Responder::Responder(UID id, Device* parent) + : Device(id, parent) , control_field(0) { deviceModelID = 1; @@ -169,7 +169,7 @@ void Responder::receive(const MsgPtr message) } // RDM::UID::operator== also returns true for broadcast messages - if (message->destination != id || + if (message->destination != id_ || message->incorrect_sc || message->incorrect_sub_sc) return; @@ -199,7 +199,7 @@ void Responder::receive(const MsgPtr message) return; auto response = MsgPtr(new Message()); - response->source = id; + response->source = id_; response->destination = message->source; response->subDevice = message->subDevice; response->parameterId = message->parameterId; @@ -362,19 +362,19 @@ void Responder::actionDiscoverUniqueBranch(const MsgPtr message, MsgPtr response upper.manufacturer = Message::readType(*message->data(), 6); upper.device = Message::readType(*message->data(), 8); - if (id.uid < lower.uid) + if (id_.uid < lower.uid) { response->do_no_send = true; return; } - if (id.uid > upper.uid) + if (id_.uid > upper.uid) { response->do_no_send = true; return; } - response->appendData(id.manufacturer); - response->appendData(id.device); + response->appendData(id_.manufacturer); + response->appendData(id_.device); } diff --git a/rdm/responder.h b/rdm/responder.h index f448720..3bc5fc8 100644 --- a/rdm/responder.h +++ b/rdm/responder.h @@ -34,7 +34,7 @@ class Responder : public Device { public: - Responder(); + Responder(UID id, Device* parent = nullptr); virtual ~Responder(); union { diff --git a/rdmnet/broker.h b/rdmnet/broker.h index d2dad4b..8771c8b 100644 --- a/rdmnet/broker.h +++ b/rdmnet/broker.h @@ -41,7 +41,7 @@ class Broker , public EPT::Client { public: - Broker(); + Broker(UUID::uuid = UUID::uuid()); virtual ~Broker(); }; diff --git a/rdmnet/device.cpp b/rdmnet/device.cpp index 11003c3..372465e 100644 --- a/rdmnet/device.cpp +++ b/rdmnet/device.cpp @@ -28,11 +28,12 @@ namespace RDMnet { /** * @brief Controller::Controller */ -Device::Device(UUID::uuid cid) +Device::Device(UUID::uuid cid, UUID::uuid rid, RDM::UID uid) : ACN::Component(cid) - , RDM::Responder() + , RDM::Responder(uid) , LLRP::Target() , EPT::Client() + , rid_(rid) { } diff --git a/rdmnet/device.h b/rdmnet/device.h index b824489..4c5c4a6 100644 --- a/rdmnet/device.h +++ b/rdmnet/device.h @@ -43,8 +43,13 @@ class Device , public EPT::Client { public: - Device(UUID::uuid = UUID::uuid()); + Device(UUID::uuid cid = UUID::uuid(), + UUID::uuid rid = UUID::uuid(), + RDM::UID uid = RDM::UID()); virtual ~Device(); + +private: + UUID::uuid rid_; }; } // namespace RDMnet