Add support for parsing activate scene packets
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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{};
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user