diff --git a/include/PacketTypes.h b/include/PacketTypes.h index 5b48f70..a73e31b 100644 --- a/include/PacketTypes.h +++ b/include/PacketTypes.h @@ -9,6 +9,9 @@ enum class PacketType { OPEN, CLOSE, STOP, + OPEN_SLOW, + CLOSE_SLOW, + MOVE_TO_SAVED_POSITION, FIELDS, FIELD_COMMAND, UNKNOWN diff --git a/src/BufferFiller.cpp b/src/BufferFiller.cpp index 11ff454..b1a28aa 100644 --- a/src/BufferFiller.cpp +++ b/src/BufferFiller.cpp @@ -57,6 +57,24 @@ bool BufferFiller::fill(uint8_t *buffer, const Packet* packet) { buffer[dataOffset + 1] = 0x55; buffer[dataOffset + 2] = 0x00; break; + case PacketType::CLOSE_SLOW: + setPacketSize(buffer, 0x11); + buffer[dataOffset + 0] = 0x52; + buffer[dataOffset + 1] = 0x4C; + buffer[dataOffset + 2] = 0x00; + break; + case PacketType::OPEN_SLOW: + setPacketSize(buffer, 0x11); + buffer[dataOffset + 0] = 0x52; + buffer[dataOffset + 1] = 0x52; + buffer[dataOffset + 2] = 0x00; + break; + case PacketType::MOVE_TO_SAVED_POSITION: + setPacketSize(buffer, 0x11); + buffer[dataOffset + 0] = 0x52; + buffer[dataOffset + 1] = 0x48; + buffer[dataOffset + 2] = 0x00; + break; case PacketType::FIELDS: { FieldsParameters parameters = std::get(packet->parameters); // 0x10 is the number of bytes without any fields diff --git a/src/PacketParser.cpp b/src/PacketParser.cpp index fe5216b..283e180 100644 --- a/src/PacketParser.cpp +++ b/src/PacketParser.cpp @@ -54,6 +54,15 @@ bool PacketParser::parsePacket(const uint8_t *buffer, Packet& packet) } else if (buffer[dataOffset + 0] == 0x52 && buffer[dataOffset + 1] == 0x55) { packet.type = PacketType::OPEN; packet.parameters = std::monostate{}; + } else if (buffer[dataOffset + 0] == 0x52 && buffer[dataOffset + 1] == 0x4C) { + packet.type = PacketType::CLOSE_SLOW; + packet.parameters = std::monostate{}; + } else if (buffer[dataOffset + 0] == 0x52 && buffer[dataOffset + 1] == 0x52) { + packet.type = PacketType::OPEN_SLOW; + packet.parameters = std::monostate{}; + } else if (buffer[dataOffset + 0] == 0x52 && buffer[dataOffset + 1] == 0x48) { + packet.type = PacketType::MOVE_TO_SAVED_POSITION; + packet.parameters = std::monostate{}; } else if (buffer[dataOffset + 0] == 0x21 && buffer[dataOffset + 1] == 0x5A) { packet.type = PacketType::FIELDS; std::vector fields;