14 m_report.reserve(m_reportSize);
15 m_report.assign({
true,
true,
true,
true,
true,
true});
17 auto toValidate = packet;
19 auto toValidateHeader = toValidate.getPrimaryHeader();
20 const auto toValidateHeaderData = toValidateHeader.serialize();
22 const auto dataFieldBytes = toValidate.getFullDataFieldBytes();
23 const auto dataFieldBytesSize = dataFieldBytes.size();
26 if (m_validatePacketCoherence) {
27 m_report[0] = toValidateHeader.getDataLength() == dataFieldBytesSize;
28 result &= m_report[0];
29 const auto calcCRC =
crc16(dataFieldBytes);
30 m_report[1] = calcCRC == toValidate.getCRC();
31 result &= m_report[1];
32 if (toValidateHeader.getSequenceFlags() ==
UNSEGMENTED) {
33 m_report[2] = toValidateHeader.getSequenceCount() == 0;
35 m_report[2] = toValidateHeader.getSequenceCount() > 0;
36 if (m_validateSegmentedCount) {
38 m_report[3] = toValidateHeader.getSequenceCount() == 1;
40 m_report[3] = toValidateHeader.getSequenceCount() == m_sequenceCounter;
45 result &= m_report[2];
46 result &= m_report[3];
49 if (m_validateAgainstTemplate) {
50 m_templatePacket.setUpdatePacketEnable(
false);
51 auto templateHeader = m_templatePacket.getPrimaryHeader();
52 const auto templateHeaderData = templateHeader.serialize();
53 m_report[4] = templateHeaderData[0] == toValidateHeaderData[0] && templateHeaderData[1] == toValidateHeaderData[1];
54 result &= m_report[4];
55 if (templateHeader.getSequenceFlags() ==
UNSEGMENTED) {
56 m_report[5] = toValidateHeader.getSequenceFlags() ==
UNSEGMENTED;
58 m_report[5] = toValidateHeader.getSequenceFlags() !=
UNSEGMENTED;
60 result &= m_report[5];
uint16_t crc16(const std::vector< std::uint8_t > &data, std::uint16_t polynomial=0x1021, std::uint16_t initialValue=0xFFFF, std::uint16_t finalXorValue=0x0000)
Computes the CRC-16 checksum for a given data vector with configurable parameters.