MiLightClient.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include <Arduino.h>
  2. #include <MiLightRadio.h>
  3. #include <MiLightRadioPL1167_LT8900.h>
  4. #include <PL1167_nRF24.h>
  5. #include <RF24.h>
  6. #include <MiLightButtons.h>
  7. #include <RadioStack.h>
  8. #include <Settings.h>
  9. #ifndef _MILIGHTCLIENT_H
  10. #define _MILIGHTCLIENT_H
  11. // #define DEBUG_PRINTF
  12. #define MILIGHT_DEFAULT_RESEND_COUNT 10
  13. class MiLightClient {
  14. public:
  15. MiLightClient(byte byCSPin, byte byResetPin, byte byPktFlag, eRadioInterfaceType InterfaceType)
  16. :
  17. resendCount(MILIGHT_DEFAULT_RESEND_COUNT),
  18. currentRadio(NULL),
  19. numRadios(MiLightRadioConfig::NUM_CONFIGS)
  20. {
  21. radios = new RadioStack*[numRadios];
  22. for (size_t i = 0; i < numRadios; i++)
  23. {
  24. if(InterfaceType == PL1167_LT8900)
  25. {
  26. radios[i] = new RadioStack(byCSPin, byResetPin, byPktFlag, *MiLightRadioConfig::ALL_CONFIGS[i]);
  27. }
  28. else if(InterfaceType == nRF24)
  29. {
  30. pRF = new RF24(byCSPin, byPktFlag);
  31. radios[i] = new RadioStack(*pRF, *MiLightRadioConfig::ALL_CONFIGS[i]);
  32. }
  33. }
  34. currentRadio = radios[0];
  35. currentRadio->getRadioInterface()->configure();
  36. }
  37. ~MiLightClient() {
  38. delete pRF;
  39. delete[] radios;
  40. }
  41. void begin() {
  42. for (size_t i = 0; i < numRadios; i++) {
  43. radios[i]->getRadioInterface()->begin();
  44. }
  45. }
  46. void prepare(MiLightRadioConfig& config, const uint16_t deviceId = -1, const uint8_t groupId = -1);
  47. void setResendCount(const unsigned int resendCount);
  48. bool available();
  49. void read(uint8_t packet[]);
  50. void write(uint8_t packet[]);
  51. // Common methods
  52. void updateStatus(MiLightStatus status);
  53. void updateStatus(MiLightStatus status, uint8_t groupId);
  54. void pair();
  55. void unpair();
  56. void command(uint8_t command, uint8_t arg);
  57. void updateMode(uint8_t mode);
  58. void nextMode();
  59. void previousMode();
  60. void modeSpeedDown();
  61. void modeSpeedUp();
  62. // RGBW methods
  63. void updateHue(const uint16_t hue);
  64. void updateBrightness(const uint8_t brightness);
  65. void updateColorWhite();
  66. void updateColorRaw(const uint8_t color);
  67. // CCT methods
  68. void updateTemperature(const uint8_t colorTemperature);
  69. void decreaseTemperature();
  70. void increaseTemperature();
  71. void increaseBrightness();
  72. void decreaseBrightness();
  73. void updateSaturation(const uint8_t saturation);
  74. void formatPacket(uint8_t* packet, char* buffer);
  75. protected:
  76. RF24 *pRF;
  77. RadioStack** radios;
  78. RadioStack* currentRadio;
  79. PacketFormatter* formatter;
  80. const size_t numRadios;
  81. unsigned int resendCount;
  82. MiLightRadioInterface* switchRadio(const MiLightRadioType type);
  83. void flushPacket();
  84. };
  85. #endif