TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Revision:
2:994e741028c7
Parent:
1:df31097c8442
--- a/crc.h	Sat Jun 06 04:27:40 2015 +0000
+++ b/crc.h	Thu Jun 11 11:20:12 2015 +0000
@@ -1,11 +1,16 @@
-#define WIDTH 16
-#define TOPBIT (1 << 15) 
-#define POLYNOMIAL 0x1021
+//EDITS
+//changed the initial remainder from 0x0000 to 0xffff according to the standards
+//made two seperate functions crc16_gen and crc8_gen
+
+#define TOPBIT16 (1 << 15)
+#define TOPBIT8 (1 << 7)
+#define POLYNOMIAL16 0x1021
+#define POLYNOMIAL8 0xEA
 
 namespace CRC{
-    typedef uint16_t crctype; 
-    crctype crcGenerate(const unsigned char message[], int nBytes){
-        crctype remainder = 0xffff;
+    typedef uint16_t crctype16; 
+    crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){
+        crctype16 remainder = 0xffff;
         int byte;
         char bit;
         
@@ -15,15 +20,15 @@
             each time only one byte is brought
             0 xor x = x
             */
-            remainder = remainder ^ ( message[byte] << (WIDTH-8) );
+            remainder = remainder ^ ( message[byte] << 8 );
             
             for( bit = 8 ; bit > 0 ; bit--){
                 /*
                 for each bit, xor the remainder with polynomial
                 if the MSB is 1
                 */
-                if(remainder & TOPBIT){
-                    remainder = (remainder << 1) ^ POLYNOMIAL;
+                if(remainder & TOPBIT16){
+                    remainder = (remainder << 1) ^ POLYNOMIAL16;
                     /*
                     each time the remainder is xor-ed with polynomial, the MSB is made zero
                     hence the first digit of the remainder is ignored in the loop
@@ -37,4 +42,38 @@
         
         return remainder;
     }
-};
\ No newline at end of file
+    
+    typedef uint8_t crctype8;
+    crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){
+        
+        crctype8 remainder = 0xff;
+        
+        for(int byte = 0 ; byte < nBytes ; byte++ ){
+            /*
+            Bring the data byte by byte
+            each time only one byte is brought
+            0 xor x = x
+            */
+            remainder = remainder ^ ( message[byte] );
+            
+            for(int bit = 8 ; bit > 0 ; bit--){
+                /*
+                for each bit, xor the remainder with polynomial
+                if the MSB is 1
+                */
+                if(remainder & TOPBIT8){
+                    remainder = (remainder << 1) ^ POLYNOMIAL8;
+                    /*
+                    each time the remainder is xor-ed with polynomial, the MSB is made zero
+                    hence the first digit of the remainder is ignored in the loop
+                    */
+                }
+                else{
+                    remainder = (remainder << 1);
+                }
+            }
+        }
+        
+        return remainder;
+    }
+}