RgbCctPacketFormatter.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <PacketFormatter.h>
  2. #define RGB_CCT_COMMAND_INDEX 4
  3. #define RGB_CCT_ARGUMENT_INDEX 5
  4. #define RGB_CCT_NUM_MODES 9
  5. #define V2_OFFSET_JUMP_START 0x54
  6. #ifndef _RGB_CCT_PACKET_FORMATTER_H
  7. #define _RGB_CCT_PACKET_FORMATTER_H
  8. enum MiLightRgbCctCommand {
  9. RGB_CCT_ON = 0x01,
  10. RGB_CCT_OFF = 0x01,
  11. RGB_CCT_COLOR = 0x02,
  12. RGB_CCT_KELVIN = 0x03,
  13. RGB_CCT_BRIGHTNESS = 0x04,
  14. RGB_CCT_SATURATION = 0x04,
  15. RGB_CCT_MODE = 0x05
  16. };
  17. enum MiLightRgbCctArguments {
  18. RGB_CCT_MODE_SPEED_UP = 0x0A,
  19. RGB_CCT_MODE_SPEED_DOWN = 0x0B
  20. };
  21. class RgbCctPacketFormatter : public PacketFormatter {
  22. public:
  23. static uint8_t const V2_OFFSETS[][4] PROGMEM;
  24. RgbCctPacketFormatter()
  25. : PacketFormatter(9),
  26. lastMode(0)
  27. { }
  28. virtual void initializePacket(uint8_t* packet);
  29. virtual void updateStatus(MiLightStatus status, uint8_t group);
  30. virtual void updateBrightness(uint8_t value);
  31. virtual void command(uint8_t command, uint8_t arg);
  32. virtual void updateHue(uint16_t value);
  33. virtual void updateColorRaw(uint8_t value);
  34. virtual void updateColorWhite();
  35. virtual void updateTemperature(uint8_t value);
  36. virtual void updateSaturation(uint8_t value);
  37. virtual void format(uint8_t const* packet, char* buffer);
  38. virtual void unpair();
  39. virtual void enableNightMode();
  40. virtual void modeSpeedDown();
  41. virtual void modeSpeedUp();
  42. virtual void updateMode(uint8_t mode);
  43. virtual void nextMode();
  44. virtual void previousMode();
  45. virtual void finalizePacket(uint8_t* packet);
  46. static void encodeV2Packet(uint8_t* packet);
  47. static void decodeV2Packet(uint8_t* packet);
  48. static uint8_t xorKey(uint8_t key);
  49. static uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2);
  50. static uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2);
  51. protected:
  52. uint8_t lastMode;
  53. };
  54. #endif