DMX data I/O
This commit is contained in:
parent
55c9060ff6
commit
5a4e827f08
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue