From 35261f5208e90ac9a2f8474068b0419bde5ca6c8 Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Mon, 7 Jul 2008 23:24:36 +0000 Subject: [PATCH] Added a function for computing the CRC16 over a portion of data --- core/lib/crc16.c | 63 +++++++++++++++++++++++++++++------------------- core/lib/crc16.h | 19 ++++++++++++++- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/core/lib/crc16.c b/core/lib/crc16.c index cdb5a9f05..9be8317f9 100644 --- a/core/lib/crc16.c +++ b/core/lib/crc16.c @@ -1,34 +1,34 @@ /* * Copyright (c) 2005, Swedish Institute of Computer Science - * All rights reserved. + * All rights reserved. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. * * This file is part of the Contiki operating system. * - * @(#)$Id: crc16.c,v 1.1 2006/06/17 22:41:17 adamdunkels Exp $ + * @(#)$Id: crc16.c,v 1.2 2008/07/07 23:24:36 adamdunkels Exp $ */ /** \addtogroup crc16 @@ -39,7 +39,7 @@ * Implementation of the CRC16 calculcation * \author * Adam Dunkels - * + * */ /* CITT CRC16 polynomial ^16 + ^12 + ^5 + 1 */ @@ -63,5 +63,18 @@ crc16_add(unsigned char b, unsigned short acc) return acc; } /*---------------------------------------------------------------------------*/ +unsigned short +crc16_data(unsigned char *data, int len, unsigned short acc) +{ + int i; + unsigned short crc = 0; + + for(i = 0; i < len; ++i) { + crc = crc16_add(*data, crc); + ++data; + } + return crc; +} +/*---------------------------------------------------------------------------*/ /** @} */ diff --git a/core/lib/crc16.h b/core/lib/crc16.h index e7264bde4..827bf6d8c 100644 --- a/core/lib/crc16.h +++ b/core/lib/crc16.h @@ -50,7 +50,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: crc16.h,v 1.1 2006/06/17 22:41:17 adamdunkels Exp $ + * @(#)$Id: crc16.h,v 1.2 2008/07/07 23:24:36 adamdunkels Exp $ */ #ifndef __CRC16_H__ #define __CRC16_H__ @@ -73,6 +73,23 @@ */ unsigned short crc16_add(unsigned char b, unsigned short crc); +/** + * \brief Calculate the CRC16 over a data area + * \param data Pointer to the data + * \param datalen The length of the data + * \param crc The accumulated CRC that is to be updated (or zero). + * \return The CRC16 checksum. + * + * This function calculates the CRC16 checksum of a data area. + * + * \note The algorithm used in this implementation is + * tailored for a running checksum and does not perform as + * well as a table-driven algorithm when checksumming an + * entire data block. + */ +unsigned short crc16_data(unsigned char *data, int datalen, + unsigned short acc); + #endif /* __CRC16_H__ */ /** @} */