PacketFormatter.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <Arduino.h>
  2. #include <inttypes.h>
  3. #include <MiLightButtons.h>
  4. #ifndef _PACKET_FORMATTER_H
  5. #define _PACKET_FORMATTER_H
  6. struct PacketStream {
  7. PacketStream();
  8. uint8_t* next();
  9. bool hasNext();
  10. uint8_t* packetStream;
  11. size_t numPackets;
  12. size_t packetLength;
  13. size_t currentPacket;
  14. };
  15. class PacketFormatter {
  16. public:
  17. PacketFormatter(const size_t packetLength, const size_t maxPackets = 1);
  18. ~PacketFormatter() {
  19. delete this->packetBuffer;
  20. }
  21. // all
  22. void updateStatus(MiLightStatus status);
  23. virtual void updateStatus(MiLightStatus status, uint8_t groupId);
  24. virtual void updateBrightness(uint8_t value);
  25. virtual void command(uint8_t command, uint8_t arg);
  26. virtual void updateMode(uint8_t value);
  27. virtual void modeSpeedDown();
  28. virtual void modeSpeedUp();
  29. virtual void pair();
  30. virtual void unpair();
  31. // rgbw, rgb+cct
  32. virtual void updateHue(uint16_t value);
  33. virtual void updateColorRaw(uint8_t value);
  34. virtual void updateColorWhite();
  35. // cct
  36. virtual void increaseTemperature();
  37. virtual void decreaseTemperature();
  38. virtual void increaseBrightness();
  39. virtual void decreaseBrightness();
  40. // rgb+cct
  41. virtual void updateTemperature(uint8_t value);
  42. virtual void updateSaturation(uint8_t value);
  43. virtual void reset();
  44. virtual PacketStream& buildPackets();
  45. virtual void prepare(uint16_t deviceId, uint8_t groupId);
  46. virtual void format(uint8_t const* packet, char* buffer);
  47. static void formatV1Packet(uint8_t const* packet, char* buffer);
  48. template <typename T>
  49. static T rescale(T value, uint8_t newMax, float oldMax = 255.0) {
  50. return round(value * (newMax / oldMax));
  51. }
  52. size_t getPacketLength() const;
  53. protected:
  54. uint8_t* packetBuffer;
  55. uint8_t* currentPacket;
  56. size_t packetLength;
  57. uint16_t deviceId;
  58. uint8_t groupId;
  59. uint8_t sequenceNum;
  60. size_t numPackets;
  61. PacketStream packetStream;
  62. void pushPacket();
  63. virtual void initializePacket(uint8_t* packetStart) = 0;
  64. virtual void finalizePacket(uint8_t* packet);
  65. };
  66. #endif