]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Updated the interface to support asynchronous and more generic CRC calculations
authorrincon <rincon>
Thu, 27 Sep 2007 23:27:00 +0000 (23:27 +0000)
committerrincon <rincon>
Thu, 27 Sep 2007 23:27:00 +0000 (23:27 +0000)
tos/interfaces/Crc.nc
tos/system/CrcC.nc

index 4ecf0db053b188d3527abb98253046ef621244cf..39cd3352bc0dc03a005607055d6a4d28c998efef 100644 (file)
@@ -28,6 +28,7 @@
  * Compute the CRC-16 value of a byte array.
  *
  * @author Jonathan Hui <jwhui@cs.berkeley.edu>
+ * @author David Moss
  */
 interface Crc {
 
@@ -38,5 +39,17 @@ interface Crc {
    * @param   len The length of the buffer over which to compute CRC.
    * @return  The CRC-16 value.
    */
-  command uint16_t crc16(void* buf, uint8_t len);
+  async command uint16_t crc16(void* buf, uint8_t len);
+  
+  /**
+   * Compute a generic CRC-16 using a given seed.  Used to compute CRC's
+   * of discontinuous data.
+   * 
+   * @param startCrc An initial CRC value to begin with
+   * @param buf A pointer to a buffer of data
+   * @param len The length of the buffer
+   * @return The CRC-16 value.
+   */
+  async command uint16_t seededCrc16(uint16_t startCrc, void *buf, uint8_t len);
+  
 }
index 9b2b1ad0939884858bb52b47defd4eaca74e8691..fd1a0a4e2fbd68237f04704b238023ca97e0dc3f 100644 (file)
  * value of a byte array.
  *
  * @author Jonathan Hui <jwhui@cs.berkeley.edu>
+ * @author David Moss
  */
 #include <crc.h>
 
 module CrcC {
   provides interface Crc;
 }
+
 implementation {
 
-  command uint16_t Crc.crc16(void* buf, uint8_t len) {
-    uint8_t* tmp = (uint8_t*)buf;
+  /**
+   * Compute the CRC-16 value of a byte array.
+   *
+   * @param   buf A pointer to the buffer over which to compute CRC.
+   * @param   len The length of the buffer over which to compute CRC.
+   * @return  The CRC-16 value.
+   */
+  async command uint16_t Crc.crc16(void *buf, uint8_t len) {
+    return call Crc.seededCrc16(0, buf, len);
+  }
+  
+  /**
+   * Compute a generic CRC-16 using a given seed.  Used to compute CRC's
+   * of discontinuous data.
+   * 
+   * @param startCrc An initial CRC value to begin with
+   * @param buf A pointer to a buffer of data
+   * @param len The length of the buffer
+   * @return The CRC-16 value.
+   */
+  async command uint16_t Crc.seededCrc16(uint16_t startCrc, void *buf, uint8_t len) {
+    uint8_t *tmp = (uint8_t *) buf;
     uint16_t crc;
-    for (crc = 0; len > 0; len--) {
+    for (crc = startCrc; len > 0; len--) {
       crc = crcByte(crc, *tmp++);
     }
     return crc;