@iotile/iotile-device
Version:
A typescript library for interfacing with IOTile BLE devices
57 lines • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const iotile_common_1 = require("@iotile/iotile-common");
const iotile_reports_1 = require("../common/iotile-reports");
const CryptoJS = require("crypto-js");
function buildIndividualReport(uuid, streamID, value) {
var reportData = new ArrayBuffer(20);
var report = new DataView(reportData);
report.setUint8(0, 0);
report.setUint16(2, streamID, true);
report.setUint32(4, uuid, true);
report.setUint32(8, 0, true);
report.setUint32(12, 0, true);
report.setUint32(16, value, true);
return reportData;
}
exports.buildIndividualReport = buildIndividualReport;
function createHashListReport(uuid, reportID, streamer, sentTime, readings) {
var length = 20 + 24 + readings.length * 16;
var selector;
let buffer = new ArrayBuffer(length);
var report = new Uint8Array(buffer);
var lowestID = 0xFFFFFFFF;
var highestID = 0;
if (streamer == 0) {
selector = iotile_reports_1.SignedReportSelectors.UserOutputs;
}
else if (streamer == 1) {
selector = iotile_reports_1.SignedReportSelectors.SystemOutputs;
}
else {
selector = 0xFFFF;
}
var header = new Uint8Array(iotile_common_1.packArrayBuffer('BBHLLLBBH', 1, length & 0xFF, length >> 8, uuid, reportID, sentTime, 0, streamer, selector));
report.set(header, 0);
for (var i = 0; i < readings.length; ++i) {
var data = readings[i];
var reading = new Uint8Array(iotile_common_1.packArrayBuffer('HHLLL', data.stream, 0, data.id, data.timestamp, data.value));
report.set(reading, 20 + i * 16);
if (data.id < lowestID) {
lowestID = data.id;
}
if (data.id > highestID) {
highestID = data.id;
}
}
var footer = new Uint8Array(iotile_common_1.packArrayBuffer('LL', lowestID, highestID));
report.set(footer, 20 + (readings.length * 16));
var signedLength = 20 + (16 * readings.length) + 8;
var signedData = CryptoJS.lib.WordArray.create(report.slice(0, signedLength));
var signatureData = CryptoJS.SHA256(signedData).toString(CryptoJS.enc.Base64);
var signature = iotile_common_1.base64ToArrayBuffer(signatureData);
report.set(new Uint8Array(signature.slice(0, 16)), signedLength);
return buffer;
}
exports.createHashListReport = createHashListReport;
//# sourceMappingURL=utilities.js.map