| /*! \addtogroup crc |
| * @{ |
| * \file crc16.h |
| * This was copied from the linux kernel and adjusted for our types. |
| */ |
| |
| /* |
| * crc16.h - CRC-16 routine |
| * |
| * Implements the standard CRC-16: |
| * - Width 16 |
| * - Poly 0x8005 (x^16 + x^15 + x^2 + 1) |
| * - Init 0 |
| * |
| * Copyright (c) 2005 Ben Gardner <bgardner@wabtec.com> |
| * |
| * This source code is licensed under the GNU General Public License, |
| * Version 2. See the file COPYING for more details. |
| */ |
| |
| #pragma once |
| |
| #include <stdint.h> |
| |
| #include <sys/types.h> |
| |
| extern uint16_t const osmo_crc16_table[256]; |
| |
| extern uint16_t osmo_crc16(uint16_t crc, const uint8_t *buffer, size_t len); |
| |
| /*! CRC-16 polynome 0x8005 (x^16 + x^15 + x^2 + 1) */ |
| static inline uint16_t osmo_crc16_byte(uint16_t crc, const uint8_t data) |
| { |
| return (crc >> 8) ^ osmo_crc16_table[(crc ^ data) & 0xff]; |
| } |
| |
| |
| |
| extern uint16_t const osmo_crc16_ccitt_table[256]; |
| |
| extern uint16_t osmo_crc16_ccitt(uint16_t crc, const uint8_t *buffer, size_t len); |
| |
| /*! CCITT polynome 0x8408 (x^0 + x^5 + x^12) */ |
| static inline uint16_t osmo_crc16_ccitt_byte(uint16_t crc, const uint8_t data) |
| { |
| return (crc >> 8) ^ osmo_crc16_ccitt_table[(crc ^ data) & 0xff]; |
| } |
| |
| /*! @} */ |