This commit is contained in:
parent
0d4464fed0
commit
caa678dc63
1 changed files with 29 additions and 0 deletions
|
|
@ -257,6 +257,35 @@ uint32_t DN_Packet_Compress3(uint8_t *src, uint32_t size, uint8_t *dest)
|
|||
}
|
||||
#endif
|
||||
|
||||
void DN_Packet_Uncompress(uint8_t *src, uint32_t size, uint8_t *dest)
|
||||
{
|
||||
uint32_t inOffset;
|
||||
uint32_t outOffset;
|
||||
uint16_t getCount;
|
||||
uint32_t incrOffset;
|
||||
|
||||
outOffset = 0;
|
||||
wdog_reset();
|
||||
|
||||
for (inOffset = 0; inOffset < size; inOffset += incrOffset) {
|
||||
getCount = *(uint16_t *)(src + inOffset);
|
||||
|
||||
if ((src[inOffset + 1] & 0x80) == 0) {
|
||||
/* RLE flag: 0 => Copy data */
|
||||
memcpy(dest + outOffset, src + inOffset + 2, getCount & 0x7fff);
|
||||
incrOffset = (getCount & 0x7fff) + 2;
|
||||
} else {
|
||||
/* RLE flag: 1 => Repeat data */
|
||||
memset(dest + outOffset, src[inOffset + 2], getCount & 0x7fff);
|
||||
incrOffset = 3;
|
||||
}
|
||||
|
||||
outOffset = (getCount & 0x7fff) + outOffset;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 03 - DCC Packets */
|
||||
#ifdef DCC_TESTING
|
||||
uint32_t DN_Packet_DCC_Send(uint32_t data) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue