@iotize/device-client.js
Version:
IoTize Device client for Javascript
69 lines (68 loc) • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var number_decoder_1 = require("../../client/impl/converter/body/number-decoder");
// import { crc32 } from "crc";
var CRC = /** @class */ (function () {
function CRC() {
}
// public static default(data: Uint8Array){
// return crc32(data.buffer);
// }
CRC.fromBytes = function (data, polynomial) {
if ((data.length % CRC.MODULO) != 0) {
throw new Error("Cannot compute CRC, input size must be a multiple of 4. Length is " + data.length + " % " + CRC.MODULO + " = " + (data.length % CRC.MODULO));
}
var uint32Data = new Uint32Array(data.length / 4);
for (var offset = 0; offset < uint32Data.byteLength; offset++) {
uint32Data[offset] = number_decoder_1.NumberConverter.fromOpaqueMsb(data.slice((offset * 4), (offset + 1) * 4), 32);
}
return CRC.fromWord(uint32Data, polynomial);
};
//crc 32 calculation by word.
CRC.fromWord = function (buffer, polynomial) {
if (polynomial === void 0) { polynomial = 0; }
polynomial |= this.DEFAULT_POLYNOMIAL;
//don't follow null pointers
if (!buffer) {
throw new Error("Buffer is null");
}
//don't accept buffers larger than 16MB
if (buffer.byteLength > 16 * 1024 * 1024) {
throw new Error("Buffers larger than 16MB");
}
var i;
var myword;
var crc;
var length = buffer.length;
// let remain: number = length/4;
// const number * buf = ((const number *)(buffer));
//don't accept length not multiple of 4
// if ( length % 4 ){
// throw new Error("Not module 4");
// }
i = 0;
crc = 0xFFFFFFFF;
for (i = 0; i < length; i++) {
myword = buffer[i]; // Get next word.
crc = CRC._crc32(crc, myword, polynomial);
}
return crc;
};
CRC._crc32 = function (Crc, Data, polynomial) {
Crc = Crc ^ Data;
for (var i = 0; i < 32; i++) {
if (Crc & 0x80000000) {
Crc = ((Crc << 1) ^ polynomial) >>> 0; // Polynomial
//Crc = (Crc << 1) ^ 0x04C11DB7; // Polynomial used in STM32
}
else {
Crc = (Crc << 1) >>> 0;
}
}
return (Crc);
};
CRC.DEFAULT_POLYNOMIAL = 0x4C11DB7;
CRC.MODULO = 4;
return CRC;
}());
exports.CRC = CRC;