MiLightClient.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <functional>
  2. #include <Arduino.h>
  3. #include <MiLightRadio.h>
  4. #include <MiLightRadioFactory.h>
  5. #include <MiLightButtons.h>
  6. #include <MiLightRemoteConfig.h>
  7. #include <Settings.h>
  8. #include <GroupStateStore.h>
  9. #ifndef _MILIGHTCLIENT_H
  10. #define _MILIGHTCLIENT_H
  11. //#define DEBUG_PRINTF
  12. #define MILIGHT_DEFAULT_RESEND_COUNT 10
  13. //Used to determine close to white
  14. #define RGB_WHITE_BOUNDARY 40
  15. class MiLightClient {
  16. public:
  17. MiLightClient(MiLightRadioFactory* radioFactory, GroupStateStore& stateStore);
  18. ~MiLightClient() {
  19. delete[] radios;
  20. }
  21. typedef std::function<void(uint8_t* packet, const MiLightRemoteConfig& config)> PacketSentHandler;
  22. void begin();
  23. void prepare(const MiLightRemoteConfig* remoteConfig, const uint16_t deviceId = -1, const uint8_t groupId = -1);
  24. void prepare(const MiLightRemoteType type, const uint16_t deviceId = -1, const uint8_t groupId = -1);
  25. void setResendCount(const unsigned int resendCount);
  26. bool available();
  27. size_t read(uint8_t packet[]);
  28. void write(uint8_t packet[]);
  29. void setHeld(bool held);
  30. // Common methods
  31. void updateStatus(MiLightStatus status);
  32. void updateStatus(MiLightStatus status, uint8_t groupId);
  33. void pair();
  34. void unpair();
  35. void command(uint8_t command, uint8_t arg);
  36. void updateMode(uint8_t mode);
  37. void nextMode();
  38. void previousMode();
  39. void modeSpeedDown();
  40. void modeSpeedUp();
  41. // RGBW methods
  42. void updateHue(const uint16_t hue);
  43. void updateBrightness(const uint8_t brightness);
  44. void updateColorWhite();
  45. void updateColorRaw(const uint8_t color);
  46. void enableNightMode();
  47. // CCT methods
  48. void updateTemperature(const uint8_t colorTemperature);
  49. void decreaseTemperature();
  50. void increaseTemperature();
  51. void increaseBrightness();
  52. void decreaseBrightness();
  53. void updateSaturation(const uint8_t saturation);
  54. void update(const JsonObject& object);
  55. void handleCommand(const String& command);
  56. void handleEffect(const String& effect);
  57. void onPacketSent(PacketSentHandler handler);
  58. size_t getNumRadios() const;
  59. MiLightRadio* switchRadio(size_t radioIx);
  60. MiLightRemoteConfig& currentRemoteConfig() const;
  61. protected:
  62. MiLightRadio** radios;
  63. MiLightRadio* currentRadio;
  64. const MiLightRemoteConfig* currentRemote;
  65. const size_t numRadios;
  66. unsigned int resendCount;
  67. PacketSentHandler packetSentHandler;
  68. GroupStateStore& stateStore;
  69. const GroupState* currentState;
  70. MiLightRadio* switchRadio(const MiLightRemoteConfig* remoteConfig);
  71. uint8_t parseStatus(const JsonObject& object);
  72. void flushPacket();
  73. };
  74. #endif