Proyecto ABInBev para la tarjeta Guaria 1/2.

Committer:
fmanzano_dtk
Date:
Thu Jul 07 16:17:25 2022 +0000
Revision:
19:5580a9a54ad5
Parent:
1:9e821e640117
Sincronizacion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmanzano_dtk 1:9e821e640117 1 /**
fmanzano_dtk 1:9e821e640117 2 * @file teltonika_crc.cpp
fmanzano_dtk 1:9e821e640117 3 * @author Felícito Manzano (felicito.manzano@detektor.com.sv)
fmanzano_dtk 1:9e821e640117 4 * @brief
fmanzano_dtk 1:9e821e640117 5 * @version 0.1
fmanzano_dtk 1:9e821e640117 6 * @date 2020-11-25
fmanzano_dtk 1:9e821e640117 7 *
fmanzano_dtk 1:9e821e640117 8 * @copyright Copyright (c) 2020
fmanzano_dtk 1:9e821e640117 9 *
fmanzano_dtk 1:9e821e640117 10 */
fmanzano_dtk 1:9e821e640117 11
fmanzano_dtk 1:9e821e640117 12 int teltonika_crc16(char buffer[], int bufLen)
fmanzano_dtk 1:9e821e640117 13 {
fmanzano_dtk 1:9e821e640117 14 int offset = 0;
fmanzano_dtk 1:9e821e640117 15 int preset = 0;
fmanzano_dtk 1:9e821e640117 16 int polynom = 0xA001;
fmanzano_dtk 1:9e821e640117 17 preset &= 0xFFFF;
fmanzano_dtk 1:9e821e640117 18 polynom &= 0xFFFF;
fmanzano_dtk 1:9e821e640117 19
fmanzano_dtk 1:9e821e640117 20 int crc = preset;
fmanzano_dtk 1:9e821e640117 21
fmanzano_dtk 1:9e821e640117 22 for (int i = 0; i < bufLen; i++) {
fmanzano_dtk 1:9e821e640117 23 int data = buffer[(i + offset) % bufLen] & 0xFF;
fmanzano_dtk 1:9e821e640117 24 crc ^= data;
fmanzano_dtk 1:9e821e640117 25 for (int j = 0; j < 8; j++) {
fmanzano_dtk 1:9e821e640117 26 if ((crc & 0x0001) != 0) {
fmanzano_dtk 1:9e821e640117 27 crc = (crc >> 1) ^ polynom;
fmanzano_dtk 1:9e821e640117 28 } else {
fmanzano_dtk 1:9e821e640117 29 crc = crc >> 1;
fmanzano_dtk 1:9e821e640117 30 }
fmanzano_dtk 1:9e821e640117 31 }
fmanzano_dtk 1:9e821e640117 32 }
fmanzano_dtk 1:9e821e640117 33 return crc & 0xFFFF;
fmanzano_dtk 1:9e821e640117 34 }