klf-200-api
Version:
This module provides a wrapper to the socket API of a Velux KLF-200 interface. You will need at least firmware 0.2.0.0.71 on your KLF interface for this library to work.
358 lines • 23.1 kB
JavaScript
import { getNextSessionID } from "./GW_COMMAND.js";
("use strict");
export const KLF200_PORT = 51200;
export var GatewayCommand;
(function (GatewayCommand) {
GatewayCommand[GatewayCommand["GW_ERROR_NTF"] = 0] = "GW_ERROR_NTF";
GatewayCommand[GatewayCommand["GW_REBOOT_REQ"] = 1] = "GW_REBOOT_REQ";
GatewayCommand[GatewayCommand["GW_REBOOT_CFM"] = 2] = "GW_REBOOT_CFM";
GatewayCommand[GatewayCommand["GW_SET_FACTORY_DEFAULT_REQ"] = 3] = "GW_SET_FACTORY_DEFAULT_REQ";
GatewayCommand[GatewayCommand["GW_SET_FACTORY_DEFAULT_CFM"] = 4] = "GW_SET_FACTORY_DEFAULT_CFM";
GatewayCommand[GatewayCommand["GW_GET_VERSION_REQ"] = 8] = "GW_GET_VERSION_REQ";
GatewayCommand[GatewayCommand["GW_GET_VERSION_CFM"] = 9] = "GW_GET_VERSION_CFM";
GatewayCommand[GatewayCommand["GW_GET_PROTOCOL_VERSION_REQ"] = 10] = "GW_GET_PROTOCOL_VERSION_REQ";
GatewayCommand[GatewayCommand["GW_GET_PROTOCOL_VERSION_CFM"] = 11] = "GW_GET_PROTOCOL_VERSION_CFM";
GatewayCommand[GatewayCommand["GW_GET_STATE_REQ"] = 12] = "GW_GET_STATE_REQ";
GatewayCommand[GatewayCommand["GW_GET_STATE_CFM"] = 13] = "GW_GET_STATE_CFM";
GatewayCommand[GatewayCommand["GW_LEAVE_LEARN_STATE_REQ"] = 14] = "GW_LEAVE_LEARN_STATE_REQ";
GatewayCommand[GatewayCommand["GW_LEAVE_LEARN_STATE_CFM"] = 15] = "GW_LEAVE_LEARN_STATE_CFM";
GatewayCommand[GatewayCommand["GW_GET_NETWORK_SETUP_REQ"] = 224] = "GW_GET_NETWORK_SETUP_REQ";
GatewayCommand[GatewayCommand["GW_GET_NETWORK_SETUP_CFM"] = 225] = "GW_GET_NETWORK_SETUP_CFM";
GatewayCommand[GatewayCommand["GW_SET_NETWORK_SETUP_REQ"] = 226] = "GW_SET_NETWORK_SETUP_REQ";
GatewayCommand[GatewayCommand["GW_SET_NETWORK_SETUP_CFM"] = 227] = "GW_SET_NETWORK_SETUP_CFM";
GatewayCommand[GatewayCommand["GW_CS_GET_SYSTEMTABLE_DATA_REQ"] = 256] = "GW_CS_GET_SYSTEMTABLE_DATA_REQ";
GatewayCommand[GatewayCommand["GW_CS_GET_SYSTEMTABLE_DATA_CFM"] = 257] = "GW_CS_GET_SYSTEMTABLE_DATA_CFM";
GatewayCommand[GatewayCommand["GW_CS_GET_SYSTEMTABLE_DATA_NTF"] = 258] = "GW_CS_GET_SYSTEMTABLE_DATA_NTF";
GatewayCommand[GatewayCommand["GW_CS_DISCOVER_NODES_REQ"] = 259] = "GW_CS_DISCOVER_NODES_REQ";
GatewayCommand[GatewayCommand["GW_CS_DISCOVER_NODES_CFM"] = 260] = "GW_CS_DISCOVER_NODES_CFM";
GatewayCommand[GatewayCommand["GW_CS_DISCOVER_NODES_NTF"] = 261] = "GW_CS_DISCOVER_NODES_NTF";
GatewayCommand[GatewayCommand["GW_CS_REMOVE_NODES_REQ"] = 262] = "GW_CS_REMOVE_NODES_REQ";
GatewayCommand[GatewayCommand["GW_CS_REMOVE_NODES_CFM"] = 263] = "GW_CS_REMOVE_NODES_CFM";
GatewayCommand[GatewayCommand["GW_CS_VIRGIN_STATE_REQ"] = 264] = "GW_CS_VIRGIN_STATE_REQ";
GatewayCommand[GatewayCommand["GW_CS_VIRGIN_STATE_CFM"] = 265] = "GW_CS_VIRGIN_STATE_CFM";
GatewayCommand[GatewayCommand["GW_CS_CONTROLLER_COPY_REQ"] = 266] = "GW_CS_CONTROLLER_COPY_REQ";
GatewayCommand[GatewayCommand["GW_CS_CONTROLLER_COPY_CFM"] = 267] = "GW_CS_CONTROLLER_COPY_CFM";
GatewayCommand[GatewayCommand["GW_CS_CONTROLLER_COPY_NTF"] = 268] = "GW_CS_CONTROLLER_COPY_NTF";
GatewayCommand[GatewayCommand["GW_CS_CONTROLLER_COPY_CANCEL_NTF"] = 269] = "GW_CS_CONTROLLER_COPY_CANCEL_NTF";
GatewayCommand[GatewayCommand["GW_CS_RECEIVE_KEY_REQ"] = 270] = "GW_CS_RECEIVE_KEY_REQ";
GatewayCommand[GatewayCommand["GW_CS_RECEIVE_KEY_CFM"] = 271] = "GW_CS_RECEIVE_KEY_CFM";
GatewayCommand[GatewayCommand["GW_CS_RECEIVE_KEY_NTF"] = 272] = "GW_CS_RECEIVE_KEY_NTF";
GatewayCommand[GatewayCommand["GW_CS_PGC_JOB_NTF"] = 273] = "GW_CS_PGC_JOB_NTF";
GatewayCommand[GatewayCommand["GW_CS_SYSTEM_TABLE_UPDATE_NTF"] = 274] = "GW_CS_SYSTEM_TABLE_UPDATE_NTF";
GatewayCommand[GatewayCommand["GW_CS_GENERATE_NEW_KEY_REQ"] = 275] = "GW_CS_GENERATE_NEW_KEY_REQ";
GatewayCommand[GatewayCommand["GW_CS_GENERATE_NEW_KEY_CFM"] = 276] = "GW_CS_GENERATE_NEW_KEY_CFM";
GatewayCommand[GatewayCommand["GW_CS_GENERATE_NEW_KEY_NTF"] = 277] = "GW_CS_GENERATE_NEW_KEY_NTF";
GatewayCommand[GatewayCommand["GW_CS_REPAIR_KEY_REQ"] = 278] = "GW_CS_REPAIR_KEY_REQ";
GatewayCommand[GatewayCommand["GW_CS_REPAIR_KEY_CFM"] = 279] = "GW_CS_REPAIR_KEY_CFM";
GatewayCommand[GatewayCommand["GW_CS_REPAIR_KEY_NTF"] = 280] = "GW_CS_REPAIR_KEY_NTF";
GatewayCommand[GatewayCommand["GW_CS_ACTIVATE_CONFIGURATION_MODE_REQ"] = 281] = "GW_CS_ACTIVATE_CONFIGURATION_MODE_REQ";
GatewayCommand[GatewayCommand["GW_CS_ACTIVATE_CONFIGURATION_MODE_CFM"] = 282] = "GW_CS_ACTIVATE_CONFIGURATION_MODE_CFM";
GatewayCommand[GatewayCommand["GW_GET_NODE_INFORMATION_REQ"] = 512] = "GW_GET_NODE_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_GET_NODE_INFORMATION_CFM"] = 513] = "GW_GET_NODE_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_NODE_INFORMATION_NTF"] = 528] = "GW_GET_NODE_INFORMATION_NTF";
GatewayCommand[GatewayCommand["GW_GET_ALL_NODES_INFORMATION_REQ"] = 514] = "GW_GET_ALL_NODES_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_GET_ALL_NODES_INFORMATION_CFM"] = 515] = "GW_GET_ALL_NODES_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_ALL_NODES_INFORMATION_NTF"] = 516] = "GW_GET_ALL_NODES_INFORMATION_NTF";
GatewayCommand[GatewayCommand["GW_GET_ALL_NODES_INFORMATION_FINISHED_NTF"] = 517] = "GW_GET_ALL_NODES_INFORMATION_FINISHED_NTF";
GatewayCommand[GatewayCommand["GW_SET_NODE_VARIATION_REQ"] = 518] = "GW_SET_NODE_VARIATION_REQ";
GatewayCommand[GatewayCommand["GW_SET_NODE_VARIATION_CFM"] = 519] = "GW_SET_NODE_VARIATION_CFM";
GatewayCommand[GatewayCommand["GW_SET_NODE_NAME_REQ"] = 520] = "GW_SET_NODE_NAME_REQ";
GatewayCommand[GatewayCommand["GW_SET_NODE_NAME_CFM"] = 521] = "GW_SET_NODE_NAME_CFM";
GatewayCommand[GatewayCommand["GW_SET_NODE_VELOCITY_REQ"] = 522] = "GW_SET_NODE_VELOCITY_REQ";
GatewayCommand[GatewayCommand["GW_SET_NODE_VELOCITY_CFM"] = 523] = "GW_SET_NODE_VELOCITY_CFM";
GatewayCommand[GatewayCommand["GW_NODE_INFORMATION_CHANGED_NTF"] = 524] = "GW_NODE_INFORMATION_CHANGED_NTF";
GatewayCommand[GatewayCommand["GW_NODE_STATE_POSITION_CHANGED_NTF"] = 529] = "GW_NODE_STATE_POSITION_CHANGED_NTF";
GatewayCommand[GatewayCommand["GW_SET_NODE_ORDER_AND_PLACEMENT_REQ"] = 525] = "GW_SET_NODE_ORDER_AND_PLACEMENT_REQ";
GatewayCommand[GatewayCommand["GW_SET_NODE_ORDER_AND_PLACEMENT_CFM"] = 526] = "GW_SET_NODE_ORDER_AND_PLACEMENT_CFM";
GatewayCommand[GatewayCommand["GW_GET_GROUP_INFORMATION_REQ"] = 544] = "GW_GET_GROUP_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_GET_GROUP_INFORMATION_CFM"] = 545] = "GW_GET_GROUP_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_GROUP_INFORMATION_NTF"] = 560] = "GW_GET_GROUP_INFORMATION_NTF";
GatewayCommand[GatewayCommand["GW_SET_GROUP_INFORMATION_REQ"] = 546] = "GW_SET_GROUP_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_SET_GROUP_INFORMATION_CFM"] = 547] = "GW_SET_GROUP_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GROUP_INFORMATION_CHANGED_NTF"] = 548] = "GW_GROUP_INFORMATION_CHANGED_NTF";
GatewayCommand[GatewayCommand["GW_DELETE_GROUP_REQ"] = 549] = "GW_DELETE_GROUP_REQ";
GatewayCommand[GatewayCommand["GW_DELETE_GROUP_CFM"] = 550] = "GW_DELETE_GROUP_CFM";
GatewayCommand[GatewayCommand["GW_NEW_GROUP_REQ"] = 551] = "GW_NEW_GROUP_REQ";
GatewayCommand[GatewayCommand["GW_NEW_GROUP_CFM"] = 552] = "GW_NEW_GROUP_CFM";
GatewayCommand[GatewayCommand["GW_GET_ALL_GROUPS_INFORMATION_REQ"] = 553] = "GW_GET_ALL_GROUPS_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_GET_ALL_GROUPS_INFORMATION_CFM"] = 554] = "GW_GET_ALL_GROUPS_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_ALL_GROUPS_INFORMATION_NTF"] = 555] = "GW_GET_ALL_GROUPS_INFORMATION_NTF";
GatewayCommand[GatewayCommand["GW_GET_ALL_GROUPS_INFORMATION_FINISHED_NTF"] = 556] = "GW_GET_ALL_GROUPS_INFORMATION_FINISHED_NTF";
GatewayCommand[GatewayCommand["GW_GROUP_DELETED_NTF"] = 557] = "GW_GROUP_DELETED_NTF";
GatewayCommand[GatewayCommand["GW_HOUSE_STATUS_MONITOR_ENABLE_REQ"] = 576] = "GW_HOUSE_STATUS_MONITOR_ENABLE_REQ";
GatewayCommand[GatewayCommand["GW_HOUSE_STATUS_MONITOR_ENABLE_CFM"] = 577] = "GW_HOUSE_STATUS_MONITOR_ENABLE_CFM";
GatewayCommand[GatewayCommand["GW_HOUSE_STATUS_MONITOR_DISABLE_REQ"] = 578] = "GW_HOUSE_STATUS_MONITOR_DISABLE_REQ";
GatewayCommand[GatewayCommand["GW_HOUSE_STATUS_MONITOR_DISABLE_CFM"] = 579] = "GW_HOUSE_STATUS_MONITOR_DISABLE_CFM";
GatewayCommand[GatewayCommand["GW_COMMAND_SEND_REQ"] = 768] = "GW_COMMAND_SEND_REQ";
GatewayCommand[GatewayCommand["GW_COMMAND_SEND_CFM"] = 769] = "GW_COMMAND_SEND_CFM";
GatewayCommand[GatewayCommand["GW_COMMAND_RUN_STATUS_NTF"] = 770] = "GW_COMMAND_RUN_STATUS_NTF";
GatewayCommand[GatewayCommand["GW_COMMAND_REMAINING_TIME_NTF"] = 771] = "GW_COMMAND_REMAINING_TIME_NTF";
GatewayCommand[GatewayCommand["GW_SESSION_FINISHED_NTF"] = 772] = "GW_SESSION_FINISHED_NTF";
GatewayCommand[GatewayCommand["GW_STATUS_REQUEST_REQ"] = 773] = "GW_STATUS_REQUEST_REQ";
GatewayCommand[GatewayCommand["GW_STATUS_REQUEST_CFM"] = 774] = "GW_STATUS_REQUEST_CFM";
GatewayCommand[GatewayCommand["GW_STATUS_REQUEST_NTF"] = 775] = "GW_STATUS_REQUEST_NTF";
GatewayCommand[GatewayCommand["GW_WINK_SEND_REQ"] = 776] = "GW_WINK_SEND_REQ";
GatewayCommand[GatewayCommand["GW_WINK_SEND_CFM"] = 777] = "GW_WINK_SEND_CFM";
GatewayCommand[GatewayCommand["GW_WINK_SEND_NTF"] = 778] = "GW_WINK_SEND_NTF";
GatewayCommand[GatewayCommand["GW_SET_LIMITATION_REQ"] = 784] = "GW_SET_LIMITATION_REQ";
GatewayCommand[GatewayCommand["GW_SET_LIMITATION_CFM"] = 785] = "GW_SET_LIMITATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_LIMITATION_STATUS_REQ"] = 786] = "GW_GET_LIMITATION_STATUS_REQ";
GatewayCommand[GatewayCommand["GW_GET_LIMITATION_STATUS_CFM"] = 787] = "GW_GET_LIMITATION_STATUS_CFM";
GatewayCommand[GatewayCommand["GW_LIMITATION_STATUS_NTF"] = 788] = "GW_LIMITATION_STATUS_NTF";
GatewayCommand[GatewayCommand["GW_MODE_SEND_REQ"] = 800] = "GW_MODE_SEND_REQ";
GatewayCommand[GatewayCommand["GW_MODE_SEND_CFM"] = 801] = "GW_MODE_SEND_CFM";
GatewayCommand[GatewayCommand["GW_MODE_SEND_NTF"] = 802] = "GW_MODE_SEND_NTF";
GatewayCommand[GatewayCommand["GW_INITIALIZE_SCENE_REQ"] = 1024] = "GW_INITIALIZE_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_INITIALIZE_SCENE_CFM"] = 1025] = "GW_INITIALIZE_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_INITIALIZE_SCENE_NTF"] = 1026] = "GW_INITIALIZE_SCENE_NTF";
GatewayCommand[GatewayCommand["GW_INITIALIZE_SCENE_CANCEL_REQ"] = 1027] = "GW_INITIALIZE_SCENE_CANCEL_REQ";
GatewayCommand[GatewayCommand["GW_INITIALIZE_SCENE_CANCEL_CFM"] = 1028] = "GW_INITIALIZE_SCENE_CANCEL_CFM";
GatewayCommand[GatewayCommand["GW_RECORD_SCENE_REQ"] = 1029] = "GW_RECORD_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_RECORD_SCENE_CFM"] = 1030] = "GW_RECORD_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_RECORD_SCENE_NTF"] = 1031] = "GW_RECORD_SCENE_NTF";
GatewayCommand[GatewayCommand["GW_DELETE_SCENE_REQ"] = 1032] = "GW_DELETE_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_DELETE_SCENE_CFM"] = 1033] = "GW_DELETE_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_RENAME_SCENE_REQ"] = 1034] = "GW_RENAME_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_RENAME_SCENE_CFM"] = 1035] = "GW_RENAME_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_GET_SCENE_LIST_REQ"] = 1036] = "GW_GET_SCENE_LIST_REQ";
GatewayCommand[GatewayCommand["GW_GET_SCENE_LIST_CFM"] = 1037] = "GW_GET_SCENE_LIST_CFM";
GatewayCommand[GatewayCommand["GW_GET_SCENE_LIST_NTF"] = 1038] = "GW_GET_SCENE_LIST_NTF";
GatewayCommand[GatewayCommand["GW_GET_SCENE_INFORMATION_REQ"] = 1039] = "GW_GET_SCENE_INFORMATION_REQ";
GatewayCommand[GatewayCommand["GW_GET_SCENE_INFORMATION_CFM"] = 1040] = "GW_GET_SCENE_INFORMATION_CFM";
GatewayCommand[GatewayCommand["GW_GET_SCENE_INFORMATION_NTF"] = 1041] = "GW_GET_SCENE_INFORMATION_NTF";
GatewayCommand[GatewayCommand["GW_ACTIVATE_SCENE_REQ"] = 1042] = "GW_ACTIVATE_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_ACTIVATE_SCENE_CFM"] = 1043] = "GW_ACTIVATE_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_STOP_SCENE_REQ"] = 1045] = "GW_STOP_SCENE_REQ";
GatewayCommand[GatewayCommand["GW_STOP_SCENE_CFM"] = 1046] = "GW_STOP_SCENE_CFM";
GatewayCommand[GatewayCommand["GW_SCENE_INFORMATION_CHANGED_NTF"] = 1049] = "GW_SCENE_INFORMATION_CHANGED_NTF";
GatewayCommand[GatewayCommand["GW_ACTIVATE_PRODUCTGROUP_REQ"] = 1095] = "GW_ACTIVATE_PRODUCTGROUP_REQ";
GatewayCommand[GatewayCommand["GW_ACTIVATE_PRODUCTGROUP_CFM"] = 1096] = "GW_ACTIVATE_PRODUCTGROUP_CFM";
GatewayCommand[GatewayCommand["GW_ACTIVATE_PRODUCTGROUP_NTF"] = 1097] = "GW_ACTIVATE_PRODUCTGROUP_NTF";
GatewayCommand[GatewayCommand["GW_GET_CONTACT_INPUT_LINK_LIST_REQ"] = 1120] = "GW_GET_CONTACT_INPUT_LINK_LIST_REQ";
GatewayCommand[GatewayCommand["GW_GET_CONTACT_INPUT_LINK_LIST_CFM"] = 1121] = "GW_GET_CONTACT_INPUT_LINK_LIST_CFM";
GatewayCommand[GatewayCommand["GW_SET_CONTACT_INPUT_LINK_REQ"] = 1122] = "GW_SET_CONTACT_INPUT_LINK_REQ";
GatewayCommand[GatewayCommand["GW_SET_CONTACT_INPUT_LINK_CFM"] = 1123] = "GW_SET_CONTACT_INPUT_LINK_CFM";
GatewayCommand[GatewayCommand["GW_REMOVE_CONTACT_INPUT_LINK_REQ"] = 1124] = "GW_REMOVE_CONTACT_INPUT_LINK_REQ";
GatewayCommand[GatewayCommand["GW_REMOVE_CONTACT_INPUT_LINK_CFM"] = 1125] = "GW_REMOVE_CONTACT_INPUT_LINK_CFM";
GatewayCommand[GatewayCommand["GW_GET_ACTIVATION_LOG_HEADER_REQ"] = 1280] = "GW_GET_ACTIVATION_LOG_HEADER_REQ";
GatewayCommand[GatewayCommand["GW_GET_ACTIVATION_LOG_HEADER_CFM"] = 1281] = "GW_GET_ACTIVATION_LOG_HEADER_CFM";
GatewayCommand[GatewayCommand["GW_CLEAR_ACTIVATION_LOG_REQ"] = 1282] = "GW_CLEAR_ACTIVATION_LOG_REQ";
GatewayCommand[GatewayCommand["GW_CLEAR_ACTIVATION_LOG_CFM"] = 1283] = "GW_CLEAR_ACTIVATION_LOG_CFM";
GatewayCommand[GatewayCommand["GW_GET_ACTIVATION_LOG_LINE_REQ"] = 1284] = "GW_GET_ACTIVATION_LOG_LINE_REQ";
GatewayCommand[GatewayCommand["GW_GET_ACTIVATION_LOG_LINE_CFM"] = 1285] = "GW_GET_ACTIVATION_LOG_LINE_CFM";
GatewayCommand[GatewayCommand["GW_ACTIVATION_LOG_UPDATED_NTF"] = 1286] = "GW_ACTIVATION_LOG_UPDATED_NTF";
GatewayCommand[GatewayCommand["GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_REQ"] = 1287] = "GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_REQ";
GatewayCommand[GatewayCommand["GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_NTF"] = 1288] = "GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_NTF";
GatewayCommand[GatewayCommand["GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_CFM"] = 1289] = "GW_GET_MULTIPLE_ACTIVATION_LOG_LINES_CFM";
GatewayCommand[GatewayCommand["GW_SET_UTC_REQ"] = 8192] = "GW_SET_UTC_REQ";
GatewayCommand[GatewayCommand["GW_SET_UTC_CFM"] = 8193] = "GW_SET_UTC_CFM";
GatewayCommand[GatewayCommand["GW_RTC_SET_TIME_ZONE_REQ"] = 8194] = "GW_RTC_SET_TIME_ZONE_REQ";
GatewayCommand[GatewayCommand["GW_RTC_SET_TIME_ZONE_CFM"] = 8195] = "GW_RTC_SET_TIME_ZONE_CFM";
GatewayCommand[GatewayCommand["GW_GET_LOCAL_TIME_REQ"] = 8196] = "GW_GET_LOCAL_TIME_REQ";
GatewayCommand[GatewayCommand["GW_GET_LOCAL_TIME_CFM"] = 8197] = "GW_GET_LOCAL_TIME_CFM";
GatewayCommand[GatewayCommand["GW_PASSWORD_ENTER_REQ"] = 12288] = "GW_PASSWORD_ENTER_REQ";
GatewayCommand[GatewayCommand["GW_PASSWORD_ENTER_CFM"] = 12289] = "GW_PASSWORD_ENTER_CFM";
GatewayCommand[GatewayCommand["GW_PASSWORD_CHANGE_REQ"] = 12290] = "GW_PASSWORD_CHANGE_REQ";
GatewayCommand[GatewayCommand["GW_PASSWORD_CHANGE_CFM"] = 12291] = "GW_PASSWORD_CHANGE_CFM";
GatewayCommand[GatewayCommand["GW_PASSWORD_CHANGE_NTF"] = 12292] = "GW_PASSWORD_CHANGE_NTF";
})(GatewayCommand || (GatewayCommand = {}));
export var GW_COMMON_STATUS;
(function (GW_COMMON_STATUS) {
GW_COMMON_STATUS[GW_COMMON_STATUS["SUCCESS"] = 0] = "SUCCESS";
GW_COMMON_STATUS[GW_COMMON_STATUS["ERROR"] = 1] = "ERROR";
GW_COMMON_STATUS[GW_COMMON_STATUS["INVALID_NODE_ID"] = 2] = "INVALID_NODE_ID";
})(GW_COMMON_STATUS || (GW_COMMON_STATUS = {}));
export var GW_INVERSE_STATUS;
(function (GW_INVERSE_STATUS) {
GW_INVERSE_STATUS[GW_INVERSE_STATUS["ERROR"] = 0] = "ERROR";
GW_INVERSE_STATUS[GW_INVERSE_STATUS["SUCCESS"] = 1] = "SUCCESS";
})(GW_INVERSE_STATUS || (GW_INVERSE_STATUS = {}));
const C_COMMAND_SIZE = 2;
const C_BUFFERLEN_SIZE = 1;
export const C_MAX_PWD_LENGTH = 32;
export class GW_FRAME {
Command = GatewayCommand[this.constructor.name];
offset = C_BUFFERLEN_SIZE + C_COMMAND_SIZE;
constructor() { }
}
export class GW_FRAME_REQ extends GW_FRAME {
BufferSize;
/**
* Creates an instance of GW_FRAME_REQ.
*
* @param {number} BufferSize The size of the buffer (only pure data, without protocol and command bytes)
* @memberof GW_FRAME_REQ
*/
constructor(BufferSize) {
super();
this.BufferSize = BufferSize;
this.data = Buffer.alloc(BufferSize + this.offset);
this.data.writeUInt16BE(this.Command, C_BUFFERLEN_SIZE);
this.data.writeUInt8(this.data.byteLength, 0);
}
/**
* Allocates a buffer in the right size for the frame.
* The first byte contains the buffer length.
* The next two bytes of the buffer are used for the command.
* The remaining bytes are for the data.
*
* A size of 0 means that the command has no further data.
*
* @protected
* @abstract
* @param {number} BufferSize Size for the buffer for the data part without length and command.
* @param {boolean} CopyData Set to true to copy the data in case of reallocating the buffer. Default is true.
* @memberof GW_FRAME
*/
AllocBuffer(BufferSize, CopyData = true) {
const oldData = this.data;
this.data = Buffer.alloc(BufferSize + this.offset);
this.data.writeUInt16BE(this.Command, C_BUFFERLEN_SIZE);
this.data.writeUInt8(this.data.byteLength, 0);
if (typeof oldData !== "undefined" && CopyData === true) {
// Copy old data into new buffer
const copyBufferLength = Math.min(oldData.byteLength, this.data.byteLength) - this.offset;
if (copyBufferLength > 0) {
oldData.copy(this.data, this.offset, this.offset, this.offset + copyBufferLength);
}
}
}
data;
get Data() {
return this.data;
}
}
export class GW_FRAME_COMMAND_REQ extends GW_FRAME_REQ {
SessionID;
constructor(BufferSize) {
super(BufferSize);
this.SessionID = getNextSessionID();
}
}
export class GW_FRAME_RCV extends GW_FRAME {
Data;
constructor(Data) {
super();
this.Data = Data;
const command = Data.readUInt16BE(C_BUFFERLEN_SIZE);
// Check command
this.CheckCommand(command);
// Remove command and length from Buffer
this.Data = Data.subarray(C_BUFFERLEN_SIZE + C_COMMAND_SIZE);
}
CheckCommand(command) {
if (command !== this.Command)
throw new Error(`Command from buffer (${command}) doesn't match command of frame (${this.Command}).`);
}
}
export class GW_FRAME_CFM extends GW_FRAME_RCV {
}
export class GW_FRAME_NTF extends GW_FRAME_RCV {
}
/**
* Reads a zero-terminated string from the buffer.
*
* @export
* @param {Buffer} data The buffer that contains the string data.
* @returns {string} Returns the string data.
*/
export function readZString(data) {
return data.toString("utf8").split("\0", 1)[0];
}
export class KLF200Protocol {
static ProtocolID = 0;
static Encode(data) {
const result = Buffer.alloc(data.byteLength + 2); // +1 for ProtocolID and +1 for CRC byte
// Set ProtocolID
result.writeUInt8(this.ProtocolID, 0);
// Write data
data.copy(result, 1);
// Calculate CRC
let CRC = 0;
for (let index = 0; index < result.byteLength - 1; index++) {
CRC ^= result[index];
}
// Write CRC
result.writeUInt8(CRC, result.byteLength - 1);
return result;
}
static Decode(data) {
// Check ProtocolID
if (data[0] !== this.ProtocolID) {
throw new Error("Invalid ProtocolID.");
}
// Calculate CRC
let CRC = 0;
for (let index = 0; index < data.byteLength - 1; index++) {
CRC ^= data[index];
}
if (CRC !== data[data.byteLength - 1]) {
throw new Error("CRC error");
}
const result = Buffer.alloc(data.byteLength - 2);
data.copy(result, 0, 1, data.byteLength - 1);
return result;
}
}
export const SLIP_END = 0xc0;
const SLIP_ESC = 0xdb;
const SLIP_ESC_END = 0xdc;
const SLIP_ESC_ESC = 0xdd;
export class SLIPProtocol {
static Encode(data) {
const resultBuffer = Buffer.alloc(data.byteLength * 2 + 2); // Max. possible size if all bytes have to be prefixed
let resultLength = 0;
// Write END mark
resultBuffer[resultLength++] = SLIP_END;
// Mask END and ESC characters
for (let i = 0; i < data.byteLength; i++) {
const dataByte = data[i];
switch (dataByte) {
case SLIP_END:
resultBuffer.writeUInt8(SLIP_ESC, resultLength++);
resultBuffer.writeUInt8(SLIP_ESC_END, resultLength++);
break;
case SLIP_ESC:
resultBuffer.writeUInt8(SLIP_ESC, resultLength++);
resultBuffer.writeUInt8(SLIP_ESC_ESC, resultLength++);
break;
default:
resultBuffer.writeUInt8(dataByte, resultLength++);
break;
}
}
// Write END mark
resultBuffer[resultLength++] = SLIP_END;
return resultBuffer.subarray(0, resultLength);
}
static Decode(data) {
// Check END mark at start and END
if (data[0] !== SLIP_END || data[data.byteLength - 1] !== SLIP_END)
throw new Error("Missing END mark.");
const resultBuffer = Buffer.alloc(data.byteLength - 2); // Max. possible size without END mark at start and end
let resultLength = 0;
for (let i = 1; i < data.byteLength - 1; i++) {
const dataByte = data[i];
switch (dataByte) {
case SLIP_ESC:
const nextDataByte = data[++i];
switch (nextDataByte) {
case SLIP_ESC_ESC:
resultBuffer.writeUInt8(SLIP_ESC, resultLength++);
break;
case SLIP_ESC_END:
resultBuffer.writeUInt8(SLIP_END, resultLength++);
break;
default:
throw new Error("Invalid SLIP special character.");
}
break;
default:
resultBuffer.writeUInt8(dataByte, resultLength++);
break;
}
}
return resultBuffer.subarray(0, resultLength);
}
}
//# sourceMappingURL=common.js.map