MiLightClient.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. #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);
  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. MiLightRadio* switchRadio(const MiLightRemoteConfig* remoteConfig);
  68. uint8_t parseStatus(const JsonObject& object);
  69. void flushPacket();
  70. };
  71. #endif