Merge pull request #862 from pille/DMX-proxy
implement DMX proxy mode via MAX485
This commit is contained in:
commit
afd990bd71
@ -47,6 +47,7 @@ Type:
|
|||||||
</select><br>
|
</select><br>
|
||||||
<div id=xp>Port: <input name="EP" type="number" min="1" max="65535" value="5568" class="d5" required><br></div>
|
<div id=xp>Port: <input name="EP" type="number" min="1" max="65535" value="5568" class="d5" required><br></div>
|
||||||
Multicast: <input type="checkbox" name="EM"><br>
|
Multicast: <input type="checkbox" name="EM"><br>
|
||||||
|
Proxy Universe <input name=PU type=number min=0 max=63999 required> to DMX via MAX485 DI pin connected to D4 (0=disabled, compile with WLED_ENABLE_DMX)<br>
|
||||||
Start universe: <input name="EU" type="number" min="0" max="63999" required><br>
|
Start universe: <input name="EU" type="number" min="0" max="63999" required><br>
|
||||||
<i>Reboot required.</i> Check out <a href="https://github.com/ahodges9/LedFx" target="_blank">LedFx</a>!<br>
|
<i>Reboot required.</i> Check out <a href="https://github.com/ahodges9/LedFx" target="_blank">LedFx</a>!<br>
|
||||||
Skip out-of-sequence packets: <input type="checkbox" name="ES"><br>
|
Skip out-of-sequence packets: <input type="checkbox" name="ES"><br>
|
||||||
|
@ -8,11 +8,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef WLED_ENABLE_DMX
|
#ifdef WLED_ENABLE_DMX
|
||||||
#include "src/dependencies/dmx/ESPDMX.h"
|
|
||||||
DMXESPSerial dmx;
|
|
||||||
|
|
||||||
void handleDMX()
|
void handleDMX()
|
||||||
{
|
{
|
||||||
|
// don't act, when in DMX Proxy mode
|
||||||
|
if (e131ProxyUniverse != 0) return;
|
||||||
|
|
||||||
// TODO: calculate brightness manually if no shutter channel is set
|
// TODO: calculate brightness manually if no shutter channel is set
|
||||||
|
|
||||||
uint8_t brightness = strip.getBrightness();
|
uint8_t brightness = strip.getBrightness();
|
||||||
|
@ -25,6 +25,15 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, bool isArtnet){
|
|||||||
seq = p->sequence_number;
|
seq = p->sequence_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
// does not act on out-of-order packets yet
|
||||||
|
if (e131ProxyUniverse > 0 && uni == e131ProxyUniverse) {
|
||||||
|
for (uint16_t i = 1; i <= dmxChannels; i++)
|
||||||
|
dmx.write(i, e131_data[i]);
|
||||||
|
dmx.update();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// only listen for universes we're handling & allocated memory
|
// only listen for universes we're handling & allocated memory
|
||||||
if (uni >= (e131Universe + E131_MAX_UNIVERSE_COUNT)) return;
|
if (uni >= (e131Universe + E131_MAX_UNIVERSE_COUNT)) return;
|
||||||
|
|
||||||
|
@ -212,6 +212,7 @@ function S(){GCH(15);GetV();mMap();}function H(){window.open("https://github.com
|
|||||||
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
<button type="button" onclick="B()">Back</button><button type="submit">Save</button><hr>
|
||||||
<h2>Imma firin ma lazer (if it has DMX support)</h2><!-- TODO: Change to something less-meme-related //-->
|
<h2>Imma firin ma lazer (if it has DMX support)</h2><!-- TODO: Change to something less-meme-related //-->
|
||||||
|
|
||||||
|
<i>This functionality may be disabled by DMX Proxy Universe ≠ 0 on sync settings page</i><br>
|
||||||
<i>Number of fixtures is taken from LED config page</i><br>
|
<i>Number of fixtures is taken from LED config page</i><br>
|
||||||
|
|
||||||
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
Channels per fixture (15 max): <input type="number" min="1" max="15" name="CN" maxlength="2" onchange="mMap();"><br />
|
||||||
@ -293,6 +294,7 @@ Type:
|
|||||||
</select><br>
|
</select><br>
|
||||||
<div id=xp>Port: <input name=EP type=number min=1 max=65535 value=5568 class=d5 required><br></div>
|
<div id=xp>Port: <input name=EP type=number min=1 max=65535 value=5568 class=d5 required><br></div>
|
||||||
Multicast: <input type=checkbox name=EM><br>
|
Multicast: <input type=checkbox name=EM><br>
|
||||||
|
Proxy Universe <input name=PU type=number min=0 max=63999 required> to DMX via MAX485 DI pin connected to D4 (0=disabled, compile with WLED_ENABLE_DMX)<br>
|
||||||
Start universe: <input name=EU type=number min=0 max=63999 required><br>
|
Start universe: <input name=EU type=number min=0 max=63999 required><br>
|
||||||
<i>Reboot required.</i> Check out <a href=https://github.com/ahodges9/LedFx target=_blank>LedFx</a>!<br>
|
<i>Reboot required.</i> Check out <a href=https://github.com/ahodges9/LedFx target=_blank>LedFx</a>!<br>
|
||||||
Skip out-of-sequence packets: <input type=checkbox name=ES><br>
|
Skip out-of-sequence packets: <input type=checkbox name=ES><br>
|
||||||
|
@ -144,6 +144,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
|
|||||||
e131Multicast = request->hasArg("EM");
|
e131Multicast = request->hasArg("EM");
|
||||||
t = request->arg("EP").toInt();
|
t = request->arg("EP").toInt();
|
||||||
if (t > 0) e131Port = t;
|
if (t > 0) e131Port = t;
|
||||||
|
#ifdef WLED_ENABLE_DMX // include only if DMX is enabled
|
||||||
|
t = request->arg("PU").toInt();
|
||||||
|
if (t >= 0 && t <= 63999) e131ProxyUniverse = t;
|
||||||
|
#endif
|
||||||
t = request->arg("EU").toInt();
|
t = request->arg("EU").toInt();
|
||||||
if (t >= 0 && t <= 63999) e131Universe = t;
|
if (t >= 0 && t <= 63999) e131Universe = t;
|
||||||
t = request->arg("DA").toInt();
|
t = request->arg("DA").toInt();
|
||||||
|
@ -76,6 +76,10 @@
|
|||||||
#include "src/dependencies/blynk/BlynkSimpleEsp.h"
|
#include "src/dependencies/blynk/BlynkSimpleEsp.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
#include "src/dependencies/dmx/ESPDMX.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "src/dependencies/e131/ESPAsyncE131.h"
|
#include "src/dependencies/e131/ESPAsyncE131.h"
|
||||||
#include "src/dependencies/async-mqtt-client/AsyncMqttClient.h"
|
#include "src/dependencies/async-mqtt-client/AsyncMqttClient.h"
|
||||||
#include "src/dependencies/json/AsyncJson-v6.h"
|
#include "src/dependencies/json/AsyncJson-v6.h"
|
||||||
@ -227,6 +231,10 @@ WLED_GLOBAL bool receiveDirect _INIT(true); // receive UDP
|
|||||||
WLED_GLOBAL bool arlsDisableGammaCorrection _INIT(true); // activate if gamma correction is handled by the source
|
WLED_GLOBAL bool arlsDisableGammaCorrection _INIT(true); // activate if gamma correction is handled by the source
|
||||||
WLED_GLOBAL bool arlsForceMaxBri _INIT(false); // enable to force max brightness if source has very dark colors that would be black
|
WLED_GLOBAL bool arlsForceMaxBri _INIT(false); // enable to force max brightness if source has very dark colors that would be black
|
||||||
|
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
WLED_GLOBAL DMXESPSerial dmx;
|
||||||
|
WLED_GLOBAL uint16_t e131ProxyUniverse _INIT(0); // output this E1.31 (sACN) / ArtNet universe via MAX485 (0 = disabled)
|
||||||
|
#endif
|
||||||
WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings for E1.31 (sACN) protocol (only DMX_MODE_MULTIPLE_* can span over consequtive universes)
|
WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings for E1.31 (sACN) protocol (only DMX_MODE_MULTIPLE_* can span over consequtive universes)
|
||||||
WLED_GLOBAL uint16_t e131Port _INIT(5568); // DMX in port. E1.31 default is 5568, Art-Net is 6454
|
WLED_GLOBAL uint16_t e131Port _INIT(5568); // DMX in port. E1.31 default is 5568, Art-Net is 6454
|
||||||
WLED_GLOBAL byte DMXMode _INIT(DMX_MODE_MULTIPLE_RGB); // DMX mode (s.a.)
|
WLED_GLOBAL byte DMXMode _INIT(DMX_MODE_MULTIPLE_RGB); // DMX mode (s.a.)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//eeprom Version code, enables default settings instead of 0 init on update
|
//eeprom Version code, enables default settings instead of 0 init on update
|
||||||
#define EEPVER 19
|
#define EEPVER 20
|
||||||
//0 -> old version, default
|
//0 -> old version, default
|
||||||
//1 -> 0.4p 1711272 and up
|
//1 -> 0.4p 1711272 and up
|
||||||
//2 -> 0.4p 1711302 and up
|
//2 -> 0.4p 1711302 and up
|
||||||
@ -28,6 +28,7 @@
|
|||||||
//17-> 0.9.1-dmx
|
//17-> 0.9.1-dmx
|
||||||
//18-> 0.9.1-e131
|
//18-> 0.9.1-e131
|
||||||
//19-> 0.9.1n
|
//19-> 0.9.1n
|
||||||
|
//20-> 0.9.1p
|
||||||
|
|
||||||
void commit()
|
void commit()
|
||||||
{
|
{
|
||||||
@ -211,6 +212,11 @@ void saveSettingsToEEPROM()
|
|||||||
EEPROM.write(2181, macroNl);
|
EEPROM.write(2181, macroNl);
|
||||||
EEPROM.write(2182, macroDoublePress);
|
EEPROM.write(2182, macroDoublePress);
|
||||||
|
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
EEPROM.write(2185, e131ProxyUniverse & 0xFF);
|
||||||
|
EEPROM.write(2186, (e131ProxyUniverse >> 8) & 0xFF);
|
||||||
|
#endif
|
||||||
|
|
||||||
EEPROM.write(2187, e131Port & 0xFF);
|
EEPROM.write(2187, e131Port & 0xFF);
|
||||||
EEPROM.write(2188, (e131Port >> 8) & 0xFF);
|
EEPROM.write(2188, (e131Port >> 8) & 0xFF);
|
||||||
|
|
||||||
@ -524,6 +530,13 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
e131Port = EEPROM.read(2187) + ((EEPROM.read(2188) << 8) & 0xFF00);
|
e131Port = EEPROM.read(2187) + ((EEPROM.read(2188) << 8) & 0xFF00);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
if (lastEEPROMversion > 19)
|
||||||
|
{
|
||||||
|
e131ProxyUniverse = EEPROM.read(2185) + ((EEPROM.read(2186) << 8) & 0xFF00);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
receiveDirect = !EEPROM.read(2200);
|
receiveDirect = !EEPROM.read(2200);
|
||||||
notifyMacro = EEPROM.read(2201);
|
notifyMacro = EEPROM.read(2201);
|
||||||
|
|
||||||
|
@ -330,6 +330,9 @@ void getSettingsJS(byte subPage, char* dest)
|
|||||||
sappend('v',"EP",e131Port);
|
sappend('v',"EP",e131Port);
|
||||||
sappend('c',"ES",e131SkipOutOfSequence);
|
sappend('c',"ES",e131SkipOutOfSequence);
|
||||||
sappend('c',"EM",e131Multicast);
|
sappend('c',"EM",e131Multicast);
|
||||||
|
#ifdef WLED_ENABLE_DMX
|
||||||
|
sappend('v',"PU",e131ProxyUniverse);
|
||||||
|
#endif
|
||||||
sappend('v',"EU",e131Universe);
|
sappend('v',"EU",e131Universe);
|
||||||
sappend('v',"DA",DMXAddress);
|
sappend('v',"DA",DMXAddress);
|
||||||
sappend('v',"DM",DMXMode);
|
sappend('v',"DM",DMXMode);
|
||||||
|
Loading…
Reference in New Issue
Block a user