Mercurial > public > ostc_companion
annotate crc_wrapper.cpp @ 14:e47e0f59101d default tip
Enable OSTC 4/5 Icon option
The button for uploading the icon is now activated based on the first FW
version supporting this function
| author | Ideenmodellierer |
|---|---|
| date | Mon, 12 Jan 2026 18:47:00 +0100 |
| parents | 6fba58c4964b |
| children |
| rev | line source |
|---|---|
| 5 | 1 #include "crc_wrapper.h" |
| 2 | |
| 3 extern "C" { | |
| 4 #include "crcmodel.h" | |
| 5 } | |
| 6 | |
| 7 CrcWrapper::CrcWrapper(QObject *parent) | |
| 8 : QObject(parent) | |
| 9 {} | |
| 10 | |
| 11 void CrcWrapper::init(p_cm_t p_cm) | |
| 12 { | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
13 cm_ini(p_cm); |
| 5 | 14 } |
| 15 | |
| 16 void CrcWrapper::cm_next(p_cm_t p_cm, int ch) | |
| 17 { | |
| 18 cm_nxt(p_cm, ch); | |
| 19 } | |
| 20 | |
| 21 uint32_t CrcWrapper::CRC_CalcBlockCRC(uint32_t *buffer, uint32_t words) | |
| 22 { | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
23 cm_t crc_model; |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
24 uint32_t word_to_do; |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
25 uint8_t byte_to_do; |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
26 int i; |
| 5 | 27 |
| 28 // Values for the STM32F generator. | |
| 29 | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
30 crc_model.cm_width = 32; // 32-bit CRC |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
31 crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
32 crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
33 crc_model.cm_refin = FALSE; // CRC calculated MSB first |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
34 crc_model.cm_refot = FALSE; // Final result is not bit-reversed |
|
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
35 crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this |
| 5 | 36 |
| 37 cm_ini(&crc_model); | |
| 38 | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
39 while (words--) { |
| 5 | 40 // The STM32F10x hardware does 32-bit words at a time!!! |
| 41 | |
| 42 word_to_do = *buffer++; | |
| 43 | |
| 44 // Do all bytes in the 32-bit word. | |
| 45 | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
46 for (i = 0; i < sizeof(word_to_do); i++) { |
| 5 | 47 // We calculate a *byte* at a time. If the CRC is MSB first we |
| 48 // do the next MS byte and vica-versa. | |
| 49 | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
50 if (crc_model.cm_refin == FALSE) { |
| 5 | 51 // MSB first. Do the next MS byte. |
| 52 | |
| 53 byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24); | |
| 54 word_to_do <<= 8; | |
|
11
6fba58c4964b
Minor changes done by automatic style checker
Ideenmodellierer
parents:
5
diff
changeset
|
55 } else { |
| 5 | 56 // LSB first. Do the next LS byte. |
| 57 | |
| 58 byte_to_do = (uint8_t) (word_to_do & 0x000000FF); | |
| 59 word_to_do >>= 8; | |
| 60 } | |
| 61 | |
| 62 cm_nxt(&crc_model, byte_to_do); | |
| 63 } | |
| 64 } | |
| 65 | |
| 66 // Return the final result. | |
| 67 | |
| 68 return (cm_crc(&crc_model)); | |
| 69 } |
