#include #include "itemCmd.h" #include "main.h" #include "Streaming.h" #include "item.h" #include "bright.h" #ifdef ADAFRUIT_LED #include #else #include "FastLED.h" #endif //#include "hsv2rgb.h" int txt2cmd(char *payload) { int cmd = CMD_UNKNOWN; if (!payload || !payload[0]) return cmd; // Check for command if (*payload == '-' || (*payload >= '0' && *payload <= '9')) cmd = CMD_VOID; else if (*payload == '%') cmd = CMD_UP; else if (*payload == '{') cmd = CMD_JSON; else if (*payload == '#') cmd = CMD_RGB; else { for(uint8_t i=1; i365) par=365; if (par<0) par=0; param.h=par; break; default: // debugSerial<100) par=100; param.s=par; break; default: // debugSerial<100) par=100; if (par<0) par=0; //debugSerial<255) par=255; if (par<0) par=0; param.v=par; break; case ST_INT32: case ST_UINT32: par=param.asInt32; par+=dif; if (par>100) par=100; if (par<0) par=0; param.asInt32=par; break; case ST_FLOAT: case ST_FLOAT_CELSIUS: case ST_FLOAT_FARENHEIT: par=param.asfloat; par+=dif; if (par>100) par=100; if (par<0) par=0; param.asfloat=par; break; case ST_TENS: par=param.asInt32; par+=dif*10; if (par>1000) par=1000; if (par<0) par=0; param.asInt32=par; break; default: return false; } return true; } bool itemCmd::incrementH(int16_t dif) { int par=param.h; switch (cmd.itemArgType) { //case ST_HSV: case ST_HSV255: par+=dif; if (par>365) par=0; if (par<0) par=365; break; default: return false; break; } param.h=par; return true; } bool itemCmd::incrementS(int16_t dif) {int par=param.s; switch (cmd.itemArgType) { case ST_HSV255: par+=dif; if (par>100) par=100; if (par<0) par=0; break; default: return false; } param.s=par; return true; } itemCmd itemCmd::assignFrom(itemCmd from, short chanType) { bool RGBW_flag = false; bool toFarenheit = false; short prefferedStorageType = getStoragetypeByChanType(chanType); int t=from.getColorTemp(); if (t>=0) { setColorTemp(t); } cmd.suffixCode=from.cmd.suffixCode; switch (cmd.itemArgType){ //Destination case ST_HSV255: case ST_PERCENTS255: switch (from.cmd.itemArgType) { case ST_RGBW: param.w=from.param.w; case ST_RGB: param.r=from.param.r; param.g=from.param.g; param.b=from.param.b; cmd.itemArgType=from.cmd.itemArgType; break; case ST_HS: param.h=from.param.h; param.s=from.param.s; break; case ST_INT32: case ST_UINT32: param.v=constrain(from.param.asInt32,0,255); break; case ST_TENS: param.v=constrain(from.param.asInt32/10,0,255); break; case ST_HSV255: param.h=from.param.h; param.s=from.param.s; param.v=from.param.v; break; case ST_PERCENTS255: param.v=from.param.v; break; case ST_FLOAT: param.v=constrain(from.param.asfloat,0.,255.); break; default: debugSerial<")<")<255) rgbValue = 255; } else { rgbSaturation = map(rgbSaturation, 128, 255, 100, 255); param.w=0; }; debugSerial<255) rgbValue = 255; } else { rgbSaturation = map(rgbSaturation, 128, 255, 100, 255); param.w=0; }; debugSerial<> 16)& 0xFF; param.g=(rgb >> 8) & 0xFF; param.b=rgb & 0xFF; #else CRGB rgb = CHSV(map(from.param.h, 0, 365, 0, 255), rgbSaturation, rgbValue); param.r=rgb.r; param.g=rgb.g; param.b=rgb.b; #endif debugSerial<")<") << type << F(" "); itemCmd out(type,cmd.cmdCode); *this=out.assignFrom(*this); debugOut(); return *this; } uint8_t itemCmd::getCmdParam() { if (isCommand()) return cmd.cmdParam; return 0; } itemCmd itemCmd::Percents(int i) { if (i<0) i=0; if (i>100) i=100; switch (cmd.itemArgType) { case ST_HSV255: case ST_PERCENTS255: break; default: cmd.itemArgType=ST_PERCENTS255; } param.v=map(i,0,100,0,255); return *this; } itemCmd itemCmd::Percents255(int i) { if (i<0) i=0; if (i>255) i=255; switch (cmd.itemArgType) { case ST_HSV255: case ST_PERCENTS255: param.v=i; break; default: cmd.itemArgType=ST_PERCENTS255; param.v=i; } return *this; } itemCmd itemCmd::Int(int32_t i) { cmd.itemArgType=ST_INT32; param.asInt32=i; return *this; } itemCmd itemCmd::Int(uint32_t i) { cmd.itemArgType=ST_UINT32; param.asUint32=i; return *this; } itemCmd itemCmd::Float(float f) { cmd.itemArgType=ST_FLOAT; param.asfloat=f; return *this; } itemCmd itemCmd::Tens(int32_t i) { cmd.itemArgType=ST_TENS; param.asInt32=i; return *this; } itemCmd itemCmd::HSV(uint16_t h, uint8_t s, uint8_t v) { cmd.itemArgType=ST_HSV255; param.h=h; param.s=s; param.v=map(v,0,100,0,255); return *this; } itemCmd itemCmd::HSV255(uint16_t h, uint8_t s, uint8_t v) { cmd.itemArgType=ST_HSV255; param.h=h; param.s=s; param.v=v; return *this; } itemCmd itemCmd::HS(uint16_t h, uint8_t s) { cmd.itemArgType=ST_HS; param.h=h; param.s=s; return *this; } itemCmd itemCmd::RGB(uint8_t r, uint8_t g, uint8_t b) { cmd.itemArgType=ST_RGB; param.r=r; param.g=g; param.b=b; return *this; } itemCmd itemCmd::RGBW(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { cmd.itemArgType=ST_RGBW; param.r=r; param.g=g; param.b=b; param.w=w; return *this; } itemCmd itemCmd::Cmd(uint8_t i) { cmd.cmdCode=i; return *this; } uint8_t itemCmd::getSuffix() { return cmd.suffixCode; } itemCmd itemCmd::setSuffix(uint8_t suffix) { cmd.suffixCode=suffix; return *this; } bool itemCmd::loadItem(Item * item, bool includeCommand) { if (item && item->isValid()) { short subtype =item->getSubtype(); if (subtype) { param.asInt32=item->getVal(); cmd.itemArgType= subtype; if (includeCommand) cmd.cmdCode=item->getCmd(); //debugSerial<itemVal->type) { case aJson_Int: Int((int32_t)item->itemVal->valueint); return true; case aJson_Float: Float(item->itemVal->valueint); return true; } } return false; } bool itemCmd::saveItem(Item * item, bool includeCommand) { if (item && item->isValid()) { item->setVal(param.asInt32); item->setSubtype(cmd.itemArgType); if (includeCommand) item->setCmd(cmd.cmdCode); debugSerial<