Remi Beges / telemetry Featured

Dependents:   telemetry_car_demo telemetry_demo_FRDM-TFC telemetry_example_01 telemetry_indexed_data_demo ... more

Committer:
Overdrivr
Date:
Thu Feb 11 08:10:08 2016 +0000
Revision:
2:b7a3ac7bcec8
Parent:
0:3a30eba5d8f7
Replaced MODSERIAL by BufferedSerial for increasing amount of supported devices

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Overdrivr 0:3a30eba5d8f7 1 #include "crc16.hpp"
Overdrivr 0:3a30eba5d8f7 2
Overdrivr 0:3a30eba5d8f7 3 uint16_t crc16(uint8_t* data, uint32_t len)
Overdrivr 0:3a30eba5d8f7 4 {
Overdrivr 0:3a30eba5d8f7 5 uint16_t rem = 0;
Overdrivr 0:3a30eba5d8f7 6 for(uint16_t i = 0 ; i < len ; i++)
Overdrivr 0:3a30eba5d8f7 7 {
Overdrivr 0:3a30eba5d8f7 8 rem = crc16_recursive(data[i],rem);
Overdrivr 0:3a30eba5d8f7 9 }
Overdrivr 0:3a30eba5d8f7 10 return rem;
Overdrivr 0:3a30eba5d8f7 11 }
Overdrivr 0:3a30eba5d8f7 12
Overdrivr 0:3a30eba5d8f7 13 uint16_t crc16_recursive(uint8_t byte, uint16_t remainder)
Overdrivr 0:3a30eba5d8f7 14 {
Overdrivr 0:3a30eba5d8f7 15 uint16_t n = 16;
Overdrivr 0:3a30eba5d8f7 16
Overdrivr 0:3a30eba5d8f7 17 remainder = remainder ^ (byte << (n-8));
Overdrivr 0:3a30eba5d8f7 18
Overdrivr 0:3a30eba5d8f7 19 for(uint16_t j = 1 ; j < 8 ; j++)
Overdrivr 0:3a30eba5d8f7 20 {
Overdrivr 0:3a30eba5d8f7 21 if(remainder & 0x8000)
Overdrivr 0:3a30eba5d8f7 22 {
Overdrivr 0:3a30eba5d8f7 23 remainder = (remainder << 1) ^ 0x1021;
Overdrivr 0:3a30eba5d8f7 24 }
Overdrivr 0:3a30eba5d8f7 25 else
Overdrivr 0:3a30eba5d8f7 26 {
Overdrivr 0:3a30eba5d8f7 27 remainder = remainder << 1;
Overdrivr 0:3a30eba5d8f7 28 }
Overdrivr 0:3a30eba5d8f7 29 remainder &= 0xffff;
Overdrivr 0:3a30eba5d8f7 30 }
Overdrivr 0:3a30eba5d8f7 31
Overdrivr 0:3a30eba5d8f7 32 return remainder;
Overdrivr 0:3a30eba5d8f7 33 }