MiLightClient.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <Arduino.h>
  2. #include <MiLightRadio.h>
  3. #ifndef _MILIGHTCLIENT_H
  4. #define _MILIGHTCLIENT_H
  5. enum MiLightDeviceType {
  6. WHITE = 0xB0,
  7. RGBW = 0xB8
  8. };
  9. enum MiLightButton {
  10. ALL_ON = 0x01,
  11. ALL_OFF = 0x02,
  12. GROUP_1_ON = 0x03,
  13. GROUP_1_OFF = 0x04,
  14. GROUP_2_ON = 0x05,
  15. GROUP_2_OFF = 0x06,
  16. GROUP_3_ON = 0x07,
  17. GROUP_3_OFF = 0x08,
  18. GROUP_4_ON = 0x09,
  19. GROUP_4_OFF = 0x0A,
  20. SPEED_UP = 0x0B,
  21. SPEED_DOWN = 0x0C,
  22. DISCO_MODE = 0x0D,
  23. BRIGHTNESS = 0x0E,
  24. COLOR = 0x0F,
  25. COLOR_WHITE = 0x11
  26. };
  27. enum MiLightStatus { ON = 0, OFF = 1 };
  28. #pragma pack(push, 1)
  29. struct MiLightPacket {
  30. uint8_t deviceType;
  31. uint16_t deviceId;
  32. uint8_t color;
  33. uint8_t brightnessGroupId;
  34. uint8_t button;
  35. uint8_t sequenceNum;
  36. };
  37. #pragma pack(pop)
  38. class MiLightClient {
  39. public:
  40. MiLightClient(MiLightRadio& radio) :
  41. radio(radio),
  42. sequenceNum(0) {}
  43. bool available();
  44. void read(MiLightPacket& packet);
  45. void write(MiLightPacket& packet, const unsigned int resendCount = 50);
  46. void write(
  47. const uint16_t deviceId,
  48. const uint16_t color,
  49. const uint8_t brightness,
  50. const uint8_t groupId,
  51. const MiLightButton button
  52. );
  53. void updateColor(const uint16_t deviceId, const uint8_t groupId, const uint16_t hue);
  54. void updateBrightness(const uint16_t deviceId, const uint8_t groupId, const uint8_t brightness);
  55. void updateStatus(const uint16_t deviceId, const uint8_t groupId, MiLightStatus status);
  56. void updateColorWhite(const uint16_t deviceId, const uint8_t groupId);
  57. void allOn(const uint16_t deviceId);
  58. void allOff(const uint16_t deviceId);
  59. private:
  60. MiLightRadio& radio;
  61. uint8_t sequenceNum;
  62. uint8_t nextSequenceNum();
  63. };
  64. #endif