UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

68 lines 4.98 kB
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