mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01: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