Add support for parsing activate scene packets

This commit is contained in:
2024-04-19 15:07:47 +10:00
parent ce46892fde
commit 80b40cafcb
3 changed files with 25 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ enum class PacketType {
MOVE_TO_SAVED_POSITION,
FIELDS,
FIELD_COMMAND,
ACTIVATE_SCENE,
UNKNOWN
};
@@ -35,7 +36,11 @@ struct FieldsParameters {
std::vector<Field> fields;
};
using PacketParameters = std::variant<std::monostate, FieldsParameters>;
struct ActivateSceneParameters {
uint8_t sceneID;
};
using PacketParameters = std::variant<std::monostate, FieldsParameters, ActivateSceneParameters>;
struct BroadcastHeader {
uint16_t source;

View File

@@ -74,6 +74,9 @@ bool PacketParser::parsePacket(const uint8_t *buffer, Packet& packet)
std::vector<Field> fields;
parseFields(buffer, fields);
packet.parameters = FieldsParameters{fields};
} else if (buffer[dataOffset + 0] == 0x53 && buffer[dataOffset + 1] == 0x47) {
packet.type = PacketType::ACTIVATE_SCENE;
packet.parameters = ActivateSceneParameters{buffer[dataOffset + 2]};
} else {
packet.type = PacketType::UNKNOWN;
packet.parameters = std::monostate{};

View File

@@ -166,6 +166,21 @@ void test_broadcast_source_address()
delete[] packet_data;
}
void test_parse_activate_scene()
{
const uint8_t* packet_data = hex_string_to_array("C00F0005A1FFFF00008604FF000053471B446B");
Packet packet;
run_parse_test(packet_data, packet);
auto parameters = std::get<ActivateSceneParameters>(packet.parameters);
TEST_ASSERT_EQUAL_HEX8(0x1B, parameters.sceneID);
delete[] packet_data;
}
int runUnityTests(void)
{
UNITY_BEGIN();
@@ -179,6 +194,7 @@ int runUnityTests(void)
RUN_TEST(test_unicast_source_address);
RUN_TEST(test_unicast_destination_address);
RUN_TEST(test_broadcast_source_address);
RUN_TEST(test_parse_activate_scene);
return UNITY_END();
}