Add support for parsing activate scene packets
This commit is contained in:
@@ -14,6 +14,7 @@ enum class PacketType {
|
|||||||
MOVE_TO_SAVED_POSITION,
|
MOVE_TO_SAVED_POSITION,
|
||||||
FIELDS,
|
FIELDS,
|
||||||
FIELD_COMMAND,
|
FIELD_COMMAND,
|
||||||
|
ACTIVATE_SCENE,
|
||||||
UNKNOWN
|
UNKNOWN
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -35,7 +36,11 @@ struct FieldsParameters {
|
|||||||
std::vector<Field> fields;
|
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 {
|
struct BroadcastHeader {
|
||||||
uint16_t source;
|
uint16_t source;
|
||||||
|
|||||||
@@ -74,6 +74,9 @@ bool PacketParser::parsePacket(const uint8_t *buffer, Packet& packet)
|
|||||||
std::vector<Field> fields;
|
std::vector<Field> fields;
|
||||||
parseFields(buffer, fields);
|
parseFields(buffer, fields);
|
||||||
packet.parameters = FieldsParameters{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 {
|
} else {
|
||||||
packet.type = PacketType::UNKNOWN;
|
packet.type = PacketType::UNKNOWN;
|
||||||
packet.parameters = std::monostate{};
|
packet.parameters = std::monostate{};
|
||||||
|
|||||||
@@ -166,6 +166,21 @@ void test_broadcast_source_address()
|
|||||||
delete[] packet_data;
|
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)
|
int runUnityTests(void)
|
||||||
{
|
{
|
||||||
UNITY_BEGIN();
|
UNITY_BEGIN();
|
||||||
@@ -179,6 +194,7 @@ int runUnityTests(void)
|
|||||||
RUN_TEST(test_unicast_source_address);
|
RUN_TEST(test_unicast_source_address);
|
||||||
RUN_TEST(test_unicast_destination_address);
|
RUN_TEST(test_unicast_destination_address);
|
||||||
RUN_TEST(test_broadcast_source_address);
|
RUN_TEST(test_broadcast_source_address);
|
||||||
|
RUN_TEST(test_parse_activate_scene);
|
||||||
return UNITY_END();
|
return UNITY_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user