MiLightClient.h 2.4 KB

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