aboutsummaryrefslogtreecommitdiff
path: root/src/inc/stdalg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/stdalg.c')
-rwxr-xr-xsrc/inc/stdalg.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/inc/stdalg.c b/src/inc/stdalg.c
new file mode 100755
index 0000000..99558a9
--- /dev/null
+++ b/src/inc/stdalg.c
@@ -0,0 +1,29 @@
1#include "stdalg.h"
2
3#ifdef STDALGO_CRC7
4 unsigned char crc7(unsigned char* bytes, unsigned char size)
5 {
6 register unsigned char val = 0; // last cycles value
7 register unsigned char cb; // current byte.
8
9 unsigned char i;
10 for(i=0; i<=size; i++)
11 {
12 cb = bytes[i];
13
14 int q = (i==size) ? 7 : 8; // counter
15 do
16 {
17 val <<= 1;
18 if(cb & 0x80) // check MSB of current byte
19 ++val; // overflow, add 1
20
21 if(val & 0x80) // check MSB of (last) seed
22 val ^= 0x9; // polynome
23 cb <<= 1;
24 } while(--q);
25 val &= 0x7f; // lower 7 bits
26 }
27 return ((val<<1) + 1);
28 }
29#endif
..