83 lines
2.4 KiB
C++
83 lines
2.4 KiB
C++
#include <PacketFormatter.h>
|
|
|
|
#ifndef _RGBW_PACKET_FORMATTER_H
|
|
#define _RGBW_PACKET_FORMATTER_H
|
|
|
|
#define RGBW_PROTOCOL_ID_BYTE 0xB0
|
|
|
|
enum MiLightRgbwButton {
|
|
RGBW_ALL_ON = 0x01,
|
|
RGBW_ALL_OFF = 0x02,
|
|
RGBW_GROUP_1_ON = 0x03,
|
|
RGBW_GROUP_1_OFF = 0x04,
|
|
RGBW_GROUP_2_ON = 0x05,
|
|
RGBW_GROUP_2_OFF = 0x06,
|
|
RGBW_GROUP_3_ON = 0x07,
|
|
RGBW_GROUP_3_OFF = 0x08,
|
|
RGBW_GROUP_4_ON = 0x09,
|
|
RGBW_GROUP_4_OFF = 0x0A,
|
|
RGBW_SPEED_UP = 0x0B,
|
|
RGBW_SPEED_DOWN = 0x0C,
|
|
RGBW_DISCO_MODE = 0x0D,
|
|
RGBW_BRIGHTNESS = 0x0E,
|
|
RGBW_COLOR = 0x0F,
|
|
RGBW_ALL_MAX_LEVEL = 0x11,
|
|
RGBW_ALL_MIN_LEVEL = 0x12,
|
|
|
|
// These are the only mechanism (that I know of) to disable RGB and set the
|
|
// color to white.
|
|
RGBW_GROUP_1_MAX_LEVEL = 0x13,
|
|
RGBW_GROUP_1_MIN_LEVEL = 0x14,
|
|
RGBW_GROUP_2_MAX_LEVEL = 0x15,
|
|
RGBW_GROUP_2_MIN_LEVEL = 0x16,
|
|
RGBW_GROUP_3_MAX_LEVEL = 0x17,
|
|
RGBW_GROUP_3_MIN_LEVEL = 0x18,
|
|
RGBW_GROUP_4_MAX_LEVEL = 0x19,
|
|
RGBW_GROUP_4_MIN_LEVEL = 0x1A,
|
|
|
|
// Button codes for night mode. A long press on the corresponding OFF button
|
|
// Not actually needed/used.
|
|
RGBW_ALL_NIGHT = 0x12,
|
|
RGBW_GROUP_1_NIGHT = 0x14,
|
|
RGBW_GROUP_2_NIGHT = 0x16,
|
|
RGBW_GROUP_3_NIGHT = 0x18,
|
|
RGBW_GROUP_4_NIGHT = 0x1A,
|
|
};
|
|
|
|
#define RGBW_COMMAND_INDEX 5
|
|
#define RGBW_BRIGHTNESS_GROUP_INDEX 4
|
|
#define RGBW_COLOR_INDEX 3
|
|
#define RGBW_NUM_MODES 9
|
|
|
|
class RgbwPacketFormatter : public PacketFormatter {
|
|
public:
|
|
RgbwPacketFormatter()
|
|
: PacketFormatter(REMOTE_TYPE_RGBW, 7)
|
|
{ }
|
|
|
|
virtual bool canHandle(const uint8_t* packet, const size_t len);
|
|
virtual void updateStatus(MiLightStatus status, uint8_t groupId);
|
|
virtual void updateBrightness(uint8_t value);
|
|
virtual void command(uint8_t command, uint8_t arg);
|
|
virtual void updateHue(uint16_t value);
|
|
virtual void updateColorRaw(uint8_t value);
|
|
virtual void updateColorWhite();
|
|
virtual void format(uint8_t const* packet, char* buffer);
|
|
virtual void unpair();
|
|
virtual void modeSpeedDown();
|
|
virtual void modeSpeedUp();
|
|
virtual void nextMode();
|
|
virtual void previousMode();
|
|
virtual void updateMode(uint8_t mode);
|
|
virtual void enableNightMode();
|
|
virtual BulbId parsePacket(const uint8_t* packet, JsonObject result);
|
|
|
|
virtual void initializePacket(uint8_t* packet);
|
|
|
|
protected:
|
|
static bool isStatusCommand(const uint8_t command);
|
|
uint8_t currentMode();
|
|
};
|
|
|
|
#endif
|