1
0
Fork 0

use the widget mode to determine the appropriate RDM configuration

This commit is contained in:
Kevin Matz 2023-04-25 16:48:24 -04:00
parent 54b2335c98
commit 2fdef29242
3 changed files with 24 additions and 4 deletions

View File

@ -16,6 +16,7 @@ target_link_libraries(${PROJECT_NAME}
PUBLIC PUBLIC
LCP::BufferStream LCP::BufferStream
LCP::DMX LCP::DMX
LCP::RDM
) )
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})

View File

@ -23,8 +23,6 @@
*/ */
#include "widget.h" #include "widget.h"
#include <chrono>
namespace ENTTEC { namespace ENTTEC {
Widget::Widget() Widget::Widget()
@ -36,6 +34,8 @@ Widget::Widget()
, usb_mode(USBunknown) , usb_mode(USBunknown)
, rx_update_mode_(Pro::RxNotifyAlways) , rx_update_mode_(Pro::RxNotifyAlways)
, token_data_changed_(nullptr) , token_data_changed_(nullptr)
, rdm_controller_(nullptr)
, rdm_responder_(nullptr)
{ {
} }
@ -52,6 +52,10 @@ Widget::~Widget()
default: default:
break; 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_); std::scoped_lock lock(mtx_metadata_);
token_data_changed_ = onDataChange([this](DMX::Universe*){sendDmx();}); token_data_changed_ = onDataChange([this](DMX::Universe*){sendDmx();});
device_class_ = DMX::CONTROLLER; 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_); std::scoped_lock lock(mtx_metadata_);
token_data_changed_ = nullptr; token_data_changed_ = nullptr;
rx_update_mode_ = mode; rx_update_mode_ = mode;
if (rdm_controller_)
delete rdm_controller_;
if (featureRDM()) 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 else
device_class_ = DMX::RECEIVER; device_class_ = DMX::RECEIVER;
} }
auto msg = std::make_shared<Pro::MsgRecieveDMXOnChange>(); auto msg = std::make_shared<Pro::MsgRecieveDMXOnChange>();
msg->mode = mode; msg->mode = mode;

View File

@ -25,9 +25,11 @@
#include "pro.h" #include "pro.h"
#include <rdm_controller.h>
#include <cstring> #include <cstring>
#include <future> #include <future>
#include <mutex> #include <mutex>
#include <responder.h>
#include <universe.h> #include <universe.h>
#include <vector> #include <vector>
@ -148,6 +150,9 @@ private:
mutable std::mutex mtx_metadata_; mutable std::mutex mtx_metadata_;
std::shared_ptr<void> token_data_changed_; std::shared_ptr<void> token_data_changed_;
RDM::Controller *rdm_controller_;
RDM::Responder *rdm_responder_;
}; };
} // namespace ENTTEC } // namespace ENTTEC