SSI OpComms 3CM Board RX

Dependencies:   mbed

Fork of Optical3cmRX by Thomas Teisberg

Revision:
8:20d405a03cb9
Parent:
7:41b22e5a1d8d
--- a/main.cpp	Mon Nov 16 00:08:19 2015 +0000
+++ b/main.cpp	Sun Nov 15 18:51:09 2015 -0800
@@ -55,6 +55,21 @@
     HALF_SAMPLE = SAMPLE_RATE / 2;
 }
 
+//http://stackoverflow.com/questions/8845178/c-programming-tcp-checksum
+char checkSum(char *buffer, int size)
+{
+    unsigned long cksum=0;
+    while(size)
+    {
+        cksum+=*buffer++;
+        size--;
+    }
+
+    cksum = (cksum >> 16) + (cksum & 0xffff);
+    cksum += (cksum >>16);
+    return (char)(~cksum);
+}
+
 void printDecodeBuf()
 {
     char cur = 0;
@@ -84,8 +99,9 @@
             }
         }
     }
-    int rcv_checksum = data[data.size()-1];
-    data.erase(data.size()-1, data.size());
+    int rcv_checksum = data[data.size()-2];
+    int rcv_checksum2 = data[data.size()-1];
+    data.erase(data.size()-2, data.size());
     pc.printf("Received: \"");
     pc.printf(data.c_str());
     pc.printf("\"\r\n");
@@ -94,6 +110,7 @@
     for(int i = 0; i < data.size(); i++) checksum ^= data[i];
     
     pc.printf("Received: %d | Computed: %d\r\n", rcv_checksum, checksum);
+    pc.printf("Received2: %d | Computed2: %d\r\n", rcv_checksum2, checkSum(data.c_str(),data.size()));
 }