mirror of
https://github.com/thelsing/knx.git
synced 2025-08-17 13:47:28 +02:00
Move crc16Ccitt to bits.c as it also used for PID_MCB
This commit is contained in:
parent
e3ff81ea99
commit
c70e552991
@ -752,25 +752,6 @@ void ApplicationLayer::memoryExtReadResponse(AckType ack, Priority priority, Hop
|
||||
individualSend(ack, hopType, priority, asap, apdu, secCtrl);
|
||||
}
|
||||
|
||||
uint16_t ApplicationLayer::crc16Ccitt(uint8_t* input, uint16_t length)
|
||||
{
|
||||
uint32_t polynom = 0x1021;
|
||||
uint8_t padded[length+2];
|
||||
|
||||
memcpy(padded, input, length);
|
||||
memset(padded+length, 0x00, 2);
|
||||
|
||||
uint32_t result = 0xffff;
|
||||
for (uint32_t i = 0; i < 8 * (uint32_t)sizeof(padded); i++) {
|
||||
result <<= 1;
|
||||
uint32_t nextBit = (padded[i / 8] >> (7 - (i % 8))) & 0x1;
|
||||
result |= nextBit;
|
||||
if ((result & 0x10000) != 0)
|
||||
result ^= polynom;
|
||||
}
|
||||
return result & 0xffff;
|
||||
}
|
||||
|
||||
void ApplicationLayer::memoryExtWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, ReturnCodes code,
|
||||
uint8_t number, uint32_t memoryAddress, uint8_t * memoryData)
|
||||
{
|
||||
@ -787,7 +768,7 @@ void ApplicationLayer::memoryExtWriteResponse(AckType ack, Priority priority, Ho
|
||||
|
||||
if (withCrc)
|
||||
{
|
||||
uint16_t crc = crc16Ccitt(memoryData, number); // TODO
|
||||
uint16_t crc = crc16Ccitt(memoryData, number);
|
||||
data[5] = crc >> 8;
|
||||
data[6] = crc & 0xFF;
|
||||
}
|
||||
|
@ -201,8 +201,6 @@ class ApplicationLayer
|
||||
void individualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl, bool status);
|
||||
void individualSend(AckType ack, HopCountType hopType, Priority priority, uint16_t asap, APDU& apdu, const SecurityControl& secCtrl);
|
||||
|
||||
uint16_t crc16Ccitt(uint8_t* input, uint16_t length);
|
||||
|
||||
uint16_t _savedAsapReadRequest;
|
||||
uint16_t _savedAsapWriteRequest;
|
||||
uint16_t _savedAsapResponse;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "bits.h"
|
||||
#include <cstring> // for memcpy()
|
||||
|
||||
const uint8_t* popByte(uint8_t& b, const uint8_t* data)
|
||||
{
|
||||
@ -105,3 +106,22 @@ uint64_t sixBytesToUInt64(uint8_t* data)
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
uint16_t crc16Ccitt(uint8_t* input, uint16_t length)
|
||||
{
|
||||
uint32_t polynom = 0x1021;
|
||||
uint8_t padded[length+2];
|
||||
|
||||
memcpy(padded, input, length);
|
||||
memset(padded+length, 0x00, 2);
|
||||
|
||||
uint32_t result = 0xffff;
|
||||
for (uint32_t i = 0; i < 8 * (uint32_t)sizeof(padded); i++) {
|
||||
result <<= 1;
|
||||
uint32_t nextBit = (padded[i / 8] >> (7 - (i % 8))) & 0x1;
|
||||
result |= nextBit;
|
||||
if ((result & 0x10000) != 0)
|
||||
result ^= polynom;
|
||||
}
|
||||
return result & 0xffff;
|
||||
}
|
||||
|
@ -90,3 +90,5 @@ void printHex(const char* suffix, const uint8_t *data, size_t length);
|
||||
|
||||
void sixBytesFromUInt64(uint64_t num, uint8_t* toByteArray);
|
||||
uint64_t sixBytesToUInt64(uint8_t* data);
|
||||
|
||||
uint16_t crc16Ccitt(uint8_t* input, uint16_t length);
|
||||
|
Loading…
Reference in New Issue
Block a user