zigbee-on-host
Version:
ZigBee stack designed to run on a host and communicate with a radio co-processor (RCP)
48 lines • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OTRCPParser = void 0;
const node_stream_1 = require("node:stream");
const logger_js_1 = require("../utils/logger.js");
const NS = "ot-rcp-driver:parser";
class OTRCPParser extends node_stream_1.Transform {
#buffer;
constructor(opts) {
super(opts);
this.#buffer = Buffer.alloc(0);
}
_transform(chunk, _encoding, cb) {
let data = Buffer.concat([this.#buffer, chunk]);
if (data[0] !== 126 /* HdlcReservedByte.FLAG */) {
// discard data before FLAG
data = data.subarray(data.indexOf(126 /* HdlcReservedByte.FLAG */));
}
let position = data.indexOf(126 /* HdlcReservedByte.FLAG */, 1);
while (position !== -1) {
const endPosition = position + 1;
// ignore repeated successive flags
if (position > 1) {
const frame = data.subarray(0, endPosition);
logger_js_1.logger.debug(() => `<<< FRAME[${frame.toString("hex")}]`, NS);
this.push(frame);
// remove the frame from internal buffer (set below)
data = data.subarray(endPosition);
}
else {
data = data.subarray(position);
}
position = data.indexOf(126 /* HdlcReservedByte.FLAG */, 1);
}
this.#buffer = data;
cb();
}
/* v8 ignore start */
_flush(cb) {
if (this.#buffer.byteLength > 0) {
this.push(this.#buffer);
this.#buffer = Buffer.alloc(0);
}
cb();
}
}
exports.OTRCPParser = OTRCPParser;
//# sourceMappingURL=ot-rcp-parser.js.map