From: rincon Date: Thu, 27 Sep 2007 23:27:00 +0000 (+0000) Subject: Updated the interface to support asynchronous and more generic CRC calculations X-Git-Tag: release_tinyos_2_1_0_0~705 X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=commitdiff_plain;h=235a07eb48aba82b9066a9bfef990c638cd860ec;p=tinyos-2.x.git Updated the interface to support asynchronous and more generic CRC calculations --- diff --git a/tos/interfaces/Crc.nc b/tos/interfaces/Crc.nc index 4ecf0db0..39cd3352 100644 --- a/tos/interfaces/Crc.nc +++ b/tos/interfaces/Crc.nc @@ -28,6 +28,7 @@ * Compute the CRC-16 value of a byte array. * * @author Jonathan Hui + * @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); + } diff --git a/tos/system/CrcC.nc b/tos/system/CrcC.nc index 9b2b1ad0..fd1a0a4e 100644 --- a/tos/system/CrcC.nc +++ b/tos/system/CrcC.nc @@ -29,18 +29,41 @@ * value of a byte array. * * @author Jonathan Hui + * @author David Moss */ + #include 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;