Mercurial > public > ostc_companion
diff crc_wrapper.cpp @ 5:115cfa4a3239 default tip
Added icon upload function for OSTC 4/5
For the upload the same process as the one for the firmware update is used => CRC functionality has been copied from the ostc_pack SW
| author | Ideenmodellierer |
|---|---|
| date | Tue, 30 Dec 2025 21:41:02 +0100 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crc_wrapper.cpp Tue Dec 30 21:41:02 2025 +0100 @@ -0,0 +1,77 @@ +#include "crc_wrapper.h" + +extern "C" { +#include "crcmodel.h" +} + + +CrcWrapper::CrcWrapper(QObject *parent) + : QObject(parent) +{} + + +void CrcWrapper::init(p_cm_t p_cm) +{ + cm_ini(p_cm); +} + +void CrcWrapper::cm_next(p_cm_t p_cm, int ch) +{ + cm_nxt(p_cm, ch); +} + +uint32_t CrcWrapper::CRC_CalcBlockCRC(uint32_t *buffer, uint32_t words) +{ + cm_t crc_model; + uint32_t word_to_do; + uint8_t byte_to_do; + int i; + + // Values for the STM32F generator. + + crc_model.cm_width = 32; // 32-bit CRC + crc_model.cm_poly = 0x04C11DB7; // CRC-32 polynomial + crc_model.cm_init = 0xFFFFFFFF; // CRC initialized to 1's + crc_model.cm_refin = FALSE; // CRC calculated MSB first + crc_model.cm_refot = FALSE; // Final result is not bit-reversed + crc_model.cm_xorot = 0x00000000; // Final result XOR'ed with this + + cm_ini(&crc_model); + + while (words--) + { + // The STM32F10x hardware does 32-bit words at a time!!! + + word_to_do = *buffer++; + + // Do all bytes in the 32-bit word. + + for (i = 0; i < sizeof(word_to_do); i++) + { + // We calculate a *byte* at a time. If the CRC is MSB first we + // do the next MS byte and vica-versa. + + if (crc_model.cm_refin == FALSE) + { + // MSB first. Do the next MS byte. + + byte_to_do = (uint8_t) ((word_to_do & 0xFF000000) >> 24); + word_to_do <<= 8; + } + else + { + // LSB first. Do the next LS byte. + + byte_to_do = (uint8_t) (word_to_do & 0x000000FF); + word_to_do >>= 8; + } + + cm_nxt(&crc_model, byte_to_do); + } + } + + // Return the final result. + + return (cm_crc(&crc_model)); +} +
