knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
60 lines • 2.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const CEMIMessage_1 = __importDefault(require("./CEMIMessage"));
const CEMIConstants_1 = __importDefault(require("./CEMIConstants"));
const KNXAddress_1 = __importDefault(require("../KNXAddress"));
const ControlField_1 = __importDefault(require("./ControlField"));
const NPDU_1 = __importDefault(require("./NPDU"));
const KNXDataBuffer_1 = __importDefault(require("../KNXDataBuffer"));
class LDataReq extends CEMIMessage_1.default {
constructor(additionalInfo, control, srcAddress, dstAddress, npdu) {
super(CEMIConstants_1.default.L_DATA_REQ, CEMIMessage_1.default.GetLength(additionalInfo, control, srcAddress, dstAddress, npdu), additionalInfo, control, srcAddress, dstAddress, npdu);
this.additionalInfo = additionalInfo;
this.control = control;
this.srcAddress = srcAddress;
this.dstAddress = dstAddress;
this.npdu = npdu;
}
static createFromBuffer(buffer, offset = 0) {
if (offset >= buffer.length) {
throw new Error('Buffer too short');
}
const addLength = buffer.readUInt8(offset++);
let additionalInfo = null;
if (addLength > 0) {
additionalInfo = new KNXDataBuffer_1.default(buffer.subarray(offset, addLength));
offset += addLength;
}
const controlField = ControlField_1.default.createFromBuffer(buffer, offset);
offset += controlField.length;
const srcAddress = KNXAddress_1.default.createFromBuffer(buffer, offset);
offset += srcAddress.length;
const dstAddress = KNXAddress_1.default.createFromBuffer(buffer, offset, controlField.addressType);
offset += dstAddress.length;
const npdu = NPDU_1.default.createFromBuffer(buffer, offset);
return new LDataReq(additionalInfo, controlField, srcAddress, dstAddress, npdu);
}
toBuffer() {
const buffer = Buffer.alloc(2);
const msgBuffer = [buffer];
let offset = 0;
buffer.writeUInt8(this.msgCode, offset++);
if (this.additionalInfo == null) {
buffer.writeUInt8(0, offset);
}
else {
buffer.writeUInt8(this.additionalInfo.length, offset);
msgBuffer.push(this.additionalInfo.value);
}
msgBuffer.push(this.control.toBuffer());
msgBuffer.push(this.srcAddress.toBuffer());
msgBuffer.push(this.dstAddress.toBuffer());
msgBuffer.push(this.npdu.toBuffer());
return Buffer.concat(msgBuffer);
}
}
exports.default = LDataReq;
//# sourceMappingURL=LDataReq.js.map