From fae57a2e1deb81068c5d9a5c80cc1480c9ed25a2 Mon Sep 17 00:00:00 2001 From: Massimo Callegari Date: Fri, 7 Dec 2018 13:47:54 +0100 Subject: [PATCH] plugins/dmxusb: allow DMXUSBWidget subclasses to request a preferred output frequency This basically reverts Open DMX to the crappy 30Hz frequency --- plugins/dmxusb/src/dmxusbwidget.cpp | 8 +++----- plugins/dmxusb/src/dmxusbwidget.h | 4 +++- plugins/dmxusb/src/enttecdmxusbopen.cpp | 5 +++-- plugins/dmxusb/src/enttecdmxusbpro.cpp | 2 +- plugins/dmxusb/src/euroliteusbdmxpro.cpp | 2 +- plugins/dmxusb/src/nanodmx.cpp | 2 +- plugins/dmxusb/src/stageprofi.cpp | 2 +- plugins/dmxusb/src/vinceusbdmx512.cpp | 2 +- 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/plugins/dmxusb/src/dmxusbwidget.cpp b/plugins/dmxusb/src/dmxusbwidget.cpp index 7ffb33d63f..9b92ce638f 100644 --- a/plugins/dmxusb/src/dmxusbwidget.cpp +++ b/plugins/dmxusb/src/dmxusbwidget.cpp @@ -31,9 +31,7 @@ #include "stageprofi.h" #include "vinceusbdmx512.h" -#define DEFAULT_OUTPUT_FREQUENCY 44 // 44 Hertz, according to the DMX specs - -DMXUSBWidget::DMXUSBWidget(DMXInterface *interface, quint32 outputLine) +DMXUSBWidget::DMXUSBWidget(DMXInterface *interface, quint32 outputLine, int frequency) : m_interface(interface) , m_outputBaseLine(outputLine) , m_inputBaseLine(0) @@ -44,7 +42,7 @@ DMXUSBWidget::DMXUSBWidget(DMXInterface *interface, quint32 outputLine) if (freqMap.contains(m_interface->serial())) setOutputFrequency(freqMap[m_interface->serial()].toInt()); else - setOutputFrequency(DEFAULT_OUTPUT_FREQUENCY); + setOutputFrequency(frequency); setOutputsNumber(1); setInputsNumber(0); @@ -397,7 +395,7 @@ 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; + m_frameTimeUs = int((floor((1000.0 / double(m_frequency)) + 0.5)) * 1000.0); } /******************************************************************** diff --git a/plugins/dmxusb/src/dmxusbwidget.h b/plugins/dmxusb/src/dmxusbwidget.h index b76df3a0e0..c02d70599b 100644 --- a/plugins/dmxusb/src/dmxusbwidget.h +++ b/plugins/dmxusb/src/dmxusbwidget.h @@ -33,6 +33,8 @@ #include "qtserial-interface.h" #endif +#define DEFAULT_OUTPUT_FREQUENCY 44 // 44 Hertz, according to the DMX specs + typedef struct { /** The device line type (DMX, MIDI, etc) */ @@ -57,7 +59,7 @@ class DMXUSBWidget * @param interface The widget's DMXInterface instance * @param outputLine the specific output line this widget is going to control */ - DMXUSBWidget(DMXInterface *interface, quint32 outputLine); + DMXUSBWidget(DMXInterface *interface, quint32 outputLine, int frequency); virtual ~DMXUSBWidget(); diff --git a/plugins/dmxusb/src/enttecdmxusbopen.cpp b/plugins/dmxusb/src/enttecdmxusbopen.cpp index 97f85afb90..8be584aab0 100644 --- a/plugins/dmxusb/src/enttecdmxusbopen.cpp +++ b/plugins/dmxusb/src/enttecdmxusbopen.cpp @@ -29,6 +29,7 @@ #define DMX_MAB 16 #define DMX_BREAK 110 #define DMX_CHANNELS 512 +#define DEFAULT_OPEN_DMX_FREQUENCY 30 // crap #define SETTINGS_CHANNELS "enttecdmxusbopen/channels" /**************************************************************************** @@ -38,7 +39,7 @@ EnttecDMXUSBOpen::EnttecDMXUSBOpen(DMXInterface *interface, quint32 outputLine, QObject* parent) : QThread(parent) - , DMXUSBWidget(interface, outputLine) + , DMXUSBWidget(interface, outputLine, DEFAULT_OPEN_DMX_FREQUENCY) , m_running(false) , m_granularity(Unknown) { @@ -208,7 +209,7 @@ void EnttecDMXUSBOpen::run() framesleep: // Sleep for the remainder of the DMX frame time // and set granularity accordingly - int timetoSleep = m_frameTimeUs - (timer.nsecsElapsed() / 1000); + long 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 8cfb6f71e2..a152ca6de8 100644 --- a/plugins/dmxusb/src/enttecdmxusbpro.cpp +++ b/plugins/dmxusb/src/enttecdmxusbpro.cpp @@ -27,7 +27,7 @@ EnttecDMXUSBPro::EnttecDMXUSBPro(DMXInterface *interface, quint32 outputLine, quint32 inputLine) : QThread(NULL) - , DMXUSBWidget(interface, outputLine) + , DMXUSBWidget(interface, outputLine, DEFAULT_OUTPUT_FREQUENCY) , m_dmxKingMode(false) , m_inputThread(NULL) , m_outputRunning(false) diff --git a/plugins/dmxusb/src/euroliteusbdmxpro.cpp b/plugins/dmxusb/src/euroliteusbdmxpro.cpp index 0e596521ff..8bfb4f6419 100644 --- a/plugins/dmxusb/src/euroliteusbdmxpro.cpp +++ b/plugins/dmxusb/src/euroliteusbdmxpro.cpp @@ -23,7 +23,7 @@ #include EuroliteUSBDMXPro::EuroliteUSBDMXPro(DMXInterface *interface, quint32 outputLine) - : DMXUSBWidget(interface, outputLine) + : DMXUSBWidget(interface, outputLine, DEFAULT_OUTPUT_FREQUENCY) , m_running(false) { } diff --git a/plugins/dmxusb/src/nanodmx.cpp b/plugins/dmxusb/src/nanodmx.cpp index 6f610c6f50..c05c88e938 100644 --- a/plugins/dmxusb/src/nanodmx.cpp +++ b/plugins/dmxusb/src/nanodmx.cpp @@ -23,7 +23,7 @@ #include NanoDMX::NanoDMX(DMXInterface *interface, quint32 outputLine) - : DMXUSBWidget(interface, outputLine) + : DMXUSBWidget(interface, outputLine, DEFAULT_OUTPUT_FREQUENCY) , m_running(false) { } diff --git a/plugins/dmxusb/src/stageprofi.cpp b/plugins/dmxusb/src/stageprofi.cpp index ec2fbf5982..406f3671d1 100644 --- a/plugins/dmxusb/src/stageprofi.cpp +++ b/plugins/dmxusb/src/stageprofi.cpp @@ -23,7 +23,7 @@ #include Stageprofi::Stageprofi(DMXInterface *interface, quint32 outputLine) - : DMXUSBWidget(interface, outputLine) + : DMXUSBWidget(interface, outputLine, DEFAULT_OUTPUT_FREQUENCY) , m_running(false) { } diff --git a/plugins/dmxusb/src/vinceusbdmx512.cpp b/plugins/dmxusb/src/vinceusbdmx512.cpp index 8224c7352f..d95e6da168 100644 --- a/plugins/dmxusb/src/vinceusbdmx512.cpp +++ b/plugins/dmxusb/src/vinceusbdmx512.cpp @@ -21,7 +21,7 @@ #include "vinceusbdmx512.h" VinceUSBDMX512::VinceUSBDMX512(DMXInterface *interface, quint32 outputLine) - : DMXUSBWidget(interface, outputLine) + : DMXUSBWidget(interface, outputLine, DEFAULT_OUTPUT_FREQUENCY) { // TODO: Check if DMX IN is available }