From 2fdef292426ca039178ae186fd21398469e6239b Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Tue, 25 Apr 2023 16:48:24 -0400 Subject: [PATCH] use the widget mode to determine the appropriate RDM configuration --- protocol/enttec/dmx-usb-pro/CMakeLists.txt | 1 + protocol/enttec/dmx-usb-pro/widget.cpp | 22 ++++++++++++++++++---- protocol/enttec/dmx-usb-pro/widget.h | 5 +++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/protocol/enttec/dmx-usb-pro/CMakeLists.txt b/protocol/enttec/dmx-usb-pro/CMakeLists.txt index 9d58207..8b7d838 100644 --- a/protocol/enttec/dmx-usb-pro/CMakeLists.txt +++ b/protocol/enttec/dmx-usb-pro/CMakeLists.txt @@ -16,6 +16,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC LCP::BufferStream LCP::DMX + LCP::RDM ) set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) diff --git a/protocol/enttec/dmx-usb-pro/widget.cpp b/protocol/enttec/dmx-usb-pro/widget.cpp index 1bf18b7..c82d09d 100644 --- a/protocol/enttec/dmx-usb-pro/widget.cpp +++ b/protocol/enttec/dmx-usb-pro/widget.cpp @@ -23,8 +23,6 @@ */ #include "widget.h" -#include - namespace ENTTEC { Widget::Widget() @@ -36,6 +34,8 @@ Widget::Widget() , usb_mode(USBunknown) , rx_update_mode_(Pro::RxNotifyAlways) , token_data_changed_(nullptr) + , rdm_controller_(nullptr) + , rdm_responder_(nullptr) { } @@ -52,6 +52,10 @@ Widget::~Widget() default: break; } + if (rdm_controller_) + delete rdm_controller_; + if (rdm_responder_) + delete rdm_responder_; } @@ -112,6 +116,10 @@ void Widget::setModeController() std::scoped_lock lock(mtx_metadata_); token_data_changed_ = onDataChange([this](DMX::Universe*){sendDmx();}); device_class_ = DMX::CONTROLLER; + if (rdm_responder_) + delete rdm_responder_; + if (featureRDM()) + rdm_controller_ = new RDM::Controller(); } @@ -125,10 +133,16 @@ void Widget::setModeBridge(Pro::DMX_RX_MODE mode) std::scoped_lock lock(mtx_metadata_); token_data_changed_ = nullptr; rx_update_mode_ = mode; + if (rdm_controller_) + delete rdm_controller_; if (featureRDM()) - device_class_ = DMX::RESPONDER; + { + RDM::UID id(serial_number, 0x454E); // Use the ENTTEC manufacturer ID? + rdm_responder_ = new RDM::Responder(id); + device_class_ = DMX::RESPONDER; + } else - device_class_ = DMX::RECEIVER; + device_class_ = DMX::RECEIVER; } auto msg = std::make_shared(); msg->mode = mode; diff --git a/protocol/enttec/dmx-usb-pro/widget.h b/protocol/enttec/dmx-usb-pro/widget.h index dedb6a0..ca77f66 100644 --- a/protocol/enttec/dmx-usb-pro/widget.h +++ b/protocol/enttec/dmx-usb-pro/widget.h @@ -25,9 +25,11 @@ #include "pro.h" +#include #include #include #include +#include #include #include @@ -148,6 +150,9 @@ private: mutable std::mutex mtx_metadata_; std::shared_ptr token_data_changed_; + + RDM::Controller *rdm_controller_; + RDM::Responder *rdm_responder_; }; } // namespace ENTTEC