knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
69 lines • 3.1 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"));
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