Support building fetch position packets

This commit is contained in:
2023-12-15 22:39:52 +11:00
parent f41e0edf56
commit 18639220b8
3 changed files with 29 additions and 8 deletions

View File

@@ -12,7 +12,8 @@ public:
void buildUpPacket(uint8_t *buffer, uint16_t shadeID);
void buildDownPacket(uint8_t *buffer, uint16_t shadeID);
void buildStopPacket(uint8_t *buffer, uint16_t shadeID);
void buildPositionPacket(uint8_t *buffer, uint16_t shadeID, float percentage);
void buildSetPositionPacket(uint8_t *buffer, uint16_t shadeID, float percentage);
void buildFetchPositionPacket(uint8_t *buffer, uint16_t shadeID);
private:
uint16_t address;

View File

@@ -66,7 +66,7 @@ void PacketBuilder::buildStopPacket(uint8_t *buffer, uint16_t shadeID)
incrementRollingCodes();
}
void PacketBuilder::buildPositionPacket(uint8_t *buffer, uint16_t shadeID, float percentage)
void PacketBuilder::buildSetPositionPacket(uint8_t *buffer, uint16_t shadeID, float percentage)
{
setPacketSize(buffer, 0x15);
setConstants(buffer);
@@ -75,12 +75,12 @@ void PacketBuilder::buildPositionPacket(uint8_t *buffer, uint16_t shadeID, float
setDestinationAddress(buffer, shadeID);
setRollingCodes(buffer);
buffer[16] = 0x3F; // Command
buffer[17] = 0x5A; // Empty?
buffer[16] = 0x3F; // Field command
buffer[17] = 0x5A; // Constant
buffer[18] = 0x04; // Constant in this size packet?
buffer[19] = 0x40; // Constant in this size packet?
buffer[20] = 0x50; // Constant in this size packet?
buffer[18] = 0x04; // Field of 4 bytes
buffer[19] = 0x40; // Field type (0x40 is set)
buffer[20] = 0x50; // ID of position field
uint16_t position = (uint16_t)(0xFFFF * percentage);
@@ -92,6 +92,26 @@ void PacketBuilder::buildPositionPacket(uint8_t *buffer, uint16_t shadeID, float
incrementRollingCodes();
}
void PacketBuilder::buildFetchPositionPacket(uint8_t *buffer, uint16_t shadeID) {
setPacketSize(buffer, 0x13);
setConstants(buffer);
setProtocolVersion(buffer, protocolVersion);
setSourceAddress(buffer, address);
setDestinationAddress(buffer, shadeID);
setRollingCodes(buffer);
buffer[16] = 0x3F; // Field command
buffer[17] = 0x5A; // Constant
buffer[18] = 0x02; // Field of 2 bytes
buffer[19] = 0x3F; // Field type (0x3F is fetch)
buffer[20] = 0x50; // ID of position field
calculateCRC(buffer);
incrementRollingCodes();
}
void PacketBuilder::setPacketSize(uint8_t *buffer, uint8_t length) {
buffer[1] = length; // Packet size
}