Merge branch 'main' into beta-3
This commit is contained in:
commit
189d145393
@ -133,13 +133,13 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
read32(bmpFS); // filesize in bytes
|
(void) read32(bmpFS); // filesize in bytes
|
||||||
read32(bmpFS); // reserved
|
(void) read32(bmpFS); // reserved
|
||||||
seekOffset = read32(bmpFS); // start of bitmap
|
seekOffset = read32(bmpFS); // start of bitmap
|
||||||
headerSize = read32(bmpFS); // header size
|
headerSize = read32(bmpFS); // header size
|
||||||
w = read32(bmpFS); // width
|
w = read32(bmpFS); // width
|
||||||
h = read32(bmpFS); // height
|
h = read32(bmpFS); // height
|
||||||
read16(bmpFS); // color planes (must be 1)
|
(void) read16(bmpFS); // color planes (must be 1)
|
||||||
bitDepth = read16(bmpFS);
|
bitDepth = read16(bmpFS);
|
||||||
|
|
||||||
if (read32(bmpFS) != 0 || (bitDepth != 24 && bitDepth != 1 && bitDepth != 4 && bitDepth != 8)) {
|
if (read32(bmpFS) != 0 || (bitDepth != 24 && bitDepth != 1 && bitDepth != 4 && bitDepth != 8)) {
|
||||||
@ -151,9 +151,9 @@ private:
|
|||||||
uint32_t palette[256];
|
uint32_t palette[256];
|
||||||
if (bitDepth <= 8) // 1,4,8 bit bitmap: read color palette
|
if (bitDepth <= 8) // 1,4,8 bit bitmap: read color palette
|
||||||
{
|
{
|
||||||
read32(bmpFS); read32(bmpFS); read32(bmpFS); // size, w resolution, h resolution
|
(void) read32(bmpFS); (void) read32(bmpFS); (void) read32(bmpFS); // size, w resolution, h resolution
|
||||||
paletteSize = read32(bmpFS);
|
paletteSize = read32(bmpFS);
|
||||||
if (paletteSize == 0) paletteSize = bitDepth * bitDepth; //if 0, size is 2^bitDepth
|
if (paletteSize == 0) paletteSize = 1 << bitDepth; //if 0, size is 2^bitDepth
|
||||||
bmpFS.seek(14 + headerSize); // start of color palette
|
bmpFS.seek(14 + headerSize); // start of color palette
|
||||||
for (uint16_t i = 0; i < paletteSize; i++) {
|
for (uint16_t i = 0; i < paletteSize; i++) {
|
||||||
palette[i] = read32(bmpFS);
|
palette[i] = read32(bmpFS);
|
||||||
@ -198,7 +198,7 @@ private:
|
|||||||
}
|
}
|
||||||
b = c; g = c >> 8; r = c >> 16;
|
b = c; g = c >> 8; r = c >> 16;
|
||||||
}
|
}
|
||||||
if (dimming != 255) { // only dimm when needed
|
if (dimming != 255) { // only dim when needed
|
||||||
r *= dimming; g *= dimming; b *= dimming;
|
r *= dimming; g *= dimming; b *= dimming;
|
||||||
r = r >> 8; g = g >> 8; b = b >> 8;
|
r = r >> 8; g = g >> 8; b = b >> 8;
|
||||||
}
|
}
|
||||||
|
@ -44,13 +44,13 @@
|
|||||||
typedef struct relay_t {
|
typedef struct relay_t {
|
||||||
int8_t pin;
|
int8_t pin;
|
||||||
struct { // reduces memory footprint
|
struct { // reduces memory footprint
|
||||||
bool active : 1;
|
bool active : 1; // is the relay waiting to be switched
|
||||||
bool mode : 1;
|
bool mode : 1; // does On mean 1 or 0 (inverted output)
|
||||||
bool state : 1;
|
bool state : 1; // 1 relay is On, 0 relay is Off
|
||||||
bool external : 1;
|
bool external : 1; // is the relay externally controlled
|
||||||
int8_t button : 4;
|
int8_t button : 4; // which button triggers relay
|
||||||
};
|
};
|
||||||
uint16_t delay;
|
uint16_t delay; // amount of ms to wait after it is activated
|
||||||
} Relay;
|
} Relay;
|
||||||
|
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ void MultiRelay::handleOffTimer() {
|
|||||||
bool activeRelays = false;
|
bool activeRelays = false;
|
||||||
for (int i=0; i<MULTI_RELAY_MAX_RELAYS; i++) {
|
for (int i=0; i<MULTI_RELAY_MAX_RELAYS; i++) {
|
||||||
if (_relay[i].active && _switchTimerStart > 0 && now - _switchTimerStart > (_relay[i].delay*1000)) {
|
if (_relay[i].active && _switchTimerStart > 0 && now - _switchTimerStart > (_relay[i].delay*1000)) {
|
||||||
if (!_relay[i].external) toggleRelay(i);
|
if (!_relay[i].external) switchRelay(i, !offMode);
|
||||||
_relay[i].active = false;
|
_relay[i].active = false;
|
||||||
} else if (periodicBroadcastSec && now - lastBroadcast > (periodicBroadcastSec*1000)) {
|
} else if (periodicBroadcastSec && now - lastBroadcast > (periodicBroadcastSec*1000)) {
|
||||||
if (_relay[i].pin>=0) publishMqtt(i);
|
if (_relay[i].pin>=0) publishMqtt(i);
|
||||||
|
@ -772,6 +772,7 @@ class WS2812FX { // 96 bytes
|
|||||||
getActiveSegmentsNum(void),
|
getActiveSegmentsNum(void),
|
||||||
getFirstSelectedSegId(void),
|
getFirstSelectedSegId(void),
|
||||||
getLastActiveSegmentId(void),
|
getLastActiveSegmentId(void),
|
||||||
|
getActiveSegsLightCapabilities(bool selectedOnly = false),
|
||||||
setPixelSegment(uint8_t n);
|
setPixelSegment(uint8_t n);
|
||||||
|
|
||||||
inline uint8_t getBrightness(void) { return _brightness; }
|
inline uint8_t getBrightness(void) { return _brightness; }
|
||||||
|
@ -1329,6 +1329,14 @@ void WS2812FX::setBrightness(uint8_t b, bool direct) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t WS2812FX::getActiveSegsLightCapabilities(bool selectedOnly) {
|
||||||
|
uint8_t totalLC = 0;
|
||||||
|
for (segment &seg : _segments) {
|
||||||
|
if (seg.isActive() && (!selectedOnly || seg.isSelected())) totalLC |= seg.getLightCapabilities();
|
||||||
|
}
|
||||||
|
return totalLC;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t WS2812FX::getFirstSelectedSegId(void)
|
uint8_t WS2812FX::getFirstSelectedSegId(void)
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
@ -101,20 +101,27 @@ void onAlexaChange(EspalexaDevice* dev)
|
|||||||
{
|
{
|
||||||
byte rgbw[4];
|
byte rgbw[4];
|
||||||
uint16_t ct = dev->getCt();
|
uint16_t ct = dev->getCt();
|
||||||
if (!ct) return;
|
if (!ct) return;
|
||||||
uint16_t k = 1000000 / ct; //mireds to kelvin
|
uint16_t k = 1000000 / ct; //mireds to kelvin
|
||||||
|
|
||||||
if (strip.hasCCTBus()) {
|
if (strip.hasCCTBus()) {
|
||||||
strip.setCCT(k);
|
bool hasManualWhite = strip.getActiveSegsLightCapabilities(true) & SEG_CAPABILITY_W;
|
||||||
rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]= 255;
|
|
||||||
} else if (strip.hasWhiteChannel()) {
|
strip.setCCT(k);
|
||||||
|
if (hasManualWhite) {
|
||||||
|
rgbw[0] = 0; rgbw[1] = 0; rgbw[2] = 0; rgbw[3] = 255;
|
||||||
|
} else {
|
||||||
|
rgbw[0] = 255; rgbw[1] = 255; rgbw[2] = 255; rgbw[3] = 0;
|
||||||
|
dev->setValue(255);
|
||||||
|
}
|
||||||
|
} else if (strip.hasWhiteChannel()) {
|
||||||
switch (ct) { //these values empirically look good on RGBW
|
switch (ct) { //these values empirically look good on RGBW
|
||||||
case 199: rgbw[0]=255; rgbw[1]=255; rgbw[2]=255; rgbw[3]=255; break;
|
case 199: rgbw[0]=255; rgbw[1]=255; rgbw[2]=255; rgbw[3]=255; break;
|
||||||
case 234: rgbw[0]=127; rgbw[1]=127; rgbw[2]=127; rgbw[3]=255; break;
|
case 234: rgbw[0]=127; rgbw[1]=127; rgbw[2]=127; rgbw[3]=255; break;
|
||||||
case 284: rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]=255; break;
|
case 284: rgbw[0]= 0; rgbw[1]= 0; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
case 350: rgbw[0]=130; rgbw[1]= 90; rgbw[2]= 0; rgbw[3]=255; break;
|
case 350: rgbw[0]=130; rgbw[1]= 90; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
case 383: rgbw[0]=255; rgbw[1]=153; rgbw[2]= 0; rgbw[3]=255; break;
|
case 383: rgbw[0]=255; rgbw[1]=153; rgbw[2]= 0; rgbw[3]=255; break;
|
||||||
default : colorKtoRGB(k, rgbw);
|
default : colorKtoRGB(k, rgbw);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
colorKtoRGB(k, rgbw);
|
colorKtoRGB(k, rgbw);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define DEFAULT_AP_SSID "WLED-AP"
|
#define DEFAULT_AP_SSID "WLED-AP"
|
||||||
#define DEFAULT_AP_PASS "wled1234"
|
#define DEFAULT_AP_PASS "wled1234"
|
||||||
#define DEFAULT_OTA_PASS "wledota"
|
#define DEFAULT_OTA_PASS "wledota"
|
||||||
|
#define DEFAULT_MDNS_NAME "x"
|
||||||
|
|
||||||
//increase if you need more
|
//increase if you need more
|
||||||
#ifndef WLED_MAX_USERMODS
|
#ifndef WLED_MAX_USERMODS
|
||||||
|
@ -22,4 +22,5 @@
|
|||||||
#define CLIENT_PASS "Your_Password"
|
#define CLIENT_PASS "Your_Password"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define MAX_LEDS 1500 //Maximum total LEDs. More than 1500 might create a low memory situation on ESP8266.
|
//#define MAX_LEDS 1500 // Maximum total LEDs. More than 1500 might create a low memory situation on ESP8266.
|
||||||
|
//#define MDNS_NAME "wled" // mDNS hostname, ie: *.local
|
||||||
|
@ -179,6 +179,10 @@ using PSRAMDynamicJsonDocument = BasicJsonDocument<PSRAM_Allocator>;
|
|||||||
#define CLIENT_PASS ""
|
#define CLIENT_PASS ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MDNS_NAME
|
||||||
|
#define MDNS_NAME DEFAULT_MDNS_NAME
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WLED_AP_PASS) && !defined(WLED_AP_SSID)
|
#if defined(WLED_AP_PASS) && !defined(WLED_AP_SSID)
|
||||||
#error WLED_AP_PASS is defined but WLED_AP_SSID is still the default. \
|
#error WLED_AP_PASS is defined but WLED_AP_SSID is still the default. \
|
||||||
Please change WLED_AP_SSID to something unique.
|
Please change WLED_AP_SSID to something unique.
|
||||||
@ -289,7 +293,7 @@ WLED_GLOBAL char ntpServerName[33] _INIT("0.wled.pool.ntp.org"); // NTP server
|
|||||||
// WiFi CONFIG (all these can be changed via web UI, no need to set them here)
|
// WiFi CONFIG (all these can be changed via web UI, no need to set them here)
|
||||||
WLED_GLOBAL char clientSSID[33] _INIT(CLIENT_SSID);
|
WLED_GLOBAL char clientSSID[33] _INIT(CLIENT_SSID);
|
||||||
WLED_GLOBAL char clientPass[65] _INIT(CLIENT_PASS);
|
WLED_GLOBAL char clientPass[65] _INIT(CLIENT_PASS);
|
||||||
WLED_GLOBAL char cmDNS[33] _INIT("x"); // mDNS address (placeholder, is replaced by wledXXXXXX.local)
|
WLED_GLOBAL char cmDNS[33] _INIT(MDNS_NAME); // mDNS address (*.local, replaced by wledXXXXXX if default is used)
|
||||||
WLED_GLOBAL char apSSID[33] _INIT(""); // AP off by default (unless setup)
|
WLED_GLOBAL char apSSID[33] _INIT(""); // AP off by default (unless setup)
|
||||||
WLED_GLOBAL byte apChannel _INIT(1); // 2.4GHz WiFi AP channel (1-13)
|
WLED_GLOBAL byte apChannel _INIT(1); // 2.4GHz WiFi AP channel (1-13)
|
||||||
WLED_GLOBAL byte apHide _INIT(0); // hidden AP SSID
|
WLED_GLOBAL byte apHide _INIT(0); // hidden AP SSID
|
||||||
|
Loading…
Reference in New Issue
Block a user