Forráskód Böngészése

Handle packets received on overlapping channels

Christopher Mullins 8 éve
szülő
commit
ddc4082afb

+ 7 - 1
lib/MiLight/CctPacketFormatter.cpp

@@ -1,9 +1,15 @@
 #include <CctPacketFormatter.h>
 
+static const uint8_t CCT_PROTOCOL_ID = 0x5A;
+
+bool CctPacketFormatter::canHandle(const uint8_t *packet, const size_t len) {
+  return len == packetLength && packet[0] == CCT_PROTOCOL_ID;
+}
+
 void CctPacketFormatter::initializePacket(uint8_t* packet) {
   size_t packetPtr = 0;
 
-  packet[packetPtr++] = 0x5A;
+  packet[packetPtr++] = CCT_PROTOCOL_ID;
   packet[packetPtr++] = deviceId >> 8;
   packet[packetPtr++] = deviceId & 0xFF;
   packet[packetPtr++] = groupId;

+ 2 - 0
lib/MiLight/CctPacketFormatter.h

@@ -29,6 +29,8 @@ public:
     : PacketFormatter(7, 20)
   { }
 
+  virtual bool canHandle(const uint8_t* packet, const size_t len);
+
   virtual void updateStatus(MiLightStatus status, uint8_t groupId);
   virtual void command(uint8_t command, uint8_t arg);
 

+ 4 - 0
lib/MiLight/RgbwPacketFormatter.cpp

@@ -4,6 +4,10 @@
 #define STATUS_COMMAND(status, groupId) ( RGBW_GROUP_1_ON + ((groupId - 1)*2) + status )
 #define GROUP_FOR_STATUS_COMMAND(buttonId) ( (buttonId - 1) / 2 )
 
+bool RgbwPacketFormatter::canHandle(const uint8_t *packet, const size_t len) {
+  return len == packetLength && (packet[0] & 0xF0) == RGBW_PROTOCOL_ID_BYTE;
+}
+
 void RgbwPacketFormatter::initializePacket(uint8_t* packet) {
   size_t packetPtr = 0;
 

+ 1 - 0
lib/MiLight/RgbwPacketFormatter.h

@@ -56,6 +56,7 @@ public:
       lastMode(0)
   { }
 
+  virtual bool canHandle(const uint8_t* packet, const size_t len);
   virtual void updateStatus(MiLightStatus status, uint8_t groupId);
   virtual void updateBrightness(uint8_t value);
   virtual void command(uint8_t command, uint8_t arg);