kopia lustrzana https://github.com/Aircoookie/WLED
77 wiersze
2.0 KiB
C++
77 wiersze
2.0 KiB
C++
#include "wled.h"
|
|
|
|
/*
|
|
* Parser for Loxone formats
|
|
*/
|
|
bool parseLx(int lxValue, byte rgbw[4])
|
|
{
|
|
#ifdef WLED_ENABLE_LOXONE
|
|
DEBUG_PRINT(F("LX: Lox = "));
|
|
DEBUG_PRINTLN(lxValue);
|
|
|
|
bool ok = false;
|
|
float lxRed = 0, lxGreen = 0, lxBlue = 0;
|
|
|
|
if (lxValue < 200000000) {
|
|
// Loxone RGB
|
|
ok = true;
|
|
lxRed = round((lxValue % 1000) * 2.55);
|
|
lxGreen = round(((lxValue / 1000) % 1000) * 2.55);
|
|
lxBlue = round(((lxValue / 1000000) % 1000) * 2.55);
|
|
} else if ((lxValue >= 200000000) && (lxValue <= 201006500)) {
|
|
// Loxone Lumitech
|
|
ok = true;
|
|
float tmpBri = floor((lxValue - 200000000) / 10000); ;
|
|
uint16_t ct = (lxValue - 200000000) - (((uint8_t)tmpBri) * 10000);
|
|
|
|
tmpBri *= 2.55;
|
|
tmpBri = constrain(tmpBri, 0, 255);
|
|
|
|
colorKtoRGB(ct, rgbw);
|
|
lxRed = rgbw[0]; lxGreen = rgbw[1]; lxBlue = rgbw[2];
|
|
|
|
lxRed *= (tmpBri/255);
|
|
lxGreen *= (tmpBri/255);
|
|
lxBlue *= (tmpBri/255);
|
|
}
|
|
|
|
if (ok) {
|
|
rgbw[0] = (uint8_t) constrain(lxRed, 0, 255);
|
|
rgbw[1] = (uint8_t) constrain(lxGreen, 0, 255);
|
|
rgbw[2] = (uint8_t) constrain(lxBlue, 0, 255);
|
|
rgbw[3] = 0;
|
|
return true;
|
|
}
|
|
#endif
|
|
return false;
|
|
}
|
|
|
|
void parseLxJson(int lxValue, byte segId, bool secondary)
|
|
{
|
|
if (secondary) {
|
|
DEBUG_PRINT(F("LY: Lox secondary = "));
|
|
} else {
|
|
DEBUG_PRINT(F("LX: Lox primary = "));
|
|
}
|
|
DEBUG_PRINTLN(lxValue);
|
|
byte rgbw[] = {0,0,0,0};
|
|
if (parseLx(lxValue, rgbw)) {
|
|
if (bri == 0) {
|
|
DEBUG_PRINTLN(F("LX: turn on"));
|
|
toggleOnOff();
|
|
}
|
|
bri = 255;
|
|
nightlightActive = false; //always disable nightlight when toggling
|
|
if (segId == strip.getMainSegmentId()) {
|
|
DEBUG_PRINTLN(F("LX: main segment"));
|
|
if (secondary) for (byte i = 0; i < 4; i++) colSec[i] = rgbw[i];
|
|
else for (byte i = 0; i < 4; i++) col[i] = rgbw[i];
|
|
} else {
|
|
DEBUG_PRINT(F("LX: segment "));
|
|
DEBUG_PRINTLN(segId);
|
|
strip.getSegment(segId).setColor(secondary, ((rgbw[3] << 24) | ((rgbw[0]&0xFF) << 16) | ((rgbw[1]&0xFF) << 8) | ((rgbw[2]&0xFF))), segId);
|
|
}
|
|
}
|
|
}
|
|
|