You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
669 B

6 years ago
import { Buffer } from 'buffer';
import createBuffer from './create_buffer';
import defineCrc from './define_crc';
const crc16xmodem = defineCrc('xmodem', function(buf, previous) {
if (!Buffer.isBuffer(buf)) buf = createBuffer(buf);
let crc = typeof previous !== 'undefined' ? ~~previous : 0x0;
for (let index = 0; index < buf.length; index++) {
const byte = buf[index];
let code = (crc >>> 8) & 0xff;
code ^= byte & 0xff;
code ^= code >>> 4;
crc = (crc << 8) & 0xffff;
crc ^= code;
code = (code << 5) & 0xffff;
crc ^= code;
code = (code << 7) & 0xffff;
crc ^= code;
}
return crc;
});
export default crc16xmodem;