UNPKG

knxultimate

Version:

KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.

69 lines 3.1 kB
"use strict"; 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")); const KnxLog_1 = require("../../KnxLog"); const logger = (0, KnxLog_1.module)('LDataInd'); class LDataInd extends CEMIMessage_1.default { constructor(additionalInfo, control, srcAddress, dstAddress, npdu) { super(CEMIConstants_1.default.L_DATA_IND, 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) { const sysLogger = logger; 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; let npdu; try { npdu = NPDU_1.default.createFromBuffer(buffer, offset); } catch (error) { sysLogger.error(`createFromBuffer: ${error.message} srcAddress: ${srcAddress}, dstAddress: ${dstAddress}`); } return new LDataInd(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 = LDataInd; //# sourceMappingURL=LDataInd.js.map