@iotize/tap
Version:
IoTize Device client for Javascript
68 lines • 4.98 kB
JavaScript
import { Checksum } from '@iotize/tap/client/impl';
/**
* Created by IoTize on 19/04/2018.
* <p>
* Glue packet chunk to build the original ble packet
* @param {number} bufferLength
* @class
*/
export class BLEPacketBuilder {
constructor(bufferLength) {
this.bufferOffset = 0;
this.dataLength = 0;
this.data = new Uint8Array(bufferLength);
this.reset();
}
/**
* Append new chunk of data into the builder
* @param {Array} dataChunk the data chunk. The first byte must be the position offset of this chunk in the buffer (in bytes)
*/
append(dataChunk) {
if (!dataChunk || dataChunk.length < 2) {
return;
}
this.bufferOffset = (dataChunk[0] & 0xff) - 1;
if (this.bufferOffset + dataChunk.length > this.data.length) {
throw new Error(// TODO ble error
`Buffer size exceeded. Maximum size is ${this.data.length} byte(s).`);
}
for (let i = 1; i < dataChunk.length; i++) {
this.data[this.bufferOffset + i] = dataChunk[i];
}
this.dataLength += dataChunk.length - 1;
}
reset() {
this.dataLength = 0;
this.bufferOffset = 0;
}
hasAllChunks() {
return this.bufferOffset === -1;
}
isChecksumValid() {
let computedChecksum = this.getComputedChecksum();
let expectedChecksum = this.getExpectedChecksum();
return expectedChecksum === computedChecksum;
}
getComputedChecksum() {
return Checksum.compute(this.data.subarray(0, this.dataLength - 1)) & 0xff;
}
getExpectedChecksum() {
return this.data[this.dataLength - 1];
}
/**
* @return {Array} the result data without the checksum
*/
getData() {
return this.data.slice(0, this.dataLength - 1);
// let result: number[] = (s => { let a = []; while (s-- > 0) a.push(0); return a; })(this.dataLength - 1);
// /* arraycopy */((srcPts, srcOff, dstPts, dstOff, size) => { if (srcPts !== dstPts || dstOff >= srcOff + size) { while (--size >= 0) dstPts[dstOff++] = srcPts[srcOff++]; } else { let tmp = srcPts.slice(srcOff, srcOff + size); for (let i = 0; i < size; i++) dstPts[dstOff++] = tmp[i]; } })(this.data, 0, result, 0, result.length);
// return result;
}
/**
* @return {Array} the buffer (with the checksum)
*/
getBuffer() {
return this.data;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxlLXBhY2tldC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvdG9jb2wvYmxlL2NvbW1vbi9zcmMvbGliL2JsZS1wYWNrZXQtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixZQUFtQixZQUFvQjtRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsU0FBcUI7UUFDakMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMzRCxNQUFNLElBQUksS0FBSyxDQUFFLGlCQUFpQjtZQUNoQyx5Q0FBeUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLFdBQVcsQ0FDckUsQ0FBQztTQUNIO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xELE9BQU8sZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUM7SUFDL0MsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQywyR0FBMkc7UUFDM0csMlVBQTJVO1FBQzNVLGlCQUFpQjtJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRiJ9