diff --git a/parameterdump/tcpackettosend.cpp b/parameterdump/tcpackettosend.cpp new file mode 100644 --- /dev/null +++ b/parameterdump/tcpackettosend.cpp @@ -0,0 +1,60 @@ +#include "tcpackettosend.h" + +TCPacketToSend::TCPacketToSend(QObject *parent) : + QObject(parent) +{ + initLookUpTableForCRC(); +} + +void TCPacketToSend::initLookUpTableForCRC( void ) +{ + unsigned int i; + unsigned int tmp; + + for (i=0; i<256; i++) + { + tmp = 0; + if((i & 1) != 0) { + tmp = tmp ^ 0x1021; + } + if((i & 2) != 0) { + tmp = tmp ^ 0x2042; + } + if((i & 4) != 0) { + tmp = tmp ^ 0x4084; + } + if((i & 8) != 0) { + tmp = tmp ^ 0x8108; + } + if((i & 16) != 0) { + tmp = tmp ^ 0x1231; + } + if((i & 32) != 0) { + tmp = tmp ^ 0x2462; + } + if((i & 64) != 0) { + tmp = tmp ^ 0x48c4; + } + if((i & 128) != 0) { + tmp = tmp ^ 0x9188; + } + lookUpTableForCRC[i] = tmp; + } +} + +void TCPacketToSend::GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData) +{ + unsigned int Chk; + unsigned int j; + Chk = 0xffff; // reset the syndrom to all ones + for (j=0; j> 8); + crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff); +} + +unsigned int TCPacketToSend::Crc_opt( unsigned char D, unsigned int Chk) +{ + return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]); +} diff --git a/parameterdump/tcpackettosend.h b/parameterdump/tcpackettosend.h new file mode 100644 --- /dev/null +++ b/parameterdump/tcpackettosend.h @@ -0,0 +1,27 @@ +#ifndef TCPACKETTOSEND_H +#define TCPACKETTOSEND_H + +#include + +#include + +class TCPacketToSend : public QObject +{ + Q_OBJECT +public: + explicit TCPacketToSend(QObject *parent = 0); + + unsigned char calculateDataCRC(char *data, int nbBytes); + void initLookUpTableForCRC( void ); + + void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData); + unsigned int Crc_opt( unsigned char D, unsigned int Chk); + unsigned int lookUpTableForCRC[256]; + +signals: + +public slots: + +}; + +#endif // TCPACKETTOSEND_H