Skip to content

Commit ad3647c

Browse files
authored
Merge pull request #11957 from kjbracey-arm/crc-redo
MbedCRC and CRC HAL revisions (6.0 redo)
2 parents c098bdf + cf13cd4 commit ad3647c

File tree

34 files changed

+852
-760
lines changed

34 files changed

+852
-760
lines changed

TESTS/mbed_drivers/crc/main.cpp

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,62 @@ using namespace utest::v1;
2525

2626
void test_supported_polynomials()
2727
{
28-
char test[] = "123456789";
28+
const char test[] = "123456789";
2929
uint32_t crc;
3030

3131
{
3232
MbedCRC<POLY_7BIT_SD, 7> ct;
33-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
34-
TEST_ASSERT_EQUAL(0xEA, crc);
33+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
34+
TEST_ASSERT_EQUAL(0x75, crc);
35+
}
36+
{
37+
MbedCRC<POLY_7BIT_SD, 7> ct(0x7F, 0, false, false);
38+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
39+
TEST_ASSERT_EQUAL(0x50, crc);
40+
}
41+
{
42+
MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, false, false);
43+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
44+
TEST_ASSERT_EQUAL(0x3A, crc);
45+
}
46+
{
47+
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x7F, false, false);
48+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
49+
TEST_ASSERT_EQUAL(0x0A, crc);
50+
}
51+
{
52+
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x2B, false, false);
53+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
54+
TEST_ASSERT_EQUAL(0x5E, crc);
55+
}
56+
{
57+
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0, true, false);
58+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
59+
TEST_ASSERT_EQUAL(0x52, crc);
60+
}
61+
{
62+
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0, false, true);
63+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
64+
TEST_ASSERT_EQUAL(0x57, crc);
3565
}
3666
{
3767
MbedCRC<POLY_8BIT_CCITT, 8> ct;
38-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
68+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
3969
TEST_ASSERT_EQUAL(0xF4, crc);
4070
}
4171
{
4272
MbedCRC<POLY_16BIT_CCITT, 16> ct;
43-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
73+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
4474
TEST_ASSERT_EQUAL(0x29B1, crc);
4575
}
4676
{
4777
MbedCRC<POLY_16BIT_IBM, 16> ct;
48-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
78+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
4979
TEST_ASSERT_EQUAL(0xBB3D, crc);
5080
}
5181
{
5282
MbedCRC<POLY_32BIT_ANSI, 32> ct;
53-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
83+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
5484
TEST_ASSERT_EQUAL(0xCBF43926, crc);
5585
}
5686
}
@@ -62,8 +92,8 @@ void test_partial_crc()
6292
{
6393
MbedCRC<POLY_16BIT_CCITT, 16> ct;
6494
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
65-
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test, 4, &crc));
66-
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test[4], 5, &crc));
95+
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 4, &crc));
96+
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[4], 5, &crc));
6797
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
6898

6999
TEST_ASSERT_EQUAL(0x29B1, crc);
@@ -81,31 +111,31 @@ void test_sd_crc()
81111
test[2] = 0x00;
82112
test[3] = 0x00;
83113
test[4] = 0x00;
84-
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
85-
crc = (crc | 0x1) & 0xFF;
114+
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
115+
crc = (crc << 1) | 0x1;
86116
TEST_ASSERT_EQUAL(0x95, crc);
87117

88118
test[0] = 0x48;
89119
test[1] = 0x00;
90120
test[2] = 0x00;
91121
test[3] = 0x01;
92122
test[4] = 0xAA;
93-
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
94-
crc = (crc | 0x1) & 0xFF;
123+
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
124+
crc = (crc << 1) | 0x1;
95125
TEST_ASSERT_EQUAL(0x87, crc);
96126

97127
test[0] = 0x51;
98128
test[1] = 0x00;
99129
test[2] = 0x00;
100130
test[3] = 0x00;
101131
test[4] = 0x00;
102-
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
103-
crc = (crc | 0x1) & 0xFF;
132+
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
133+
crc = (crc << 1) | 0x1;
104134
TEST_ASSERT_EQUAL(0x55, crc);
105135

106136
MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
107137
memset(test, 0xFF, 512);
108-
TEST_ASSERT_EQUAL(0, crc16.compute((void *)test, 512, &crc));
138+
TEST_ASSERT_EQUAL(0, crc16.compute(test, 512, &crc));
109139
TEST_ASSERT_EQUAL(0x7FA1, crc);
110140
}
111141

@@ -115,12 +145,12 @@ void test_any_polynomial()
115145
uint32_t crc;
116146
{
117147
MbedCRC<0x3D65, 16> ct(0x0, 0xFFFF, 0, 0);
118-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
148+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
119149
TEST_ASSERT_EQUAL(0xC2B7, crc);
120150
}
121151
{
122152
MbedCRC<0x1EDC6F41, 32> ct(0xFFFFFFFF, 0xFFFFFFFF, 1, 1);
123-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
153+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
124154
TEST_ASSERT_EQUAL(0xE3069283, crc);
125155
}
126156
}
@@ -130,7 +160,7 @@ void test_thread(void)
130160
char test[] = "123456789";
131161
uint32_t crc;
132162
MbedCRC<POLY_32BIT_ANSI, 32> ct;
133-
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
163+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
134164
TEST_ASSERT_EQUAL(0xCBF43926, crc);
135165
}
136166

@@ -143,11 +173,11 @@ void test_thread_safety()
143173
MbedCRC<POLY_16BIT_IBM, 16> ct;
144174

145175
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
146-
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test, 4, &crc));
176+
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 4, &crc));
147177

148178
Thread t1(osPriorityNormal1, 380);
149179
t1.start(callback(test_thread));
150-
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test[4], 5, &crc));
180+
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[4], 5, &crc));
151181
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
152182
TEST_ASSERT_EQUAL(0xBB3D, crc);
153183

TESTS/mbed_hal/crc/main.cpp

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void crc_is_supported_test()
5454
uint32_t num_of_supported_polynomials = 0;
5555

5656
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
57-
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
57+
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
5858

5959
num_of_supported_polynomials++;
6060
}
@@ -68,7 +68,7 @@ void crc_is_supported_test()
6868
void crc_calc_single_test()
6969
{
7070
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
71-
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
71+
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
7272

7373
hal_crc_compute_partial_start(&test_cases[i].config_data);
7474
hal_crc_compute_partial((uint8_t *) input_data, strlen((const char *) input_data));
@@ -84,7 +84,7 @@ void crc_calc_single_test()
8484
void crc_calc_multi_test()
8585
{
8686
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
87-
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
87+
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
8888

8989
const uint32_t first_part_bytes = 3;
9090
const uint32_t second_part_bytes = 1;
@@ -117,7 +117,7 @@ void crc_reconfigure_test()
117117
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
118118

119119
/* Find two supported polynomials if possible. */
120-
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
120+
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
121121
if (pol_cnt == 0) {
122122
pol_idx[pol_cnt] = i;
123123
pol_cnt++;
@@ -159,7 +159,7 @@ void crc_compute_partial_invalid_param_test()
159159

160160
/* At least one polynomial must be supported. */
161161
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
162-
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
162+
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
163163

164164
hal_crc_compute_partial_start(&test_cases[i].config_data);
165165

@@ -180,19 +180,12 @@ void crc_compute_partial_invalid_param_test()
180180
}
181181
}
182182

183-
/* Test that hal_crc_is_supported() returns false if pointer to the config structure is undefined. */
184-
void crc_is_supported_invalid_param_test()
185-
{
186-
TEST_ASSERT_EQUAL(false, hal_crc_is_supported(NULL));
187-
}
188-
189183
Case cases[] = {
190184
Case("test: supported polynomials.", crc_is_supported_test),
191185
Case("test: CRC calculation - single input.", crc_calc_single_test),
192186
Case("test: CRC calculation - multi input.", crc_calc_multi_test),
193187
Case("test: re-configure without getting the result.", crc_reconfigure_test),
194188
Case("test: hal_crc_compute_partial() - invalid parameters.", crc_compute_partial_invalid_param_test),
195-
Case("test: hal_crc_is_supported() - invalid parameter.", crc_is_supported_invalid_param_test),
196189
};
197190

198191
utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
@@ -208,12 +201,12 @@ int main()
208201
// *INDENT-OFF*
209202
TEST_CASE local_test_cases[] = {
210203
/* Predefined polynomials. */
211-
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0xEA },
212-
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0xA0 },
213-
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x74 },
214-
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x95 },
215-
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0xC1 },
216-
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0xA4 },
204+
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0x75 },
205+
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0x50 },
206+
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x3A },
207+
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x0A },
208+
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0x5E },
209+
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0x52 },
217210
/* 06 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 },
218211

219212
/* 07 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 },

UNITTESTS/empty_baseline/unittest.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ set(unittest-test-sources
4848
empty_baseline/empty_baseline.cpp
4949
)
5050

51-
set(DEVICE_FLAGS "-DDEVICE_ANALOGIN -DDEVICE_ANALOGOUT -DDEVICE_CAN -DDEVICE_CRC -DDEVICE_ETHERNET -DDEVICE_FLASH -DDEVICE_I2C -DDEVICE_I2CSLAVE -DDEVICE_I2C_ASYNCH -DDEVICE_INTERRUPTIN -DDEVICE_LPTICKER -DDEVICE_PORTIN -DDEVICE_PORTINOUT -DDEVICE_PORTOUT -DDEVICE_PWMOUT -DDEVICE_QSPI -DDEVICE_SERIAL -DDEVICE_SERIAL_ASYNCH -DDEVICE_SERIAL_FC -DDEVICE_SPI -DDEVICE_SPISLAVE -DDEVICE_SPI_ASYNCH -DDEVICE_FLASH -DCOMPONENT_FLASHIAP")
51+
set(DEVICE_FLAGS "-DDEVICE_ANALOGIN -DDEVICE_ANALOGOUT -DDEVICE_CAN -DDEVICE_ETHERNET -DDEVICE_FLASH -DDEVICE_I2C -DDEVICE_I2CSLAVE -DDEVICE_I2C_ASYNCH -DDEVICE_INTERRUPTIN -DDEVICE_LPTICKER -DDEVICE_PORTIN -DDEVICE_PORTINOUT -DDEVICE_PORTOUT -DDEVICE_PWMOUT -DDEVICE_QSPI -DDEVICE_SERIAL -DDEVICE_SERIAL_ASYNCH -DDEVICE_SERIAL_FC -DDEVICE_SPI -DDEVICE_SPISLAVE -DDEVICE_SPI_ASYNCH -DDEVICE_FLASH -DCOMPONENT_FLASHIAP")
5252
set(CONF_FLAGS "-DMBED_CONF_PLATFORM_CTHUNK_COUNT_MAX=10 -DMBED_CONF_DATAFLASH_SPI_FREQ=1 -DMBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS=0 -DMBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE=0 -DMBED_CONF_QSPIF_QSPI_FREQ=1 -DMBED_CONF_QSPIF_QSPI_MIN_READ_SIZE=1 -DMBED_CONF_QSPIF_QSPI_MIN_PROG_SIZE=1 -DMBED_LFS_READ_SIZE=64 -DMBED_LFS_PROG_SIZE=64 -DMBED_LFS_BLOCK_SIZE=512 -DMBED_LFS_LOOKAHEAD=512 -DFLASHIAP_APP_ROM_END_ADDR=0x80000 -DMBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE=1024 -DMBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS=0x80000 -DMBED_CONF_STORAGE_STORAGE_TYPE=default")
5353
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DEVICE_FLAGS} ${CONF_FLAGS}")
5454
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEVICE_FLAGS} ${CONF_FLAGS}")

UNITTESTS/target_h/cmsis.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,19 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17+
18+
#ifndef MBED_CMSIS_H
19+
#define MBED_CMSIS_H
20+
21+
#include <stdint.h>
22+
static inline uint32_t __RBIT(uint32_t x)
23+
{
24+
x = ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1);
25+
x = ((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2);
26+
x = ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4);
27+
x = ((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8);
28+
x = (x >> 16) | (x << 16);
29+
return x;
30+
}
31+
32+
#endif

components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ const uint32_t SDBlockDevice::_block_size = BLOCK_SIZE_HC;
252252
#if MBED_CONF_SD_CRC_ENABLED
253253
SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName cs, uint64_t hz, bool crc_on)
254254
: _sectors(0), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0),
255-
_init_ref_count(0), _crc_on(crc_on), _crc16(0, 0, false, false)
255+
_init_ref_count(0), _crc_on(crc_on)
256256
#else
257257
SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName cs, uint64_t hz, bool crc_on)
258258
: _sectors(0), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0),
@@ -678,10 +678,11 @@ uint8_t SDBlockDevice::_cmd_spi(SDBlockDevice::cmdSupported cmd, uint32_t arg)
678678
cmdPacket[4] = (arg >> 0);
679679

680680
#if MBED_CONF_SD_CRC_ENABLED
681-
uint32_t crc;
682681
if (_crc_on) {
683-
_crc7.compute((void *)cmdPacket, 5, &crc);
684-
cmdPacket[5] = (char)(crc | 0x01);
682+
MbedCRC<POLY_7BIT_SD, 7> crc7;
683+
uint32_t crc;
684+
crc7.compute(cmdPacket, 5, &crc);
685+
cmdPacket[5] = ((uint8_t) crc << 1) | 0x01;
685686
} else
686687
#endif
687688
{
@@ -899,12 +900,13 @@ int SDBlockDevice::_read_bytes(uint8_t *buffer, uint32_t length)
899900

900901
#if MBED_CONF_SD_CRC_ENABLED
901902
if (_crc_on) {
903+
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
902904
uint32_t crc_result;
903905
// Compute and verify checksum
904-
_crc16.compute((void *)buffer, length, &crc_result);
905-
if ((uint16_t)crc_result != crc) {
906-
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx16 "\n",
907-
crc, (uint16_t)crc_result);
906+
crc16.compute(buffer, length, &crc_result);
907+
if (crc_result != crc) {
908+
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx32 "\n",
909+
crc, crc_result);
908910
_deselect();
909911
return SD_BLOCK_DEVICE_ERROR_CRC;
910912
}
@@ -934,9 +936,10 @@ int SDBlockDevice::_read(uint8_t *buffer, uint32_t length)
934936

935937
#if MBED_CONF_SD_CRC_ENABLED
936938
if (_crc_on) {
939+
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
937940
uint32_t crc_result;
938941
// Compute and verify checksum
939-
_crc16.compute((void *)buffer, length, &crc_result);
942+
crc16.compute((void *)buffer, length, &crc_result);
940943
if ((uint16_t)crc_result != crc) {
941944
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx16 "\n",
942945
crc, (uint16_t)crc_result);
@@ -962,8 +965,9 @@ uint8_t SDBlockDevice::_write(const uint8_t *buffer, uint8_t token, uint32_t len
962965

963966
#if MBED_CONF_SD_CRC_ENABLED
964967
if (_crc_on) {
968+
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
965969
// Compute CRC
966-
_crc16.compute((void *)buffer, length, &crc);
970+
crc16.compute(buffer, length, &crc);
967971
}
968972
#endif
969973

components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,6 @@ class SDBlockDevice : public mbed::BlockDevice {
256256

257257
#if MBED_CONF_SD_CRC_ENABLED
258258
bool _crc_on;
259-
mbed::MbedCRC<POLY_7BIT_SD, 7> _crc7;
260-
mbed::MbedCRC<POLY_16BIT_CCITT, 16> _crc16;
261259
#endif
262260
};
263261

0 commit comments

Comments
 (0)