UNPKG

zigbee-on-host

Version:

ZigBee stack designed to run on a host and communicate with a radio co-processor (RCP)

228 lines (227 loc) 8.25 kB
import { type ZigbeeSecurityHeader } from "./zigbee.js"; /** * const enum with sole purpose of avoiding "magic numbers" in code for well-known values */ export declare const enum ZigbeeNWKConsts { FRAME_MAX_SIZE = 116, /** no security */ HEADER_MIN_SIZE = 8, HEADER_MAX_SIZE = 30, PAYLOAD_MIN_SIZE = 86, PAYLOAD_MAX_SIZE = 108, /** Re: 053474r06ZB_TSC-ZigBeeSpecification.pdf */ /** Re: 053474r17ZB_TSC-ZigBeeSpecification.pdf */ VERSION_2007 = 2, VERSION_GREEN_POWER = 3, /** ZigBee 2004 only. */ /** ZigBee 2006 and later */ ROUTE_OPTION_MCAST = 64, /** ZigBee 2007 and later (route request only). */ ROUTE_OPTION_DEST_EXT = 32, /** ZigBee 2007 and later (route request only). */ ROUTE_OPTION_MANY_MASK = 24, /** ZigBee 2007 and layer (route reply only). */ ROUTE_OPTION_RESP_EXT = 32, /** ZigBee 2007 and later (route reply only). */ ROUTE_OPTION_ORIG_EXT = 16, ROUTE_OPTION_MANY_NONE = 0, ROUTE_OPTION_MANY_REC = 1, ROUTE_OPTION_MANY_NOREC = 2, CMD_ROUTE_OPTION_DEST_EXT = 32, CMD_ROUTE_OPTION_MANY_MASK = 24, CMD_ROUTE_OPTION_RESP_EXT = 32, CMD_ROUTE_OPTION_ORIG_EXT = 16, CMD_ROUTE_OPTION_MANY_NONE = 0, CMD_ROUTE_OPTION_MANY_REC = 1, CMD_ROUTE_OPTION_MANY_NOREC = 2, CMD_LEAVE_OPTION_REMOVE_CHILDREN = 128, CMD_LEAVE_OPTION_REQUEST = 64, CMD_LEAVE_OPTION_REJOIN = 32, CMD_LINK_OPTION_LAST_FRAME = 64, CMD_LINK_OPTION_FIRST_FRAME = 32, CMD_LINK_OPTION_COUNT_MASK = 31, CMD_LINK_INCOMING_COST_MASK = 7, CMD_LINK_OUTGOING_COST_MASK = 112, CMD_NWK_REPORT_COUNT_MASK = 31, CMD_NWK_REPORT_ID_MASK = 224, CMD_NWK_REPORT_ID_PAN_CONFLICT = 0, CMD_NWK_UPDATE_COUNT_MASK = 31, CMD_NWK_UPDATE_ID_MASK = 224, CMD_NWK_UPDATE_ID_PAN_UPDATE = 0, CMD_ED_TIMEO_RSP_PRNT_INFO_MAC_DATA_POLL_KEEPAL_SUPP = 1, CMD_ED_TIMEO_RSP_PRNT_INFO_ED_TIMOU_REQ_KEEPAL_SUPP = 2, CMD_ED_TIMEO_RSP_PRNT_INFO_PWR_NEG_SUPP = 4, CMD_NWK_LINK_PWR_DELTA_TYPE_MASK = 3, ASSOC_STATUS_ADDR_CONFLICT = 240, FCF_FRAME_TYPE = 3, FCF_VERSION = 60, FCF_DISCOVER_ROUTE = 192, /** ZigBee 2006 and Later */ FCF_MULTICAST = 256, FCF_SECURITY = 512, /** ZigBee 2006 and Later */ FCF_SOURCE_ROUTE = 1024, /** ZigBee 2006 and Later */ FCF_EXT_DEST = 2048, /** ZigBee 2006 and Later */ FCF_EXT_SOURCE = 4096, /** ZigBee PRO r21 */ FCF_END_DEVICE_INITIATOR = 8192, MCAST_MODE = 3, MCAST_RADIUS = 28, MCAST_MAX_RADIUS = 224 } /** ZigBee NWK FCF Frame Types */ export declare const enum ZigbeeNWKFrameType { DATA = 0, CMD = 1, INTERPAN = 3 } /** ZigBee NWK Discovery Modes. */ export declare const enum ZigbeeNWKRouteDiscovery { SUPPRESS = 0, ENABLE = 1, FORCE = 3 } export declare const enum ZigbeeNWKMulticastMode { NONMEMBER = 0, MEMBER = 1 } export declare const enum ZigbeeNWKRelayType { NO_RELAY = 0, RELAY_UPSTREAM = 1, RELAY_DOWNSTREAM = 2 } /** ZigBee NWK Command Types */ export declare const enum ZigbeeNWKCommandId { ROUTE_REQ = 1, ROUTE_REPLY = 2, NWK_STATUS = 3, LEAVE = 4, ROUTE_RECORD = 5, REJOIN_REQ = 6, REJOIN_RESP = 7, LINK_STATUS = 8, NWK_REPORT = 9, NWK_UPDATE = 10, ED_TIMEOUT_REQUEST = 11, ED_TIMEOUT_RESPONSE = 12, LINK_PWR_DELTA = 13, COMMISSIONING_REQUEST = 14, COMMISSIONING_RESPONSE = 15 } /** Network Status Code Definitions. */ export declare enum ZigbeeNWKStatus { /** @deprecated in R23, should no longer be sent, but still processed (same as @see LINK_FAILURE ) */ LEGACY_NO_ROUTE_AVAILABLE = 0, /** @deprecated in R23, should no longer be sent, but still processed (same as @see LINK_FAILURE ) */ LEGACY_LINK_FAILURE = 1, /** This link code indicates a failure to route across a link. */ LINK_FAILURE = 2, /** * The failure occurred as a result of a failure in the RF link to the device’s parent. * This status is only used locally on a device to indicate loss of communication with the parent. */ PARENT_LINK_FAILURE = 9, /** Source routing has failed, probably indicating a link failure in one of the source route’s links. */ SOURCE_ROUTE_FAILURE = 11, /** A route established as a result of a many-to-one route request has failed. */ MANY_TO_ONE_ROUTE_FAILURE = 12, /** The address in the destination address field has been determined to be in use by two or more devices. */ ADDRESS_CONFLICT = 13, /** The operational network PAN identifier of the device has been updated. */ PANID_UPDATE = 15, /** The network address of the local device has been updated. */ NETWORK_ADDRESS_UPDATE = 16, /** The NWK command ID is not known to the device. */ UNKNOWN_COMMAND = 19, /** Notification to the local application that a PAN ID Conflict Report has been received by the local Network Manager. */ PANID_CONFLICT_REPORT = 20 } export declare const enum ZigbeeNWKManyToOne { /** The route request is not a many-to-one route request. */ DISABLED = 0, /** The route request is a many-to-one route request and the sender supports a route record table. */ WITH_SOURCE_ROUTING = 1, /** The route request is a many-to-one route request and the sender does not support a route record table. */ WITHOUT_SOURCE_ROUTING = 2 } export declare const enum ZigbeeNWKRouteStatus { ACTIVE = 0, DISCOVERY_UNDERWAY = 1, DISCOVERY_FAILED = 2, INACTIVE = 3 } export type ZigbeeNWKLinkStatus = { /** uint16_t */ address: number; /** LB uint8_t */ incomingCost: number; /** HB uint8_t */ outgoingCost: number; }; /** * Frame Control Field: 0x0248, Frame Type: Data, Discover Route: Enable, Security Data * .... .... .... ..00 = Frame Type: Data (0x0) * .... .... ..00 10.. = Protocol Version: 2 * .... .... 01.. .... = Discover Route: Enable (0x1) * .... ...0 .... .... = Multicast: False * .... ..1. .... .... = Security: True * .... .0.. .... .... = Source Route: False * .... 0... .... .... = Destination: False * ...0 .... .... .... = Extended Source: False * ..0. .... .... .... = End Device Initiator: False */ export type ZigbeeNWKFrameControl = { frameType: ZigbeeNWKFrameType; protocolVersion: number; discoverRoute: ZigbeeNWKRouteDiscovery; /** ZigBee 2006 and Later @deprecated */ multicast?: boolean; security: boolean; /** ZigBee 2006 and Later */ sourceRoute: boolean; /** ZigBee 2006 and Later */ extendedDestination: boolean; /** ZigBee 2006 and Later */ extendedSource: boolean; /** ZigBee PRO r21 */ endDeviceInitiator: boolean; }; export type ZigbeeNWKHeader = { frameControl: ZigbeeNWKFrameControl; destination16?: number; source16?: number; radius?: number; seqNum?: number; destination64?: bigint; source64?: bigint; relayIndex?: number; relayAddresses?: number[]; securityHeader?: ZigbeeSecurityHeader; }; /** * if the security subfield is set to 1 in the frame control field, the frame payload is protected as defined by the security suite selected for that relationship. * * Octets: variable */ export type ZigbeeNWKPayload = Buffer; export declare function decodeZigbeeNWKFrameControl(data: Buffer, offset: number): [ZigbeeNWKFrameControl, offset: number]; export declare function decodeZigbeeNWKHeader(data: Buffer, offset: number, frameControl: ZigbeeNWKFrameControl): [ZigbeeNWKHeader, offset: number]; /** * * @param data * @param offset * @param decryptKey If undefined, use default pre-hashed * @param macSource64 * @param frameControl * @param header */ export declare function decodeZigbeeNWKPayload(data: Buffer, offset: number, decryptKey: Buffer | undefined, macSource64: bigint | undefined, frameControl: ZigbeeNWKFrameControl, header: ZigbeeNWKHeader): ZigbeeNWKPayload; /** * @param header * @param payload * @param securityHeader * @param encryptKey If undefined, and security=true, use default pre-hashed */ export declare function encodeZigbeeNWKFrame(header: ZigbeeNWKHeader, payload: ZigbeeNWKPayload, securityHeader?: ZigbeeSecurityHeader, encryptKey?: Buffer): Buffer;