Fix CRC16 path (#424)
This commit is contained in:
20
lib/CRC16/LICENSE
Normal file
20
lib/CRC16/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Vincenzo Mennella
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
85
lib/CRC16/examples/Crc16_Example/Crc16_Example.ino
Normal file
85
lib/CRC16/examples/Crc16_Example/Crc16_Example.ino
Normal file
@@ -0,0 +1,85 @@
|
||||
#include <Crc16.h>
|
||||
//Crc 16 library (XModem)
|
||||
Crc16 crc;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(38400);
|
||||
Serial.println("CRC-16 bit test program");
|
||||
Serial.println("=======================");
|
||||
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
/*
|
||||
Examples of crc-16 configurations
|
||||
Kermit: width=16 poly=0x1021 init=0x0000 refin=true refout=true xorout=0x0000 check=0x2189
|
||||
Modbus: width=16 poly=0x8005 init=0xffff refin=true refout=true xorout=0x0000 check=0x4b37
|
||||
XModem: width=16 poly=0x1021 init=0x0000 refin=false refout=false xorout=0x0000 check=0x31c3
|
||||
CCITT-False:width=16 poly=0x1021 init=0xffff refin=false refout=false xorout=0x0000 check=0x29b1
|
||||
see http://www.lammertbies.nl/comm/info/crc-calculation.html
|
||||
*/
|
||||
//calculate crc incrementally
|
||||
byte data[] = "123456789";
|
||||
|
||||
Serial.println("Calculating crc incrementally");
|
||||
|
||||
crc.clearCrc();
|
||||
for(byte i=0;i<9;i++)
|
||||
{
|
||||
Serial.print("byte ");
|
||||
Serial.print(i);
|
||||
Serial.print(" = ");
|
||||
Serial.println(data[i]);
|
||||
crc.updateCrc(data[i]);
|
||||
}
|
||||
unsigned short value = crc.getCrc();
|
||||
Serial.print("crc = 0x");
|
||||
Serial.println(value, HEX);
|
||||
|
||||
Serial.println("Calculating crc in a single call");
|
||||
|
||||
//XModem
|
||||
value = crc.XModemCrc(data,0,9);
|
||||
Serial.print("XModem crc = 0x");
|
||||
Serial.println(value, HEX);
|
||||
//Reference xmodem
|
||||
Serial.println("Reference XModem crc");
|
||||
value = calcrc((char*)data, 9);
|
||||
Serial.print("crc = 0x");
|
||||
Serial.println(value, HEX);
|
||||
|
||||
//Modbus
|
||||
value = crc.Modbus(data,0,9);
|
||||
Serial.print("Modbus crc = 0x");
|
||||
Serial.println(value, HEX);
|
||||
|
||||
//Mcrf4XX
|
||||
value = crc.Mcrf4XX(data,0,9);
|
||||
Serial.print("Mcrf4XX crc = 0x");
|
||||
Serial.println(value, HEX);
|
||||
|
||||
while(true);
|
||||
}
|
||||
//Check routine taken from
|
||||
//http://web.mit.edu/6.115/www/miscfiles/amulet/amulet-help/xmodem.htm
|
||||
int calcrc(char *ptr, int count)
|
||||
{
|
||||
int crc;
|
||||
char i;
|
||||
crc = 0;
|
||||
while (--count >= 0)
|
||||
{
|
||||
crc = crc ^ (int) *ptr++ << 8;
|
||||
i = 8;
|
||||
do
|
||||
{
|
||||
if (crc & 0x8000)
|
||||
crc = crc << 1 ^ 0x1021;
|
||||
else
|
||||
crc = crc << 1;
|
||||
} while(--i);
|
||||
}
|
||||
return (crc);
|
||||
}
|
||||
22
lib/CRC16/keywords.txt
Normal file
22
lib/CRC16/keywords.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
#######################################
|
||||
# Syntax Coloring Map For CRC16
|
||||
#######################################
|
||||
|
||||
#######################################
|
||||
# Datatypes (KEYWORD1)
|
||||
#######################################
|
||||
Crc16 KEYWORD1
|
||||
#######################################
|
||||
# Methods and Functions (KEYWORD2)
|
||||
#######################################
|
||||
clearCrc KEYWORD2
|
||||
updateCrc KEYWORD2
|
||||
getCrc KEYWORD2
|
||||
fastCrc KEYWORD2
|
||||
XModemCrc KEYWORD2
|
||||
Mcrf4XX KEYWORD2
|
||||
Modbus KEYWORD2
|
||||
|
||||
#######################################
|
||||
# Constants (LITERAL1)
|
||||
#######################################
|
||||
19
lib/CRC16/readme.md
Normal file
19
lib/CRC16/readme.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Crc16 A simple crc-16 library for Arduino
|
||||
|
||||
## Description
|
||||
Use this library to implement crc checks on buffer arrays
|
||||
|
||||
## Usage
|
||||
There are two modes to calculate crc: incremental and single call:
|
||||
* In first mode the crc is calculated adding data bytes one by one and then calculating final crc, this is useful
|
||||
for reception routines that receives bytes asynchrously,
|
||||
* The second mode is used to obtain crc from a buffer array.
|
||||
Using one mode doesn't interfere with the other (So you can calculate tx crc while receiving data and updating rx crc)
|
||||
|
||||
Is possible to configure crc with all crc-16bit standards (by default is defined XModem).
|
||||
|
||||
See possible crc variants:
|
||||
http://www.lammertbies.nl/comm/info/crc-calculation.html
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user