Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: OneWire/crc16.cpp
- Revision:
- 0:55f2866e9c0c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OneWire/crc16.cpp Tue May 27 15:01:13 2014 +0000
@@ -0,0 +1,56 @@
+#include <inttypes.h>
+#include "mbed.h"
+#include "onewire.h"
+
+#define CRC16INIT 0x0000
+//#define CRC16POLY 0x8005; // Polynome =x^16 + x^15 + x^2 + x^0 = 0x18005
+#define CRC16POLY 0xA001;
+
+uint16_t crc16(uint8_t* octets, uint16_t nboctets)
+{
+uint16_t crc = CRC16INIT;
+int i, done = 0;
+uint8_t todo;
+ if (nboctets != 0) {
+ do {
+ todo = octets[done];
+ crc ^= todo;
+ for (i = 0; i < 8; i++) {
+ if (crc % 2 != 0) {
+ crc = (crc >> 1) ^ CRC16POLY;
+ } else {
+ crc = crc >> 1;
+ }
+ }
+ done++;
+ } while (done < nboctets);
+
+
+ }
+
+return crc;
+}
+//CRC16 byte, always two bytes, bit inverted, LSByte first
+uint8_t ctrl_crc16(uint8_t* octets, uint16_t nboctets)
+{
+ uint16_t crc;
+ uint8_t *ptr;
+#ifdef DEBUG
+ printf( "\nCRC16 : " );
+ for ( uint8_t i=0 ; i< nboctets; i++ )
+ printf(":%2.2X",octets[i]);
+ printf( "\n" );
+#endif
+ crc =~crc16(octets, nboctets-2);
+ ptr=(uint8_t*)&crc;
+#ifdef DEBUG
+ printf( "\n" );
+ printf("CRC16:%X",crc);
+ printf( "\n" );
+#endif
+ if(*ptr==octets[nboctets-2])
+ if(*++ptr==octets[nboctets-1])
+ return 0;
+
+ return 1;
+ }
\ No newline at end of file