esp32_ethernet_milight_hub/lib/Udp/V6RgbwCommandHandler.cpp
2021-01-15 22:49:01 +01:00

75 lines
1.5 KiB
C++

#include <V6RgbwCommandHandler.h>
bool V6RgbwCommandHandler::handlePreset(
MiLightClient* client,
uint8_t commandLsb,
uint32_t commandArg)
{
if (commandLsb == 0) {
client->updateColorRaw(commandArg >> 24);
client->updateBrightness(commandArg >> 16);
} else if (commandLsb == 1) {
client->updateColorWhite();
client->updateBrightness(commandArg >> 16);
} else {
return false;
}
return true;
}
bool V6RgbwCommandHandler::handleCommand(
MiLightClient* client,
uint32_t command,
uint32_t commandArg)
{
const uint8_t cmd = command & 0x7F;
const uint8_t arg = commandArg >> 24;
client->setHeld((command & 0x80) == 0x80);
if (cmd == V2_RGBW_COMMAND_PREFIX) {
switch (arg) {
case V2_RGBW_ON:
client->updateStatus(ON);
break;
case V2_RGBW_OFF:
client->updateStatus(OFF);
break;
case V2_RGBW_WHITE_ON:
client->updateColorWhite();
break;
case V2_RGBW_NIGHT_LIGHT:
client->enableNightMode();
break;
case V2_RGBW_SPEED_DOWN:
client->modeSpeedDown();
break;
case V2_RGBW_SPEED_UP:
client->modeSpeedUp();
break;
default:
return false;
}
return true;
} else if (cmd == V2_RGBW_COLOR_PREFIX) {
client->updateColorRaw(arg);
return true;
} else if (cmd == V2_RGBW_BRIGHTNESS_PREFIX) {
client->updateBrightness(arg);
return true;
} else if (cmd == V2_RGBW_MODE_PREFIX) {
client->updateMode(arg);
return true;
}
return false;
}