#line 1 "Src\V2RFEncoding.c" /0 #line 1 ".\Task\stdint.h" /0 typedef signed long int32_t; typedef unsigned long uint32_t; typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed int int16_t; typedef unsigned int uint16_t; #line 1 "Src\V2RFEncoding.c" /0 #line 1 "Src\V2RFEncoding.h" /0 #line 1 ".\Task\stdint.h" /0 #line 2 ".\Task\stdint.h" /1 #line 5 "Src\V2RFEncoding.h" /0 #line 5 "Src\V2RFEncoding.h" /0 #line 1 "d:\Keil\C51\Inc\string.h" /0 typedef unsigned int size_t; #pragma SAVE #pragma REGPARMS extern char *strcat (char *s1, const char *s2); extern char *strncat (char *s1, const char *s2, size_t n); extern char strcmp (const char *s1, const char *s2); extern char strncmp (const char *s1, const char *s2, size_t n); extern char *strcpy (char *s1, const char *s2); extern char *strncpy (char *s1, const char *s2, size_t n); extern size_t strlen (const char *); extern char *strchr (const char *s, char c); extern int strpos (const char *s, char c); extern char *strrchr (const char *s, char c); extern int strrpos (const char *s, char c); extern size_t strspn (const char *s, const char *set); extern size_t strcspn (const char *s, const char *set); extern char *strpbrk (const char *s, const char *set); extern char *strrpbrk(const char *s, const char *set); extern char *strstr (const char *s, const char *sub); extern char *strtok (char *str, const char *set); extern char memcmp (const void *s1, const void *s2, size_t n); extern void *memcpy (void *s1, const void *s2, size_t n); extern void *memchr (const void *s, char val, size_t n); extern void *memccpy (void *s1, const void *s2, char val, size_t n); extern void *memmove (void *s1, const void *s2, size_t n); extern void *memset (void *s, char val, size_t n); #pragma RESTORE #line 6 "Src\V2RFEncoding.h" /0 void encodeV2Packet(uint8_t* packet); void decodeV2Packet(uint8_t* packet); uint8_t xorKey(uint8_t key); uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2); uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2); void TestDecode(void); #line 2 "Src\V2RFEncoding.c" /0 uint8_t code V2_OFFSETS[][4] = { { 0x45, 0x1F, 0x14, 0x5C }, { 0x2B, 0xC9, 0xE3, 0x11 }, { 0x6D, 0x5F, 0x8A, 0x2B }, { 0xAF, 0x03, 0x1D, 0xF3 }, { 0x1A, 0xE2, 0xF0, 0xD1 }, { 0x04, 0xD8, 0x71, 0x42 }, { 0xAF, 0x04, 0xDD, 0x07 }, { 0x61, 0x13, 0x38, 0x64 } }; uint8_t xorKey(uint8_t key) { const uint8_t shift = (key & 0x0F) < 0x04 ? 0 : 1; const uint8_t x = (((key & 0xF0) >> 4) + shift + 6) % 8; const uint8_t msn = (((4 + x) ^ 1) & 0x0F) << 4; const uint8_t lsn = ((((key & 0xF) + 4)^2) & 0x0F); return ( msn | lsn ); } uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2) { uint8_t value = byte - s2; value = value ^ xorKey; value = value - s1; return value; } uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2) { uint8_t value = byte + s1; value = value ^ xorKey; value = value + s2; return value; } void decodeV2Packet(uint8_t *packet) { uint8_t i = 0; uint8_t key = xorKey(packet[0]); for (i = 1; i <= 8; i++) { packet[i] = decodeByte(packet[i], 0, key, ( V2_OFFSETS[i-1][packet[0]%4] + ((0x54 > 0 && packet[0] >= 0x54 && packet[0] < 0x54+0x80) ? 0x80 : 0) )); } } void encodeV2Packet(uint8_t *packet) { uint8_t i = 0; uint8_t key = xorKey(packet[0]); uint8_t sum = key; for (i = 1; i <= 7; i++) { sum += packet[i]; packet[i] = encodeByte(packet[i], 0, key, ( V2_OFFSETS[i-1][packet[0]%4] + ((0x54 > 0 && packet[0] >= 0x54 && packet[0] < 0x54+0x80) ? 0x80 : 0) )); } packet[8] = encodeByte(sum, 2, key, ( V2_OFFSETS[8-1][packet[0]%4] + ((0 > 0 && packet[0] >= 0 && packet[0] < 0+0x80) ? 0x80 : 0) )); } #line 78 "Src\V2RFEncoding.c" /1 #line 80 "Src\V2RFEncoding.c" /0 void TestDecode(void) { #line 86 "Src\V2RFEncoding.c" /1 #line 95 "Src\V2RFEncoding.c" /0 }