Use PacketCRC helper

This commit is contained in:
2023-12-09 09:57:11 +11:00
parent 33551d7e01
commit 041f09896a
3 changed files with 74 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
#include <CRC16.h>
#include "PacketCRC.h"
#define LENGTH_17 (0x11)
#define LENGTH_21 (0x15)
@@ -15,7 +15,7 @@ uint8_t rollingCode2 = 0x82;
uint8_t buf[32];
CRC16 crc(0x755B, 0x0, 0xBA68, false, false);
PacketCRC packetCRC;
void setPacketLength(uint8_t);
void setConstants();
@@ -140,26 +140,9 @@ void setProtocolVersion(uint8_t version) {
}
void calculateCRC() { // must be called after the buffer has been filled
crc.restart();
uint8_t length = buf[0];
switch(length) {
case 0x11:
crc.setXorOut(0xBA68);
break;
case 0x15:
crc.setXorOut(0xE10C);
break;
case 0x19:
crc.setXorOut(0x89A0);
break;
default:
Serial.print("Unsupported length (");
Serial.print(length);
Serial.println("). Cannot calculate CRC");
return;
}
crc.add(buf, length + 1);
uint16_t result = crc.calc();
uint8_t length = buf[1];
uint16_t result = packetCRC.calculate(buf);
uint8_t checksum1 = (uint8_t)((result & 0xFF00) >> 8);
uint8_t checksum2 = (uint8_t)(result & 0x00FF);

51
PacketCRC.cpp Normal file
View File

@@ -0,0 +1,51 @@
#include "PacketCRC.h"
PacketCRC::PacketCRC() : crc(CRC16(0x755B, 0x0, 0xBA68, false, false)) {
// Constructor implementation (if needed)
}
PacketCRC::~PacketCRC() {
// Destructor implementation (if needed)
}
bool PacketCRC::check(const uint8_t* packet) {
uint8_t length = packet[1];
switch(length) {
case 0x11:
case 0x15:
case 0x19:
break;
default:
return false;
}
uint16_t result = calculate(packet);
uint8_t checksum1 = (uint8_t)((result & 0xFF00) >> 8);
uint8_t checksum2 = (uint8_t)(result & 0x00FF);
if (packet[length + 2] == checksum1 && packet[length + 3] == checksum2) {
return true;
}
return false;
}
uint16_t PacketCRC::calculate(const uint8_t* packet) {
crc.restart();
uint8_t length = packet[1];
switch(length) {
case 0x11:
crc.setXorOut(0x539E);
break;
case 0x15:
crc.setXorOut(0x3B0E);
break;
case 0x19:
crc.setXorOut(0x5C02);
break;
default:
return 0x0000;
}
crc.add(packet, length + 2);
return crc.calc();
}

18
PacketCRC.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef PACKET_CRC_H
#define PACKET_CRC_H
#include <CRC16.h>
class PacketCRC {
public:
PacketCRC();
~PacketCRC();
// Method to calculate CRC for a packet
bool check(const uint8_t* packet);
uint16_t calculate(const uint8_t* packet);
private:
CRC16 crc;
};
#endif // PACKET_CRC_H