Simple cpp wrapper of a ds18b20, onewire 'c' library. Supports multiple sensors.

Dependencies:   mbed

Dependents:   DS18B20Sensor DS18B201

Committer:
jsteve
Date:
Sun Mar 03 02:22:27 2013 +0000
Revision:
3:9fd95d590149
Parent:
0:1449f126b241
Updated documentation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jsteve 0:1449f126b241 1 #include <inttypes.h>
jsteve 0:1449f126b241 2 #include "mbed.h"
jsteve 0:1449f126b241 3 #include "onewire.h"
jsteve 0:1449f126b241 4
jsteve 0:1449f126b241 5 #define CRC16INIT 0x0000
jsteve 0:1449f126b241 6 //#define CRC16POLY 0x8005; // Polynome =x^16 + x^15 + x^2 + x^0 = 0x18005
jsteve 0:1449f126b241 7 #define CRC16POLY 0xA001;
jsteve 0:1449f126b241 8
jsteve 0:1449f126b241 9 uint16_t crc16(uint8_t* octets, uint16_t nboctets)
jsteve 0:1449f126b241 10 {
jsteve 0:1449f126b241 11 uint16_t crc = CRC16INIT;
jsteve 0:1449f126b241 12 int i, done = 0;
jsteve 0:1449f126b241 13 uint8_t todo;
jsteve 0:1449f126b241 14 if (nboctets != 0) {
jsteve 0:1449f126b241 15 do {
jsteve 0:1449f126b241 16 todo = octets[done];
jsteve 0:1449f126b241 17 crc ^= todo;
jsteve 0:1449f126b241 18 for (i = 0; i < 8; i++) {
jsteve 0:1449f126b241 19 if (crc % 2 != 0) {
jsteve 0:1449f126b241 20 crc = (crc >> 1) ^ CRC16POLY;
jsteve 0:1449f126b241 21 } else {
jsteve 0:1449f126b241 22 crc = crc >> 1;
jsteve 0:1449f126b241 23 }
jsteve 0:1449f126b241 24 }
jsteve 0:1449f126b241 25 done++;
jsteve 0:1449f126b241 26 } while (done < nboctets);
jsteve 0:1449f126b241 27
jsteve 0:1449f126b241 28
jsteve 0:1449f126b241 29 }
jsteve 0:1449f126b241 30
jsteve 0:1449f126b241 31 return crc;
jsteve 0:1449f126b241 32 }
jsteve 0:1449f126b241 33 //CRC16 byte, always two bytes, bit inverted, LSByte first
jsteve 0:1449f126b241 34 uint8_t ctrl_crc16(uint8_t* octets, uint16_t nboctets)
jsteve 0:1449f126b241 35 {
jsteve 0:1449f126b241 36 uint16_t crc;
jsteve 0:1449f126b241 37 uint8_t *ptr;
jsteve 0:1449f126b241 38 #ifdef DEBUG
jsteve 0:1449f126b241 39 printf( "\nCRC16 : " );
jsteve 0:1449f126b241 40 for ( uint8_t i=0 ; i< nboctets; i++ )
jsteve 0:1449f126b241 41 printf(":%2.2X",octets[i]);
jsteve 0:1449f126b241 42 printf( "\n" );
jsteve 0:1449f126b241 43 #endif
jsteve 0:1449f126b241 44 crc =~crc16(octets, nboctets-2);
jsteve 0:1449f126b241 45 ptr=(uint8_t*)&crc;
jsteve 0:1449f126b241 46 #ifdef DEBUG
jsteve 0:1449f126b241 47 printf( "\n" );
jsteve 0:1449f126b241 48 printf("CRC16:%X",crc);
jsteve 0:1449f126b241 49 printf( "\n" );
jsteve 0:1449f126b241 50 #endif
jsteve 0:1449f126b241 51 if(*ptr==octets[nboctets-2])
jsteve 0:1449f126b241 52 if(*++ptr==octets[nboctets-1])
jsteve 0:1449f126b241 53 return 0;
jsteve 0:1449f126b241 54
jsteve 0:1449f126b241 55 return 1;
jsteve 0:1449f126b241 56 }