Add an additional helper for setting packet size based on length of data
This commit is contained in:
@@ -15,7 +15,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
PacketCRC packetCRC;
|
PacketCRC packetCRC;
|
||||||
|
|
||||||
void setPacketSize(uint8_t *buffer, uint8_t);
|
void setPacketSize(uint8_t *buffer, uint8_t size);
|
||||||
|
void setPacketSize(uint8_t *buffer, uint8_t dataOffset, uint8_t dataLength);
|
||||||
void setConstants(uint8_t *buffer);
|
void setConstants(uint8_t *buffer);
|
||||||
void setSourceAddress(uint8_t *buffer, uint8_t offset, uint16_t source);
|
void setSourceAddress(uint8_t *buffer, uint8_t offset, uint16_t source);
|
||||||
void setDestinationAddress(uint8_t *buffer, uint8_t offset, uint16_t destination);
|
void setDestinationAddress(uint8_t *buffer, uint8_t offset, uint16_t destination);
|
||||||
|
|||||||
@@ -39,37 +39,37 @@ bool BufferFiller::fill(uint8_t *buffer, const Packet* packet) {
|
|||||||
|
|
||||||
switch(packet->type) {
|
switch(packet->type) {
|
||||||
case PacketType::STOP:
|
case PacketType::STOP:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x53;
|
buffer[dataOffset + 1] = 0x53;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PacketType::CLOSE:
|
case PacketType::CLOSE:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x44;
|
buffer[dataOffset + 1] = 0x44;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PacketType::OPEN:
|
case PacketType::OPEN:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x55;
|
buffer[dataOffset + 1] = 0x55;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PacketType::CLOSE_SLOW:
|
case PacketType::CLOSE_SLOW:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x4C;
|
buffer[dataOffset + 1] = 0x4C;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PacketType::OPEN_SLOW:
|
case PacketType::OPEN_SLOW:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x52;
|
buffer[dataOffset + 1] = 0x52;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
break;
|
break;
|
||||||
case PacketType::MOVE_TO_SAVED_POSITION:
|
case PacketType::MOVE_TO_SAVED_POSITION:
|
||||||
setPacketSize(buffer, 0x11);
|
setPacketSize(buffer, dataOffset, 3);
|
||||||
buffer[dataOffset + 0] = 0x52;
|
buffer[dataOffset + 0] = 0x52;
|
||||||
buffer[dataOffset + 1] = 0x48;
|
buffer[dataOffset + 1] = 0x48;
|
||||||
buffer[dataOffset + 2] = 0x00;
|
buffer[dataOffset + 2] = 0x00;
|
||||||
@@ -79,8 +79,7 @@ bool BufferFiller::fill(uint8_t *buffer, const Packet* packet) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FieldsParameters parameters = std::get<FieldsParameters>(packet->parameters);
|
FieldsParameters parameters = std::get<FieldsParameters>(packet->parameters);
|
||||||
// 0x10 is the number of bytes without any fields
|
setPacketSize(buffer, dataOffset, calculateTotalFieldSize(parameters));
|
||||||
setPacketSize(buffer, 0x10 + calculateTotalFieldSize(parameters));
|
|
||||||
buffer[dataOffset + 0] = 0x21;
|
buffer[dataOffset + 0] = 0x21;
|
||||||
buffer[dataOffset + 1] = 0x5A;
|
buffer[dataOffset + 1] = 0x5A;
|
||||||
setFieldsData(buffer, dataOffset + 2, parameters);
|
setFieldsData(buffer, dataOffset + 2, parameters);
|
||||||
@@ -91,8 +90,7 @@ bool BufferFiller::fill(uint8_t *buffer, const Packet* packet) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FieldsParameters parameters = std::get<FieldsParameters>(packet->parameters);
|
FieldsParameters parameters = std::get<FieldsParameters>(packet->parameters);
|
||||||
// 0x10 is the number of bytes without any fields
|
setPacketSize(buffer, dataOffset, calculateTotalFieldSize(parameters));
|
||||||
setPacketSize(buffer, 0x10 + calculateTotalFieldSize(parameters));
|
|
||||||
buffer[dataOffset + 0] = 0x3F;
|
buffer[dataOffset + 0] = 0x3F;
|
||||||
buffer[dataOffset + 1] = 0x5A;
|
buffer[dataOffset + 1] = 0x5A;
|
||||||
setFieldsData(buffer, dataOffset + 2, parameters);
|
setFieldsData(buffer, dataOffset + 2, parameters);
|
||||||
@@ -141,8 +139,12 @@ void BufferFiller::setFieldsData(uint8_t *buffer, uint8_t offset, const FieldsPa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BufferFiller::setPacketSize(uint8_t *buffer, uint8_t length) {
|
void BufferFiller::setPacketSize(uint8_t *buffer, uint8_t size) {
|
||||||
buffer[1] = length; // Packet size
|
buffer[1] = size; // Packet size
|
||||||
|
}
|
||||||
|
|
||||||
|
void BufferFiller::setPacketSize(uint8_t *buffer, uint8_t dataOffset, uint8_t dataLength) {
|
||||||
|
buffer[1] = (dataOffset - 2) + dataLength; // Packet size
|
||||||
}
|
}
|
||||||
|
|
||||||
void BufferFiller::setConstants(uint8_t *buffer) {
|
void BufferFiller::setConstants(uint8_t *buffer) {
|
||||||
@@ -194,7 +196,7 @@ void BufferFiller::calculateCRC(uint8_t *buffer) { // must be called after the b
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t BufferFiller::calculateTotalFieldSize(const FieldsParameters& parameters) {
|
uint8_t BufferFiller::calculateTotalFieldSize(const FieldsParameters& parameters) {
|
||||||
uint8_t totalSize = 0;
|
uint8_t totalSize = 2;
|
||||||
for (size_t i = 0; i < parameters.fields.size(); i++) {
|
for (size_t i = 0; i < parameters.fields.size(); i++) {
|
||||||
Field field = parameters.fields[i];
|
Field field = parameters.fields[i];
|
||||||
totalSize += calculateFieldSize(field);
|
totalSize += calculateFieldSize(field);
|
||||||
|
|||||||
Reference in New Issue
Block a user