node-red-contrib-knx-ultimate
Version:
Control your KNX intallation via Node-Red! Single Node KNX IN/OUT with optional ETS group address importer. Easy to use and highly configurable.
63 lines (61 loc) • 3.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KNXHeader = void 0;
const KNXConstants = require("./KNXConstants");
const sysLogger = require("./../KnxLog.js").get(); // 08/04/2021 new logger to adhere to the loglevel selected in the config-window
class KNXHeader {
constructor(type, length) {
this._headerLength = KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10;
this._version = KNXConstants.KNX_CONSTANTS.KNXNETIP_VERSION_10;
this.service_type = type;
this.length = KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10 + length;
}
get headerLength() {
return this._headerLength;
}
get version() {
return this._version;
}
static createFromBuffer(buffer, offset = 0) {
if (buffer.length < KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10) {
if (sysLogger !== undefined && sysLogger !== null) sysLogger.error("KNXHeader: createFromBuffer: incomplete buffer. Buffer length: " + buffer.length + " expected HEADER_SIZE_10 equals to " + KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10);
throw new Error('Incomplete buffer');
}
const header_length = buffer.readUInt8(offset);
if (header_length !== KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10) {
if (sysLogger !== undefined && sysLogger !== null) sysLogger.error("KNXHeader: createFromBuffer: invalid header_length. header_length: " + header_length + " expected HEADER_SIZE_10 equals to " + KNXConstants.KNX_CONSTANTS.HEADER_SIZE_10);
throw new Error(`Invalid buffer length ${header_length}`);
}
offset += 1;
const version = buffer.readUInt8(offset);
if (version !== KNXConstants.KNX_CONSTANTS.KNXNETIP_VERSION_10) {
if (sysLogger !== undefined && sysLogger !== null) sysLogger.error("KNXHeader: createFromBuffer: Unknown header version. Version: " + version + " expected KNXNETIP_VERSION_10 to " + KNXConstants.KNX_CONSTANTS.KNXNETIP_VERSION_10);
throw new Error(`Unknown version ${version}`);
}
offset += 1;
const type = buffer.readUInt16BE(offset);
offset += 2;
const length = buffer.readUInt16BE(offset);
if (length !== buffer.length) {
try {
if (sysLogger !== undefined && sysLogger !== null) sysLogger.error(`Received KNX packet: KNXHeader: createFromBuffer: Message length mismatch ${length}/${buffer.length} Data processed: ${buffer.toString("hex") || "??"}`);
} catch (error) { }
// throw new Error(`Message length mismatch ${length}/${buffer.length} Data processed: ${buffer.toString("hex") || "??"}`);
}
return new KNXHeader(type, length - header_length);
}
toBuffer() {
const buffer = Buffer.alloc(this._headerLength);
let offset = 0;
buffer.writeUInt8(this._headerLength, offset);
offset += 1;
buffer.writeUInt8(this._version, offset);
offset += 1;
buffer.writeUInt16BE(this.service_type, offset);
offset += 2;
buffer.writeUInt16BE(this.length, offset);
return buffer;
}
}
exports.KNXHeader = KNXHeader;
//# sourceMappingURL=KNXHeader.js.map