@iotize/device-client.js
Version:
IoTize Device client for Javascript
211 lines (210 loc) • 7.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var error_1 = require("../../../api/converter/error");
var NumberConverter = /** @class */ (function () {
function NumberConverter(options) {
this.options = options;
}
/**
* @deprecated in favor of {@link NumberConverter.uint8()}
* @param lsb
*/
NumberConverter.uint8Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.uint8(lsb);
};
/**
* Number as unsigned 8 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.uint8 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: false,
sizeOf: 8,
leastSignificantBitFirst: lsb
});
};
/**
* @deprecated in favor of {@link NumberConverter.uint16()}
* @param lsb true for least significant bit first
*/
NumberConverter.uint16Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.uint16(lsb);
};
/**
* Number as unsigned 16 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.uint16 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: false,
sizeOf: 16,
leastSignificantBitFirst: lsb
});
};
/**
* @deprecated in favor of {@link NumberConverter.uint32()}
* @param lsb true for least significant bit first
*/
NumberConverter.uint32Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.uint32(lsb);
};
/**
* Number as unsigned 32 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.uint32 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: false,
sizeOf: 32,
leastSignificantBitFirst: lsb
});
};
/**
* @deprecated in favor of {@link NumberConverter.int8()}
* @param lsb true for least significant bit first
*/
NumberConverter.int8Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.int8(lsb);
};
/**
* Number as signed 8 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.int8 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: true,
sizeOf: 8,
leastSignificantBitFirst: lsb
});
};
/**
* @deprecated in favor of {@link NumberConverter.int16()}
* @param lsb true for least significant bit first
*/
NumberConverter.int16Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.int16(lsb);
};
/**
* Number as signed 16 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.int16 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: true,
sizeOf: 16,
leastSignificantBitFirst: lsb
});
};
/**
* @deprecated in favor of {@link NumberConverter.int32()}
* @param lsb true for least significant bit first
*/
NumberConverter.int32Instance = function (lsb) {
if (lsb === void 0) { lsb = false; }
return NumberConverter.int32(lsb);
};
/**
* Number as signed 32 bits converter
* @param lsb true for least significant bit first
*/
NumberConverter.int32 = function (lsb) {
if (lsb === void 0) { lsb = false; }
return new NumberConverter({
signed: true,
sizeOf: 32,
leastSignificantBitFirst: lsb
});
};
NumberConverter.prototype.decode = function (body) {
if ((body.length * 8) < this.options.sizeOf) {
throw error_1.ConverterError.unexpectedBufferSize(this.options.sizeOf / 8, body);
}
return NumberConverter.fromBytes(body, this.options.sizeOf / 8, this.options.signed, this.options.leastSignificantBitFirst);
};
NumberConverter.prototype.encode = function (value) {
var result = new Uint8Array(this.options.sizeOf >> 3);
for (var i = 0; i < result.length; i++) {
var decalage = ((result.length - i - 1) * 8);
result[i] = (value >> decalage) & 0xFF;
}
if (this.options.leastSignificantBitFirst) {
result.reverse();
}
return result;
};
NumberConverter.toOpaqueMsb = function (input, sizeOf) {
if (sizeOf == 8) {
return new Uint8Array([input & 0xFF]);
}
else if (sizeOf == 16) {
return new Uint8Array([
(input >> 8) & 0xFF,
input & 0xFF
]);
}
else if (sizeOf == 32) {
return new Uint8Array([
(input >> 24) & 0xFF,
(input >> 16) & 0xFF,
(input >> 8) & 0xFF,
input & 0xFF
]);
}
else {
throw new Error("Invalid size " + sizeOf + ". Must be 8, 16 or 32");
}
};
NumberConverter.fromOpaqueMsb = function (data, sizeOf) {
if (!sizeOf) {
sizeOf = data.length * 8;
}
if (sizeOf == 8) {
return data[0] & 0xFF;
}
if (sizeOf == 16) {
return (data[1] & 0xFF) + ((data[0] & 0xFF) << 8);
}
if (sizeOf == 32) {
return (data[3] & 0xFF) +
((data[2] & 0xFF) << 8) +
((data[1] & 0xFF) << 16) +
((data[0] & 0xFF) << 24);
}
throw new Error("Invalid size " + sizeOf + ". Must be 8, 16 or 32");
};
/**
* @param size size in bytes
*/
NumberConverter.fromBytes = function (data, size, signed, lsb) {
if (lsb) {
data = data.reverse();
}
var result = 0;
var last = 0;
var decalage;
for (var i = 0; i < size; i++) {
decalage = ((size - i - 1) * 8);
result += ((data[i] & 0xFF) << decalage) >>> 0;
if (last > result && !signed) {
throw new Error("Overflow. Last value: " + last + " but new is " + result);
}
last = result;
}
if (signed && (data[0] & 0x80) == 0x80) {
result = -(Math.pow(2, (8 * size)) - result);
}
return result;
};
return NumberConverter;
}());
exports.NumberConverter = NumberConverter;