Move crc16Ccitt to bits.c as it also used for PID_MCB

This commit is contained in:
Nanosonde 2020-07-15 16:31:06 +02:00
parent e3ff81ea99
commit c70e552991
4 changed files with 23 additions and 22 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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);