PacketFormatter.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <Arduino.h>
  2. #include <inttypes.h>
  3. #include <MiLightButtons.h>
  4. #ifndef _PACKET_FORMATTER_H
  5. #define _PACKET_FORMATTER_H
  6. class PacketFormatter {
  7. public:
  8. PacketFormatter(const size_t packetLength)
  9. : packetLength(packetLength),
  10. packet(new uint8_t[packetLength])
  11. { }
  12. ~PacketFormatter() {
  13. delete this->packet;
  14. }
  15. // all
  16. void updateStatus(MiLightStatus status);
  17. virtual void updateStatus(MiLightStatus status, uint8_t groupId);
  18. virtual void updateBrightness(uint8_t value);
  19. virtual void command(uint8_t command, uint8_t arg);
  20. virtual void updateMode(uint8_t value);
  21. virtual void modeSpeedDown();
  22. virtual void modeSpeedUp();
  23. // rgbw, rgb+cct
  24. virtual void updateHue(uint16_t value);
  25. virtual void updateColorRaw(uint8_t value);
  26. virtual void updateColorWhite();
  27. // cct
  28. virtual void increaseTemperature();
  29. virtual void decreaseTemperature();
  30. virtual void increaseBrightness();
  31. virtual void decreaseBrightness();
  32. // rgb+cct
  33. virtual void updateTemperature(uint8_t value);
  34. virtual void updateSaturation(uint8_t value);
  35. virtual void reset() = 0;
  36. virtual uint8_t* buildPacket();
  37. virtual void prepare(uint16_t deviceId, uint8_t groupId);
  38. virtual void format(uint8_t const* packet, char* buffer);
  39. static void formatV1Packet(uint8_t const* packet, char* buffer);
  40. template <typename T>
  41. static T rescale(T value, uint8_t newMax, float oldMax = 255.0) {
  42. return round(value * (newMax / oldMax));
  43. }
  44. size_t getPacketLength() const;
  45. protected:
  46. uint8_t* packet;
  47. size_t packetLength;
  48. uint16_t deviceId;
  49. uint8_t groupId;
  50. uint8_t sequenceNum;
  51. };
  52. #endif