-
Notifications
You must be signed in to change notification settings - Fork 205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added '-padding' option to uartdmx plugin. #1656
base: 0.10
Are you sure you want to change the base?
Conversation
Sets minimal slots count in UART frame. Default is 0, will behave as before.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please also add the setting to the plugin README
Sets minimal slots count in UART frame. Default is 0, will behave as before.
|
No, some of the tests area bit flaky on Mac, you can ignore this.
On 0.10 the plugin description is in the code: ola/plugins/uartdmx/UartDmxPlugin.cpp Lines 114 to 120 in 7892723
However I'd suggest if this code was to go in, that it should go in master, as it's a feature not a bug fix. Can I ask the broader question, why? The web interface sends a full frame, any API can do so too, what's the reasoning for adding this to this plugin rather than dealing with it at source? I think the Enttec Pro's behave the same way and probably the Open's too. This would also be a perfect candidate for Patcher v2 #280. |
So, keep README or edit in-code descriptption?
This code fixes #1523 , I got some "hardware madness" with zero-lenght frames. |
Sorry this slipped through the net a bit.
Edit the in-code description if targetting 0.10 or the README if targetting master.
Ah okay, makes sense.
Yeah I think we're agreeing, fixing in the plugin is the most sense.
Great thanks. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry this got missed before @rbalykov , thanks for your contribution, a few comments if you don't mind.
@@ -0,0 +1,34 @@ | |||
Native UART DMX Plugin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As discussed, please remove this file and edit PluginDescription if targeting 0.10.
@@ -60,11 +61,14 @@ class UartDmxDevice : public Device { | |||
const std::string m_path; | |||
unsigned int m_breakt; | |||
unsigned int m_malft; | |||
unsigned int m_paddingt; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the t's were timing, e..g break time, mark after last frame time, so this should probably just be m_padding.
data.Get(buffer + 1, &length); | ||
if (length < m_padding) { | ||
memset((buffer + 1 + length), 0x00, (m_padding - length) ); | ||
length = m_padding; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Given as you've said this is probably required in a few other plugins, I wonder if it makes sense to add some extra options to DmxBuffer? e.g. GetWithPadding(uint8_t *data, unsigned int *length, unsigned int min_length). Or alternatively a Pad/Grow function which modifies the buffer in place (to save duplicating lots of functions), although the latter would need to be called on the lower level buffer in UartThread as this one is const so maybe GetWithPadding is simpler.
@@ -48,9 +48,9 @@ class UartWidget { | |||
/** | |||
* Construct a new UartWidget instance for one widget. | |||
* @param path The device file path of the serial port | |||
* @param padding Minimum DMX frame slots count, padded with NULLs |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possibly semantics, but I'd say they are zeros here, as they will be actual channel data.
@@ -54,8 +55,9 @@ namespace uartdmx { | |||
using std::string; | |||
using std::vector; | |||
|
|||
UartWidget::UartWidget(const string& path) | |||
UartWidget::UartWidget(const std::string &path, unsigned int padding) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The std:: isn't needed here as we're using std::string
@@ -46,6 +46,7 @@ | |||
#include "ola/io/IOUtils.h" | |||
#include "ola/Logging.h" | |||
#include "plugins/uartdmx/UartWidget.h" | |||
#include "plugins/uartdmx/UartDmxDevice.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we need this include do we?
The Mark After Last Frame time in microseconds for this device (optional). | ||
|
||
`<device>-padding = 0` Minimal slots count in DMX frame (optional). | ||
Default is 0, which allows empty frame. Using minimal timing, frame period reaches 140 microseconds, while standard requires minimum 1204us. Using BREAK=88us and MAB=8us, frame has to include 25 slots, that gives frame period 1240us. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you're feeling particularly keen, it would be really nice on initialisation to print an OLA_INFO with the minimum padding value (based on break/MAB/MALF), or even an OLA_WARN if the configured padding is insufficient!
Sets minimal slots count in UART frame. Default is 0, will behave as before.