瀏覽代碼

cct support

Chris Mullins 8 年之前
父節點
當前提交
f5785f0796
共有 4 個文件被更改,包括 60 次插入45 次删除
  1. 52 0
      lib/MiLight/CctPacketFormatter.cpp
  2. 3 0
      lib/MiLight/CctPacketFormatter.h
  3. 5 43
      lib/Udp/V5MiLightUdpServer.cpp
  4. 0 2
      lib/Udp/V5MiLightUdpServer.h

+ 52 - 0
lib/MiLight/CctPacketFormatter.cpp

@@ -107,6 +107,58 @@ uint8_t CctPacketFormatter::getCctStatusButton(uint8_t groupId, MiLightStatus st
   return button;
 }
 
+uint8_t CctPacketFormatter::cctCommandIdToGroup(uint8_t command) {
+  switch (command & 0xF) {
+    case CCT_GROUP_1_ON:
+    case CCT_GROUP_1_OFF:
+      return 1;
+    case CCT_GROUP_2_ON:
+    case CCT_GROUP_2_OFF:
+      return 2;
+    case CCT_GROUP_3_ON:
+    case CCT_GROUP_3_OFF:
+      return 3;
+    case CCT_GROUP_4_ON:
+    case CCT_GROUP_4_OFF:
+      return 4;
+    case CCT_ALL_ON:
+    case CCT_ALL_OFF:
+      return 0;
+  }
+
+  return 255;
+}
+
+MiLightStatus CctPacketFormatter::cctCommandToStatus(uint8_t command) {
+  switch (command & 0xF) {
+    case CCT_GROUP_1_ON:
+    case CCT_GROUP_2_ON:
+    case CCT_GROUP_3_ON:
+    case CCT_GROUP_4_ON:
+    case CCT_ALL_ON:
+      return ON;
+    case CCT_GROUP_1_OFF:
+    case CCT_GROUP_2_OFF:
+    case CCT_GROUP_3_OFF:
+    case CCT_GROUP_4_OFF:
+    case CCT_ALL_OFF:
+      return OFF;
+  }
+}
+
+void CctPacketFormatter::parsePacket(const uint8_t* packet, JsonObject& result) {
+  uint8_t command = packet[CCT_COMMAND_INDEX] & 0x7F;
+
+  result["device_id"] = (packet[1] << 8) | packet[2];
+  result["device_type"] = "cct";
+  result["group_id"] = packet[3];
+
+  uint8_t onOffGroupId = cctCommandIdToGroup(command);
+  if (onOffGroupId < 255) {
+    result["status"] = cctCommandToStatus(command) == ON ? "on" : "off";
+  }
+}
+
 void CctPacketFormatter::format(uint8_t const* packet, char* buffer) {
   PacketFormatter::formatV1Packet(packet, buffer);
 }

+ 3 - 0
lib/MiLight/CctPacketFormatter.h

@@ -43,8 +43,11 @@ public:
 
   virtual void format(uint8_t const* packet, char* buffer);
   virtual void initializePacket(uint8_t* packet);
+  virtual void parsePacket(const uint8_t* packet, JsonObject& result);
 
   static uint8_t getCctStatusButton(uint8_t groupId, MiLightStatus status);
+  static uint8_t cctCommandIdToGroup(uint8_t command);
+  static MiLightStatus cctCommandToStatus(uint8_t command);
 };
 
 #endif

+ 5 - 43
lib/Udp/V5MiLightUdpServer.cpp

@@ -1,4 +1,5 @@
 #include <V5MiLightUdpServer.h>
+#include <CctPacketFormatter.h>
 
 void V5MiLightUdpServer::handlePacket(uint8_t* packet, size_t packetSize) {
   if (packetSize == 2 || packetSize == 3) {
@@ -25,9 +26,9 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
     client->prepare(MilightRgbwConfig, deviceId, groupId);
     client->updateColorWhite();
     this->lastGroup = groupId;
-  // On/off for CCT
-  } else if (cctCommandIdToGroup(command) != 255) {
-    uint8_t cctGroup = cctCommandIdToGroup(command);
+    // On/off for CCT
+  } else if (CctPacketFormatter::cctCommandIdToGroup(command) != 255) {
+    uint8_t cctGroup = CctPacketFormatter::cctCommandIdToGroup(command);
     client->prepare(MilightCctConfig, deviceId, cctGroup);
     this->lastGroup = cctGroup;
 
@@ -35,7 +36,7 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
     if ((command & 0x80) == 0x80) {
       client->enableNightMode();
     } else {
-      client->updateStatus(cctCommandToStatus(command));
+      client->updateStatus(CctPacketFormatter::cctCommandToStatus(command));
     }
   } else {
     client->prepare(MilightRgbwConfig, deviceId, lastGroup);
@@ -118,42 +119,3 @@ void V5MiLightUdpServer::handleCommand(uint8_t command, uint8_t commandArg) {
 void V5MiLightUdpServer::pressButton(uint8_t button) {
   client->command(button, 0);
 }
-
-uint8_t V5MiLightUdpServer::cctCommandIdToGroup(uint8_t command) {
-  switch (command & 0x7F) {
-    case UDP_CCT_GROUP_1_ON:
-    case UDP_CCT_GROUP_1_OFF:
-      return 1;
-    case UDP_CCT_GROUP_2_ON:
-    case UDP_CCT_GROUP_2_OFF:
-      return 2;
-    case UDP_CCT_GROUP_3_ON:
-    case UDP_CCT_GROUP_3_OFF:
-      return 3;
-    case UDP_CCT_GROUP_4_ON:
-    case UDP_CCT_GROUP_4_OFF:
-      return 4;
-    case UDP_CCT_ALL_ON:
-    case UDP_CCT_ALL_OFF:
-      return 0;
-  }
-
-  return 255;
-}
-
-MiLightStatus V5MiLightUdpServer::cctCommandToStatus(uint8_t command) {
-  switch (command & 0x7F) {
-    case UDP_CCT_GROUP_1_ON:
-    case UDP_CCT_GROUP_2_ON:
-    case UDP_CCT_GROUP_3_ON:
-    case UDP_CCT_GROUP_4_ON:
-    case UDP_CCT_ALL_ON:
-      return ON;
-    case UDP_CCT_GROUP_1_OFF:
-    case UDP_CCT_GROUP_2_OFF:
-    case UDP_CCT_GROUP_3_OFF:
-    case UDP_CCT_GROUP_4_OFF:
-    case UDP_CCT_ALL_OFF:
-      return OFF;
-  }
-}

+ 0 - 2
lib/Udp/V5MiLightUdpServer.h

@@ -60,8 +60,6 @@ public:
 protected:
   void handleCommand(uint8_t command, uint8_t commandArg);
   void pressButton(uint8_t button);
-  uint8_t cctCommandIdToGroup(uint8_t command);
-  MiLightStatus cctCommandToStatus(uint8_t command);
 };
 
 #endif