@@ -0,0 +1,60 | |||||
|
1 | #include "tcpackettosend.h" | |||
|
2 | ||||
|
3 | TCPacketToSend::TCPacketToSend(QObject *parent) : | |||
|
4 | QObject(parent) | |||
|
5 | { | |||
|
6 | initLookUpTableForCRC(); | |||
|
7 | } | |||
|
8 | ||||
|
9 | void TCPacketToSend::initLookUpTableForCRC( void ) | |||
|
10 | { | |||
|
11 | unsigned int i; | |||
|
12 | unsigned int tmp; | |||
|
13 | ||||
|
14 | for (i=0; i<256; i++) | |||
|
15 | { | |||
|
16 | tmp = 0; | |||
|
17 | if((i & 1) != 0) { | |||
|
18 | tmp = tmp ^ 0x1021; | |||
|
19 | } | |||
|
20 | if((i & 2) != 0) { | |||
|
21 | tmp = tmp ^ 0x2042; | |||
|
22 | } | |||
|
23 | if((i & 4) != 0) { | |||
|
24 | tmp = tmp ^ 0x4084; | |||
|
25 | } | |||
|
26 | if((i & 8) != 0) { | |||
|
27 | tmp = tmp ^ 0x8108; | |||
|
28 | } | |||
|
29 | if((i & 16) != 0) { | |||
|
30 | tmp = tmp ^ 0x1231; | |||
|
31 | } | |||
|
32 | if((i & 32) != 0) { | |||
|
33 | tmp = tmp ^ 0x2462; | |||
|
34 | } | |||
|
35 | if((i & 64) != 0) { | |||
|
36 | tmp = tmp ^ 0x48c4; | |||
|
37 | } | |||
|
38 | if((i & 128) != 0) { | |||
|
39 | tmp = tmp ^ 0x9188; | |||
|
40 | } | |||
|
41 | lookUpTableForCRC[i] = tmp; | |||
|
42 | } | |||
|
43 | } | |||
|
44 | ||||
|
45 | void TCPacketToSend::GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData) | |||
|
46 | { | |||
|
47 | unsigned int Chk; | |||
|
48 | unsigned int j; | |||
|
49 | Chk = 0xffff; // reset the syndrom to all ones | |||
|
50 | for (j=0; j<sizeOfData; j++) { | |||
|
51 | Chk = Crc_opt(data[j], Chk); | |||
|
52 | } | |||
|
53 | crcAsTwoBytes[0] = (unsigned char) (Chk >> 8); | |||
|
54 | crcAsTwoBytes[1] = (unsigned char) (Chk & 0x00ff); | |||
|
55 | } | |||
|
56 | ||||
|
57 | unsigned int TCPacketToSend::Crc_opt( unsigned char D, unsigned int Chk) | |||
|
58 | { | |||
|
59 | return(((Chk << 8) & 0xff00)^lookUpTableForCRC [(((Chk >> 8)^D) & 0x00ff)]); | |||
|
60 | } |
@@ -0,0 +1,27 | |||||
|
1 | #ifndef TCPACKETTOSEND_H | |||
|
2 | #define TCPACKETTOSEND_H | |||
|
3 | ||||
|
4 | #include <QObject> | |||
|
5 | ||||
|
6 | #include <TC_types.h> | |||
|
7 | ||||
|
8 | class TCPacketToSend : public QObject | |||
|
9 | { | |||
|
10 | Q_OBJECT | |||
|
11 | public: | |||
|
12 | explicit TCPacketToSend(QObject *parent = 0); | |||
|
13 | ||||
|
14 | unsigned char calculateDataCRC(char *data, int nbBytes); | |||
|
15 | void initLookUpTableForCRC( void ); | |||
|
16 | ||||
|
17 | void GetCRCAsTwoBytes(unsigned char* data, unsigned char* crcAsTwoBytes, unsigned int sizeOfData); | |||
|
18 | unsigned int Crc_opt( unsigned char D, unsigned int Chk); | |||
|
19 | unsigned int lookUpTableForCRC[256]; | |||
|
20 | ||||
|
21 | signals: | |||
|
22 | ||||
|
23 | public slots: | |||
|
24 | ||||
|
25 | }; | |||
|
26 | ||||
|
27 | #endif // TCPACKETTOSEND_H |
General Comments 0
You need to be logged in to leave comments.
Login now