1
0
Fork 0

DMX data I/O

This commit is contained in:
Kevin Matz 2023-04-05 12:41:13 -04:00
parent 55c9060ff6
commit 5a4e827f08
2 changed files with 67 additions and 3 deletions

View File

@ -31,7 +31,9 @@ Widget::Widget()
, tx_break_intervals(17) // 181.4 us by default
, tx_mab_intervals(10) // 106.7 us by default
, tx_rate(40) // 40 packets/s, by default
, rx_update_mode_(Pro::RxNotifyAlways)
, usb_mode_(USBunknown)
, data_changed_token_(nullptr)
{
}
@ -95,6 +97,30 @@ void Widget::close()
}
/**
* @brief Widget::setModeController
*/
void Widget::setModeController()
{
sendDmx();
data_changed_token_ = onDataChange([this](DMX::Universe*){sendDmx();});
}
/**
* @brief Widget::setModeBridge
* @param mode
*/
void Widget::setModeBridge(Pro::DMX_RX_MODE mode)
{
data_changed_token_ = nullptr;
rx_update_mode_ = mode;
auto msg = std::make_shared<Pro::MsgRecieveDMXOnChange>();
msg->mode = mode;
sendMessage(msg);
}
/**
* @brief Widget::setTxBreakTime
* @param time
@ -329,6 +355,22 @@ void Widget::setParameters() const
}
/**
* @brief Widget::sendDmx
* @param trimmed
*/
void Widget::sendDmx(bool trimmed) const
{
auto msg = std::make_shared<Pro::MsgOutputOnlySendDMX>();
msg->data = std::vector<uint8_t>();
uint16_t l = null_start_data.size() - 1;
if (trimmed)
for (l = null_start_data.size() - 1; l > 0 && null_start_data[l] == 0; --l) {};
std::copy(null_start_data.begin(), null_start_data.begin() + l + 1, msg->data.begin());
sendMessage(msg);
}
/**
* @brief Widget::rxMsgReprogramFirmware
* @param msg
@ -414,7 +456,14 @@ void Widget::rxMsgSetWidgetParametersRequest(std::shared_ptr<Pro::MsgSetWidgetPa
*/
void Widget::rxMsgRecievedDmxPacket(std::shared_ptr<Pro::MsgRecievedDmxPacket> msg)
{
(void)msg;
switch (msg->data[0]) {
case DMX::E111_NULL_START:
setData(msg->data);
break;
default:
setAltData(msg->data);
break;
}
}
@ -424,7 +473,13 @@ void Widget::rxMsgRecievedDmxPacket(std::shared_ptr<Pro::MsgRecievedDmxPacket> m
*/
void Widget::rxMsgOutputOnlySendDMX(std::shared_ptr<Pro::MsgOutputOnlySendDMX> msg)
{
(void)msg;
switch (msg->data[0]) {
case DMX::E111_NULL_START:
setData(msg->data);
break;
default:
break;
}
}
@ -444,7 +499,8 @@ void Widget::rxMsgSendRDMData(std::shared_ptr<Pro::MsgSendRDMData> msg)
*/
void Widget::rxMsgRecieveDMXOnChange(std::shared_ptr<Pro::MsgRecieveDMXOnChange> msg)
{
(void)msg;
setData(std::vector<uint8_t>(DMX::E111_LAST_SLOT+1, 0)); // clear dimmer data
rx_update_mode_ = msg->mode;
}

View File

@ -48,6 +48,9 @@ public:
virtual void open(); //!< USB Host start
virtual void close(); //!< USB Host stop
virtual void setModeController();
virtual void setModeBridge(Pro::DMX_RX_MODE = Pro::RxNotifyAlways);
/**
* @brief serial
* @return
@ -90,6 +93,7 @@ protected:
void getParameters(size_t user_length = 0);
void setParameters() const;
void getSerialNumber();
void sendDmx(bool trimmed = true) const;
/**
* @brief writeFwPage
@ -122,11 +126,15 @@ private:
void rxMsgGetWidgetSerialReply(std::shared_ptr<Pro::MsgGetWidgetSerialReply>);
void rxMsgSendRDMDiscovery(std::shared_ptr<Pro::MsgSendRDMDiscovery>);
Pro::DMX_RX_MODE rx_update_mode_;
enum OperatingModes {
USBunknown,
USBhost,
USBdevice
} usb_mode_;
std::shared_ptr<void> data_changed_token_;
};
} // namespace ENTTEC