Implementation of CRC16 using polynomial 0x8005 = X^16 + X^15 + X^2 + 1

Dependents:   Manchester_Transmitter Manchester_Receiver ManchesterUART_Transmitter ManchesterUART_Receiver

Fork of CRC16 by Emilie Laverge

Revision:
3:3f5622979e77
Parent:
2:a01521fb2fe1
--- a/CRC16.cpp	Mon May 22 09:32:41 2017 +0000
+++ b/CRC16.cpp	Sun Sep 03 08:28:01 2017 +0000
@@ -1,6 +1,8 @@
 /*
  * This is a fork of the CRC16 library COPYRIGHT(c) Emilie Laverge
  * published at [https://developer.mbed.org/users/EmLa/code/CRC16/]
+ * using the polynomial 0x8005: X^16 + X^15 + X^2 + 1.
+ * Default initial CRC value = 0xFFFF
  *
  * Modified by Zoltan Hudak
  */
@@ -44,13 +46,14 @@
     0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202
 };
 
-unsigned short CRC16::calc(char input[], int length) {
-    unsigned short  result = 0;
+unsigned short CRC16::calc(char input[], int length, unsigned short crc /*=0x0000*/) {
     for(int i = 0; i < length; i++) {
-        unsigned short  tableValue = TABLE[((result >> 8) ^ *(char*)input++) & SHIFTER];
-        result = (result << 8) ^ tableValue;
+        unsigned short  tableValue = TABLE[((crc >> 8) ^ *(char*)input++) & SHIFTER];
+        crc = (crc << 8) ^ tableValue;
     }
 
-    return result;
+    return crc;
 }
 
+
+