diff --git a/include/crc8.h b/include/crc8.h index ebbb16de8b..f6a2d695b7 100644 --- a/include/crc8.h +++ b/include/crc8.h @@ -62,6 +62,18 @@ uint8_t crc8part(FAR const uint8_t *src, size_t len, uint8_t crc8val); uint8_t crc8(FAR const uint8_t *src, size_t len); +/**************************************************************************** + * Name: crc8table + * + * Description: + * Return a 8-bit CRC of the contents of the 'src' buffer, length 'len' + * using a CRC with crc table used for calculation. + * + ****************************************************************************/ + +uint8_t crc8table(const uint8_t table[256], const uint8_t *src, + size_t len, uint8_t crc8val); + /**************************************************************************** * Name: crc8ccitt * diff --git a/libs/libc/misc/Make.defs b/libs/libc/misc/Make.defs index 200e5c44be..f14f0abaef 100644 --- a/libs/libc/misc/Make.defs +++ b/libs/libc/misc/Make.defs @@ -46,8 +46,9 @@ endif # Add the miscellaneous C files to the build -CSRCS += lib_crc64.c lib_crc32.c lib_crc16.c lib_crc8.c lib_crc8ccitt.c CSRCS += lib_dumpbuffer.c lib_dumpvbuffer.c lib_match.c lib_debug.c +CSRCS += lib_crc64.c lib_crc32.c lib_crc16.c lib_crc8.c lib_crc8ccitt.c +CSRCS += lib_crc8table.c # Keyboard driver encoder/decoder diff --git a/libs/libc/misc/lib_crc8.c b/libs/libc/misc/lib_crc8.c index 7d3312dec6..58e7b8fb69 100644 --- a/libs/libc/misc/lib_crc8.c +++ b/libs/libc/misc/lib_crc8.c @@ -103,15 +103,7 @@ static const uint8_t crc8_tab[256] = uint8_t crc8part(FAR const uint8_t *src, size_t len, uint8_t crc8val) { - size_t i; - - crc8val ^= 0xff; - for (i = 0; i < len; i++) - { - crc8val = crc8_tab[crc8val ^ src[i]]; - } - - return crc8val ^ 0xff; + return crc8table(crc8_tab, src, len, crc8val); } /**************************************************************************** diff --git a/libs/libc/misc/lib_crc8ccitt.c b/libs/libc/misc/lib_crc8ccitt.c index f4494bd06e..94e59b4ca2 100644 --- a/libs/libc/misc/lib_crc8ccitt.c +++ b/libs/libc/misc/lib_crc8ccitt.c @@ -82,16 +82,7 @@ static const uint8_t crc8_tab[256] = uint8_t crc8ccittpart(FAR const uint8_t *src, size_t len, uint8_t crc8val) { - uint8_t *pos = (uint8_t *) src; - uint8_t *end = pos + len; - - while (pos < end) - { - crc8val = crc8_tab[crc8val ^ *pos]; - pos++; - } - - return crc8val; + return crc8table(crc8_tab, src, len, crc8val); } /*************************************************************************** diff --git a/libs/libc/misc/lib_crc8table.c b/libs/libc/misc/lib_crc8table.c new file mode 100644 index 0000000000..0ddb4df4fc --- /dev/null +++ b/libs/libc/misc/lib_crc8table.c @@ -0,0 +1,54 @@ +/**************************************************************************** + * libs/libc/misc/lib_crc8table.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: crc8table + * + * Description: + * Return a 8-bit CRC of the contents of the 'src' buffer, length 'len' + * using a CRC with crc table used for calculation. + * + ****************************************************************************/ + +uint8_t crc8table(const uint8_t table[256], const uint8_t *src, + size_t len, uint8_t crc8val) +{ + size_t i; + + crc8val ^= 0xff; + for (i = 0; i < len; i++) + { + crc8val = table[crc8val ^ src[i]]; + } + + return crc8val ^ 0xff; +}