Clean and shrink lights

Clean and shrink lights
This commit is contained in:
Theo Arends 2018-12-09 16:45:26 +01:00
parent 92e209bf00
commit a516b25c1b
1 changed files with 14 additions and 12 deletions

View File

@ -590,7 +590,7 @@ void LightState(uint8_t append)
// Add status for each channel // Add status for each channel
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_CHANNEL "\":[" ), mqtt_data); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"" D_CMND_CHANNEL "\":[" ), mqtt_data);
for (byte i = 0; i < light_subtype; i++) { for (byte i = 0; i < light_subtype; i++) {
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d" ), mqtt_data, (i > 0 ? "," : ""), round(light_current_color[i]/2.55)); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s%s%d" ), mqtt_data, (i > 0 ? "," : ""), light_current_color[i] * 100 / 255);
} }
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]" ), mqtt_data); snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s]" ), mqtt_data);
} }
@ -1084,7 +1084,6 @@ boolean LightColorEntry(char *buffer, uint8_t buffer_length)
/********************************************************************************************/ /********************************************************************************************/
//boolean LightCommand(char *type, uint16_t index, char *dataBuf, uint16_t XdrvMailbox.data_len, int16_t XdrvMailbox.payload)
boolean LightCommand(void) boolean LightCommand(void)
{ {
char command [CMDSZ]; char command [CMDSZ];
@ -1098,13 +1097,17 @@ boolean LightCommand(void)
if (-1 == command_code) { if (-1 == command_code) {
serviced = false; // Unknown command serviced = false; // Unknown command
} }
else if ((CMND_WHITE == command_code) && (light_subtype == LST_RGBW) && (XdrvMailbox.index == 1)) { else if (((CMND_COLOR == command_code) && (light_subtype > LST_SINGLE) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 6)) ||
command_code = CMND_COLOR; ((CMND_WHITE == command_code) && (light_subtype == LST_RGBW) && (XdrvMailbox.index == 1))) {
uint8_t value = atoi(XdrvMailbox.data); if (CMND_WHITE == command_code) {
snprintf_P(scolor, sizeof(scolor), PSTR("0,0,0,%d"), value*255/100); if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) {
snprintf_P(scolor, sizeof(scolor), PSTR("0,0,0,%d"), XdrvMailbox.payload * 255 / 100);
XdrvMailbox.data = scolor; XdrvMailbox.data = scolor;
XdrvMailbox.data_len = strlen(scolor);
} else {
XdrvMailbox.data_len = 0;
}
} }
if ((CMND_COLOR == command_code) && (light_subtype > LST_SINGLE) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 6)) {
if (XdrvMailbox.data_len > 0) { if (XdrvMailbox.data_len > 0) {
valid_entry = LightColorEntry(XdrvMailbox.data, XdrvMailbox.data_len); valid_entry = LightColorEntry(XdrvMailbox.data, XdrvMailbox.data_len);
if (valid_entry) { if (valid_entry) {
@ -1142,12 +1145,11 @@ boolean LightCommand(void)
else if ((CMND_CHANNEL == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= light_subtype ) ) { else if ((CMND_CHANNEL == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= light_subtype ) ) {
// Set "Channel" directly - this allows Color and Direct PWM control to coexist // Set "Channel" directly - this allows Color and Direct PWM control to coexist
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) {
uint8_t level = XdrvMailbox.payload; light_current_color[XdrvMailbox.index-1] = XdrvMailbox.payload * 255 / 100;
light_current_color[XdrvMailbox.index-1] = round(level * 2.55);
LightSetColor(); LightSetColor();
coldim = true; coldim = true;
} }
snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, round(light_current_color[XdrvMailbox.index -1] / 2.55)); snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, light_current_color[XdrvMailbox.index -1] * 100 / 255);
} }
else if ((CMND_HSBCOLOR == command_code) && ( light_subtype >= LST_RGB)) { else if ((CMND_HSBCOLOR == command_code) && ( light_subtype >= LST_RGB)) {
bool validHSB = (XdrvMailbox.data_len > 0); bool validHSB = (XdrvMailbox.data_len > 0);