mirror of https://github.com/ARMmbed/mbed-os.git
MbedCRC: improve default constructors
Original default constructor implementation wasn't quite working properly; it didn't cope with the new "mode_limit" parameter. Change mechanism so that this now works: MbedCRC<POLY32_BIT_ANSI_CRC, 32, CrcMode::TABLE> crc;pull/11897/head
parent
83a9606140
commit
ccd2a32ad1
|
@ -143,6 +143,28 @@ void test_partial_crc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_mode_limit()
|
||||||
|
{
|
||||||
|
const char test[] = "123456789";
|
||||||
|
uint32_t crc;
|
||||||
|
|
||||||
|
{
|
||||||
|
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::BITWISE> ct;
|
||||||
|
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
|
||||||
|
TEST_ASSERT_EQUAL(0xCBF43926, crc);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::TABLE> ct;
|
||||||
|
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
|
||||||
|
TEST_ASSERT_EQUAL(0xCBF43926, crc);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::HARDWARE> ct;
|
||||||
|
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
|
||||||
|
TEST_ASSERT_EQUAL(0xCBF43926, crc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void test_sd_crc()
|
void test_sd_crc()
|
||||||
{
|
{
|
||||||
MbedCRC<POLY_7BIT_SD, 7> crc7;
|
MbedCRC<POLY_7BIT_SD, 7> crc7;
|
||||||
|
@ -232,6 +254,7 @@ void test_thread_safety()
|
||||||
Case cases[] = {
|
Case cases[] = {
|
||||||
Case("Test supported polynomials", test_supported_polynomials),
|
Case("Test supported polynomials", test_supported_polynomials),
|
||||||
Case("Test partial CRC", test_partial_crc),
|
Case("Test partial CRC", test_partial_crc),
|
||||||
|
Case("Test mode-limited CRC", test_mode_limit),
|
||||||
Case("Test SD CRC polynomials", test_sd_crc),
|
Case("Test SD CRC polynomials", test_sd_crc),
|
||||||
#if defined(MBED_CONF_RTOS_PRESENT)
|
#if defined(MBED_CONF_RTOS_PRESENT)
|
||||||
Case("Test thread safety", test_thread_safety),
|
Case("Test thread safety", test_thread_safety),
|
||||||
|
|
|
@ -186,8 +186,34 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr
|
/* Default values for different types of polynomials
|
||||||
MbedCRC();
|
*/
|
||||||
|
// *INDENT-OFF*
|
||||||
|
template<uint32_t poly = polynomial, std::enable_if_t<poly == POLY_32BIT_ANSI && width == 32, int> = 0>
|
||||||
|
constexpr MbedCRC() : MbedCRC(0xFFFFFFFF, 0xFFFFFFFF, true, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<uint32_t poly = polynomial, std::enable_if_t<poly == POLY_16BIT_IBM && width == 16, int> = 0>
|
||||||
|
constexpr MbedCRC() : MbedCRC(0, 0, true, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<uint32_t poly = polynomial, std::enable_if_t<poly == POLY_16BIT_CCITT && width == 16, int> = 0>
|
||||||
|
constexpr MbedCRC() : MbedCRC(0xFFFF, 0, false, false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<uint32_t poly = polynomial, std::enable_if_t<poly == POLY_7BIT_SD && width == 7, int> = 0>
|
||||||
|
constexpr MbedCRC() : MbedCRC(0, 0, false, false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template<uint32_t poly = polynomial, std::enable_if_t<poly == POLY_8BIT_CCITT && width == 8, int> = 0>
|
||||||
|
constexpr MbedCRC() : MbedCRC(0, 0, false, false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
// *INDENT-ON*
|
||||||
|
|
||||||
/** Compute CRC for the data input
|
/** Compute CRC for the data input
|
||||||
* Compute CRC performs the initialization, computation and collection of
|
* Compute CRC performs the initialization, computation and collection of
|
||||||
|
@ -842,38 +868,6 @@ const uint32_t MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::TABLE>::_crc_table[MBED_CRC
|
||||||
|
|
||||||
#endif // !defined(DOXYGEN_ONLY)
|
#endif // !defined(DOXYGEN_ONLY)
|
||||||
|
|
||||||
/* Default values for different types of polynomials
|
|
||||||
*/
|
|
||||||
template<>
|
|
||||||
inline MSTD_CONSTEXPR_FN_14
|
|
||||||
MbedCRC<POLY_32BIT_ANSI, 32>::MbedCRC() : MbedCRC(0xFFFFFFFF, 0xFFFFFFFF, true, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline MSTD_CONSTEXPR_FN_14
|
|
||||||
MbedCRC<POLY_16BIT_IBM, 16>::MbedCRC() : MbedCRC(0, 0, true, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline MSTD_CONSTEXPR_FN_14
|
|
||||||
MbedCRC<POLY_16BIT_CCITT, 16>::MbedCRC() : MbedCRC(0xFFFF, 0, false, false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline MSTD_CONSTEXPR_FN_14
|
|
||||||
MbedCRC<POLY_7BIT_SD, 7>::MbedCRC(): MbedCRC(0, 0, false, false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<>
|
|
||||||
inline MSTD_CONSTEXPR_FN_14
|
|
||||||
MbedCRC<POLY_8BIT_CCITT, 8>::MbedCRC(): MbedCRC(0, 0, false, false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @}*/
|
/** @}*/
|
||||||
/** @}*/
|
/** @}*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue