Merge pull request #1432 from Aircoookie/master

Merge master to dev
This commit is contained in:
Aircoookie 2020-12-04 10:04:02 +01:00 committed by GitHub
commit c930d6ddc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 236 additions and 75 deletions

View File

@ -31,14 +31,15 @@
// Add the IDs of extensions you want installed when the container is created. // Add the IDs of extensions you want installed when the container is created.
"extensions": [ "extensions": [
"ms-python.python" "ms-python.python",
"platformio.platformio-ide"
], ],
// Use 'forwardPorts' to make a list of ports inside the container available locally. // Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [], // "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created. // Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "pip3 install --user -r requirements.txt", "postCreateCommand": "npm install",
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode" "remoteUser": "vscode"

42
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build: HTML and binary",
"dependsOn": [
"Build: HTML only",
"Build: binary only"
],
"dependsOrder": "sequence",
"problemMatcher": [
"$platformio",
],
},
{
"type": "PlatformIO",
"label": "Build: binary only",
"task": "Build",
"group": {
"kind": "build",
"isDefault": true,
},
"problemMatcher": [
"$platformio"
],
"presentation": {
"panel": "shared"
}
},
{
"type": "npm",
"script": "build",
"group": "build",
"problemMatcher": [],
"label": "Build: HTML only",
"detail": "npm run build",
"presentation": {
"panel": "shared"
}
}
]
}

View File

@ -2,6 +2,15 @@
### WLED version 0.11.0 ### WLED version 0.11.0
#### Build 2012020
- UDP `parsePacket()` with sync disabled (#1390)
- Added Multi RGBW DMX mode (PR #1383)
#### Build 2012010
- Fixed compilation for analog (PWM) LEDs
#### Build 2011290 #### Build 2011290
- Release of WLED 0.11.0 "Mirai" - Release of WLED 0.11.0 "Mirai"

View File

@ -59,6 +59,9 @@ arduino_core_git = https://github.com/platformio/platform-espressif8266#feature/
platform_wled_default = ${common.arduino_core_2_7_4} platform_wled_default = ${common.arduino_core_2_7_4}
# We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization # We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization
platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7 platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7
platformio/toolchain-xtensa @ ~2.40802.200502
platformio/tool-esptool @ ~1.413.0
platformio/tool-esptoolpy @ ~1.30000.0
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# FLAGS: DEBUG # FLAGS: DEBUG
@ -104,7 +107,6 @@ build_flags =
-Wno-return-type -Wno-return-type
-Wno-sequence-point -Wno-sequence-point
-Wno-narrowing -Wno-narrowing
-Wno-reorder
-DMQTT_MAX_PACKET_SIZE=1024 -DMQTT_MAX_PACKET_SIZE=1024
-DSECURE_CLIENT=SECURE_CLIENT_BEARSSL -DSECURE_CLIENT=SECURE_CLIENT_BEARSSL
-DBEARSSL_SSL_BASIC -DBEARSSL_SSL_BASIC
@ -121,6 +123,7 @@ build_flags =
build_unflags = build_unflags =
-Wall -Wall
-Wreorder
-Wdeprecated-declarations -Wdeprecated-declarations
# enables all features for travis CI # enables all features for travis CI
@ -187,14 +190,14 @@ upload_speed = 115200
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
lib_compat_mode = strict lib_compat_mode = strict
lib_deps = lib_deps =
FastLED@3.3.2 fastled/FastLED @ 3.3.2
NeoPixelBus@2.6.0 NeoPixelBus @ 2.6.0
ESPAsyncTCP@1.2.0 ESPAsyncTCP @ 1.2.0
ESPAsyncUDP ESPAsyncUDP
AsyncTCP@1.0.3 AsyncTCP @ 1.0.3
IRremoteESP8266@2.7.3 IRremoteESP8266 @ 2.7.3
https://github.com/lorol/LITTLEFS.git https://github.com/lorol/LITTLEFS.git
https://github.com/Aircoookie/ESPAsyncWebServer.git@~2.0.0 https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.0
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line #For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI #TFT_eSPI
#For use SSD1306 OLED display uncomment following #For use SSD1306 OLED display uncomment following

View File

@ -41,6 +41,7 @@
#endif #endif
#include <NeoPixelBrightnessBus.h> #include <NeoPixelBrightnessBus.h>
#include "const.h"
const uint8_t numStrips = NUM_STRIPS; // max 8 strips allowed on esp32 const uint8_t numStrips = NUM_STRIPS; // max 8 strips allowed on esp32
const uint16_t pixelCounts[numStrips] = {PIXEL_COUNTS}; // number of pixels on each strip const uint16_t pixelCounts[numStrips] = {PIXEL_COUNTS}; // number of pixels on each strip
@ -190,7 +191,7 @@ public:
} }
} }
void SetPixelColor(uint16_t indexPixel, RgbwColor color) void SetPixelColorRaw(uint16_t indexPixel, RgbwColor c)
{ {
// figure out which strip this pixel index is on // figure out which strip this pixel index is on
uint8_t stripIdx = 0; uint8_t stripIdx = 0;
@ -211,17 +212,17 @@ public:
{ {
case NeoPixelType_Grb: case NeoPixelType_Grb:
{ {
RgbColor c = RgbColor(color.R, color.G, color.B); RgbColor rgb = RgbColor(c.R, c.G, c.B);
switch (stripIdx) switch (stripIdx)
{ {
case 0: pGrb0->SetPixelColor(indexPixel, c); break; case 0: pGrb0->SetPixelColor(indexPixel, rgb); break;
case 1: pGrb1->SetPixelColor(indexPixel, c); break; case 1: pGrb1->SetPixelColor(indexPixel, rgb); break;
case 2: pGrb2->SetPixelColor(indexPixel, c); break; case 2: pGrb2->SetPixelColor(indexPixel, rgb); break;
case 3: pGrb3->SetPixelColor(indexPixel, c); break; case 3: pGrb3->SetPixelColor(indexPixel, rgb); break;
case 4: pGrb4->SetPixelColor(indexPixel, c); break; case 4: pGrb4->SetPixelColor(indexPixel, rgb); break;
case 5: pGrb5->SetPixelColor(indexPixel, c); break; case 5: pGrb5->SetPixelColor(indexPixel, rgb); break;
case 6: pGrb6->SetPixelColor(indexPixel, c); break; case 6: pGrb6->SetPixelColor(indexPixel, rgb); break;
case 7: pGrb7->SetPixelColor(indexPixel, c); break; case 7: pGrb7->SetPixelColor(indexPixel, rgb); break;
} }
break; break;
} }
@ -229,20 +230,48 @@ public:
{ {
switch (stripIdx) switch (stripIdx)
{ {
case 0: pGrbw0->SetPixelColor(indexPixel, color); break; case 0: pGrbw0->SetPixelColor(indexPixel, c); break;
case 1: pGrbw1->SetPixelColor(indexPixel, color); break; case 1: pGrbw1->SetPixelColor(indexPixel, c); break;
case 2: pGrbw2->SetPixelColor(indexPixel, color); break; case 2: pGrbw2->SetPixelColor(indexPixel, c); break;
case 3: pGrbw3->SetPixelColor(indexPixel, color); break; case 3: pGrbw3->SetPixelColor(indexPixel, c); break;
case 4: pGrbw4->SetPixelColor(indexPixel, color); break; case 4: pGrbw4->SetPixelColor(indexPixel, c); break;
case 5: pGrbw5->SetPixelColor(indexPixel, color); break; case 5: pGrbw5->SetPixelColor(indexPixel, c); break;
case 6: pGrbw6->SetPixelColor(indexPixel, color); break; case 6: pGrbw6->SetPixelColor(indexPixel, c); break;
case 7: pGrbw7->SetPixelColor(indexPixel, color); break; case 7: pGrbw7->SetPixelColor(indexPixel, c); break;
} }
break; break;
} }
} }
} }
void SetPixelColor(uint16_t indexPixel, RgbwColor c)
{
/*
Set pixel color with necessary color order conversion.
*/
RgbwColor col;
uint8_t co = _colorOrder;
#ifdef COLOR_ORDER_OVERRIDE
if (indexPixel >= COO_MIN && indexPixel < COO_MAX) co = COO_ORDER;
#endif
//reorder channels to selected order
switch (co)
{
case 0: col.G = c.G; col.R = c.R; col.B = c.B; break; //0 = GRB, default
case 1: col.G = c.R; col.R = c.G; col.B = c.B; break; //1 = RGB, common for WS2811
case 2: col.G = c.B; col.R = c.R; col.B = c.G; break; //2 = BRG
case 3: col.G = c.R; col.R = c.B; col.B = c.G; break; //3 = RBG
case 4: col.G = c.B; col.R = c.G; col.B = c.R; break; //4 = BGR
default: col.G = c.G; col.R = c.B; col.B = c.R; break; //5 = GBR
}
col.W = c.W;
SetPixelColorRaw(indexPixel, col);
}
void SetBrightness(byte b) void SetBrightness(byte b)
{ {
switch (_type) switch (_type)
@ -286,9 +315,17 @@ public:
} }
} }
// NOTE: Due to feature differences, some support RGBW but the method name void SetColorOrder(byte colorOrder)
// here needs to be unique, thus GetPixeColorRgbw {
RgbwColor GetPixelColorRgbw(uint16_t indexPixel) const _colorOrder = colorOrder;
}
uint8_t GetColorOrder()
{
return _colorOrder;
}
RgbwColor GetPixelColorRaw(uint16_t indexPixel) const
{ {
// figure out which strip this pixel index is on // figure out which strip this pixel index is on
uint8_t stripIdx = 0; uint8_t stripIdx = 0;
@ -339,8 +376,35 @@ public:
return 0; return 0;
} }
// NOTE: Due to feature differences, some support RGBW but the method name
// here needs to be unique, thus GetPixeColorRgbw
uint32_t GetPixelColorRgbw(uint16_t indexPixel) const
{
RgbwColor col = GetPixelColorRaw(indexPixel);
uint8_t co = _colorOrder;
#ifdef COLOR_ORDER_OVERRIDE
if (indexPixel >= COO_MIN && indexPixel < COO_MAX) co = COO_ORDER;
#endif
switch (co)
{
// W G R B
case 0: return ((col.W << 24) | (col.G << 8) | (col.R << 16) | (col.B)); //0 = GRB, default
case 1: return ((col.W << 24) | (col.R << 8) | (col.G << 16) | (col.B)); //1 = RGB, common for WS2811
case 2: return ((col.W << 24) | (col.B << 8) | (col.R << 16) | (col.G)); //2 = BRG
case 3: return ((col.W << 24) | (col.B << 8) | (col.G << 16) | (col.R)); //3 = RBG
case 4: return ((col.W << 24) | (col.R << 8) | (col.B << 16) | (col.G)); //4 = BGR
case 5: return ((col.W << 24) | (col.G << 8) | (col.B << 16) | (col.R)); //5 = GBR
}
return 0;
}
private: private:
NeoPixelType _type; NeoPixelType _type;
byte _colorOrder = 0;
uint16_t pixelStripStartIdx[numStrips]; uint16_t pixelStripStartIdx[numStrips];

View File

@ -741,7 +741,7 @@ const char JSON_palette_names[] PROGMEM = R"=====([
"Pastel","Sunset 2","Beech","Vintage","Departure","Landscape","Beach","Sherbet","Hult","Hult 64", "Pastel","Sunset 2","Beech","Vintage","Departure","Landscape","Beach","Sherbet","Hult","Hult 64",
"Drywet","Jul","Grintage","Rewhi","Tertiary","Fire","Icefire","Cyane","Light Pink","Autumn", "Drywet","Jul","Grintage","Rewhi","Tertiary","Fire","Icefire","Cyane","Light Pink","Autumn",
"Magenta","Magred","Yelmag","Yelblu","Orange & Teal","Tiamat","April Night","Orangery","C9","Sakura", "Magenta","Magred","Yelmag","Yelblu","Orange & Teal","Tiamat","April Night","Orangery","C9","Sakura",
"Aurora","Atlantica","C9 2","C9 New" "Aurora","Atlantica","C9 2","C9 New","Temperature"
])====="; ])=====";
#endif #endif

View File

@ -928,7 +928,7 @@ void WS2812FX::setRgbwPwm(void) {
c.R = col >> 16; c.G = col >> 8; c.B = col; c.W = col >> 24; c.R = col >> 16; c.G = col >> 8; c.B = col; c.W = col >> 24;
byte b = getBrightness(); byte b = getBrightness();
if (color == _analogLastColor && b == _analogLastBri) return; if (c == _analogLastColor && b == _analogLastBri) return;
// check color values for Warm / Cold white mix (for RGBW) // EsplanexaDevice.cpp // check color values for Warm / Cold white mix (for RGBW) // EsplanexaDevice.cpp
#ifdef WLED_USE_5CH_LEDS #ifdef WLED_USE_5CH_LEDS
@ -948,7 +948,7 @@ void WS2812FX::setRgbwPwm(void) {
#else #else
bus->SetRgbwPwm(c.R * b / 255, c.G * b / 255, c.B * b / 255, c.W * b / 255); bus->SetRgbwPwm(c.R * b / 255, c.G * b / 255, c.B * b / 255, c.W * b / 255);
#endif #endif
_analogLastColor = color; _analogLastColor = c;
_analogLastBri = b; _analogLastBri = b;
} }
#else #else

View File

@ -77,6 +77,7 @@
#define DMX_MODE_EFFECT 3 //trigger standalone effects of WLED (11 channels) #define DMX_MODE_EFFECT 3 //trigger standalone effects of WLED (11 channels)
#define DMX_MODE_MULTIPLE_RGB 4 //every LED is addressed with its own RGB (ledCount * 3 channels) #define DMX_MODE_MULTIPLE_RGB 4 //every LED is addressed with its own RGB (ledCount * 3 channels)
#define DMX_MODE_MULTIPLE_DRGB 5 //every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels) #define DMX_MODE_MULTIPLE_DRGB 5 //every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels)
#define DMX_MODE_MULTIPLE_RGBW 6 //every LED is addressed with its own RGBW (ledCount * 4 channels)
//Light capability byte (unused) 0bRRCCTTTT //Light capability byte (unused) 0bRRCCTTTT
//bits 0/1/2/3: specifies a type of LED driver. A single "driver" may have different chip models but must have the same protocol/behavior //bits 0/1/2/3: specifies a type of LED driver. A single "driver" may have different chip models but must have the same protocol/behavior

View File

@ -64,6 +64,7 @@ DMX mode:
<option value=3>Effect</option> <option value=3>Effect</option>
<option value=4>Multi RGB</option> <option value=4>Multi RGB</option>
<option value=5>Dimmer + Multi RGB</option> <option value=5>Dimmer + Multi RGB</option>
<option value=6>Multi RGBW</option>
</select><br> </select><br>
<a href="https://github.com/Aircoookie/WLED/wiki/E1.31-DMX" target="_blank">E1.31 info</a><br> <a href="https://github.com/Aircoookie/WLED/wiki/E1.31-DMX" target="_blank">E1.31 info</a><br>
Timeout: <input name="ET" type="number" min="1" max="65000" required> ms<br> Timeout: <input name="ET" type="number" min="1" max="65000" required> ms<br>

View File

@ -1,6 +1,7 @@
#include "wled.h" #include "wled.h"
#define MAX_LEDS_PER_UNIVERSE 170 #define MAX_3_CH_LEDS_PER_UNIVERSE 170
#define MAX_4_CH_LEDS_PER_UNIVERSE 128
#define MAX_CHANNELS_PER_UNIVERSE 512 #define MAX_CHANNELS_PER_UNIVERSE 512
/* /*
@ -161,8 +162,12 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
case DMX_MODE_MULTIPLE_DRGB: case DMX_MODE_MULTIPLE_DRGB:
case DMX_MODE_MULTIPLE_RGB: case DMX_MODE_MULTIPLE_RGB:
case DMX_MODE_MULTIPLE_RGBW:
{ {
realtimeLock(realtimeTimeoutMs, mde); realtimeLock(realtimeTimeoutMs, mde);
bool is4Chan = (DMXMode == DMX_MODE_MULTIPLE_RGBW);
const uint16_t dmxChannelsPerLed = is4Chan ? 4 : 3;
const uint16_t ledsPerUniverse = is4Chan ? MAX_4_CH_LEDS_PER_UNIVERSE : MAX_3_CH_LEDS_PER_UNIVERSE;
if (realtimeOverride) return; if (realtimeOverride) return;
uint16_t previousLeds, dmxOffset; uint16_t previousLeds, dmxOffset;
if (previousUniverses == 0) { if (previousUniverses == 0) {
@ -176,12 +181,18 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
} else { } else {
// All subsequent universes start at the first channel. // All subsequent universes start at the first channel.
dmxOffset = (protocol == P_ARTNET) ? 0 : 1; dmxOffset = (protocol == P_ARTNET) ? 0 : 1;
uint16_t ledsInFirstUniverse = (MAX_CHANNELS_PER_UNIVERSE - DMXAddress) / 3; uint16_t ledsInFirstUniverse = (MAX_CHANNELS_PER_UNIVERSE - DMXAddress) / dmxChannelsPerLed;
previousLeds = ledsInFirstUniverse + (previousUniverses - 1) * MAX_LEDS_PER_UNIVERSE; previousLeds = ledsInFirstUniverse + (previousUniverses - 1) * ledsPerUniverse;
} }
uint16_t ledsTotal = previousLeds + (dmxChannels - dmxOffset +1) / 3; uint16_t ledsTotal = previousLeds + (dmxChannels - dmxOffset +1) / dmxChannelsPerLed;
for (uint16_t i = previousLeds; i < ledsTotal; i++) { if (!is4Chan) {
setRealtimePixel(i, e131_data[dmxOffset++], e131_data[dmxOffset++], e131_data[dmxOffset++], 0); for (uint16_t i = previousLeds; i < ledsTotal; i++) {
setRealtimePixel(i, e131_data[dmxOffset++], e131_data[dmxOffset++], e131_data[dmxOffset++], 0);
}
} else {
for (uint16_t i = previousLeds; i < ledsTotal; i++) {
setRealtimePixel(i, e131_data[dmxOffset++], e131_data[dmxOffset++], e131_data[dmxOffset++], e131_data[dmxOffset++]);
}
} }
break; break;
} }

View File

@ -238,7 +238,8 @@ type="checkbox" name="ES"><br>DMX start address: <input name="DA" type="number"
min="0" max="510" required><br>DMX mode: <select name="DM"><option value="0"> min="0" max="510" required><br>DMX mode: <select name="DM"><option value="0">
Disabled</option><option value="1">Single RGB</option><option value="2"> Disabled</option><option value="1">Single RGB</option><option value="2">
Single DRGB</option><option value="3">Effect</option><option value="4">Multi RGB Single DRGB</option><option value="3">Effect</option><option value="4">Multi RGB
</option><option value="5">Dimmer + Multi RGB</option></select><br><a </option><option value="5">Dimmer + Multi RGB</option><option value="6">
Multi RGBW</option></select><br><a
href="https://github.com/Aircoookie/WLED/wiki/E1.31-DMX" target="_blank"> href="https://github.com/Aircoookie/WLED/wiki/E1.31-DMX" target="_blank">
E1.31 info</a><br>Timeout: <input name="ET" type="number" min="1" max="65000" E1.31 info</a><br>Timeout: <input name="ET" type="number" min="1" max="65000"
required> ms<br>Force max brightness: <input type="checkbox" name="FB"><br> required> ms<br>Force max brightness: <input type="checkbox" name="FB"><br>

View File

@ -13,7 +13,7 @@
#ifndef PalettesWLED_h #ifndef PalettesWLED_h
#define PalettesWLED_h #define PalettesWLED_h
#define GRADIENT_PALETTE_COUNT 41 #define GRADIENT_PALETTE_COUNT 42
const byte ib_jul01_gp[] PROGMEM = { const byte ib_jul01_gp[] PROGMEM = {
0, 194, 1, 1, 0, 194, 1, 1,
@ -606,6 +606,30 @@ const byte Atlantica_gp[] PROGMEM = {
180, 4, 30, 114, //blue (start 191?) 180, 4, 30, 114, //blue (start 191?)
255, 4, 30, 114}; 255, 4, 30, 114};
// Gradient palette "temperature_gp", originally from
// http://soliton.vm.bytemark.co.uk/pub/cpt-city/arendal/tn/temperature.png.index.html
// converted for FastLED with gammas (2.6, 2.2, 2.5)
// Size: 144 bytes of program space.
const byte temperature_gp[] PROGMEM = {
0, 1, 27,105,
14, 1, 40,127,
28, 1, 70,168,
42, 1, 92,197,
56, 1,119,221,
70, 3,130,151,
84, 23,156,149,
99, 67,182,112,
113, 121,201, 52,
127, 142,203, 11,
141, 224,223, 1,
155, 252,187, 2,
170, 247,147, 1,
184, 237, 87, 1,
198, 229, 43, 1,
226, 171, 2, 2,
240, 80, 3, 3,
255, 80, 3, 3};
// Single array of defined cpt-city color palettes. // Single array of defined cpt-city color palettes.
// This will let us programmatically choose one based on // This will let us programmatically choose one based on
@ -652,7 +676,8 @@ const byte* const gGradientPalettes[] PROGMEM = {
Aurora_gp, //50-37 Aurora Aurora_gp, //50-37 Aurora
Atlantica_gp, //51-38 Atlantica Atlantica_gp, //51-38 Atlantica
C9_2_gp, //52-39 C9 2 C9_2_gp, //52-39 C9 2
C9_new_gp //53-40 C9 New C9_new_gp, //53-40 C9 New
temperature_gp //54-41 Temperature
}; };
#endif #endif

View File

@ -152,7 +152,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
t = request->arg(F("DA")).toInt(); t = request->arg(F("DA")).toInt();
if (t >= 0 && t <= 510) DMXAddress = t; if (t >= 0 && t <= 510) DMXAddress = t;
t = request->arg(F("DM")).toInt(); t = request->arg(F("DM")).toInt();
if (t >= DMX_MODE_DISABLED && t <= DMX_MODE_MULTIPLE_DRGB) DMXMode = t; if (t >= DMX_MODE_DISABLED && t <= DMX_MODE_MULTIPLE_RGBW) DMXMode = t;
t = request->arg(F("ET")).toInt(); t = request->arg(F("ET")).toInt();
if (t > 99 && t <= 65000) realtimeTimeoutMs = t; if (t > 99 && t <= 65000) realtimeTimeoutMs = t;
arlsForceMaxBri = request->hasArg(F("FB")); arlsForceMaxBri = request->hasArg(F("FB"));

View File

@ -123,7 +123,7 @@ void handleNotifications()
} }
//receive UDP notifications //receive UDP notifications
if (!udpConnected || !(receiveNotifications || receiveDirect)) return; if (!udpConnected) return;
bool isSupp = false; bool isSupp = false;
uint16_t packetSize = notifierUdp.parsePacket(); uint16_t packetSize = notifierUdp.parsePacket();
@ -156,15 +156,17 @@ void handleNotifications()
} }
} }
if (!(receiveNotifications || receiveDirect)) return;
//notifier and UDP realtime //notifier and UDP realtime
if (!packetSize || packetSize > UDP_IN_MAXSIZE) return; if (!packetSize || packetSize > UDP_IN_MAXSIZE) return;
if (!isSupp && notifierUdp.remoteIP() == Network.localIP()) return; //don't process broadcasts we send ourselves if (!isSupp && notifierUdp.remoteIP() == Network.localIP()) return; //don't process broadcasts we send ourselves
uint8_t udpIn[packetSize +1]; uint8_t udpIn[packetSize +1];
if (isSupp) notifier2Udp.read(udpIn, packetSize); if (isSupp) notifier2Udp.read(udpIn, packetSize);
else notifierUdp.read(udpIn, packetSize); else notifierUdp.read(udpIn, packetSize);
//wled notifier, block if realtime packets active //wled notifier, ignore if realtime packets active
if (udpIn[0] == 0 && !realtimeMode && receiveNotifications) if (udpIn[0] == 0 && !realtimeMode && receiveNotifications)
{ {
//ignore notification if received within a second after sending a notification ourselves //ignore notification if received within a second after sending a notification ourselves
@ -223,6 +225,7 @@ void handleNotifications()
colorUpdated(NOTIFIER_CALL_MODE_NOTIFICATION); colorUpdated(NOTIFIER_CALL_MODE_NOTIFICATION);
return; return;
} }
if (!receiveDirect) return; if (!receiveDirect) return;
//TPM2.NET //TPM2.NET

View File

@ -8,7 +8,7 @@
*/ */
// version code in format yymmddb (b = daily build) // version code in format yymmddb (b = daily build)
#define VERSION 2011290 #define VERSION 2012020
//uncomment this if you have a "my_config.h" file you'd like to use //uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG //#define WLED_USE_MY_CONFIG