From f081a6f9bf05866920341a5f7b4f22968854d625 Mon Sep 17 00:00:00 2001 From: Massimo Callegari Date: Sat, 11 Aug 2018 19:21:32 +0200 Subject: [PATCH] plugins/dmxusb: no need to rescan widgets on frequency change --- plugins/dmxusb/src/dmxusbconfig.cpp | 10 +++++++--- plugins/dmxusb/src/dmxusbwidget.cpp | 5 ++++- plugins/dmxusb/src/dmxusbwidget.h | 1 + plugins/dmxusb/src/enttecdmxusbopen.cpp | 4 +--- plugins/dmxusb/src/enttecdmxusbpro.cpp | 5 +---- plugins/dmxusb/src/euroliteusbdmxpro.cpp | 5 +---- plugins/dmxusb/src/nanodmx.cpp | 4 +--- plugins/dmxusb/src/stageprofi.cpp | 4 +--- 8 files changed, 17 insertions(+), 21 deletions(-) diff --git a/plugins/dmxusb/src/dmxusbconfig.cpp b/plugins/dmxusb/src/dmxusbconfig.cpp index f10ead68dc..7b088b5f78 100644 --- a/plugins/dmxusb/src/dmxusbconfig.cpp +++ b/plugins/dmxusb/src/dmxusbconfig.cpp @@ -38,6 +38,7 @@ #define COL_TYPE 2 #define COL_FREQ 3 #define PROP_SERIAL "serial" +#define PROP_WIDGET "widget" DMXUSBConfig::DMXUSBConfig(DMXUSB* plugin, QWidget* parent) : QDialog(parent) @@ -55,10 +56,10 @@ DMXUSBConfig::DMXUSBConfig(DMXUSB* plugin, QWidget* parent) m_tree->setHeaderLabels(header); m_tree->setSelectionMode(QAbstractItemView::NoSelection); - QVBoxLayout* vbox = new QVBoxLayout(this); + QVBoxLayout *vbox = new QVBoxLayout(this); vbox->addWidget(m_tree); - QHBoxLayout* hbox = new QHBoxLayout; + QHBoxLayout *hbox = new QHBoxLayout; hbox->addWidget(m_refreshButton); hbox->addStretch(); hbox->addWidget(m_closeButton); @@ -111,7 +112,9 @@ void DMXUSBConfig::slotFrequencyValueChanged(int value) DMXInterface::storeFrequencyMap(frequencyMap); } - QTimer::singleShot(0, this, SLOT(slotRefresh())); + var = spin->property(PROP_WIDGET); + DMXUSBWidget *widget = (DMXUSBWidget *) var.value(); + widget->setOutputFrequency(value); } void DMXUSBConfig::slotRefresh() @@ -158,6 +161,7 @@ QSpinBox *DMXUSBConfig::createFrequencySpin(DMXUSBWidget *widget) Q_ASSERT(widget != NULL); QSpinBox *spin = new QSpinBox; spin->setProperty(PROP_SERIAL, widget->serial()); + spin->setProperty(PROP_WIDGET, qVariantFromValue((void *)widget)); spin->setRange(1, 60); spin->setValue(widget->outputFrequency()); spin->setSuffix("Hz"); diff --git a/plugins/dmxusb/src/dmxusbwidget.cpp b/plugins/dmxusb/src/dmxusbwidget.cpp index a4dde19e3d..7ffb33d63f 100644 --- a/plugins/dmxusb/src/dmxusbwidget.cpp +++ b/plugins/dmxusb/src/dmxusbwidget.cpp @@ -36,7 +36,6 @@ DMXUSBWidget::DMXUSBWidget(DMXInterface *interface, quint32 outputLine) : m_interface(interface) , m_outputBaseLine(outputLine) - , m_frequency(DEFAULT_OUTPUT_FREQUENCY) , m_inputBaseLine(0) { Q_ASSERT(interface != NULL); @@ -44,6 +43,8 @@ DMXUSBWidget::DMXUSBWidget(DMXInterface *interface, quint32 outputLine) QMap freqMap(DMXInterface::frequencyMap()); if (freqMap.contains(m_interface->serial())) setOutputFrequency(freqMap[m_interface->serial()].toInt()); + else + setOutputFrequency(DEFAULT_OUTPUT_FREQUENCY); setOutputsNumber(1); setInputsNumber(0); @@ -395,6 +396,8 @@ int DMXUSBWidget::outputFrequency() void DMXUSBWidget::setOutputFrequency(int frequency) { m_frequency = frequency; + // One "official" DMX frame can take (1s/44Hz) = 23ms + m_frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; } /******************************************************************** diff --git a/plugins/dmxusb/src/dmxusbwidget.h b/plugins/dmxusb/src/dmxusbwidget.h index 2e3e1d9e4c..b76df3a0e0 100644 --- a/plugins/dmxusb/src/dmxusbwidget.h +++ b/plugins/dmxusb/src/dmxusbwidget.h @@ -150,6 +150,7 @@ class DMXUSBWidget /** The output frequency in Hertz */ int m_frequency; + int m_frameTimeUs; /** Array of output lines supported by the device. This is resized on setOutputsNumber */ QVector m_outputLines; diff --git a/plugins/dmxusb/src/enttecdmxusbopen.cpp b/plugins/dmxusb/src/enttecdmxusbopen.cpp index 0c9a3ecd52..97f85afb90 100644 --- a/plugins/dmxusb/src/enttecdmxusbopen.cpp +++ b/plugins/dmxusb/src/enttecdmxusbopen.cpp @@ -163,8 +163,6 @@ void EnttecDMXUSBOpen::stop() void EnttecDMXUSBOpen::run() { QElapsedTimer timer; - // One "official" DMX frame can take (1s/44Hz) = 23ms - int frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; // Wait for device to settle in case the device was opened just recently usleep(1000); @@ -210,7 +208,7 @@ void EnttecDMXUSBOpen::run() framesleep: // Sleep for the remainder of the DMX frame time // and set granularity accordingly - int timetoSleep = frameTimeUs - (timer.nsecsElapsed() / 1000); + int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); if (timetoSleep < 0) { qWarning() << "DMX output is running late !"; diff --git a/plugins/dmxusb/src/enttecdmxusbpro.cpp b/plugins/dmxusb/src/enttecdmxusbpro.cpp index b47075add0..40a8abd110 100644 --- a/plugins/dmxusb/src/enttecdmxusbpro.cpp +++ b/plugins/dmxusb/src/enttecdmxusbpro.cpp @@ -405,9 +405,6 @@ void EnttecDMXUSBPro::run() qDebug() << "OUTPUT thread started"; QElapsedTimer timer; - // One "official" DMX frame can take (1s/44Hz) = 23ms - int frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; - m_outputRunning = true; while (m_outputRunning == true) { @@ -505,7 +502,7 @@ void EnttecDMXUSBPro::run() } } framesleep: - int timetoSleep = frameTimeUs - (timer.nsecsElapsed() / 1000); + int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); if (timetoSleep < 0) qWarning() << "DMX output is running late !"; else diff --git a/plugins/dmxusb/src/euroliteusbdmxpro.cpp b/plugins/dmxusb/src/euroliteusbdmxpro.cpp index 771c3ad244..0e596521ff 100644 --- a/plugins/dmxusb/src/euroliteusbdmxpro.cpp +++ b/plugins/dmxusb/src/euroliteusbdmxpro.cpp @@ -222,9 +222,6 @@ void EuroliteUSBDMXPro::run() QElapsedTimer timer; QByteArray request; - // One "official" DMX frame can take (1s/44Hz) = 23ms - int frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; - m_running = true; while (m_running == true) { @@ -255,7 +252,7 @@ void EuroliteUSBDMXPro::run() #endif } framesleep: - int timetoSleep = frameTimeUs - (timer.nsecsElapsed() / 1000); + int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); if (timetoSleep < 0) qWarning() << "DMX output is running late !"; else diff --git a/plugins/dmxusb/src/nanodmx.cpp b/plugins/dmxusb/src/nanodmx.cpp index b3c0c5dbe5..6f610c6f50 100644 --- a/plugins/dmxusb/src/nanodmx.cpp +++ b/plugins/dmxusb/src/nanodmx.cpp @@ -288,8 +288,6 @@ void NanoDMX::run() qDebug() << "OUTPUT thread started"; QElapsedTimer timer; - // One "official" DMX frame can take (1s/44Hz) = 23ms - int frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; m_running = true; @@ -345,7 +343,7 @@ void NanoDMX::run() } } - int timetoSleep = frameTimeUs - (timer.nsecsElapsed() / 1000); + int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); if (timetoSleep < 0) qWarning() << "DMX output is running late !"; else diff --git a/plugins/dmxusb/src/stageprofi.cpp b/plugins/dmxusb/src/stageprofi.cpp index 4eb37a2f81..ec2fbf5982 100644 --- a/plugins/dmxusb/src/stageprofi.cpp +++ b/plugins/dmxusb/src/stageprofi.cpp @@ -186,8 +186,6 @@ void Stageprofi::run() qDebug() << "OUTPUT thread started"; QElapsedTimer timer; - // One "official" DMX frame can take (1s/44Hz) = 23ms - int frameTimeUs = (int) (floor(((double)1000 / m_frequency) + (double)0.5)) * 1000; m_running = true; @@ -235,7 +233,7 @@ void Stageprofi::run() } } - int timetoSleep = frameTimeUs - (timer.nsecsElapsed() / 1000); + int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); if (timetoSleep < 0) qWarning() << "DMX output is running late !"; else