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