mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-23 20:24:21 +08:00
9dec682a40
This patch adds SPDX License Identifier and removes the license text. ------------------------------------- License COUNT ------------------------------------- LGPL-2.1-or-later : 47 License: LGPL-2.1-or-later monitor/bt.h monitor/hcidump.h monitor/avdtp.h monitor/crc.c monitor/sdp.c monitor/hwdb.c monitor/intel.h monitor/avctp.c monitor/control.h monitor/display.c monitor/a2dp.c monitor/ll.c monitor/ll.h monitor/jlink.h monitor/broadcom.h monitor/lmp.c monitor/keys.c monitor/ellisys.c monitor/main.c monitor/ellisys.h monitor/hwdb.h monitor/display.h monitor/jlink.c monitor/rfcomm.h monitor/packet.c monitor/crc.h monitor/keys.h monitor/sdp.h monitor/rfcomm.c monitor/avdtp.c monitor/a2dp.h monitor/avctp.h monitor/vendor.h monitor/hcidump.c monitor/intel.c monitor/tty.h monitor/control.c monitor/lmp.h monitor/analyze.c monitor/bnep.c monitor/l2cap.c monitor/vendor.c monitor/packet.h monitor/broadcom.c monitor/analyze.h monitor/l2cap.h monitor/bnep.h
72 lines
1.2 KiB
C
72 lines
1.2 KiB
C
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
/*
|
|
*
|
|
* BlueZ - Bluetooth protocol stack for Linux
|
|
*
|
|
* Copyright (C) 2011-2014 Intel Corporation
|
|
* Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
|
|
*
|
|
*
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include "crc.h"
|
|
|
|
uint32_t crc24_bit_reverse(uint32_t value)
|
|
{
|
|
uint32_t result = 0;
|
|
uint8_t i;
|
|
|
|
for (i = 0; i < 24; i++)
|
|
result |= ((value >> i) & 1) << (23 - i);
|
|
|
|
return result;
|
|
}
|
|
|
|
uint32_t crc24_calculate(uint32_t preset, const uint8_t *data, uint8_t len)
|
|
{
|
|
uint32_t state = preset;
|
|
uint8_t i;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
uint8_t n, cur = data[i];
|
|
|
|
for (n = 0; n < 8; n++) {
|
|
int next_bit = (state ^ cur) & 1;
|
|
|
|
cur >>= 1;
|
|
state >>= 1;
|
|
if (next_bit) {
|
|
state |= 1 << 23;
|
|
state ^= 0x5a6000;
|
|
}
|
|
}
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
uint32_t crc24_reverse(uint32_t crc, const uint8_t *data, uint8_t len)
|
|
{
|
|
uint32_t state = crc;
|
|
uint8_t i;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
uint8_t n, cur = data[len - i - 1];
|
|
|
|
for (n = 0; n < 8; n++) {
|
|
int top_bit = state >> 23;
|
|
|
|
state = (state << 1) & 0xffffff;
|
|
state |= top_bit ^ ((cur >> (7 - n)) & 1);
|
|
if (top_bit)
|
|
state ^= 0xb4c000;
|
|
}
|
|
}
|
|
|
|
return state;
|
|
}
|