RgbCctPacketFormatter.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. #define RGB_CCT_PACKET_LEN 9
  7. #define RGB_CCT_COLOR_OFFSET 0x5F
  8. #define RGB_CCT_BRIGHTNESS_OFFSET 0x8F
  9. #define RGB_CCT_SATURATION_OFFSET 0xD
  10. #define RGB_CCT_KELVIN_OFFSET 0x94
  11. // Remotes have a larger range
  12. #define RGB_CCT_KELVIN_REMOTE_OFFSET 0x4C
  13. #define RGB_CCT_KELVIN_REMOTE_START 0xE8
  14. #ifndef _RGB_CCT_PACKET_FORMATTER_H
  15. #define _RGB_CCT_PACKET_FORMATTER_H
  16. enum MiLightRgbCctCommand {
  17. RGB_CCT_ON = 0x01,
  18. RGB_CCT_OFF = 0x01,
  19. RGB_CCT_COLOR = 0x02,
  20. RGB_CCT_KELVIN = 0x03,
  21. RGB_CCT_BRIGHTNESS = 0x04,
  22. RGB_CCT_SATURATION = 0x04,
  23. RGB_CCT_MODE = 0x05
  24. };
  25. enum MiLightRgbCctArguments {
  26. RGB_CCT_MODE_SPEED_UP = 0x0A,
  27. RGB_CCT_MODE_SPEED_DOWN = 0x0B
  28. };
  29. class RgbCctPacketFormatter : public PacketFormatter {
  30. public:
  31. static uint8_t const V2_OFFSETS[][4];
  32. RgbCctPacketFormatter()
  33. : PacketFormatter(RGB_CCT_PACKET_LEN),
  34. lastMode(0)
  35. { }
  36. virtual void initializePacket(uint8_t* packet);
  37. virtual void updateStatus(MiLightStatus status, uint8_t group);
  38. virtual void updateBrightness(uint8_t value);
  39. virtual void command(uint8_t command, uint8_t arg);
  40. virtual void updateHue(uint16_t value);
  41. virtual void updateColorRaw(uint8_t value);
  42. virtual void updateColorWhite();
  43. virtual void updateTemperature(uint8_t value);
  44. virtual void updateSaturation(uint8_t value);
  45. virtual void format(uint8_t const* packet, char* buffer);
  46. virtual void unpair();
  47. virtual void enableNightMode();
  48. virtual void modeSpeedDown();
  49. virtual void modeSpeedUp();
  50. virtual void updateMode(uint8_t mode);
  51. virtual void nextMode();
  52. virtual void previousMode();
  53. virtual void finalizePacket(uint8_t* packet);
  54. virtual void parsePacket(const uint8_t* packet, JsonObject& result);
  55. static void encodeV2Packet(uint8_t* packet);
  56. static void decodeV2Packet(uint8_t* packet);
  57. static uint8_t xorKey(uint8_t key);
  58. static uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2);
  59. static uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2);
  60. protected:
  61. uint8_t lastMode;
  62. };
  63. #endif