UNPKG

knxultimate

Version:

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

63 lines 2.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const KNXConstants_1 = require("./KNXConstants"); const KNXPacket_1 = __importDefault(require("./KNXPacket")); const DeviceInfo_1 = __importDefault(require("./DeviceInfo")); const ServiceFamilies_1 = __importDefault(require("./ServiceFamilies")); const HPAI_1 = __importDefault(require("./HPAI")); class KNXSearchResponse extends KNXPacket_1.default { constructor(hpai, deviceInfo, serviceFamilies) { super(KNXConstants_1.KNX_CONSTANTS.SEARCH_RESPONSE, hpai.length + deviceInfo.length + serviceFamilies.length); this.hpai = hpai; this.deviceInfo = deviceInfo; this.serviceFamilies = serviceFamilies; } static createFromBuffer(buffer, offset = 0) { const hpai = HPAI_1.default.createFromBuffer(buffer, offset); offset += hpai.length; let deviceInfo; let serviceFamilies; let foundDevice = false; let foundServices = false; while (offset + 2 <= buffer.length && (!foundDevice || !foundServices)) { const len = buffer.readUInt8(offset); if (len < 2 || offset + len > buffer.length) break; const type = buffer.readUInt8(offset + 1); if (!foundDevice && type === KNXConstants_1.KNX_CONSTANTS.DEVICE_INFO) { deviceInfo = DeviceInfo_1.default.createFromBuffer(buffer, offset); offset += deviceInfo.length; foundDevice = true; continue; } if (!foundServices && type === KNXConstants_1.KNX_CONSTANTS.SUPP_SVC_FAMILIES) { serviceFamilies = ServiceFamilies_1.default.createFromBuffer(buffer, offset); offset += serviceFamilies.length; foundServices = true; continue; } offset += len; } if (!foundDevice) { throw new Error('KNXSearchResponse: DEVICE_INFO DIB not found'); } if (!foundServices) { serviceFamilies = new ServiceFamilies_1.default(); } return new KNXSearchResponse(hpai, deviceInfo, serviceFamilies); } toBuffer() { return Buffer.concat([ this.header.toBuffer(), this.hpai.toBuffer(), this.deviceInfo.toBuffer(), this.serviceFamilies.toBuffer(), ]); } } exports.default = KNXSearchResponse; //# sourceMappingURL=KNXSearchResponse.js.map