|
|
@@ -2,43 +2,6 @@
|
|
|
#include <Units.h>
|
|
|
#include <V2RFEncoding.h>
|
|
|
|
|
|
-#define GROUP_COMMAND_ARG(status, groupId) ( groupId + (status == OFF ? 5 : 0) )
|
|
|
-
|
|
|
-void RgbCctPacketFormatter::initializePacket(uint8_t* packet) {
|
|
|
- size_t packetPtr = 0;
|
|
|
-
|
|
|
- // Always encode with 0x00 key. No utility in varying it.
|
|
|
- packet[packetPtr++] = 0x00;
|
|
|
-
|
|
|
- packet[packetPtr++] = 0x20;
|
|
|
- packet[packetPtr++] = deviceId >> 8;
|
|
|
- packet[packetPtr++] = deviceId & 0xFF;
|
|
|
- packet[packetPtr++] = 0;
|
|
|
- packet[packetPtr++] = 0;
|
|
|
- packet[packetPtr++] = sequenceNum++;
|
|
|
- packet[packetPtr++] = groupId;
|
|
|
- packet[packetPtr++] = 0;
|
|
|
-}
|
|
|
-
|
|
|
-void RgbCctPacketFormatter::unpair() {
|
|
|
- for (size_t i = 0; i < 5; i++) {
|
|
|
- updateStatus(ON, 0);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void RgbCctPacketFormatter::command(uint8_t command, uint8_t arg) {
|
|
|
- pushPacket();
|
|
|
- if (held) {
|
|
|
- command |= 0x80;
|
|
|
- }
|
|
|
- currentPacket[RGB_CCT_COMMAND_INDEX] = command;
|
|
|
- currentPacket[RGB_CCT_ARGUMENT_INDEX] = arg;
|
|
|
-}
|
|
|
-
|
|
|
-void RgbCctPacketFormatter::updateStatus(MiLightStatus status, uint8_t groupId) {
|
|
|
- command(RGB_CCT_ON, GROUP_COMMAND_ARG(status, groupId));
|
|
|
-}
|
|
|
-
|
|
|
void RgbCctPacketFormatter::modeSpeedDown() {
|
|
|
command(RGB_CCT_ON, RGB_CCT_MODE_SPEED_DOWN);
|
|
|
}
|
|
|
@@ -87,14 +50,10 @@ void RgbCctPacketFormatter::updateColorWhite() {
|
|
|
}
|
|
|
|
|
|
void RgbCctPacketFormatter::enableNightMode() {
|
|
|
- uint8_t arg = GROUP_COMMAND_ARG(OFF, groupId);
|
|
|
+ uint8_t arg = groupCommandArg(OFF, groupId);
|
|
|
command(RGB_CCT_ON | 0x80, arg);
|
|
|
}
|
|
|
|
|
|
-void RgbCctPacketFormatter::finalizePacket(uint8_t* packet) {
|
|
|
- V2RFEncoding::encodeV2Packet(packet);
|
|
|
-}
|
|
|
-
|
|
|
void RgbCctPacketFormatter::parsePacket(const uint8_t *packet, JsonObject& result) {
|
|
|
uint8_t packetCopy[RGB_CCT_PACKET_LEN];
|
|
|
memcpy(packetCopy, packet, RGB_CCT_PACKET_LEN);
|
|
|
@@ -104,8 +63,8 @@ void RgbCctPacketFormatter::parsePacket(const uint8_t *packet, JsonObject& resul
|
|
|
result["group_id"] = packetCopy[7];
|
|
|
result["device_type"] = "rgb_cct";
|
|
|
|
|
|
- uint8_t command = (packetCopy[RGB_CCT_COMMAND_INDEX] & 0x7F);
|
|
|
- uint8_t arg = packetCopy[RGB_CCT_ARGUMENT_INDEX];
|
|
|
+ uint8_t command = (packetCopy[V2_COMMAND_INDEX] & 0x7F);
|
|
|
+ uint8_t arg = packetCopy[V2_ARGUMENT_INDEX];
|
|
|
|
|
|
if (command == RGB_CCT_ON) {
|
|
|
if (arg == RGB_CCT_MODE_SPEED_DOWN) {
|
|
|
@@ -156,25 +115,3 @@ void RgbCctPacketFormatter::parsePacket(const uint8_t *packet, JsonObject& resul
|
|
|
result["state"] = "ON";
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-void RgbCctPacketFormatter::format(uint8_t const* packet, char* buffer) {
|
|
|
- buffer += sprintf_P(buffer, PSTR("Raw packet: "));
|
|
|
- for (int i = 0; i < packetLength; i++) {
|
|
|
- buffer += sprintf_P(buffer, PSTR("%02X "), packet[i]);
|
|
|
- }
|
|
|
-
|
|
|
- uint8_t decodedPacket[packetLength];
|
|
|
- memcpy(decodedPacket, packet, packetLength);
|
|
|
-
|
|
|
- V2RFEncoding::decodeV2Packet(decodedPacket);
|
|
|
-
|
|
|
- buffer += sprintf_P(buffer, PSTR("\n\nDecoded:\n"));
|
|
|
- buffer += sprintf_P(buffer, PSTR("Key : %02X\n"), decodedPacket[0]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("b1 : %02X\n"), decodedPacket[1]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("ID : %02X%02X\n"), decodedPacket[2], decodedPacket[3]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("Command : %02X\n"), decodedPacket[4]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("Argument : %02X\n"), decodedPacket[5]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("Sequence : %02X\n"), decodedPacket[6]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("Group : %02X\n"), decodedPacket[7]);
|
|
|
- buffer += sprintf_P(buffer, PSTR("Checksum : %02X"), decodedPacket[8]);
|
|
|
-}
|