MiLightClient.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include <Arduino.h>
  2. #include <MiLightRadio.h>
  3. #include <PL1167_nRF24.h>
  4. #include <RF24.h>
  5. #include <MiLightButtons.h>
  6. #ifndef _MILIGHTCLIENT_H
  7. #define _MILIGHTCLIENT_H
  8. #define MILIGHT_PACKET_LENGTH 7
  9. #define MILIGHT_CCT_INTERVALS 10
  10. #define MILIGHT_DEFAULT_RESEND_COUNT 50
  11. enum MiLightRadioType {
  12. UNKNOWN = 0,
  13. RGBW = 0xB8,
  14. CCT = 0x5A,
  15. RGBW_CCT = 0x99
  16. };
  17. enum MiLightStatus { ON = 0, OFF = 1 };
  18. class MiLightRadioStack {
  19. public:
  20. MiLightRadioStack(RF24& rf, const MiLightRadioConfig& config)
  21. : type(config.type)
  22. {
  23. nrf = new PL1167_nRF24(rf);
  24. radio = new MiLightRadio(*nrf, config);
  25. }
  26. ~MiLightRadioStack() {
  27. delete radio;
  28. delete nrf;
  29. }
  30. inline MiLightRadio* getRadio() {
  31. return this->radio;
  32. }
  33. const MiLightRadioType& type;
  34. private:
  35. PL1167_nRF24 *nrf;
  36. MiLightRadio *radio;
  37. };
  38. class MiLightClient {
  39. public:
  40. MiLightClient(uint8_t cePin, uint8_t csnPin)
  41. : sequenceNum(0),
  42. rf(RF24(cePin, csnPin))
  43. {
  44. rgbwRadio = new MiLightRadioStack(rf, MilightRgbwConfig);
  45. cctRadio = new MiLightRadioStack(rf, MilightCctConfig);
  46. rgbwCctRadio = new MiLightRadioStack(rf, MilightRgbwCctConfig);
  47. }
  48. ~MiLightClient() {
  49. delete rgbwRadio;
  50. delete cctRadio;
  51. delete rgbwCctRadio;
  52. }
  53. void begin() {
  54. rgbwRadio->getRadio()->begin();
  55. cctRadio->getRadio()->begin();
  56. rgbwCctRadio->getRadio()->begin();
  57. }
  58. bool available(const MiLightRadioType radioType);
  59. void read(const MiLightRadioType radioType, uint8_t packet[]);
  60. void write(const MiLightRadioType radioType, uint8_t packet[], const unsigned int resendCount = MILIGHT_DEFAULT_RESEND_COUNT);
  61. void writeRgbw(
  62. const uint16_t deviceId,
  63. const uint8_t color,
  64. const uint8_t brightness,
  65. const uint8_t groupId,
  66. const uint8_t button,
  67. const unsigned int resendCount = MILIGHT_DEFAULT_RESEND_COUNT
  68. );
  69. void writeCct(
  70. const uint16_t deviceId,
  71. const uint8_t groupId,
  72. const uint8_t button,
  73. const unsigned int resendCount = MILIGHT_DEFAULT_RESEND_COUNT
  74. );
  75. // Common methods
  76. void updateStatus(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId, MiLightStatus status);
  77. void pair(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId);
  78. void unpair(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId);
  79. void allOn(const MiLightRadioType type,const uint16_t deviceId);
  80. void allOff(const MiLightRadioType type,const uint16_t deviceId);
  81. void pressButton(const MiLightRadioType type, const uint16_t deviceId, const uint8_t groupId, uint8_t button);
  82. // RGBW methods
  83. void updateHue(const uint16_t deviceId, const uint8_t groupId, const uint16_t hue);
  84. void updateBrightness(const uint16_t deviceId, const uint8_t groupId, const uint8_t brightness);
  85. void updateColorWhite(const uint16_t deviceId, const uint8_t groupId);
  86. void updateColorRaw(const uint16_t deviceId, const uint8_t groupId, const uint16_t color);
  87. // CCT methods
  88. void updateTemperature(const uint16_t deviceId, const uint8_t groupId, const uint8_t colorTemperature);
  89. void decreaseTemperature(const uint16_t deviceId, const uint8_t groupId);
  90. void increaseTemperature(const uint16_t deviceId, const uint8_t groupId);
  91. void updateCctBrightness(const uint16_t deviceId, const uint8_t groupId, const uint8_t brightness);
  92. void decreaseCctBrightness(const uint16_t deviceId, const uint8_t groupId);
  93. void increaseCctBrightness(const uint16_t deviceId, const uint8_t groupId);
  94. MiLightRadio* getRadio(const MiLightRadioType type);
  95. static uint8_t getCctStatusButton(uint8_t groupId, MiLightStatus status);
  96. static MiLightRadioType getRadioType(const String& typeName);
  97. private:
  98. RF24 rf;
  99. MiLightRadioStack* rgbwRadio;
  100. MiLightRadioStack* cctRadio;
  101. MiLightRadioStack* rgbwCctRadio;
  102. MiLightRadioType currentRadio;
  103. uint8_t sequenceNum;
  104. uint8_t nextSequenceNum();
  105. unsigned int resendCount;
  106. };
  107. #endif