commit 6a29c0141da58f393a3c8037836c25fd3e0f12a7 Author: cfif Date: Fri Jan 24 13:22:33 2025 +0300 Перенос на новую организацию GONEC diff --git a/Inc/BitBuffer.h b/Inc/BitBuffer.h new file mode 100644 index 0000000..8e19d66 --- /dev/null +++ b/Inc/BitBuffer.h @@ -0,0 +1,50 @@ +/* + * BitOps.h + * + * Created on: Apr 13, 2021 + * Author: zemon + */ + +#ifndef BITOPS_INC_BITOPS_H_ +#define BITOPS_INC_BITOPS_H_ + +#include "stdint.h" + + +void vBitBufferAppendDataByteBitsCountWithBitsOffset( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t appendableByte, + uint8_t countOfAppendableBits +); + +uint8_t vBitBufferAppendByte( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t appendableByte, + uint8_t countOfAppendableBits +); + +uint8_t vBitBufferAppendBits( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBits +); + +uint8_t vBitBufferAppendBitsReverseBytes( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBits +); + +uint8_t vBitBufferAppendBytesReverse( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBytes +); + + +#endif /* BITOPS_INC_BITOPS_H_ */ diff --git a/Src/BitBuffer.c b/Src/BitBuffer.c new file mode 100644 index 0000000..02f9388 --- /dev/null +++ b/Src/BitBuffer.c @@ -0,0 +1,128 @@ +/* + * BitOps.c + * + * Created on: Apr 13, 2021 + * Author: zemon + */ +#include "BitBuffer.h" + + +void vBitBufferAppendDataByteBitsCountWithBitsOffset( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t appendableByte, + uint8_t countOfAppendableBits +) { + + uint16_t fullBytesOffset = offsetOfFirstBit / 8; + uint8_t bitsOffsetInFirstByte = offsetOfFirstBit % 8; + uint8_t bitsWritedToSecondByte = bitsOffsetInFirstByte + countOfAppendableBits - 8; + + uint8_t firstByteCut = appendableByte << (8 - countOfAppendableBits); + + destinationBitSequence[fullBytesOffset] |= firstByteCut >> bitsOffsetInFirstByte; + + if (bitsWritedToSecondByte > 0) { + destinationBitSequence[fullBytesOffset + 1] |= appendableByte << (8 - bitsWritedToSecondByte); + } +} + +uint8_t vBitBufferAppendByte( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t appendableByte, + uint8_t countOfAppendableBits +) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableByte, + countOfAppendableBits + ); + return countOfAppendableBits; +} + + +uint8_t vBitBufferAppendBits( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBits +) { + + uint16_t fullBytes = countOfAppendableBits / 8; + uint16_t notFullByteBits = countOfAppendableBits % 8; + + uint16_t i = 0; + for (; i < fullBytes; ++i) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableData[i], 8 + ); + offsetOfFirstBit += 8; + } + + if (notFullByteBits > 0) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableData[i], + notFullByteBits + ); + } + return countOfAppendableBits; +} + +uint8_t vBitBufferAppendBitsReverseBytes( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBits +) { + + uint16_t fullBytes = countOfAppendableBits / 8; + uint16_t notFullByteBits = countOfAppendableBits % 8; + + uint16_t totalBytes = fullBytes + (notFullByteBits > 0 ? 1 : 0); + + uint16_t i = 0; + for (; i < fullBytes; ++i) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableData[(totalBytes - 1) - i], + 8 + ); + offsetOfFirstBit += 8; + } + + if (notFullByteBits > 0) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableData[(totalBytes - 1) - i], + notFullByteBits + ); + } + return countOfAppendableBits; +} + +uint8_t vBitBufferAppendBytesReverse( + uint8_t *destinationBitSequence, + uint16_t offsetOfFirstBit, + uint8_t *appendableData, + uint8_t countOfAppendableBytes +) { + for (int i = countOfAppendableBytes - 1; i > -1; --i) { + vBitBufferAppendDataByteBitsCountWithBitsOffset( + destinationBitSequence, + offsetOfFirstBit, + appendableData[i], 8 + ); + offsetOfFirstBit += 8; + } + + return countOfAppendableBytes * 8; +} + diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..71971cd --- /dev/null +++ b/modular.json @@ -0,0 +1,10 @@ +{ + "cmake": { + "inc_dirs": [ + "Inc" + ], + "srcs": [ + "Src/**.c" + ] + } +} \ No newline at end of file