| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #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
- #define MILIGHT_DEFAULT_RESEND_COUNT 10
- class MiLightRadioStack {
- public:
- MiLightRadioStack(RF24& rf, const MiLightRadioConfig& config)
- : type(config.type)
- {
- nrf = new PL1167_nRF24(rf);
- radio = new MiLightRadio(*nrf, config);
- }
-
- ~MiLightRadioStack() {
- delete radio;
- delete nrf;
- }
-
- inline MiLightRadio* getRadio() {
- return this->radio;
- }
-
- const MiLightRadioType& type;
-
- private:
- PL1167_nRF24 *nrf;
- MiLightRadio *radio;
- };
- class MiLightClient {
- public:
- static uint8_t const V2_OFFSETS[][4];
-
- MiLightClient(uint8_t cePin, uint8_t csnPin)
- : sequenceNum(0),
- rf(RF24(cePin, csnPin)),
- resendCount(MILIGHT_DEFAULT_RESEND_COUNT)
- {
- rgbwRadio = new MiLightRadioStack(rf, MilightRgbwConfig);
- cctRadio = new MiLightRadioStack(rf, MilightCctConfig);
- rgbCctRadio = new MiLightRadioStack(rf, MilightRgbCctConfig);
- }
-
- ~MiLightClient() {
- delete rgbwRadio;
- delete cctRadio;
- delete rgbCctRadio;
- }
-
- void begin() {
- rgbwRadio->getRadio()->begin();
- cctRadio->getRadio()->begin();
- rgbCctRadio->getRadio()->begin();
- }
-
- void setResendCount(const unsigned int resendCount);
-
- bool available(const MiLightRadioType radioType);
- void read(const MiLightRadioType radioType, uint8_t packet[]);
- void write(const MiLightRadioConfig& radioConfig, uint8_t packet[]);
-
- 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
- );
-
- void writeRgbCct(const uint16_t deviceId,
- const uint8_t command,
- const uint8_t arg,
- const uint8_t group
- );
-
- // 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 uint8_t getCctStatusButton(uint8_t groupId, MiLightStatus status);
- static MiLightRadioType getRadioType(const String& typeName);
- static const MiLightRadioConfig& getRadioConfig(const String& typeName);
-
- void formatPacket(MiLightRadioConfig& config, uint8_t* packet, char* buffer);
-
- private:
- RF24 rf;
- MiLightRadioStack* rgbwRadio;
- MiLightRadioStack* cctRadio;
- MiLightRadioStack* rgbCctRadio;
- MiLightRadioType currentRadio;
-
- uint8_t sequenceNum;
- uint8_t nextSequenceNum();
- unsigned int resendCount;
-
- static void encodeV2Packet(uint8_t* packet);
- static uint8_t xorKey(uint8_t key);
- static uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2);
- };
- #endif
|