UNPKG

knxultimate

Version:

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

154 lines (139 loc) 4.76 kB
import KNXHeader from './KNXHeader' import KNXSearchRequest from './KNXSearchRequest' import KNXSearchResponse from './KNXSearchResponse' import KNXDescriptionRequest from './KNXDescriptionRequest' import KNXDescriptionResponse from './KNXDescriptionResponse' import KNXConnectRequest from './KNXConnectRequest' import KNXConnectResponse from './KNXConnectResponse' import KNXConnectionStateRequest from './KNXConnectionStateRequest' import KNXConnectionStateResponse from './KNXConnectionStateResponse' import KNXDisconnectRequest from './KNXDisconnectRequest' import KNXDisconnectResponse from './KNXDisconnectResponse' import KNXTunnelingRequest from './KNXTunnelingRequest' import KNXTunnelingAck from './KNXTunnelingAck' import KNXRoutingIndication from './KNXRoutingIndication' import KNXSecureSessionRequest from './KNXSecureSessionRequest' import HPAI from './HPAI' import { KNX_CONSTANTS } from './KNXConstants' import TunnelCRI from './TunnelCRI' import CEMIMessage from './cEMI/CEMIMessage' export type KnxResponse = | KNXConnectResponse | KNXSearchResponse | KNXDescriptionResponse | KNXConnectionStateResponse | KNXDisconnectResponse | KNXTunnelingAck | KNXRoutingIndication export type KnxRequest = | KNXConnectRequest | KNXSearchRequest | KNXDescriptionRequest | KNXConnectionStateRequest | KNXDisconnectRequest | KNXTunnelingRequest export type KnxMessage = KnxResponse | KnxRequest export default class KNXProtocol { static parseMessage(buffer: Buffer) { const knxHeader: KNXHeader = KNXHeader.createFromBuffer(buffer) const knxData: Buffer = buffer.subarray(knxHeader.headerLength) let knxMessage: KnxMessage switch (knxHeader.service_type) { case KNX_CONSTANTS.SEARCH_REQUEST: knxMessage = KNXSearchRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.SEARCH_RESPONSE: knxMessage = KNXSearchResponse.createFromBuffer(knxData) break case KNX_CONSTANTS.DESCRIPTION_REQUEST: knxMessage = KNXDescriptionRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.DESCRIPTION_RESPONSE: knxMessage = KNXDescriptionResponse.createFromBuffer(knxData) break case KNX_CONSTANTS.CONNECT_REQUEST: knxMessage = KNXConnectRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.CONNECT_RESPONSE: knxMessage = KNXConnectResponse.createFromBuffer(knxData) break case KNX_CONSTANTS.CONNECTIONSTATE_REQUEST: knxMessage = KNXConnectionStateRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.CONNECTIONSTATE_RESPONSE: knxMessage = KNXConnectionStateResponse.createFromBuffer(knxData) break case KNX_CONSTANTS.DISCONNECT_REQUEST: knxMessage = KNXDisconnectRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.DISCONNECT_RESPONSE: knxMessage = KNXDisconnectResponse.createFromBuffer(knxData) break case KNX_CONSTANTS.TUNNELING_REQUEST: knxMessage = KNXTunnelingRequest.createFromBuffer(knxData) break case KNX_CONSTANTS.TUNNELING_ACK: knxMessage = KNXTunnelingAck.createFromBuffer(knxData) break case KNX_CONSTANTS.ROUTING_INDICATION: knxMessage = KNXRoutingIndication.createFromBuffer(knxData) break case KNX_CONSTANTS.ROUTING_LOST_MESSAGE: break } return { knxHeader, knxMessage, knxData } } static newKNXSearchRequest(hpai: HPAI) { return new KNXSearchRequest(hpai) } static newKNXDescriptionRequest(hpai: HPAI) { return new KNXDescriptionRequest(hpai) } static newKNXConnectRequest( cri: TunnelCRI, hpaiControl: HPAI = HPAI.NULLHPAI, hpaiData: HPAI = HPAI.NULLHPAI, ) { return new KNXConnectRequest(cri, hpaiControl, hpaiData) } static newKNXConnectionStateRequest( channelID: number, hpaiControl: HPAI = HPAI.NULLHPAI, ) { return new KNXConnectionStateRequest(channelID, hpaiControl) } static newKNXDisconnectRequest( channelID: number, hpaiControl: HPAI = HPAI.NULLHPAI, ) { return new KNXDisconnectRequest(channelID, hpaiControl) } static newKNXDisconnectResponse(channelID: number, status: number) { return new KNXDisconnectResponse(channelID, status) } static newKNXTunnelingACK( channelID: number, seqCounter: number, status: number, ) { return new KNXTunnelingAck(channelID, seqCounter, status) } static newKNXTunnelingRequest( channelID: number, seqCounter: number, cEMIMessage: CEMIMessage, ) { return new KNXTunnelingRequest(channelID, seqCounter, cEMIMessage) } static newKNXRoutingIndication(cEMIMessage: CEMIMessage) { return new KNXRoutingIndication(cEMIMessage) } static newKNXSecureSessionRequest( cri: TunnelCRI, hpaiData: HPAI = HPAI.NULLHPAI, jKNXSecureKeyring?: any, ) { return new KNXSecureSessionRequest(cri, hpaiData, jKNXSecureKeyring) } }