Node CRC16 - (中文版README)
MODBUS is an application-layer messaging protocol, positioned at level 7 of the OSI model. It provides client/server communication between devices connected on different types of buses or networks.The CRC
(Cyclic Redundancy Check) part in protocol, such as MODBUS over serial line(Page 42), and Modbus-RTU(Page 75), adopt the same one algorithm.
node-crc16
implement the c++ version of this algorithm by table look-up, and also provide a node native addon and a nodejs version wrapper.
This module has been well unit tested and documented.
Tips: the intuitive decription about this module is the comment in src and the code in unit test :).
npm install node-crc16
checkSum
accept three params, the first two params (input, [encoding])
construct a buffer
crc16.checkSum('一个utf8字符串', 'utf8')
default encoding
is hex
var sum = crc16.checkSum('a031ffb7');
sum.should.equal('726d');
the third param is option
,an object
option.retType
set the format of the returned sum- default is
hex
,two bytes BigEndian hex string,726d
array
, two unsigned char number of the returned sum,[114, 109]
int
,one unsigned short number of the returned sum,29293
buffer
,Buffer type of the returned sum,<Buffer 72 6d>
- default is
var sum = crc16.checkSum('a031ffb7', {retType: 'array'});
sum.should.eql([114, 109]);
Params of verifySum
is same as checkSum
, the first two params is to constructed a buffer, which contains the sum to be verified.
var stream = 'a031ffb7',
sum = '726d';
var isValid = crc16.verifySum(stream + sum);
isValid.should.equal(true);
# fork and clone the code to your local env
git clone git@github.com:imnemo/crc16.git
cd crc16
├── lib //CRC16 algorithm implemention in c++
├── util //Util functions
├── src //Node Native Addon
├── test //JS unit testing
├── test_cpp //C++ unit testing
├── index.js //Main entry of NodeJS module
npm install
CRC16
check and verify algorithm's implemention in c++ is standalone and in ./lib/crc16.cc
.If you will modify that, please write suitable unit testing case. You can reference Catch, and then run:
make test
Make sure all the unit testing case is passed after you modify.
npm test
or ./node_modules/.bin/mocha --reporter spec
>>> npm run benchmark
> node-crc16@1.0.0 benchmark /Users/nemo/code/imnemo/crc16
> node benchmark/benchmark.js
CEC16#checkSum x 905,071 ops/sec ±2.00% (83 runs sampled)
CRC16#verifySum x 1,540,940 ops/sec ±19.92% (65 runs sampled)
Fastest is CRC16#verifySum
>>> npm run nanobench
> node-crc16@1.0.0 nanobench /Users/nemo/code/imnemo/crc16
> node benchmark/nanobench.js
NANOBENCH version 2
> /Users/nemo/.nvm/versions/node/v8.1.2/bin/node benchmark/nanobench.js
# CRC16#checkSum 2,000,000 times
ok ~3.17 s (3 s + 166422442 ns)
# CRC16#verifySum 2,000,000 times
ok ~2.85 s (2 s + 848059820 ns)
all benchmarks completed
ok ~6.01 s (6 s + 14482262 ns)
You can pull a request when you complete all steps above.
- Add JS code lint
- Add changelog
- Add JS unit test
- Add JS unit test code covarage
- Add C++ unit test
- Add CI
- Add performance test
- Add global module supported to provide a cli tool
- Refactor node native addon part with NAN
- Add donate entry