| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include <Arduino.h>
- #include <MiLightRadio.h>
- #include <PL1167_nRF24.h>
- #include <RF24.h>
- #include <MiLightButtons.h>
- #ifndef _MILIGHTCLIENT_H
- #define _MILIGHTCLIENT_H
- #define MILIGHT_PACKET_LENGTH 7
- #define MILIGHT_CCT_INTERVALS 10
- enum MiLightRadioType {
- UNKNOWN = 0,
- RGBW = 0xB8,
- CCT = 0x5A
- };
- enum MiLightStatus { ON = 0, OFF = 1 };
-
- struct MiLightPacket {
- uint8_t deviceType;
- uint16_t deviceId;
- uint8_t b1;
- uint8_t b2;
- uint8_t b3;
- uint8_t sequenceNum;
- };
- class MiLightRadioStack {
- public:
- MiLightRadioStack(RF24& rf, const MiLightRadioConfig& config) {
- nrf = new PL1167_nRF24(rf);
- radio = new MiLightRadio(*nrf, config);
- }
-
- ~MiLightRadioStack() {
- delete radio;
- delete nrf;
- }
-
- inline MiLightRadio* getRadio() {
- return this->radio;
- }
-
- private:
- PL1167_nRF24 *nrf;
- MiLightRadio *radio;
- };
- class MiLightClient {
- public:
- MiLightClient(uint8_t cePin, uint8_t csnPin)
- : sequenceNum(0),
- rf(RF24(cePin, csnPin))
- {
- rgbwRadio = new MiLightRadioStack(rf, MilightRgbwConfig);
- cctRadio = new MiLightRadioStack(rf, MilightCctConfig);
- }
-
- ~MiLightClient() {
- delete rgbwRadio;
- delete cctRadio;
- }
-
- void begin() {
- rgbwRadio->getRadio()->begin();
- cctRadio->getRadio()->begin();
- }
-
- bool available(const MiLightRadioType radioType);
- void read(const MiLightRadioType radioType, MiLightPacket& packet);
- void write(const MiLightRadioType radioType, MiLightPacket& packet, const unsigned int resendCount = 50);
-
- void writeRgbw(
- const uint16_t deviceId,
- const uint8_t color,
- const uint8_t brightness,
- const uint8_t groupId,
- const uint8_t button
- );
-
- void writeCct(
- const uint16_t deviceId,
- const uint8_t groupId,
- const uint8_t button
- );
-
- // Common methods
- void updateStatus(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId, MiLightStatus status);
- void pair(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId);
- void unpair(const MiLightRadioType type,const uint16_t deviceId, const uint8_t groupId);
- void allOn(const MiLightRadioType type,const uint16_t deviceId);
- void allOff(const MiLightRadioType type,const uint16_t deviceId);
- void pressButton(const MiLightRadioType type, const uint16_t deviceId, const uint8_t groupId, uint8_t button);
-
- // RGBW methods
- void updateHue(const uint16_t deviceId, const uint8_t groupId, const uint16_t hue);
- void updateBrightness(const uint16_t deviceId, const uint8_t groupId, const uint8_t brightness);
- void updateColorWhite(const uint16_t deviceId, const uint8_t groupId);
- void updateColorRaw(const uint16_t deviceId, const uint8_t groupId, const uint16_t color);
- // CCT methods
- void updateTemperature(const uint16_t deviceId, const uint8_t groupId, const uint8_t colorTemperature);
- void decreaseTemperature(const uint16_t deviceId, const uint8_t groupId);
- void increaseTemperature(const uint16_t deviceId, const uint8_t groupId);
- void updateCctBrightness(const uint16_t deviceId, const uint8_t groupId, const uint8_t brightness);
- void decreaseCctBrightness(const uint16_t deviceId, const uint8_t groupId);
- void increaseCctBrightness(const uint16_t deviceId, const uint8_t groupId);
-
- MiLightRadio* getRadio(const MiLightRadioType type);
-
- static void deserializePacket(const uint8_t rawPacket[], MiLightPacket& packet);
- static void serializePacket(uint8_t rawPacket[], const MiLightPacket& packet);
-
- static uint8_t getCctStatusButton(uint8_t groupId, MiLightStatus status);
- static MiLightRadioType getRadioType(const String& typeName);
-
- private:
- RF24 rf;
- MiLightRadioStack* rgbwRadio;
- MiLightRadioStack* cctRadio;
-
- uint8_t sequenceNum;
- uint8_t nextSequenceNum();
- };
- #endif
|