@zwave-js/nvmedit 15.25.0 → 15.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/convert.js.map +1 -1
- package/build/cjs/lib/nvm3/files/NVMFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/NVMFile.js.map +2 -2
- package/build/cjs/lib/nvm3/utils.d.ts +1 -1
- package/build/cjs/lib/nvm3/utils.js.map +2 -2
- package/build/esm/convert.js +1 -1
- package/build/esm/convert.js.map +1 -1
- package/build/esm/lib/nvm3/files/NVMFile.d.ts +2 -2
- package/build/esm/lib/nvm3/files/NVMFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/NVMFile.js.map +1 -1
- package/build/esm/lib/nvm3/utils.d.ts +1 -1
- package/build/esm/lib/nvm3/utils.d.ts.map +1 -1
- package/build/esm/lib/nvm3/utils.js.map +1 -1
- package/package.json +3 -3
package/build/cjs/convert.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/convert.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tControllerCapabilityFlags,\n\tMAX_NODES,\n\tNodeIDType,\n\ttype NodeProtocolInfo,\n\tNodeType,\n\tRFRegion,\n\tstripUndefined,\n} from \"@zwave-js/core\";\nimport {\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core/error\";\nimport {\n\tBytes,\n\ttype BytesView,\n\tbuffer2hex,\n\tcloneDeep,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport type { SemVer } from \"semver\";\nimport semverGte from \"semver/functions/gte.js\";\nimport semverLt from \"semver/functions/lt.js\";\nimport semverLte from \"semver/functions/lte.js\";\nimport semverParse from \"semver/functions/parse.js\";\nimport { MAX_PROTOCOL_FILE_FORMAT, SUC_MAX_UPDATES } from \"./consts.js\";\nimport { NVM3, type NVM3Meta } from \"./lib/NVM3.js\";\nimport { NVM500 } from \"./lib/NVM500.js\";\nimport {\n\ttype Route,\n\ttype RouteCache,\n\tgetEmptyRoute,\n} from \"./lib/common/routeCache.js\";\nimport type { SUCUpdateEntry } from \"./lib/common/sucUpdateEntry.js\";\nimport { NVMMemoryIO } from \"./lib/io/NVMMemoryIO.js\";\nimport { NVM3Adapter } from \"./lib/nvm3/adapter.js\";\nimport {\n\tZWAVE_APPLICATION_NVM_SIZE,\n\tZWAVE_PROTOCOL_NVM_SIZE,\n\tZWAVE_SHARED_NVM_SIZE,\n} from \"./lib/nvm3/consts.js\";\nimport {\n\ttype ApplicationNameFile,\n\tApplicationNameFileID,\n} from \"./lib/nvm3/files/ApplicationNameFile.js\";\nimport {\n\tApplicationCCsFile,\n\tApplicationCCsFileID,\n\ttype ApplicationDataFile,\n\tApplicationDataFileID,\n\tApplicationRFConfigFile,\n\tApplicationRFConfigFileID,\n\tApplicationTypeFile,\n\tApplicationTypeFileID,\n\tApplicationVersionFile,\n\tApplicationVersionFile800,\n\tApplicationVersionFile800ID,\n\tApplicationVersionFileID,\n\tControllerInfoFile,\n\tControllerInfoFileID,\n\ttype ControllerInfoFileOptions,\n\ttype LRNodeInfo,\n\ttype LRNodeInfoFileV5,\n\tNVMFile,\n\ttype NodeInfo,\n\ttype NodeInfoFileV0,\n\ttype NodeInfoFileV1,\n\ttype ProtocolAppRouteLockNodeMaskFile,\n\tProtocolAppRouteLockNodeMaskFileID,\n\ttype ProtocolLRNodeListFile,\n\tProtocolLRNodeListFileID,\n\ttype ProtocolNodeListFile,\n\tProtocolNodeListFileID,\n\ttype ProtocolPendingDiscoveryNodeMaskFile,\n\tProtocolPendingDiscoveryNodeMaskFileID,\n\ttype ProtocolPreferredRepeatersFile,\n\tProtocolPreferredRepeatersFileID,\n\tProtocolRouteCacheExistsNodeMaskFile,\n\tProtocolRouteCacheExistsNodeMaskFileID,\n\ttype ProtocolRouteSlaveSUCNodeMaskFile,\n\tProtocolRouteSlaveSUCNodeMaskFileID,\n\ttype ProtocolSUCPendingUpdateNodeMaskFile,\n\tProtocolSUCPendingUpdateNodeMaskFileID,\n\tProtocolVersionFile,\n\tProtocolVersionFileID,\n\ttype ProtocolVirtualNodeMaskFile,\n\tProtocolVirtualNodeMaskFileID,\n\ttype RouteCacheFileV0,\n\ttype RouteCacheFileV1,\n\tSUCUpdateEntriesFileIDV0,\n\ttype SUCUpdateEntriesFileV0,\n\ttype SUCUpdateEntriesFileV5,\n\tSUC_UPDATES_PER_FILE_V5,\n\tnodeIdToLRNodeInfoFileIDV5,\n\tnodeIdToNodeInfoFileIDV0,\n\tnodeIdToNodeInfoFileIDV1,\n\tnodeIdToRouteCacheFileIDV0,\n\tnodeIdToRouteCacheFileIDV1,\n\tsucUpdateIndexToSUCUpdateEntriesFileIDV5,\n} from \"./lib/nvm3/files/index.js\";\nimport type { NVM3Object } from \"./lib/nvm3/object.js\";\nimport { dumpNVM, mapToObject } from \"./lib/nvm3/utils.js\";\nimport { NVM500Adapter } from \"./lib/nvm500/adapter.js\";\nimport { nvm500Impls } from \"./lib/nvm500/impls/index.js\";\nimport { resolveLayout } from \"./lib/nvm500/shared.js\";\nimport type {\n\tNVM500JSON,\n\tNVM500JSONController,\n\tNVM500JSONNode,\n\tNVM500Meta,\n} from \"./nvm500/NVMParser.js\";\n\nexport interface NVMJSON {\n\tformat: number; // protocol file format\n\tapplicationFileFormat?: number;\n\tmeta?: NVM3Meta;\n\tcontroller: NVMJSONController;\n\tnodes: Record<number, NVMJSONNode>;\n\tlrNodes?: Record<number, NVMJSONLRNode>;\n}\n\nexport type NVMJSONWithMeta = NVMJSON & { meta: NVM3Meta };\n\nexport interface NVMJSONController {\n\tprotocolVersion: string;\n\tapplicationVersion: string;\n\thomeId: string;\n\tnodeId: number;\n\tlastNodeId: number;\n\tstaticControllerNodeId: number;\n\tsucLastIndex: number;\n\tcontrollerConfiguration: number;\n\tsucUpdateEntries: SUCUpdateEntry[];\n\tsucAwarenessPushNeeded?: number | null;\n\tmaxNodeId: number;\n\treservedId: number;\n\tsystemState: number;\n\tlastNodeIdLR?: number | null;\n\tmaxNodeIdLR?: number | null;\n\treservedIdLR?: number | null;\n\tprimaryLongRangeChannelId?: number | null;\n\tdcdcConfig?: number | null;\n\trfConfig?: NVMJSONControllerRFConfig | null;\n\tpreferredRepeaters?: number[] | null;\n\n\tisListening: boolean;\n\toptionalFunctionality: boolean;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number;\n\n\tcommandClasses: {\n\t\tincludedInsecurely: CommandClasses[];\n\t\tincludedSecurelyInsecureCCs: CommandClasses[];\n\t\tincludedSecurelySecureCCs: CommandClasses[];\n\t};\n\n\tapplicationData?: string | null;\n\tapplicationName?: string | null;\n}\n\nexport interface NVMJSONControllerRFConfig {\n\trfRegion: RFRegion;\n\ttxPower: number;\n\tmeasured0dBm: number;\n\tenablePTI: number | null;\n\tmaxTXPower: number | null;\n\tnodeIdType: NodeIDType | null;\n}\n\nexport interface NVMJSONNodeWithInfo\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tisVirtual: boolean;\n\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number | null;\n\tneighbors: number[];\n\tsucUpdateIndex: number;\n\n\tappRouteLock: boolean;\n\trouteSlaveSUC: boolean;\n\tsucPendingUpdate: boolean;\n\tpendingDiscovery: boolean;\n\n\tlwr?: Route | null;\n\tnlwr?: Route | null;\n}\n\n// Unlike NVMJSONNodeWithInfo this does not carry any node information\nexport interface NVMJSONVirtualNode {\n\tisVirtual: true;\n}\n\nexport interface NVMJSONLRNode\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n}\n\nexport type NVMJSONNode = NVMJSONNodeWithInfo | NVMJSONVirtualNode;\n\ntype ParsedNVM =\n\t| {\n\t\ttype: 500;\n\t\tjson: Required<NVM500JSON>;\n\t}\n\t| {\n\t\ttype: 700;\n\t\tjson: NVMJSONWithMeta;\n\t}\n\t| {\n\t\ttype: \"unknown\";\n\t};\n\n/**\n * Options influencing how NVM contents should be migrated.\n * By default, all data will be preserved.\n */\nexport interface MigrateNVMOptions {\n\t/** Whether application data will be preserved */\n\tpreserveApplicationData?: boolean;\n\t/** Whether SUC update entries will be preserved */\n\tpreserveSUCUpdateEntries?: boolean;\n\t/** Whether LWR, NLWR and the priority route flag will be preserved */\n\tpreserveRoutes?: boolean;\n\t/** Whether the neighbor table will be preserved */\n\tpreserveNeighbors?: boolean;\n}\n\nexport function nodeHasInfo(node: NVMJSONNode): node is NVMJSONNodeWithInfo {\n\treturn !node.isVirtual || Object.keys(node).length > 1;\n}\n\nfunction createEmptyPhysicalNode(): NVMJSONNodeWithInfo {\n\treturn {\n\t\tisVirtual: false,\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 0,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: false,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t\tneighbors: [],\n\t\tsucUpdateIndex: 0,\n\t\tappRouteLock: false,\n\t\trouteSlaveSUC: false,\n\t\tsucPendingUpdate: false,\n\t\tpendingDiscovery: false,\n\t\tlwr: null,\n\t\tnlwr: null,\n\t};\n}\n\nfunction createEmptyLRNode(): NVMJSONLRNode {\n\treturn {\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 3,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: true,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t};\n}\n\n/** Converts a compressed set of NVM objects to a JSON representation */\nexport function nvmObjectsToJSON(\n\tobjects: ReadonlyMap<number, NVM3Object>,\n): NVMJSON {\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tconst getObject = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object | undefined => {\n\t\tif (typeof id === \"number\") {\n\t\t\treturn objects.get(id);\n\t\t} else {\n\t\t\tfor (const [key, obj] of objects) {\n\t\t\t\tif (id(key)) return obj;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getObjectOrThrow = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object => {\n\t\tconst ret = getObject(id);\n\t\tif (ret) return ret;\n\t\tthrow new ZWaveError(\n\t\t\t`Object${\n\t\t\t\ttypeof id === \"number\" ? ` ${num2hex(id)} (${id})` : \"\"\n\t\t\t} not found!`,\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t};\n\n\tconst getFileOrThrow = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T => {\n\t\tconst obj = getObjectOrThrow(id);\n\t\treturn NVMFile.from(obj.key, obj.data!, fileVersion) as T;\n\t};\n\n\tconst getFile = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T | undefined => {\n\t\tconst obj = getObject(id);\n\t\tif (!obj || !obj.data) return undefined;\n\t\treturn NVMFile.from(obj.key, obj.data, fileVersion) as T;\n\t};\n\n\t// === Protocol NVM files ===\n\n\t// Figure out how to parse the individual files\n\tconst protocolVersionFile = getFileOrThrow<ProtocolVersionFile>(\n\t\tProtocolVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst protocolFileFormat = protocolVersionFile.format;\n\tconst protocolVersion =\n\t\t`${protocolVersionFile.major}.${protocolVersionFile.minor}.${protocolVersionFile.patch}`;\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\t// Figure out which nodes exist\n\tconst nodeIds = getFileOrThrow<ProtocolNodeListFile>(\n\t\tProtocolNodeListFileID,\n\t\tprotocolVersion,\n\t).nodeIds;\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tgetFileOrThrow<ProtocolAppRouteLockNodeMaskFile>(\n\t\t\tProtocolAppRouteLockNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tgetFileOrThrow<ProtocolRouteSlaveSUCNodeMaskFile>(\n\t\t\tProtocolRouteSlaveSUCNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tgetFileOrThrow<ProtocolSUCPendingUpdateNodeMaskFile>(\n\t\t\tProtocolSUCPendingUpdateNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst isVirtual = new Set(\n\t\tgetFileOrThrow<ProtocolVirtualNodeMaskFile>(\n\t\t\tProtocolVirtualNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tgetFileOrThrow<ProtocolPendingDiscoveryNodeMaskFile>(\n\t\t\tProtocolPendingDiscoveryNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeCacheExists = new Set(\n\t\tgetFileOrThrow<ProtocolRouteCacheExistsNodeMaskFile>(\n\t\t\tProtocolRouteCacheExistsNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\tconst rememberOnlyVirtual = () => {\n\t\t\tnodes.set(id, {\n\t\t\t\tisVirtual: true,\n\t\t\t});\n\t\t};\n\n\t\t// Find node info\n\t\tlet nodeInfo: NodeInfo;\n\t\ttry {\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV0(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV0>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfo;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV1(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV1>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfos.find((i) => i.nodeId === id)!;\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (e.message.includes(\"Object not found\")) {\n\t\t\t\trememberOnlyVirtual();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow e;\n\t\t}\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = isVirtual.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\t\tif (routeCacheExists.has(id)) {\n\t\t\tlet routeCache: RouteCache | undefined;\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV0(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV0>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCache;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV1(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV1>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCaches.find((i) => i.nodeId === id);\n\t\t\t}\n\t\t\tif (routeCache) {\n\t\t\t\tnode.lwr = routeCache.lwr;\n\t\t\t\tnode.nlwr = routeCache.nlwr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = getFile<ProtocolLRNodeListFile>(\n\t\tProtocolLRNodeListFileID,\n\t\tprotocolVersion,\n\t)?.nodeIds;\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst fileId = nodeIdToLRNodeInfoFileIDV5(id);\n\t\t\tconst file = getFileOrThrow<LRNodeInfoFileV5>(\n\t\t\t\tfileId,\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tconst { nodeId, ...nodeInfo } = file.nodeInfos.find((i) =>\n\t\t\t\ti.nodeId === id\n\t\t\t)!;\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Now read info about the controller\n\tconst controllerInfoFile = getFileOrThrow<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\tprotocolVersion,\n\t);\n\n\tlet sucUpdateEntries: SUCUpdateEntry[];\n\tif (protocolFileFormat < 5) {\n\t\tsucUpdateEntries = getFileOrThrow<SUCUpdateEntriesFileV0>(\n\t\t\tSUCUpdateEntriesFileIDV0,\n\t\t\tprotocolVersion,\n\t\t).updateEntries;\n\t} else {\n\t\t// V5 has split the entries into multiple files\n\t\tsucUpdateEntries = [];\n\t\tfor (\n\t\t\tlet index = 0;\n\t\t\tindex < SUC_MAX_UPDATES;\n\t\t\tindex += SUC_UPDATES_PER_FILE_V5\n\t\t) {\n\t\t\tconst file = getFile<SUCUpdateEntriesFileV5>(\n\t\t\t\tsucUpdateIndexToSUCUpdateEntriesFileIDV5(index),\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tif (!file) break;\n\t\t\tsucUpdateEntries.push(...file.updateEntries);\n\t\t}\n\t}\n\n\t// === Application NVM files ===\n\n\tconst applicationVersionFile700 = getFile<ApplicationVersionFile>(\n\t\tApplicationVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile800 = getFile<ApplicationVersionFile800>(\n\t\tApplicationVersionFile800ID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile = applicationVersionFile700\n\t\t?? applicationVersionFile800;\n\tif (!applicationVersionFile) {\n\t\tthrow new ZWaveError(\n\t\t\t\"ApplicationVersionFile not found!\",\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t}\n\tconst applicationVersion =\n\t\t`${applicationVersionFile.major}.${applicationVersionFile.minor}.${applicationVersionFile.patch}`;\n\n\tconst rfConfigFile = getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationCCsFile = getFileOrThrow<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationDataFile = getFile<ApplicationDataFile>(\n\t\tApplicationDataFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationTypeFile = getFileOrThrow<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationNameFile = getFile<ApplicationNameFile>(\n\t\tApplicationNameFileID,\n\t\tapplicationVersion,\n\t);\n\n\tconst preferredRepeaters = getFile<ProtocolPreferredRepeatersFile>(\n\t\tProtocolPreferredRepeatersFileID,\n\t\tapplicationVersion,\n\t)?.nodeIds;\n\n\tconst controllerProps = [\n\t\t\"nodeId\",\n\t\t\"lastNodeId\",\n\t\t\"staticControllerNodeId\",\n\t\t\"sucLastIndex\",\n\t\t\"controllerConfiguration\",\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"maxNodeId\",\n\t\t\"reservedId\",\n\t\t\"systemState\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t] as const;\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, controllerProps),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData: applicationDataFile?.applicationData.toString(\"hex\")\n\t\t\t?? null,\n\t\tapplicationName: applicationNameFile?.name ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSON = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t};\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\n\treturn ret;\n}\n\nfunction nvmJSONNodeToNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONNodeWithInfo,\n): NodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t\t\"neighbors\",\n\t\t\t\"sucUpdateIndex\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONLRNodeToLRNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONLRNode,\n): LRNodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONControllerToFileOptions(\n\tctrlr: NVMJSONController,\n): ControllerInfoFileOptions {\n\tconst ret = {\n\t\thomeId: Bytes.from(ctrlr.homeId.replace(/^0x/, \"\"), \"hex\"),\n\t\tnodeId: ctrlr.nodeId,\n\t\tlastNodeId: ctrlr.lastNodeId,\n\t\tstaticControllerNodeId: ctrlr.staticControllerNodeId,\n\t\tsucLastIndex: ctrlr.sucLastIndex,\n\t\tcontrollerConfiguration: ctrlr.controllerConfiguration,\n\t\tmaxNodeId: ctrlr.maxNodeId,\n\t\treservedId: ctrlr.reservedId,\n\t\tsystemState: ctrlr.systemState,\n\t} as unknown as ControllerInfoFileOptions;\n\tif (ctrlr.sucAwarenessPushNeeded != undefined) {\n\t\t// @ts-expect-error We're dealing with a conditional object here\n\t\t// TS doesn't like that.\n\t\tret.sucAwarenessPushNeeded = ctrlr.sucAwarenessPushNeeded;\n\t} else {\n\t\tObject.assign(\n\t\t\tret,\n\t\t\tstripUndefined(\n\t\t\t\tpick(ctrlr, [\n\t\t\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\t\t\"lastNodeIdLR\",\n\t\t\t\t\t\"maxNodeIdLR\",\n\t\t\t\t\t\"reservedIdLR\",\n\t\t\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\t\t\"dcdcConfig\",\n\t\t\t\t]),\n\t\t\t),\n\t\t);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 700+ series stick and returns its JSON representation */\nexport async function nvmToJSON(\n\tbuffer: BytesView,\n\tdebugLogs: boolean = false,\n): Promise<NVMJSONWithMeta> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm3 = new NVM3(io);\n\tconst info = await nvm3.init();\n\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\tif (debugLogs) {\n\t\t// Dump all pages, all raw objects in each page, and each object in its final state\n\t\tawait dumpNVM(nvm3);\n\t}\n\n\tconst firstPageHeader = info.isSharedFileSystem\n\t\t? info.sections.all.pages[0]\n\t\t: info.sections.protocol.pages[0];\n\n\tconst meta: NVM3Meta = {\n\t\tsharedFileSystem: info.isSharedFileSystem,\n\t\t...pick(firstPageHeader, [\n\t\t\t\"pageSize\",\n\t\t\t\"writeSize\",\n\t\t\t\"memoryMapped\",\n\t\t\t\"deviceFamily\",\n\t\t]),\n\t};\n\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tlet protocolFileFormat: number;\n\tlet protocolVersion: string;\n\ttry {\n\t\tprotocolFileFormat = await adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"protocolFileFormat\",\n\t\t}, true);\n\t\tprotocolVersion = await adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"protocolVersion\",\n\t\t}, true);\n\t} catch (e) {\n\t\t// Firmwares based on SDK 7.23.0 and 7.23.1 do not write the protocol format/version to NVM,\n\t\t// so file 0x50000 is missing. Those are out in the wild, so we need to work around this.\n\t\t// There are a few heuristics we can use, assuming that Silabs doesn't break this again in a later version:\n\t\t// - SDK < 7.23.0 are not affected, also 7.23.2+ is fixed\n\t\tlet isSDK723 = true;\n\t\t// - The ApplicationRFConfigFile (0x68) exists and has 9 bytes\n\t\tisSDK723 &&= (await nvm3.get(ApplicationRFConfigFileID))?.length == 9;\n\t\t// - The ApplicationVersionFile800 (0x41000) exists\n\t\tisSDK723 &&= !!(await nvm3.get(ApplicationVersionFile800ID));\n\t\t// - The ProtocolLRNodeListFile (0x5000c) exists\n\t\tisSDK723 &&= !!(await nvm3.get(ProtocolLRNodeListFileID));\n\t\t// - The ControllerInfoFile (0x50004) exists and has 22 bytes\n\t\tisSDK723 &&= (await nvm3.get(ControllerInfoFileID))?.length == 22;\n\n\t\tif (isSDK723) {\n\t\t\t// Remember the expected format\n\t\t\tprotocolVersion = \"7.23.0\";\n\t\t\tprotocolFileFormat = 5;\n\t\t\t// And also mirror it back to the NVM adapter. We never save it to NVM,\n\t\t\t// so we can just set the file.\n\t\t\tadapter.setFile(\n\t\t\t\tnew ProtocolVersionFile({\n\t\t\t\t\tfileVersion: protocolVersion,\n\t\t\t\t\tformat: protocolFileFormat,\n\t\t\t\t\tmajor: 7,\n\t\t\t\t\tminor: 23,\n\t\t\t\t\tpatch: 0,\n\t\t\t\t}),\n\t\t\t);\n\t\t\t// And we need to init the adapter again\n\t\t\tawait adapter[\"init\"]();\n\t\t} else {\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}, true),\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist\n\tconst nodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeIds\",\n\t}, true);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\t// Find node info\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"info\",\n\t\t}, true);\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = virtualNodeIds.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"routes\",\n\t\t});\n\t\tif (routes) {\n\t\t\tnode.lwr = routes.lwr;\n\t\t\tnode.nlwr = routes.nlwr;\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lrNodeIds\",\n\t});\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst nodeInfo = await adapter.get({\n\t\t\t\tdomain: \"lrnode\",\n\t\t\t\tnodeId: id,\n\t\t\t\ttype: \"info\",\n\t\t\t}, true);\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Read info about the controller\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationVersion = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationVersion\",\n\t}, true);\n\n\tconst applicationFileFormat = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationFileFormat\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst applicationName = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationName\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t});\n\n\t// The following are a bit awkward to read one by one, so we just take the files\n\tconst controllerInfoFile = await adapter.getFile<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\ttrue,\n\t);\n\tconst rfConfigFile = await adapter.getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t);\n\tconst applicationCCsFile = await adapter.getFile<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\ttrue,\n\t);\n\tconst applicationTypeFile = await adapter.getFile<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\ttrue,\n\t);\n\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, [\n\t\t\t\"nodeId\",\n\t\t\t\"lastNodeId\",\n\t\t\t\"staticControllerNodeId\",\n\t\t\t\"sucLastIndex\",\n\t\t\t\"controllerConfiguration\",\n\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\"maxNodeId\",\n\t\t\t\"reservedId\",\n\t\t\t\"systemState\",\n\t\t\t\"lastNodeIdLR\",\n\t\t\t\"maxNodeIdLR\",\n\t\t\t\"reservedIdLR\",\n\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\"dcdcConfig\",\n\t\t]),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t\tapplicationName: applicationName ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSONWithMeta = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t\tmeta,\n\t};\n\tif (applicationFileFormat !== 0) {\n\t\tret.applicationFileFormat = applicationFileFormat;\n\t}\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 500-series stick and returns its JSON representation */\nexport async function nvm500ToJSON(\n\tbuffer: BytesView,\n): Promise<Required<NVM500JSON>> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm = new NVM500(io);\n\n\tconst info = await nvm.init();\n\tconst meta: NVM500Meta = {\n\t\tlibrary: info.library,\n\t\t...pick(info.nvmDescriptor, [\n\t\t\t\"manufacturerID\",\n\t\t\t\"firmwareID\",\n\t\t\t\"productType\",\n\t\t\t\"productID\",\n\t\t]),\n\t};\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}) ?? [],\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist along with their info\n\tconst nodes: Record<number, NVM500JSONNode> = {};\n\tfor (let nodeId = 1; nodeId <= MAX_NODES; nodeId++) {\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"info\",\n\t\t});\n\t\tconst isVirtual = virtualNodeIds.has(nodeId);\n\t\tif (!nodeInfo) {\n\t\t\tif (isVirtual) {\n\t\t\t\tnodes[nodeId] = { isVirtual: true };\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"routes\",\n\t\t});\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete nodeInfo.nodeId;\n\n\t\tnodes[nodeId] = {\n\t\t\t...nodeInfo,\n\t\t\tspecificDeviceClass: nodeInfo.specificDeviceClass ?? null,\n\t\t\tisVirtual,\n\n\t\t\tappRouteLock: appRouteLock.has(nodeId),\n\t\t\trouteSlaveSUC: routeSlaveSUC.has(nodeId),\n\t\t\tsucPendingUpdate: sucPendingUpdate.has(nodeId),\n\t\t\tpendingDiscovery: pendingDiscovery.has(nodeId),\n\n\t\t\tlwr: routes?.lwr ?? null,\n\t\t\tnlwr: routes?.nlwr ?? null,\n\t\t};\n\t}\n\n\t// Read info about the controller\n\tconst ownNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeId\",\n\t}, true);\n\n\tconst ownHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"homeId\",\n\t}, true);\n\n\tlet learnedHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"learnedHomeId\",\n\t});\n\tif (learnedHomeId?.length === 4 && learnedHomeId.every((b) => b === 0)) {\n\t\tlearnedHomeId = undefined;\n\t}\n\n\tconst lastNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lastNodeId\",\n\t}, true);\n\n\tconst maxNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"maxNodeId\",\n\t}, true);\n\n\tconst reservedId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"reservedId\",\n\t}, true);\n\n\tconst staticControllerNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"staticControllerNodeId\",\n\t}, true);\n\n\tconst sucLastIndex = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucLastIndex\",\n\t}, true);\n\n\tconst controllerConfiguration = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"controllerConfiguration\",\n\t}, true);\n\n\tconst commandClasses = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"commandClasses\",\n\t}, true);\n\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t}, true);\n\n\tconst systemState = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"systemState\",\n\t});\n\n\tconst watchdogStarted = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"watchdogStarted\",\n\t}, true);\n\n\tconst powerLevelNormal = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelNormal\",\n\t});\n\tconst powerLevelLow = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelLow\",\n\t});\n\tconst powerMode = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerMode\",\n\t});\n\tconst powerModeExtintEnable = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeExtintEnable\",\n\t});\n\tconst powerModeWutTimeout = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeWutTimeout\",\n\t});\n\n\tconst controller: NVM500JSONController = {\n\t\tprotocolVersion: info.nvmDescriptor.protocolVersion,\n\t\tapplicationVersion: info.nvmDescriptor.firmwareVersion,\n\t\townHomeId: buffer2hex(ownHomeId),\n\t\tlearnedHomeId: learnedHomeId\n\t\t\t? buffer2hex(learnedHomeId)\n\t\t\t: null,\n\t\tnodeId: ownNodeId,\n\t\tlastNodeId,\n\t\tstaticControllerNodeId,\n\t\tsucLastIndex,\n\t\tcontrollerConfiguration,\n\t\tsucUpdateEntries,\n\t\tmaxNodeId,\n\t\treservedId,\n\t\tsystemState,\n\t\twatchdogStarted,\n\t\trfConfig: {\n\t\t\tpowerLevelNormal,\n\t\t\tpowerLevelLow,\n\t\t\tpowerMode,\n\t\t\tpowerModeExtintEnable,\n\t\t\tpowerModeWutTimeout,\n\t\t},\n\t\tpreferredRepeaters,\n\t\tcommandClasses,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t};\n\n\treturn {\n\t\tformat: 500,\n\t\tmeta,\n\t\tcontroller,\n\t\tnodes,\n\t};\n}\n\nexport async function jsonToNVM(\n\tjson: NVMJSON,\n\ttargetSDKVersion: string,\n): Promise<BytesView> {\n\tconst parsedVersion = semverParse(targetSDKVersion);\n\tif (!parsedVersion) {\n\t\tthrow new ZWaveError(\n\t\t\t`Invalid SDK version: ${targetSDKVersion}`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\t// Erase the NVM\n\tconst sharedFileSystem = json.meta?.sharedFileSystem;\n\tconst nvmSize = sharedFileSystem\n\t\t? ZWAVE_SHARED_NVM_SIZE\n\t\t: (ZWAVE_APPLICATION_NVM_SIZE + ZWAVE_PROTOCOL_NVM_SIZE);\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm3 = new NVM3(io);\n\tawait nvm3.erase(json.meta);\n\n\tconst serializeFile = async (file: NVMFile) => {\n\t\tconst { key, data } = file.serialize();\n\t\tawait nvm3.set(key, data);\n\t};\n\n\t// Figure out which SDK version we are targeting\n\tlet targetApplicationVersion: SemVer;\n\tlet targetProtocolVersion: SemVer;\n\tlet targetProtocolFormat: number;\n\n\t// We currently support application version migrations up to:\n\tconst HIGHEST_SUPPORTED_SDK_VERSION = \"7.21.0\";\n\t// For all higher ones, set the highest version we support and let the controller handle the migration itself\n\tif (semverLte(targetSDKVersion, HIGHEST_SUPPORTED_SDK_VERSION)) {\n\t\ttargetApplicationVersion = semverParse(targetSDKVersion)!;\n\t} else {\n\t\ttargetApplicationVersion = semverParse(HIGHEST_SUPPORTED_SDK_VERSION)!;\n\t}\n\n\t// The protocol version file only seems to be updated when the format of the protocol file system changes\n\t// Once again, we simply set the highest version we support here and let the controller handle any potential migration\n\tif (semverGte(targetSDKVersion, \"7.19.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.19.0\")!;\n\t\ttargetProtocolFormat = 5;\n\t} else if (semverGte(targetSDKVersion, \"7.17.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.17.0\")!;\n\t\ttargetProtocolFormat = 4;\n\t} else if (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.15.3\")!;\n\t\ttargetProtocolFormat = 3;\n\t} else if (semverGte(targetSDKVersion, \"7.12.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.12.0\")!;\n\t\ttargetProtocolFormat = 2;\n\t} else if (semverGte(targetSDKVersion, \"7.11.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.11.0\")!;\n\t\ttargetProtocolFormat = 1;\n\t} else {\n\t\ttargetProtocolVersion = semverParse(\"7.0.0\")!;\n\t\ttargetProtocolFormat = 0;\n\t}\n\n\tconst target = cloneDeep(json);\n\ttarget.controller.protocolVersion = targetProtocolVersion.format();\n\ttarget.format = targetProtocolFormat;\n\ttarget.controller.applicationVersion = parsedVersion.format();\n\n\t// Write application and protocol version files, because they are required\n\t// for the NVM3 adapter to work.\n\tconst ApplicationVersionConstructor = sharedFileSystem\n\t\t? ApplicationVersionFile800\n\t\t: ApplicationVersionFile;\n\tconst applVersionFile = new ApplicationVersionConstructor({\n\t\tformat: 0,\n\t\tmajor: targetApplicationVersion.major,\n\t\tminor: targetApplicationVersion.minor,\n\t\tpatch: targetApplicationVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(applVersionFile);\n\n\tconst protocolVersionFile = new ProtocolVersionFile({\n\t\tformat: targetProtocolFormat,\n\t\tmajor: targetProtocolVersion.major,\n\t\tminor: targetProtocolVersion.minor,\n\t\tpatch: targetProtocolVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(protocolVersionFile);\n\t{\n\t\tconst { key, data } = protocolVersionFile.serialize();\n\t\tawait nvm3.set(key, data);\n\t}\n\n\t// Now use the adapter where possible. Some properties have to be set together though,\n\t// so we set the files directly\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\t// Start with the application data\n\n\tconst applTypeFile = new ApplicationTypeFile({\n\t\t...pick(target.controller, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applTypeFile);\n\n\tconst applCCsFile = new ApplicationCCsFile({\n\t\t...pick(target.controller.commandClasses, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applCCsFile);\n\n\t// When converting it can be that the rfConfig doesn't exist. Make sure\n\t// that it is initialized with proper defaults.\n\ttarget.controller.rfConfig ??= {\n\t\trfRegion: RFRegion[\"Default (EU)\"],\n\t\ttxPower: 0.0,\n\t\tmeasured0dBm: +3.3,\n\t\tenablePTI: null,\n\t\tmaxTXPower: null,\n\t\tnodeIdType: null,\n\t};\n\n\t// Make sure the RF config format matches the application version.\n\t// Otherwise, the controller will ignore the file and not accept any changes to the RF config\n\tif (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttarget.controller.rfConfig.enablePTI ??= 0;\n\t\ttarget.controller.rfConfig.maxTXPower ??= 14.0;\n\t}\n\tif (semverGte(targetSDKVersion, \"7.21.0\")) {\n\t\ttarget.controller.rfConfig.nodeIdType ??= NodeIDType.Short;\n\t}\n\n\tconst applRFConfigFile = new ApplicationRFConfigFile({\n\t\t...pick(target.controller.rfConfig, [\n\t\t\t\"rfRegion\",\n\t\t\t\"txPower\",\n\t\t\t\"measured0dBm\",\n\t\t]),\n\t\tenablePTI: target.controller.rfConfig.enablePTI ?? undefined,\n\t\tmaxTXPower: target.controller.rfConfig.maxTXPower ?? undefined,\n\t\tnodeIdType: target.controller.rfConfig.nodeIdType ?? undefined,\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applRFConfigFile);\n\n\tif (target.controller.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(target.controller.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// The application name only seems to be used on 800 series with the shared file system\n\tif (target.controller.applicationName && target.meta?.sharedFileSystem) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationName\" },\n\t\t\ttarget.controller.applicationName,\n\t\t);\n\t}\n\n\t// Now the protocol data\n\n\t// TODO: node IDs and LR node IDs should probably be handled by the NVM adapter when\n\t// setting the node info. But then we need to make sure here that the files are guaranteed to exist\n\tconst nodeInfoExists = new Set<number>();\n\tconst lrNodeInfoExists = new Set<number>();\n\tconst virtualNodeIds = new Set<number>();\n\n\tconst appRouteLock = new Set<number>();\n\tconst routeSlaveSUC = new Set<number>();\n\tconst sucPendingUpdate = new Set<number>();\n\tconst pendingDiscovery = new Set<number>();\n\n\t// Ensure that the route cache exists nodemask is written, even when no routes exist\n\tadapter.setFile(\n\t\tnew ProtocolRouteCacheExistsNodeMaskFile({\n\t\t\tnodeIds: [],\n\t\t\tfileVersion: target.controller.protocolVersion,\n\t\t}),\n\t);\n\n\tfor (const [id, node] of Object.entries(target.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.add(nodeId);\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tnodeInfoExists.add(nodeId);\n\t\t\tif (node.isVirtual) virtualNodeIds.add(nodeId);\n\t\t\tif (node.appRouteLock) appRouteLock.add(nodeId);\n\t\t\tif (node.routeSlaveSUC) routeSlaveSUC.add(nodeId);\n\t\t\tif (node.sucPendingUpdate) sucPendingUpdate.add(nodeId);\n\t\t\tif (node.pendingDiscovery) pendingDiscovery.add(nodeId);\n\t\t}\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\tnvmJSONNodeToNodeInfo(nodeId, node),\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? getEmptyRoute(),\n\t\t\t\t\tnlwr: node.nlwr ?? getEmptyRoute(),\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeIds\" },\n\t\t[...nodeInfoExists],\n\t);\n\n\tif (target.lrNodes) {\n\t\tfor (const [id, node] of Object.entries(target.lrNodes)) {\n\t\t\tconst nodeId = parseInt(id);\n\t\t\tlrNodeInfoExists.add(nodeId);\n\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"lrnode\", nodeId, type: \"info\" },\n\t\t\t\tnvmJSONLRNodeToLRNodeInfo(nodeId, node),\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lrNodeIds\" },\n\t\t[...lrNodeInfoExists],\n\t);\n\n\t// For v3+ targets, the ControllerInfoFile must contain the LongRange properties\n\t// or the controller will ignore the file and not have a home ID\n\tif (targetProtocolFormat >= 3) {\n\t\ttarget.controller.lastNodeIdLR ??= 255;\n\t\ttarget.controller.maxNodeIdLR ??= 0;\n\t\ttarget.controller.reservedIdLR ??= 0;\n\t\ttarget.controller.primaryLongRangeChannelId ??= 0;\n\t\ttarget.controller.dcdcConfig ??= 255;\n\t}\n\tadapter.setFile(\n\t\tnew ControllerInfoFile(\n\t\t\tnvmJSONControllerToFileOptions(target.controller),\n\t\t),\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tif (target.controller.preferredRepeaters?.length) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\t\ttarget.controller.preferredRepeaters,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\ttarget.controller.sucUpdateEntries,\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\n/** Takes a JSON represented 500 series NVM and converts it to binary */\nexport async function jsonToNVM500(\n\tjson: Required<NVM500JSON>,\n\tprotocolVersion: string,\n): Promise<BytesView> {\n\t// Try to find a matching implementation\n\tconst impl = nvm500Impls.find(\n\t\t(p) =>\n\t\t\tp.protocolVersions.includes(protocolVersion)\n\t\t\t&& p.name.toLowerCase().startsWith(json.meta.library),\n\t);\n\n\tif (!impl) {\n\t\tthrow new ZWaveError(\n\t\t\t`Did not find a matching implementation for protocol version ${protocolVersion} and library ${json.meta.library}. To convert 500-series NVMs, both the source and the target controller must be using Z-Wave SDK 6.61 or higher.`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t}\n\n\tconst { layout, nvmSize } = resolveLayout(impl.layout);\n\n\t// Erase the NVM and set some basic information\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm = new NVM500(io);\n\tawait nvm.erase({\n\t\tlayout,\n\t\tnvmSize,\n\t\tlibrary: impl.library,\n\t\tnvmDescriptor: {\n\t\t\t...pick(json.meta, [\n\t\t\t\t\"manufacturerID\",\n\t\t\t\t\"productType\",\n\t\t\t\t\"productID\",\n\t\t\t\t\"firmwareID\",\n\t\t\t]),\n\t\t\t// Override the protocol version with the specified one\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersion: json.controller.applicationVersion,\n\t\t},\n\t});\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Set controller infos\n\tconst c = json.controller;\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"homeId\" },\n\t\tBytes.from(c.ownHomeId.replace(/^0x/, \"\"), \"hex\"),\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"learnedHomeId\" },\n\t\tc.learnedHomeId\n\t\t\t? Bytes.from(c.learnedHomeId.replace(/^0x/, \"\"), \"hex\")\n\t\t\t: undefined,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeId\" },\n\t\tc.nodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lastNodeId\" },\n\t\tc.lastNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"maxNodeId\" },\n\t\tc.maxNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"reservedId\" },\n\t\tc.reservedId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"staticControllerNodeId\" },\n\t\tc.staticControllerNodeId,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"controllerConfiguration\" },\n\t\tc.controllerConfiguration,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\tc.sucUpdateEntries,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucLastIndex\" },\n\t\tc.sucLastIndex,\n\t);\n\n\tif (c.systemState != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"systemState\" },\n\t\t\tc.systemState,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"watchdogStarted\" },\n\t\tc.watchdogStarted,\n\t);\n\n\tif (c.rfConfig.powerLevelNormal != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelNormal\" },\n\t\t\tc.rfConfig.powerLevelNormal,\n\t\t);\n\t}\n\tif (c.rfConfig.powerLevelLow != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelLow\" },\n\t\t\tc.rfConfig.powerLevelLow,\n\t\t);\n\t}\n\tif (c.rfConfig.powerMode != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerMode\" },\n\t\t\tc.rfConfig.powerMode,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeExtintEnable != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeExtintEnable\" },\n\t\t\tc.rfConfig.powerModeExtintEnable,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeWutTimeout != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeWutTimeout\" },\n\t\t\tc.rfConfig.powerModeWutTimeout,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\tc.preferredRepeaters,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"commandClasses\" },\n\t\tc.commandClasses,\n\t);\n\n\tif (c.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(c.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// Set node infos\n\tconst appRouteLock: number[] = [];\n\tconst routeSlaveSUC: number[] = [];\n\tconst pendingDiscovery: number[] = [];\n\tconst sucPendingUpdate: number[] = [];\n\tconst virtualNodeIds: number[] = [];\n\n\tfor (const [id, node] of Object.entries(json.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.push(nodeId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (node.appRouteLock) appRouteLock.push(nodeId);\n\t\tif (node.routeSlaveSUC) routeSlaveSUC.push(nodeId);\n\t\tif (node.pendingDiscovery) pendingDiscovery.push(nodeId);\n\t\tif (node.sucPendingUpdate) sucPendingUpdate.push(nodeId);\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\t{\n\t\t\t\tnodeId,\n\t\t\t\t...node,\n\t\t\t},\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? undefined,\n\t\t\t\t\tnlwr: node.nlwr ?? undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\nexport function json500To700(\n\tjson: NVM500JSON,\n\ttruncateApplicationData?: boolean,\n): NVMJSON {\n\tconst source = cloneDeep(json);\n\n\t// On the 500 series, some properties are only defined for the nodes, so we pull it off the\n\t// controller's node entry\n\tlet controllerNode = source.nodes[\n\t\tsource.controller.nodeId || 1\n\t] as NVMJSONNodeWithInfo; // Little hack because TS doesn't type check the union type properly\n\tif (!nodeHasInfo(controllerNode)) {\n\t\t// No information available, use sensible defaults\n\t\tcontrollerNode = {\n\t\t\tisListening: true,\n\t\t\toptionalFunctionality: false,\n\t\t\t// Static PC Controller\n\t\t\tgenericDeviceClass: 0x02,\n\t\t\tspecificDeviceClass: 0x01,\n\t\t} as any;\n\t}\n\n\tlet applicationData: string | null = null;\n\tif (source.controller.applicationData) {\n\t\tlet raw = Bytes.from(source.controller.applicationData, \"hex\");\n\t\t// Find actual start and end of application data, ignoring zeroes\n\t\tlet start = 0;\n\t\twhile (start < raw.length && raw[start] === 0) {\n\t\t\tstart++;\n\t\t}\n\t\tlet end = raw.length - 1;\n\t\twhile (end > start && raw[end] === 0) {\n\t\t\tend--;\n\t\t}\n\t\traw = raw.subarray(start, end + 1);\n\t\tif (raw.length > 512) {\n\t\t\tif (!truncateApplicationData) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\"Invalid NVM JSON: Application data would be truncated! Set truncateApplicationData to true to allow this.\",\n\t\t\t\t\tZWaveErrorCodes.NVM_InvalidJSON,\n\t\t\t\t);\n\t\t\t}\n\t\t\traw = raw.subarray(0, 512);\n\t\t}\n\t\tapplicationData = raw.toString(\"hex\");\n\t}\n\n\t// https://github.com/zwave-js/zwave-js/issues/6055\n\t// On some controllers this byte can be 0xff (effectively not set)\n\tlet controllerConfiguration = source.controller.controllerConfiguration;\n\tif (source.controller.controllerConfiguration === 0xff) {\n\t\t// Default to SUC/Primary\n\t\tcontrollerConfiguration = ControllerCapabilityFlags.SISPresent\n\t\t\t| ControllerCapabilityFlags.WasRealPrimary\n\t\t\t| ControllerCapabilityFlags.SUC;\n\t}\n\n\tlet homeId: string;\n\tif (\n\t\t!!(\n\t\t\tcontrollerConfiguration & ControllerCapabilityFlags.OnOtherNetwork\n\t\t)\n\t\t&& source.controller.learnedHomeId\n\t\t&& source.controller.nodeId\n\t) {\n\t\t// The controller did not start the network itself. We only keep this if we have a home ID and node ID\n\t\thomeId = source.controller.learnedHomeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\thomeId = source.controller.ownHomeId;\n\t\tcontrollerConfiguration &= ~ControllerCapabilityFlags.OnOtherNetwork;\n\t\t// Reconstruct the node ID. If we don't know, 1 is a good default\n\t\tif (controllerConfiguration & ControllerCapabilityFlags.SUC) {\n\t\t\tsource.controller.nodeId = source.controller.staticControllerNodeId\n\t\t\t\t|| 1;\n\t\t} else {\n\t\t\tsource.controller.nodeId = 1;\n\t\t}\n\t}\n\n\t// https://github.com/zwave-js/zwave-js/issues/6055\n\t// Some controllers have invalid information for the IDs\n\tlet maxNodeId = source.controller.maxNodeId;\n\tif (maxNodeId === 0xff) maxNodeId = source.controller.lastNodeId;\n\tlet reservedId = source.controller.reservedId;\n\tif (reservedId === 0xff) reservedId = 0;\n\n\tconst ret: NVMJSON = {\n\t\t// Start out with format 0 (= protocol version 7.0.0), the jsonToNVM routines will do further conversion\n\t\tformat: 0,\n\t\tcontroller: {\n\t\t\t// This will contain the original 6.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\thomeId,\n\t\t\tnodeId: source.controller.nodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId,\n\t\t\treservedId,\n\t\t\tsystemState: source.controller.systemState ?? 0,\n\t\t\tpreferredRepeaters: source.controller.preferredRepeaters,\n\n\t\t\t// RF config exists on both series but isn't compatible\n\n\t\t\tisListening: controllerNode.isListening,\n\t\t\toptionalFunctionality: controllerNode.optionalFunctionality,\n\t\t\tgenericDeviceClass: controllerNode.genericDeviceClass,\n\t\t\tspecificDeviceClass: controllerNode.specificDeviceClass ?? 0,\n\n\t\t\tcommandClasses: {\n\t\t\t\tincludedInsecurely: source.controller.commandClasses,\n\t\t\t\tincludedSecurelyInsecureCCs: [],\n\t\t\t\tincludedSecurelySecureCCs: [],\n\t\t\t},\n\n\t\t\tapplicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// but the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\nexport function json700To500(json: NVMJSON): NVM500JSON {\n\tconst source = cloneDeep(json);\n\n\tlet ownHomeId: string;\n\tlet learnedHomeId: string | null = null;\n\tlet nodeId: number;\n\tif (\n\t\tsource.controller.controllerConfiguration\n\t\t& ControllerCapabilityFlags.OnOtherNetwork\n\t) {\n\t\t// The controller did not start the network itself\n\t\townHomeId = learnedHomeId = source.controller.homeId;\n\t\tnodeId = source.controller.nodeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\townHomeId = source.controller.homeId;\n\t\t// 500 series controllers expect the node ID to be 0 when they are the primary\n\t\tnodeId = 0;\n\t}\n\n\tconst ret: NVM500JSON = {\n\t\tformat: 500,\n\t\tcontroller: {\n\t\t\t// This will contain the original 7.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\t// The 700 series does not distinguish between own and learned home ID in NVM\n\t\t\t// We infer it from the controller configuration if we need it\n\t\t\townHomeId,\n\t\t\tlearnedHomeId,\n\t\t\tnodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration: source.controller.controllerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId: source.controller.maxNodeId,\n\t\t\treservedId: source.controller.reservedId,\n\t\t\tsystemState: source.controller.systemState,\n\t\t\twatchdogStarted: 0,\n\t\t\tpreferredRepeaters: json.controller.preferredRepeaters ?? [],\n\n\t\t\t// RF config exists on both series but isn't compatible. So set the default,\n\t\t\t// it will be taken from the target NVM on restore.\n\t\t\trfConfig: {\n\t\t\t\tpowerLevelNormal: [255, 255, 255],\n\t\t\t\tpowerLevelLow: [255, 255, 255],\n\t\t\t\tpowerMode: 255,\n\t\t\t\tpowerModeExtintEnable: 255,\n\t\t\t\tpowerModeWutTimeout: 0xffffffff,\n\t\t\t},\n\n\t\t\tcommandClasses: source.controller.commandClasses.includedInsecurely,\n\n\t\t\tapplicationData: source.controller.applicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// just the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\n/** Converts the given source NVM into a format that is compatible with the given target NVM */\nexport async function migrateNVM(\n\tsourceNVM: BytesView,\n\ttargetNVM: BytesView,\n\toptions: MigrateNVMOptions = {},\n): Promise<BytesView> {\n\tlet source: ParsedNVM;\n\tlet target: ParsedNVM;\n\tlet sourceProtocolFileFormat: number | undefined;\n\tlet targetProtocolFileFormat: number | undefined;\n\n\ttry {\n\t\tsource = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(sourceNVM),\n\t\t};\n\t\tsourceProtocolFileFormat = source.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\tsource = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(sourceNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\tsource = { type: \"unknown\" };\n\t\t\tsourceProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\tsource = { type: \"unknown\" };\n\t\t}\n\t}\n\n\ttry {\n\t\ttarget = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(targetNVM),\n\t\t};\n\t\ttargetProtocolFileFormat = target.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\ttarget = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(targetNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& source.type === 700\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\ttarget = { type: \"unknown\" };\n\t\t\ttargetProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\ttarget = { type: \"unknown\" };\n\t\t}\n\t}\n\n\tconst {\n\t\tpreserveApplicationData = true,\n\t\tpreserveNeighbors = true,\n\t\tpreserveRoutes = true,\n\t\tpreserveSUCUpdateEntries = true,\n\t} = options;\n\n\tconst preserveAll = preserveApplicationData\n\t\t&& preserveNeighbors\n\t\t&& preserveRoutes\n\t\t&& preserveSUCUpdateEntries;\n\n\t// Short circuit if...\n\tif (\n\t\ttarget.type === \"unknown\"\n\t\t&& targetProtocolFileFormat\n\t\t&& targetProtocolFileFormat > MAX_PROTOCOL_FILE_FORMAT\n\t\t&& sourceProtocolFileFormat\n\t\t&& sourceProtocolFileFormat <= targetProtocolFileFormat\n\t\t&& sourceNVM.length === targetNVM.length\n\t\t// ...everything should be preserved and...\n\t\t&& preserveAll\n\t) {\n\t\t// ...both the source and the target are 700 series, but at least the target uses an unsupported protocol version.\n\t\t// We can be sure however that the target can upgrade any 700 series NVM to its protocol version, as long as the\n\t\t// source protocol version is not higher than the target's\n\t\treturn sourceNVM;\n\t} else if (\n\t\tsource.type === 700\n\t\t&& target.type === 700\n\t\t// ...the source and target NVMs have the same size and structure\n\t\t&& sourceNVM.length === targetNVM.length\n\t\t&& source.json.meta.sharedFileSystem\n\t\t\t=== target.json.meta.sharedFileSystem\n\t\t// ...everything should be preserved,...\n\t\t&& preserveAll\n\t) {\n\t\t// ... the source and target protocol versions are compatible without conversion\n\t\tconst sourceProtocolVersion = source.json.controller.protocolVersion;\n\t\tconst targetProtocolVersion = target.json.controller.protocolVersion;\n\t\t// ... and the application version on the both is compatible with the respective protocol version\n\t\tconst sourceApplicationVersion =\n\t\t\tsource.json.controller.applicationVersion;\n\t\tconst targetApplicationVersion =\n\t\t\ttarget.json.controller.applicationVersion;\n\n\t\t// The 700 series firmware can automatically upgrade backups from a previous protocol version\n\t\t// Not sure when that ability was added. To be on the safe side, allow it for 7.16+ which definitely supports it.\n\t\tif (\n\t\t\tsemverGte(targetProtocolVersion, \"7.16.0\")\n\t\t\t&& semverGte(targetProtocolVersion, sourceProtocolVersion)\n\t\t\t// the application version is updated on every update, protocol version only when the format changes\n\t\t\t// so this is a good indicator if the NVMs are in a compatible state\n\t\t\t&& semverGte(targetApplicationVersion, targetProtocolVersion)\n\t\t\t&& semverGte(sourceApplicationVersion, sourceProtocolVersion)\n\t\t\t// avoid preserving broken 255.x versions which appear on some controllers\n\t\t\t&& semverLt(sourceApplicationVersion, \"255.0.0\")\n\t\t\t&& semverLt(targetApplicationVersion, \"255.0.0\")\n\t\t\t// and avoid restoring a backup with a shifted 800 series application version file\n\t\t\t&& (!hasShiftedAppVersion800File(source.json))\n\t\t) {\n\t\t\treturn sourceNVM;\n\t\t}\n\t} else if (source.type === \"unknown\" && target.type !== \"unknown\") {\n\t\t// ...only the source has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The source NVM has an unsupported format, which cannot be restored on a ${target.type}-series NVM!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type !== \"unknown\" && target.type === \"unknown\") {\n\t\t// ...only the target has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The target NVM has an unsupported format, cannot restore ${source.type}-series NVM onto it!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type === \"unknown\" && target.type === \"unknown\") {\n\t\t// ...both are an unsupported format, meaning pre-6.61 SDK, which we cannot convert\n\t\treturn sourceNVM;\n\t}\n\n\t// TypeScript doesn't understand multi-variable narrowings (yet)\n\tsource = source as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\ttarget = target as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\n\t// Some 700 series NVMs have a strange 255.x application version - fix that first\n\tif (\n\t\ttarget.type === 700\n\t\t&& semverGte(target.json.controller.applicationVersion, \"255.0.0\")\n\t) {\n\t\t// replace both with the protocol version\n\t\ttarget.json.controller.applicationVersion =\n\t\t\ttarget.json.controller.protocolVersion;\n\t}\n\n\t// In any case, preserve the application version of the target stick\n\tsource.json.controller.applicationVersion =\n\t\ttarget.json.controller.applicationVersion;\n\n\t// Remove information we do not want to preserve\n\tif (!preserveApplicationData) {\n\t\tsource.json.controller.applicationData = undefined;\n\t}\n\tif (!preserveNeighbors) {\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.neighbors = [];\n\t\t\t}\n\t\t}\n\t}\n\tif (!preserveRoutes) {\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.appRouteLock = false;\n\t\t\t\tnode.lwr = undefined;\n\t\t\t\tnode.nlwr = undefined;\n\t\t\t}\n\t\t}\n\t}\n\tif (!preserveSUCUpdateEntries) {\n\t\tsource.json.controller.sucUpdateEntries = [];\n\t\tsource.json.controller.sucLastIndex = 0xff;\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.sucUpdateIndex = 0xfe;\n\t\t\t\tnode.sucPendingUpdate = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (source.type === 500 && target.type === 500) {\n\t\t// Both are 500, so we just need to update the metadata to match the target\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...source.json,\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// If the target is a 500 series stick, preserve the RF config\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else if (source.type === 500 && target.type === 700) {\n\t\t// We need to upgrade the source to 700 series\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\tlrNodes: {},\n\t\t\t...json500To700(source.json, true),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t} else if (source.type === 700 && target.type === 500) {\n\t\t// We need to downgrade the source to 500 series\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...json700To500(source.json),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else {\n\t\t// Both are 700, so we just need to update the metadata to match the target\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\t...(source.json as NVMJSONWithMeta),\n\t\t\tmeta: (target.json as NVMJSONWithMeta).meta,\n\t\t};\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t}\n}\n\n/**\n * Detects whether the app version file on a 800 series controller is shifted by 1 byte\n */\nfunction hasShiftedAppVersion800File(\n\tjson: NVMJSONWithMeta,\n): boolean {\n\t// We can only detect this on 800 series controllers with the shared FS\n\tif (!json.meta.sharedFileSystem) return false;\n\n\tconst protocolVersion = semverParse(json.controller.protocolVersion);\n\t// Invalid protocol version, cannot fix anything\n\tif (!protocolVersion) return false;\n\n\tconst applicationVersion = semverParse(json.controller.applicationVersion);\n\t// Invalid application version, cannot fix anything\n\tif (!applicationVersion) return false;\n\n\t// We consider the version shifted if:\n\t// - the app version format is the major protocol version\n\t// - the app version major is the minor protocol version +/- 3\n\n\tif (json.applicationFileFormat !== protocolVersion.major) return false;\n\tif (Math.abs(applicationVersion.major - protocolVersion.minor) > 3) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"],
|
|
4
|
+
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tControllerCapabilityFlags,\n\tMAX_NODES,\n\tNodeIDType,\n\ttype NodeProtocolInfo,\n\tNodeType,\n\tRFRegion,\n\tstripUndefined,\n} from \"@zwave-js/core\";\nimport {\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core/error\";\nimport {\n\tBytes,\n\ttype BytesView,\n\tbuffer2hex,\n\tcloneDeep,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport type { SemVer } from \"semver\";\nimport semverGte from \"semver/functions/gte.js\";\nimport semverLt from \"semver/functions/lt.js\";\nimport semverLte from \"semver/functions/lte.js\";\nimport semverParse from \"semver/functions/parse.js\";\nimport { MAX_PROTOCOL_FILE_FORMAT, SUC_MAX_UPDATES } from \"./consts.js\";\nimport { NVM3, type NVM3Meta } from \"./lib/NVM3.js\";\nimport { NVM500 } from \"./lib/NVM500.js\";\nimport {\n\ttype Route,\n\ttype RouteCache,\n\tgetEmptyRoute,\n} from \"./lib/common/routeCache.js\";\nimport type { SUCUpdateEntry } from \"./lib/common/sucUpdateEntry.js\";\nimport { NVMMemoryIO } from \"./lib/io/NVMMemoryIO.js\";\nimport { NVM3Adapter } from \"./lib/nvm3/adapter.js\";\nimport {\n\tZWAVE_APPLICATION_NVM_SIZE,\n\tZWAVE_PROTOCOL_NVM_SIZE,\n\tZWAVE_SHARED_NVM_SIZE,\n} from \"./lib/nvm3/consts.js\";\nimport {\n\ttype ApplicationNameFile,\n\tApplicationNameFileID,\n} from \"./lib/nvm3/files/ApplicationNameFile.js\";\nimport {\n\tApplicationCCsFile,\n\tApplicationCCsFileID,\n\ttype ApplicationDataFile,\n\tApplicationDataFileID,\n\tApplicationRFConfigFile,\n\tApplicationRFConfigFileID,\n\tApplicationTypeFile,\n\tApplicationTypeFileID,\n\tApplicationVersionFile,\n\tApplicationVersionFile800,\n\tApplicationVersionFile800ID,\n\tApplicationVersionFileID,\n\tControllerInfoFile,\n\tControllerInfoFileID,\n\ttype ControllerInfoFileOptions,\n\ttype LRNodeInfo,\n\ttype LRNodeInfoFileV5,\n\tNVMFile,\n\ttype NodeInfo,\n\ttype NodeInfoFileV0,\n\ttype NodeInfoFileV1,\n\ttype ProtocolAppRouteLockNodeMaskFile,\n\tProtocolAppRouteLockNodeMaskFileID,\n\ttype ProtocolLRNodeListFile,\n\tProtocolLRNodeListFileID,\n\ttype ProtocolNodeListFile,\n\tProtocolNodeListFileID,\n\ttype ProtocolPendingDiscoveryNodeMaskFile,\n\tProtocolPendingDiscoveryNodeMaskFileID,\n\ttype ProtocolPreferredRepeatersFile,\n\tProtocolPreferredRepeatersFileID,\n\tProtocolRouteCacheExistsNodeMaskFile,\n\tProtocolRouteCacheExistsNodeMaskFileID,\n\ttype ProtocolRouteSlaveSUCNodeMaskFile,\n\tProtocolRouteSlaveSUCNodeMaskFileID,\n\ttype ProtocolSUCPendingUpdateNodeMaskFile,\n\tProtocolSUCPendingUpdateNodeMaskFileID,\n\tProtocolVersionFile,\n\tProtocolVersionFileID,\n\ttype ProtocolVirtualNodeMaskFile,\n\tProtocolVirtualNodeMaskFileID,\n\ttype RouteCacheFileV0,\n\ttype RouteCacheFileV1,\n\tSUCUpdateEntriesFileIDV0,\n\ttype SUCUpdateEntriesFileV0,\n\ttype SUCUpdateEntriesFileV5,\n\tSUC_UPDATES_PER_FILE_V5,\n\tnodeIdToLRNodeInfoFileIDV5,\n\tnodeIdToNodeInfoFileIDV0,\n\tnodeIdToNodeInfoFileIDV1,\n\tnodeIdToRouteCacheFileIDV0,\n\tnodeIdToRouteCacheFileIDV1,\n\tsucUpdateIndexToSUCUpdateEntriesFileIDV5,\n} from \"./lib/nvm3/files/index.js\";\nimport type { NVM3Object } from \"./lib/nvm3/object.js\";\nimport { dumpNVM, mapToObject } from \"./lib/nvm3/utils.js\";\nimport { NVM500Adapter } from \"./lib/nvm500/adapter.js\";\nimport { nvm500Impls } from \"./lib/nvm500/impls/index.js\";\nimport { resolveLayout } from \"./lib/nvm500/shared.js\";\nimport type {\n\tNVM500JSON,\n\tNVM500JSONController,\n\tNVM500JSONNode,\n\tNVM500Meta,\n} from \"./nvm500/NVMParser.js\";\n\nexport interface NVMJSON {\n\tformat: number; // protocol file format\n\tapplicationFileFormat?: number;\n\tmeta?: NVM3Meta;\n\tcontroller: NVMJSONController;\n\tnodes: Record<number, NVMJSONNode>;\n\tlrNodes?: Record<number, NVMJSONLRNode>;\n}\n\nexport type NVMJSONWithMeta = NVMJSON & { meta: NVM3Meta };\n\nexport interface NVMJSONController {\n\tprotocolVersion: string;\n\tapplicationVersion: string;\n\thomeId: string;\n\tnodeId: number;\n\tlastNodeId: number;\n\tstaticControllerNodeId: number;\n\tsucLastIndex: number;\n\tcontrollerConfiguration: number;\n\tsucUpdateEntries: SUCUpdateEntry[];\n\tsucAwarenessPushNeeded?: number | null;\n\tmaxNodeId: number;\n\treservedId: number;\n\tsystemState: number;\n\tlastNodeIdLR?: number | null;\n\tmaxNodeIdLR?: number | null;\n\treservedIdLR?: number | null;\n\tprimaryLongRangeChannelId?: number | null;\n\tdcdcConfig?: number | null;\n\trfConfig?: NVMJSONControllerRFConfig | null;\n\tpreferredRepeaters?: number[] | null;\n\n\tisListening: boolean;\n\toptionalFunctionality: boolean;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number;\n\n\tcommandClasses: {\n\t\tincludedInsecurely: CommandClasses[];\n\t\tincludedSecurelyInsecureCCs: CommandClasses[];\n\t\tincludedSecurelySecureCCs: CommandClasses[];\n\t};\n\n\tapplicationData?: string | null;\n\tapplicationName?: string | null;\n}\n\nexport interface NVMJSONControllerRFConfig {\n\trfRegion: RFRegion;\n\ttxPower: number;\n\tmeasured0dBm: number;\n\tenablePTI: number | null;\n\tmaxTXPower: number | null;\n\tnodeIdType: NodeIDType | null;\n}\n\nexport interface NVMJSONNodeWithInfo\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tisVirtual: boolean;\n\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number | null;\n\tneighbors: number[];\n\tsucUpdateIndex: number;\n\n\tappRouteLock: boolean;\n\trouteSlaveSUC: boolean;\n\tsucPendingUpdate: boolean;\n\tpendingDiscovery: boolean;\n\n\tlwr?: Route | null;\n\tnlwr?: Route | null;\n}\n\n// Unlike NVMJSONNodeWithInfo this does not carry any node information\nexport interface NVMJSONVirtualNode {\n\tisVirtual: true;\n}\n\nexport interface NVMJSONLRNode\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n}\n\nexport type NVMJSONNode = NVMJSONNodeWithInfo | NVMJSONVirtualNode;\n\ntype ParsedNVM =\n\t| {\n\t\ttype: 500;\n\t\tjson: Required<NVM500JSON>;\n\t}\n\t| {\n\t\ttype: 700;\n\t\tjson: NVMJSONWithMeta;\n\t}\n\t| {\n\t\ttype: \"unknown\";\n\t};\n\n/**\n * Options influencing how NVM contents should be migrated.\n * By default, all data will be preserved.\n */\nexport interface MigrateNVMOptions {\n\t/** Whether application data will be preserved */\n\tpreserveApplicationData?: boolean;\n\t/** Whether SUC update entries will be preserved */\n\tpreserveSUCUpdateEntries?: boolean;\n\t/** Whether LWR, NLWR and the priority route flag will be preserved */\n\tpreserveRoutes?: boolean;\n\t/** Whether the neighbor table will be preserved */\n\tpreserveNeighbors?: boolean;\n}\n\nexport function nodeHasInfo(node: NVMJSONNode): node is NVMJSONNodeWithInfo {\n\treturn !node.isVirtual || Object.keys(node).length > 1;\n}\n\nfunction createEmptyPhysicalNode(): NVMJSONNodeWithInfo {\n\treturn {\n\t\tisVirtual: false,\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 0,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: false,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t\tneighbors: [],\n\t\tsucUpdateIndex: 0,\n\t\tappRouteLock: false,\n\t\trouteSlaveSUC: false,\n\t\tsucPendingUpdate: false,\n\t\tpendingDiscovery: false,\n\t\tlwr: null,\n\t\tnlwr: null,\n\t};\n}\n\nfunction createEmptyLRNode(): NVMJSONLRNode {\n\treturn {\n\t\tisListening: false,\n\t\tisFrequentListening: false,\n\t\tisRouting: false,\n\t\tsupportedDataRates: [],\n\t\tprotocolVersion: 3,\n\t\toptionalFunctionality: false,\n\t\tnodeType: NodeType[\"End Node\"],\n\t\tsupportsSecurity: true,\n\t\tsupportsBeaming: false,\n\t\tgenericDeviceClass: 0,\n\t\tspecificDeviceClass: null,\n\t};\n}\n\n/** Converts a compressed set of NVM objects to a JSON representation */\nexport function nvmObjectsToJSON(\n\tobjects: ReadonlyMap<number, NVM3Object>,\n): NVMJSON {\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tconst getObject = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object | undefined => {\n\t\tif (typeof id === \"number\") {\n\t\t\treturn objects.get(id);\n\t\t} else {\n\t\t\tfor (const [key, obj] of objects) {\n\t\t\t\tif (id(key)) return obj;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getObjectOrThrow = (\n\t\tid: number | ((id: number) => boolean),\n\t): NVM3Object => {\n\t\tconst ret = getObject(id);\n\t\tif (ret) return ret;\n\t\tthrow new ZWaveError(\n\t\t\t`Object${\n\t\t\t\ttypeof id === \"number\" ? ` ${num2hex(id)} (${id})` : \"\"\n\t\t\t} not found!`,\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t};\n\n\tconst getFileOrThrow = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T => {\n\t\tconst obj = getObjectOrThrow(id);\n\t\treturn NVMFile.from(obj.key, obj.data!, fileVersion) as T;\n\t};\n\n\tconst getFile = <T extends NVMFile>(\n\t\tid: number | ((id: number) => boolean),\n\t\tfileVersion: string,\n\t): T | undefined => {\n\t\tconst obj = getObject(id);\n\t\tif (!obj || !obj.data) return undefined;\n\t\treturn NVMFile.from(obj.key, obj.data, fileVersion) as T;\n\t};\n\n\t// === Protocol NVM files ===\n\n\t// Figure out how to parse the individual files\n\tconst protocolVersionFile = getFileOrThrow<ProtocolVersionFile>(\n\t\tProtocolVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst protocolFileFormat = protocolVersionFile.format;\n\tconst protocolVersion =\n\t\t`${protocolVersionFile.major}.${protocolVersionFile.minor}.${protocolVersionFile.patch}`;\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\t// Figure out which nodes exist\n\tconst nodeIds = getFileOrThrow<ProtocolNodeListFile>(\n\t\tProtocolNodeListFileID,\n\t\tprotocolVersion,\n\t).nodeIds;\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tgetFileOrThrow<ProtocolAppRouteLockNodeMaskFile>(\n\t\t\tProtocolAppRouteLockNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tgetFileOrThrow<ProtocolRouteSlaveSUCNodeMaskFile>(\n\t\t\tProtocolRouteSlaveSUCNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tgetFileOrThrow<ProtocolSUCPendingUpdateNodeMaskFile>(\n\t\t\tProtocolSUCPendingUpdateNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst isVirtual = new Set(\n\t\tgetFileOrThrow<ProtocolVirtualNodeMaskFile>(\n\t\t\tProtocolVirtualNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tgetFileOrThrow<ProtocolPendingDiscoveryNodeMaskFile>(\n\t\t\tProtocolPendingDiscoveryNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\tconst routeCacheExists = new Set(\n\t\tgetFileOrThrow<ProtocolRouteCacheExistsNodeMaskFile>(\n\t\t\tProtocolRouteCacheExistsNodeMaskFileID,\n\t\t\tprotocolVersion,\n\t\t).nodeIds,\n\t);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\tconst rememberOnlyVirtual = () => {\n\t\t\tnodes.set(id, {\n\t\t\t\tisVirtual: true,\n\t\t\t});\n\t\t};\n\n\t\t// Find node info\n\t\tlet nodeInfo: NodeInfo;\n\t\ttry {\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV0(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV0>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfo;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToNodeInfoFileIDV1(id);\n\t\t\t\tconst file = getFileOrThrow<NodeInfoFileV1>(\n\t\t\t\t\tfileId,\n\t\t\t\t\tprotocolVersion,\n\t\t\t\t);\n\t\t\t\tnodeInfo = file.nodeInfos.find((i) => i.nodeId === id)!;\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (e.message.includes(\"Object not found\")) {\n\t\t\t\trememberOnlyVirtual();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow e;\n\t\t}\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = isVirtual.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\t\tif (routeCacheExists.has(id)) {\n\t\t\tlet routeCache: RouteCache | undefined;\n\t\t\tif (protocolFileFormat === 0) {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV0(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV0>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCache;\n\t\t\t} else {\n\t\t\t\tconst fileId = nodeIdToRouteCacheFileIDV1(id);\n\t\t\t\tconst file = getFile<RouteCacheFileV1>(fileId, protocolVersion);\n\t\t\t\trouteCache = file?.routeCaches.find((i) => i.nodeId === id);\n\t\t\t}\n\t\t\tif (routeCache) {\n\t\t\t\tnode.lwr = routeCache.lwr;\n\t\t\t\tnode.nlwr = routeCache.nlwr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = getFile<ProtocolLRNodeListFile>(\n\t\tProtocolLRNodeListFileID,\n\t\tprotocolVersion,\n\t)?.nodeIds;\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst fileId = nodeIdToLRNodeInfoFileIDV5(id);\n\t\t\tconst file = getFileOrThrow<LRNodeInfoFileV5>(\n\t\t\t\tfileId,\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tconst { nodeId, ...nodeInfo } = file.nodeInfos.find((i) =>\n\t\t\t\ti.nodeId === id\n\t\t\t)!;\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Now read info about the controller\n\tconst controllerInfoFile = getFileOrThrow<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\tprotocolVersion,\n\t);\n\n\tlet sucUpdateEntries: SUCUpdateEntry[];\n\tif (protocolFileFormat < 5) {\n\t\tsucUpdateEntries = getFileOrThrow<SUCUpdateEntriesFileV0>(\n\t\t\tSUCUpdateEntriesFileIDV0,\n\t\t\tprotocolVersion,\n\t\t).updateEntries;\n\t} else {\n\t\t// V5 has split the entries into multiple files\n\t\tsucUpdateEntries = [];\n\t\tfor (\n\t\t\tlet index = 0;\n\t\t\tindex < SUC_MAX_UPDATES;\n\t\t\tindex += SUC_UPDATES_PER_FILE_V5\n\t\t) {\n\t\t\tconst file = getFile<SUCUpdateEntriesFileV5>(\n\t\t\t\tsucUpdateIndexToSUCUpdateEntriesFileIDV5(index),\n\t\t\t\tprotocolVersion,\n\t\t\t);\n\t\t\tif (!file) break;\n\t\t\tsucUpdateEntries.push(...file.updateEntries);\n\t\t}\n\t}\n\n\t// === Application NVM files ===\n\n\tconst applicationVersionFile700 = getFile<ApplicationVersionFile>(\n\t\tApplicationVersionFileID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile800 = getFile<ApplicationVersionFile800>(\n\t\tApplicationVersionFile800ID,\n\t\t\"7.0.0\", // We don't know the version here yet\n\t);\n\tconst applicationVersionFile = applicationVersionFile700\n\t\t?? applicationVersionFile800;\n\tif (!applicationVersionFile) {\n\t\tthrow new ZWaveError(\n\t\t\t\"ApplicationVersionFile not found!\",\n\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t);\n\t}\n\tconst applicationVersion =\n\t\t`${applicationVersionFile.major}.${applicationVersionFile.minor}.${applicationVersionFile.patch}`;\n\n\tconst rfConfigFile = getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationCCsFile = getFileOrThrow<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationDataFile = getFile<ApplicationDataFile>(\n\t\tApplicationDataFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationTypeFile = getFileOrThrow<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\tapplicationVersion,\n\t);\n\tconst applicationNameFile = getFile<ApplicationNameFile>(\n\t\tApplicationNameFileID,\n\t\tapplicationVersion,\n\t);\n\n\tconst preferredRepeaters = getFile<ProtocolPreferredRepeatersFile>(\n\t\tProtocolPreferredRepeatersFileID,\n\t\tapplicationVersion,\n\t)?.nodeIds;\n\n\tconst controllerProps = [\n\t\t\"nodeId\",\n\t\t\"lastNodeId\",\n\t\t\"staticControllerNodeId\",\n\t\t\"sucLastIndex\",\n\t\t\"controllerConfiguration\",\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"maxNodeId\",\n\t\t\"reservedId\",\n\t\t\"systemState\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t] as const;\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, controllerProps),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData: applicationDataFile?.applicationData.toString(\"hex\")\n\t\t\t?? null,\n\t\tapplicationName: applicationNameFile?.name ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSON = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t};\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\n\treturn ret;\n}\n\nfunction nvmJSONNodeToNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONNodeWithInfo,\n): NodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t\t\"neighbors\",\n\t\t\t\"sucUpdateIndex\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONLRNodeToLRNodeInfo(\n\tnodeId: number,\n\tnode: NVMJSONLRNode,\n): LRNodeInfo {\n\treturn {\n\t\tnodeId,\n\t\t...pick(node, [\n\t\t\t\"isListening\",\n\t\t\t\"isFrequentListening\",\n\t\t\t\"isRouting\",\n\t\t\t\"supportedDataRates\",\n\t\t\t\"protocolVersion\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"nodeType\",\n\t\t\t\"supportsSecurity\",\n\t\t\t\"supportsBeaming\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t};\n}\n\nfunction nvmJSONControllerToFileOptions(\n\tctrlr: NVMJSONController,\n): ControllerInfoFileOptions {\n\tconst ret = {\n\t\thomeId: Bytes.from(ctrlr.homeId.replace(/^0x/, \"\"), \"hex\"),\n\t\tnodeId: ctrlr.nodeId,\n\t\tlastNodeId: ctrlr.lastNodeId,\n\t\tstaticControllerNodeId: ctrlr.staticControllerNodeId,\n\t\tsucLastIndex: ctrlr.sucLastIndex,\n\t\tcontrollerConfiguration: ctrlr.controllerConfiguration,\n\t\tmaxNodeId: ctrlr.maxNodeId,\n\t\treservedId: ctrlr.reservedId,\n\t\tsystemState: ctrlr.systemState,\n\t} as unknown as ControllerInfoFileOptions;\n\tif (ctrlr.sucAwarenessPushNeeded != undefined) {\n\t\t// @ts-expect-error We're dealing with a conditional object here\n\t\t// TS doesn't like that.\n\t\tret.sucAwarenessPushNeeded = ctrlr.sucAwarenessPushNeeded;\n\t} else {\n\t\tObject.assign(\n\t\t\tret,\n\t\t\tstripUndefined(\n\t\t\t\tpick(ctrlr, [\n\t\t\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\t\t\"lastNodeIdLR\",\n\t\t\t\t\t\"maxNodeIdLR\",\n\t\t\t\t\t\"reservedIdLR\",\n\t\t\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\t\t\"dcdcConfig\",\n\t\t\t\t]),\n\t\t\t),\n\t\t);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 700+ series stick and returns its JSON representation */\nexport async function nvmToJSON(\n\tbuffer: BytesView,\n\tdebugLogs: boolean = false,\n): Promise<NVMJSONWithMeta> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm3 = new NVM3(io);\n\tconst info = await nvm3.init();\n\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\tif (debugLogs) {\n\t\t// Dump all pages, all raw objects in each page, and each object in its final state\n\t\tawait dumpNVM(nvm3);\n\t}\n\n\tconst firstPageHeader = info.isSharedFileSystem\n\t\t? info.sections.all.pages[0]\n\t\t: info.sections.protocol.pages[0];\n\n\tconst meta: NVM3Meta = {\n\t\tsharedFileSystem: info.isSharedFileSystem,\n\t\t...pick(firstPageHeader, [\n\t\t\t\"pageSize\",\n\t\t\t\"writeSize\",\n\t\t\t\"memoryMapped\",\n\t\t\t\"deviceFamily\",\n\t\t]),\n\t};\n\n\tconst nodes = new Map<number, NVMJSONNode>();\n\tconst getNode = (id: number): NVMJSONNode => {\n\t\tif (!nodes.has(id)) nodes.set(id, createEmptyPhysicalNode());\n\t\treturn nodes.get(id)!;\n\t};\n\n\tconst lrNodes = new Map<number, NVMJSONLRNode>();\n\tconst getLRNode = (id: number): NVMJSONLRNode => {\n\t\tif (!lrNodes.has(id)) lrNodes.set(id, createEmptyLRNode());\n\t\treturn lrNodes.get(id)!;\n\t};\n\n\tlet protocolFileFormat: number;\n\tlet protocolVersion: string;\n\ttry {\n\t\tprotocolFileFormat = await adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"protocolFileFormat\",\n\t\t}, true);\n\t\tprotocolVersion = await adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"protocolVersion\",\n\t\t}, true);\n\t} catch (e) {\n\t\t// Firmwares based on SDK 7.23.0 and 7.23.1 do not write the protocol format/version to NVM,\n\t\t// so file 0x50000 is missing. Those are out in the wild, so we need to work around this.\n\t\t// There are a few heuristics we can use, assuming that Silabs doesn't break this again in a later version:\n\t\t// - SDK < 7.23.0 are not affected, also 7.23.2+ is fixed\n\t\tlet isSDK723 = true;\n\t\t// - The ApplicationRFConfigFile (0x68) exists and has 9 bytes\n\t\tisSDK723 &&= (await nvm3.get(ApplicationRFConfigFileID))?.length == 9;\n\t\t// - The ApplicationVersionFile800 (0x41000) exists\n\t\tisSDK723 &&= !!(await nvm3.get(ApplicationVersionFile800ID));\n\t\t// - The ProtocolLRNodeListFile (0x5000c) exists\n\t\tisSDK723 &&= !!(await nvm3.get(ProtocolLRNodeListFileID));\n\t\t// - The ControllerInfoFile (0x50004) exists and has 22 bytes\n\t\tisSDK723 &&= (await nvm3.get(ControllerInfoFileID))?.length == 22;\n\n\t\tif (isSDK723) {\n\t\t\t// Remember the expected format\n\t\t\tprotocolVersion = \"7.23.0\";\n\t\t\tprotocolFileFormat = 5;\n\t\t\t// And also mirror it back to the NVM adapter. We never save it to NVM,\n\t\t\t// so we can just set the file.\n\t\t\tadapter.setFile(\n\t\t\t\tnew ProtocolVersionFile({\n\t\t\t\t\tfileVersion: protocolVersion,\n\t\t\t\t\tformat: protocolFileFormat,\n\t\t\t\t\tmajor: 7,\n\t\t\t\t\tminor: 23,\n\t\t\t\t\tpatch: 0,\n\t\t\t\t}),\n\t\t\t);\n\t\t\t// And we need to init the adapter again\n\t\t\tawait adapter[\"init\"]();\n\t\t} else {\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\t// Bail early if the NVM uses a protocol file format that's newer than we support\n\tif (protocolFileFormat > MAX_PROTOCOL_FILE_FORMAT) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported protocol file format: ${protocolFileFormat}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t\t{ protocolFileFormat },\n\t\t);\n\t}\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}, true),\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist\n\tconst nodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeIds\",\n\t}, true);\n\n\t// And create each node entry, including virtual ones\n\tfor (const id of nodeIds) {\n\t\tconst node = getNode(id) as NVMJSONNodeWithInfo;\n\n\t\t// Find node info\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"info\",\n\t\t}, true);\n\n\t\tObject.assign(node, nodeInfo);\n\n\t\t// Evaluate flags\n\t\tnode.isVirtual = virtualNodeIds.has(id);\n\t\tnode.appRouteLock = appRouteLock.has(id);\n\t\tnode.routeSlaveSUC = routeSlaveSUC.has(id);\n\t\tnode.sucPendingUpdate = sucPendingUpdate.has(id);\n\t\tnode.pendingDiscovery = pendingDiscovery.has(id);\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId: id,\n\t\t\ttype: \"routes\",\n\t\t});\n\t\tif (routes) {\n\t\t\tnode.lwr = routes.lwr;\n\t\t\tnode.nlwr = routes.nlwr;\n\t\t}\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete node.nodeId;\n\t}\n\n\t// If they exist, read info about LR nodes\n\tconst lrNodeIds = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lrNodeIds\",\n\t});\n\tif (lrNodeIds) {\n\t\tfor (const id of lrNodeIds) {\n\t\t\tconst node = getLRNode(id);\n\n\t\t\t// Find node info\n\t\t\tconst nodeInfo = await adapter.get({\n\t\t\t\tdomain: \"lrnode\",\n\t\t\t\tnodeId: id,\n\t\t\t\ttype: \"info\",\n\t\t\t}, true);\n\n\t\t\tObject.assign(node, nodeInfo);\n\t\t}\n\t}\n\n\t// Read info about the controller\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationVersion = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationVersion\",\n\t}, true);\n\n\tconst applicationFileFormat = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationFileFormat\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst applicationName = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationName\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t});\n\n\t// The following are a bit awkward to read one by one, so we just take the files\n\tconst controllerInfoFile = await adapter.getFile<ControllerInfoFile>(\n\t\tControllerInfoFileID,\n\t\ttrue,\n\t);\n\tconst rfConfigFile = await adapter.getFile<ApplicationRFConfigFile>(\n\t\tApplicationRFConfigFileID,\n\t);\n\tconst applicationCCsFile = await adapter.getFile<ApplicationCCsFile>(\n\t\tApplicationCCsFileID,\n\t\ttrue,\n\t);\n\tconst applicationTypeFile = await adapter.getFile<ApplicationTypeFile>(\n\t\tApplicationTypeFileID,\n\t\ttrue,\n\t);\n\n\tconst controller: NVMJSONController = {\n\t\tprotocolVersion,\n\t\tapplicationVersion,\n\t\thomeId: buffer2hex(controllerInfoFile.homeId),\n\t\t...pick(controllerInfoFile, [\n\t\t\t\"nodeId\",\n\t\t\t\"lastNodeId\",\n\t\t\t\"staticControllerNodeId\",\n\t\t\t\"sucLastIndex\",\n\t\t\t\"controllerConfiguration\",\n\t\t\t\"sucAwarenessPushNeeded\",\n\t\t\t\"maxNodeId\",\n\t\t\t\"reservedId\",\n\t\t\t\"systemState\",\n\t\t\t\"lastNodeIdLR\",\n\t\t\t\"maxNodeIdLR\",\n\t\t\t\"reservedIdLR\",\n\t\t\t\"primaryLongRangeChannelId\",\n\t\t\t\"dcdcConfig\",\n\t\t]),\n\t\t...pick(applicationTypeFile, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tcommandClasses: pick(applicationCCsFile, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tpreferredRepeaters,\n\t\t...(rfConfigFile\n\t\t\t? {\n\t\t\t\trfConfig: {\n\t\t\t\t\trfRegion: rfConfigFile.rfRegion,\n\t\t\t\t\ttxPower: rfConfigFile.txPower,\n\t\t\t\t\tmeasured0dBm: rfConfigFile.measured0dBm,\n\t\t\t\t\tenablePTI: rfConfigFile.enablePTI ?? null,\n\t\t\t\t\tmaxTXPower: rfConfigFile.maxTXPower ?? null,\n\t\t\t\t\tnodeIdType: rfConfigFile.nodeIdType ?? null,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {}),\n\t\tsucUpdateEntries,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t\tapplicationName: applicationName ?? null,\n\t};\n\n\t// Make sure all props are defined\n\tconst optionalControllerProps = [\n\t\t\"sucAwarenessPushNeeded\",\n\t\t\"lastNodeIdLR\",\n\t\t\"maxNodeIdLR\",\n\t\t\"reservedIdLR\",\n\t\t\"primaryLongRangeChannelId\",\n\t\t\"dcdcConfig\",\n\t\t\"rfConfig\",\n\t\t\"preferredRepeaters\",\n\t\t\"applicationData\",\n\t] as const;\n\tfor (const prop of optionalControllerProps) {\n\t\tif (controller[prop] === undefined) controller[prop] = null;\n\t}\n\n\tconst ret: NVMJSONWithMeta = {\n\t\tformat: protocolFileFormat,\n\t\tcontroller,\n\t\tnodes: mapToObject(nodes),\n\t\tmeta,\n\t};\n\tif (applicationFileFormat !== 0) {\n\t\tret.applicationFileFormat = applicationFileFormat;\n\t}\n\tif (lrNodes.size > 0) {\n\t\tret.lrNodes = mapToObject(lrNodes);\n\t}\n\treturn ret;\n}\n\n/** Reads an NVM buffer of a 500-series stick and returns its JSON representation */\nexport async function nvm500ToJSON(\n\tbuffer: BytesView,\n): Promise<Required<NVM500JSON>> {\n\tconst io = new NVMMemoryIO(buffer);\n\tconst nvm = new NVM500(io);\n\n\tconst info = await nvm.init();\n\tconst meta: NVM500Meta = {\n\t\tlibrary: info.library,\n\t\t...pick(info.nvmDescriptor, [\n\t\t\t\"manufacturerID\",\n\t\t\t\"firmwareID\",\n\t\t\t\"productType\",\n\t\t\t\"productID\",\n\t\t]),\n\t};\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Read all flags for all nodes\n\tconst appRouteLock = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"appRouteLock\",\n\t\t}, true),\n\t);\n\tconst routeSlaveSUC = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"routeSlaveSUC\",\n\t\t}, true),\n\t);\n\tconst sucPendingUpdate = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"sucPendingUpdate\",\n\t\t}, true),\n\t);\n\tconst virtualNodeIds = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"virtualNodeIds\",\n\t\t}) ?? [],\n\t);\n\tconst pendingDiscovery = new Set(\n\t\tawait adapter.get({\n\t\t\tdomain: \"controller\",\n\t\t\ttype: \"pendingDiscovery\",\n\t\t}, true),\n\t);\n\n\t// Figure out which nodes exist along with their info\n\tconst nodes: Record<number, NVM500JSONNode> = {};\n\tfor (let nodeId = 1; nodeId <= MAX_NODES; nodeId++) {\n\t\tconst nodeInfo = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"info\",\n\t\t});\n\t\tconst isVirtual = virtualNodeIds.has(nodeId);\n\t\tif (!nodeInfo) {\n\t\t\tif (isVirtual) {\n\t\t\t\tnodes[nodeId] = { isVirtual: true };\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst routes = await adapter.get({\n\t\t\tdomain: \"node\",\n\t\t\tnodeId,\n\t\t\ttype: \"routes\",\n\t\t});\n\n\t\t// @ts-expect-error Some fields include a nodeId, but we don't need it\n\t\tdelete nodeInfo.nodeId;\n\n\t\tnodes[nodeId] = {\n\t\t\t...nodeInfo,\n\t\t\tspecificDeviceClass: nodeInfo.specificDeviceClass ?? null,\n\t\t\tisVirtual,\n\n\t\t\tappRouteLock: appRouteLock.has(nodeId),\n\t\t\trouteSlaveSUC: routeSlaveSUC.has(nodeId),\n\t\t\tsucPendingUpdate: sucPendingUpdate.has(nodeId),\n\t\t\tpendingDiscovery: pendingDiscovery.has(nodeId),\n\n\t\t\tlwr: routes?.lwr ?? null,\n\t\t\tnlwr: routes?.nlwr ?? null,\n\t\t};\n\t}\n\n\t// Read info about the controller\n\tconst ownNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"nodeId\",\n\t}, true);\n\n\tconst ownHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"homeId\",\n\t}, true);\n\n\tlet learnedHomeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"learnedHomeId\",\n\t});\n\tif (learnedHomeId?.length === 4 && learnedHomeId.every((b) => b === 0)) {\n\t\tlearnedHomeId = undefined;\n\t}\n\n\tconst lastNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"lastNodeId\",\n\t}, true);\n\n\tconst maxNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"maxNodeId\",\n\t}, true);\n\n\tconst reservedId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"reservedId\",\n\t}, true);\n\n\tconst staticControllerNodeId = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"staticControllerNodeId\",\n\t}, true);\n\n\tconst sucLastIndex = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucLastIndex\",\n\t}, true);\n\n\tconst controllerConfiguration = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"controllerConfiguration\",\n\t}, true);\n\n\tconst commandClasses = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"commandClasses\",\n\t}, true);\n\n\tconst sucUpdateEntries = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"sucUpdateEntries\",\n\t}, true);\n\n\tconst applicationData = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"applicationData\",\n\t});\n\n\tconst preferredRepeaters = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"preferredRepeaters\",\n\t}, true);\n\n\tconst systemState = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"systemState\",\n\t});\n\n\tconst watchdogStarted = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"watchdogStarted\",\n\t}, true);\n\n\tconst powerLevelNormal = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelNormal\",\n\t});\n\tconst powerLevelLow = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerLevelLow\",\n\t});\n\tconst powerMode = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerMode\",\n\t});\n\tconst powerModeExtintEnable = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeExtintEnable\",\n\t});\n\tconst powerModeWutTimeout = await adapter.get({\n\t\tdomain: \"controller\",\n\t\ttype: \"powerModeWutTimeout\",\n\t});\n\n\tconst controller: NVM500JSONController = {\n\t\tprotocolVersion: info.nvmDescriptor.protocolVersion,\n\t\tapplicationVersion: info.nvmDescriptor.firmwareVersion,\n\t\townHomeId: buffer2hex(ownHomeId),\n\t\tlearnedHomeId: learnedHomeId\n\t\t\t? buffer2hex(learnedHomeId)\n\t\t\t: null,\n\t\tnodeId: ownNodeId,\n\t\tlastNodeId,\n\t\tstaticControllerNodeId,\n\t\tsucLastIndex,\n\t\tcontrollerConfiguration,\n\t\tsucUpdateEntries,\n\t\tmaxNodeId,\n\t\treservedId,\n\t\tsystemState,\n\t\twatchdogStarted,\n\t\trfConfig: {\n\t\t\tpowerLevelNormal,\n\t\t\tpowerLevelLow,\n\t\t\tpowerMode,\n\t\t\tpowerModeExtintEnable,\n\t\t\tpowerModeWutTimeout,\n\t\t},\n\t\tpreferredRepeaters,\n\t\tcommandClasses,\n\t\tapplicationData:\n\t\t\t(applicationData && Bytes.view(applicationData).toString(\"hex\"))\n\t\t\t\t?? null,\n\t};\n\n\treturn {\n\t\tformat: 500,\n\t\tmeta,\n\t\tcontroller,\n\t\tnodes,\n\t};\n}\n\nexport async function jsonToNVM(\n\tjson: NVMJSON,\n\ttargetSDKVersion: string,\n): Promise<BytesView> {\n\tconst parsedVersion = semverParse(targetSDKVersion);\n\tif (!parsedVersion) {\n\t\tthrow new ZWaveError(\n\t\t\t`Invalid SDK version: ${targetSDKVersion}`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\t// Erase the NVM\n\tconst sharedFileSystem = json.meta?.sharedFileSystem;\n\tconst nvmSize = sharedFileSystem\n\t\t? ZWAVE_SHARED_NVM_SIZE\n\t\t: (ZWAVE_APPLICATION_NVM_SIZE + ZWAVE_PROTOCOL_NVM_SIZE);\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm3 = new NVM3(io);\n\tawait nvm3.erase(json.meta);\n\n\tconst serializeFile = async (file: NVMFile) => {\n\t\tconst { key, data } = file.serialize();\n\t\tawait nvm3.set(key, data);\n\t};\n\n\t// Figure out which SDK version we are targeting\n\tlet targetApplicationVersion: SemVer;\n\tlet targetProtocolVersion: SemVer;\n\tlet targetProtocolFormat: number;\n\n\t// We currently support application version migrations up to:\n\tconst HIGHEST_SUPPORTED_SDK_VERSION = \"7.21.0\";\n\t// For all higher ones, set the highest version we support and let the controller handle the migration itself\n\tif (semverLte(targetSDKVersion, HIGHEST_SUPPORTED_SDK_VERSION)) {\n\t\ttargetApplicationVersion = semverParse(targetSDKVersion)!;\n\t} else {\n\t\ttargetApplicationVersion = semverParse(HIGHEST_SUPPORTED_SDK_VERSION)!;\n\t}\n\n\t// The protocol version file only seems to be updated when the format of the protocol file system changes\n\t// Once again, we simply set the highest version we support here and let the controller handle any potential migration\n\tif (semverGte(targetSDKVersion, \"7.19.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.19.0\")!;\n\t\ttargetProtocolFormat = 5;\n\t} else if (semverGte(targetSDKVersion, \"7.17.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.17.0\")!;\n\t\ttargetProtocolFormat = 4;\n\t} else if (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.15.3\")!;\n\t\ttargetProtocolFormat = 3;\n\t} else if (semverGte(targetSDKVersion, \"7.12.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.12.0\")!;\n\t\ttargetProtocolFormat = 2;\n\t} else if (semverGte(targetSDKVersion, \"7.11.0\")) {\n\t\ttargetProtocolVersion = semverParse(\"7.11.0\")!;\n\t\ttargetProtocolFormat = 1;\n\t} else {\n\t\ttargetProtocolVersion = semverParse(\"7.0.0\")!;\n\t\ttargetProtocolFormat = 0;\n\t}\n\n\tconst target = cloneDeep(json);\n\ttarget.controller.protocolVersion = targetProtocolVersion.format();\n\ttarget.format = targetProtocolFormat;\n\ttarget.controller.applicationVersion = parsedVersion.format();\n\n\t// Write application and protocol version files, because they are required\n\t// for the NVM3 adapter to work.\n\tconst ApplicationVersionConstructor = sharedFileSystem\n\t\t? ApplicationVersionFile800\n\t\t: ApplicationVersionFile;\n\tconst applVersionFile = new ApplicationVersionConstructor({\n\t\tformat: 0,\n\t\tmajor: targetApplicationVersion.major,\n\t\tminor: targetApplicationVersion.minor,\n\t\tpatch: targetApplicationVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(applVersionFile);\n\n\tconst protocolVersionFile = new ProtocolVersionFile({\n\t\tformat: targetProtocolFormat,\n\t\tmajor: targetProtocolVersion.major,\n\t\tminor: targetProtocolVersion.minor,\n\t\tpatch: targetProtocolVersion.patch,\n\t\tfileVersion: targetProtocolVersion.format(), // does not matter for this file\n\t});\n\tawait serializeFile(protocolVersionFile);\n\t{\n\t\tconst { key, data } = protocolVersionFile.serialize();\n\t\tawait nvm3.set(key, data);\n\t}\n\n\t// Now use the adapter where possible. Some properties have to be set together though,\n\t// so we set the files directly\n\tconst adapter = new NVM3Adapter(nvm3);\n\n\t// Start with the application data\n\n\tconst applTypeFile = new ApplicationTypeFile({\n\t\t...pick(target.controller, [\n\t\t\t\"isListening\",\n\t\t\t\"optionalFunctionality\",\n\t\t\t\"genericDeviceClass\",\n\t\t\t\"specificDeviceClass\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applTypeFile);\n\n\tconst applCCsFile = new ApplicationCCsFile({\n\t\t...pick(target.controller.commandClasses, [\n\t\t\t\"includedInsecurely\",\n\t\t\t\"includedSecurelyInsecureCCs\",\n\t\t\t\"includedSecurelySecureCCs\",\n\t\t]),\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applCCsFile);\n\n\t// When converting it can be that the rfConfig doesn't exist. Make sure\n\t// that it is initialized with proper defaults.\n\ttarget.controller.rfConfig ??= {\n\t\trfRegion: RFRegion[\"Default (EU)\"],\n\t\ttxPower: 0.0,\n\t\tmeasured0dBm: 3.3,\n\t\tenablePTI: null,\n\t\tmaxTXPower: null,\n\t\tnodeIdType: null,\n\t};\n\n\t// Make sure the RF config format matches the application version.\n\t// Otherwise, the controller will ignore the file and not accept any changes to the RF config\n\tif (semverGte(targetSDKVersion, \"7.15.3\")) {\n\t\ttarget.controller.rfConfig.enablePTI ??= 0;\n\t\ttarget.controller.rfConfig.maxTXPower ??= 14.0;\n\t}\n\tif (semverGte(targetSDKVersion, \"7.21.0\")) {\n\t\ttarget.controller.rfConfig.nodeIdType ??= NodeIDType.Short;\n\t}\n\n\tconst applRFConfigFile = new ApplicationRFConfigFile({\n\t\t...pick(target.controller.rfConfig, [\n\t\t\t\"rfRegion\",\n\t\t\t\"txPower\",\n\t\t\t\"measured0dBm\",\n\t\t]),\n\t\tenablePTI: target.controller.rfConfig.enablePTI ?? undefined,\n\t\tmaxTXPower: target.controller.rfConfig.maxTXPower ?? undefined,\n\t\tnodeIdType: target.controller.rfConfig.nodeIdType ?? undefined,\n\t\tfileVersion: target.controller.applicationVersion,\n\t});\n\tadapter.setFile(applRFConfigFile);\n\n\tif (target.controller.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(target.controller.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// The application name only seems to be used on 800 series with the shared file system\n\tif (target.controller.applicationName && target.meta?.sharedFileSystem) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationName\" },\n\t\t\ttarget.controller.applicationName,\n\t\t);\n\t}\n\n\t// Now the protocol data\n\n\t// TODO: node IDs and LR node IDs should probably be handled by the NVM adapter when\n\t// setting the node info. But then we need to make sure here that the files are guaranteed to exist\n\tconst nodeInfoExists = new Set<number>();\n\tconst lrNodeInfoExists = new Set<number>();\n\tconst virtualNodeIds = new Set<number>();\n\n\tconst appRouteLock = new Set<number>();\n\tconst routeSlaveSUC = new Set<number>();\n\tconst sucPendingUpdate = new Set<number>();\n\tconst pendingDiscovery = new Set<number>();\n\n\t// Ensure that the route cache exists nodemask is written, even when no routes exist\n\tadapter.setFile(\n\t\tnew ProtocolRouteCacheExistsNodeMaskFile({\n\t\t\tnodeIds: [],\n\t\t\tfileVersion: target.controller.protocolVersion,\n\t\t}),\n\t);\n\n\tfor (const [id, node] of Object.entries(target.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.add(nodeId);\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tnodeInfoExists.add(nodeId);\n\t\t\tif (node.isVirtual) virtualNodeIds.add(nodeId);\n\t\t\tif (node.appRouteLock) appRouteLock.add(nodeId);\n\t\t\tif (node.routeSlaveSUC) routeSlaveSUC.add(nodeId);\n\t\t\tif (node.sucPendingUpdate) sucPendingUpdate.add(nodeId);\n\t\t\tif (node.pendingDiscovery) pendingDiscovery.add(nodeId);\n\t\t}\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\tnvmJSONNodeToNodeInfo(nodeId, node),\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? getEmptyRoute(),\n\t\t\t\t\tnlwr: node.nlwr ?? getEmptyRoute(),\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeIds\" },\n\t\t[...nodeInfoExists],\n\t);\n\n\tif (target.lrNodes) {\n\t\tfor (const [id, node] of Object.entries(target.lrNodes)) {\n\t\t\tconst nodeId = parseInt(id);\n\t\t\tlrNodeInfoExists.add(nodeId);\n\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"lrnode\", nodeId, type: \"info\" },\n\t\t\t\tnvmJSONLRNodeToLRNodeInfo(nodeId, node),\n\t\t\t);\n\t\t}\n\t}\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lrNodeIds\" },\n\t\t[...lrNodeInfoExists],\n\t);\n\n\t// For v3+ targets, the ControllerInfoFile must contain the LongRange properties\n\t// or the controller will ignore the file and not have a home ID\n\tif (targetProtocolFormat >= 3) {\n\t\ttarget.controller.lastNodeIdLR ??= 255;\n\t\ttarget.controller.maxNodeIdLR ??= 0;\n\t\ttarget.controller.reservedIdLR ??= 0;\n\t\ttarget.controller.primaryLongRangeChannelId ??= 0;\n\t\ttarget.controller.dcdcConfig ??= 255;\n\t}\n\tadapter.setFile(\n\t\tnew ControllerInfoFile(\n\t\t\tnvmJSONControllerToFileOptions(target.controller),\n\t\t),\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tif (target.controller.preferredRepeaters?.length) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\t\ttarget.controller.preferredRepeaters,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\ttarget.controller.sucUpdateEntries,\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\n/** Takes a JSON represented 500 series NVM and converts it to binary */\nexport async function jsonToNVM500(\n\tjson: Required<NVM500JSON>,\n\tprotocolVersion: string,\n): Promise<BytesView> {\n\t// Try to find a matching implementation\n\tconst impl = nvm500Impls.find(\n\t\t(p) =>\n\t\t\tp.protocolVersions.includes(protocolVersion)\n\t\t\t&& p.name.toLowerCase().startsWith(json.meta.library),\n\t);\n\n\tif (!impl) {\n\t\tthrow new ZWaveError(\n\t\t\t`Did not find a matching implementation for protocol version ${protocolVersion} and library ${json.meta.library}. To convert 500-series NVMs, both the source and the target controller must be using Z-Wave SDK 6.61 or higher.`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t}\n\n\tconst { layout, nvmSize } = resolveLayout(impl.layout);\n\n\t// Erase the NVM and set some basic information\n\tconst ret = new Uint8Array(nvmSize);\n\tconst io = new NVMMemoryIO(ret);\n\tconst nvm = new NVM500(io);\n\tawait nvm.erase({\n\t\tlayout,\n\t\tnvmSize,\n\t\tlibrary: impl.library,\n\t\tnvmDescriptor: {\n\t\t\t...pick(json.meta, [\n\t\t\t\t\"manufacturerID\",\n\t\t\t\t\"productType\",\n\t\t\t\t\"productID\",\n\t\t\t\t\"firmwareID\",\n\t\t\t]),\n\t\t\t// Override the protocol version with the specified one\n\t\t\tprotocolVersion,\n\t\t\tfirmwareVersion: json.controller.applicationVersion,\n\t\t},\n\t});\n\n\tconst adapter = new NVM500Adapter(nvm);\n\n\t// Set controller infos\n\tconst c = json.controller;\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"homeId\" },\n\t\tBytes.from(c.ownHomeId.replace(/^0x/, \"\"), \"hex\"),\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"learnedHomeId\" },\n\t\tc.learnedHomeId\n\t\t\t? Bytes.from(c.learnedHomeId.replace(/^0x/, \"\"), \"hex\")\n\t\t\t: undefined,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"nodeId\" },\n\t\tc.nodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"lastNodeId\" },\n\t\tc.lastNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"maxNodeId\" },\n\t\tc.maxNodeId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"reservedId\" },\n\t\tc.reservedId,\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"staticControllerNodeId\" },\n\t\tc.staticControllerNodeId,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"controllerConfiguration\" },\n\t\tc.controllerConfiguration,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucUpdateEntries\" },\n\t\tc.sucUpdateEntries,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucLastIndex\" },\n\t\tc.sucLastIndex,\n\t);\n\n\tif (c.systemState != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"systemState\" },\n\t\t\tc.systemState,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"watchdogStarted\" },\n\t\tc.watchdogStarted,\n\t);\n\n\tif (c.rfConfig.powerLevelNormal != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelNormal\" },\n\t\t\tc.rfConfig.powerLevelNormal,\n\t\t);\n\t}\n\tif (c.rfConfig.powerLevelLow != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerLevelLow\" },\n\t\t\tc.rfConfig.powerLevelLow,\n\t\t);\n\t}\n\tif (c.rfConfig.powerMode != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerMode\" },\n\t\t\tc.rfConfig.powerMode,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeExtintEnable != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeExtintEnable\" },\n\t\t\tc.rfConfig.powerModeExtintEnable,\n\t\t);\n\t}\n\tif (c.rfConfig.powerModeWutTimeout != undefined) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"powerModeWutTimeout\" },\n\t\t\tc.rfConfig.powerModeWutTimeout,\n\t\t);\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"preferredRepeaters\" },\n\t\tc.preferredRepeaters,\n\t);\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"commandClasses\" },\n\t\tc.commandClasses,\n\t);\n\n\tif (c.applicationData) {\n\t\tawait adapter.set(\n\t\t\t{ domain: \"controller\", type: \"applicationData\" },\n\t\t\tBytes.from(c.applicationData, \"hex\"),\n\t\t);\n\t}\n\n\t// Set node infos\n\tconst appRouteLock: number[] = [];\n\tconst routeSlaveSUC: number[] = [];\n\tconst pendingDiscovery: number[] = [];\n\tconst sucPendingUpdate: number[] = [];\n\tconst virtualNodeIds: number[] = [];\n\n\tfor (const [id, node] of Object.entries(json.nodes)) {\n\t\tconst nodeId = parseInt(id);\n\t\tif (!nodeHasInfo(node)) {\n\t\t\tvirtualNodeIds.push(nodeId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (node.appRouteLock) appRouteLock.push(nodeId);\n\t\tif (node.routeSlaveSUC) routeSlaveSUC.push(nodeId);\n\t\tif (node.pendingDiscovery) pendingDiscovery.push(nodeId);\n\t\tif (node.sucPendingUpdate) sucPendingUpdate.push(nodeId);\n\n\t\tawait adapter.set(\n\t\t\t{ domain: \"node\", nodeId, type: \"info\" },\n\t\t\t{\n\t\t\t\tnodeId,\n\t\t\t\t...node,\n\t\t\t},\n\t\t);\n\n\t\tif (node.lwr || node.nlwr) {\n\t\t\tawait adapter.set(\n\t\t\t\t{ domain: \"node\", nodeId, type: \"routes\" },\n\t\t\t\t{\n\t\t\t\t\tlwr: node.lwr ?? undefined,\n\t\t\t\t\tnlwr: node.nlwr ?? undefined,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"appRouteLock\" },\n\t\t[...appRouteLock],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"routeSlaveSUC\" },\n\t\t[...routeSlaveSUC],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"sucPendingUpdate\" },\n\t\t[...sucPendingUpdate],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"virtualNodeIds\" },\n\t\t[...virtualNodeIds],\n\t);\n\tawait adapter.set(\n\t\t{ domain: \"controller\", type: \"pendingDiscovery\" },\n\t\t[...pendingDiscovery],\n\t);\n\n\tawait adapter.commit();\n\tawait io.close();\n\treturn ret;\n}\n\nexport function json500To700(\n\tjson: NVM500JSON,\n\ttruncateApplicationData?: boolean,\n): NVMJSON {\n\tconst source = cloneDeep(json);\n\n\t// On the 500 series, some properties are only defined for the nodes, so we pull it off the\n\t// controller's node entry\n\tlet controllerNode = source.nodes[\n\t\tsource.controller.nodeId || 1\n\t] as NVMJSONNodeWithInfo; // Little hack because TS doesn't type check the union type properly\n\tif (!nodeHasInfo(controllerNode)) {\n\t\t// No information available, use sensible defaults\n\t\tcontrollerNode = {\n\t\t\tisListening: true,\n\t\t\toptionalFunctionality: false,\n\t\t\t// Static PC Controller\n\t\t\tgenericDeviceClass: 0x02,\n\t\t\tspecificDeviceClass: 0x01,\n\t\t} as any;\n\t}\n\n\tlet applicationData: string | null = null;\n\tif (source.controller.applicationData) {\n\t\tlet raw = Bytes.from(source.controller.applicationData, \"hex\");\n\t\t// Find actual start and end of application data, ignoring zeroes\n\t\tlet start = 0;\n\t\twhile (start < raw.length && raw[start] === 0) {\n\t\t\tstart++;\n\t\t}\n\t\tlet end = raw.length - 1;\n\t\twhile (end > start && raw[end] === 0) {\n\t\t\tend--;\n\t\t}\n\t\traw = raw.subarray(start, end + 1);\n\t\tif (raw.length > 512) {\n\t\t\tif (!truncateApplicationData) {\n\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\"Invalid NVM JSON: Application data would be truncated! Set truncateApplicationData to true to allow this.\",\n\t\t\t\t\tZWaveErrorCodes.NVM_InvalidJSON,\n\t\t\t\t);\n\t\t\t}\n\t\t\traw = raw.subarray(0, 512);\n\t\t}\n\t\tapplicationData = raw.toString(\"hex\");\n\t}\n\n\t// https://github.com/zwave-js/zwave-js/issues/6055\n\t// On some controllers this byte can be 0xff (effectively not set)\n\tlet controllerConfiguration = source.controller.controllerConfiguration;\n\tif (source.controller.controllerConfiguration === 0xff) {\n\t\t// Default to SUC/Primary\n\t\tcontrollerConfiguration = ControllerCapabilityFlags.SISPresent\n\t\t\t| ControllerCapabilityFlags.WasRealPrimary\n\t\t\t| ControllerCapabilityFlags.SUC;\n\t}\n\n\tlet homeId: string;\n\tif (\n\t\t!!(\n\t\t\tcontrollerConfiguration & ControllerCapabilityFlags.OnOtherNetwork\n\t\t)\n\t\t&& source.controller.learnedHomeId\n\t\t&& source.controller.nodeId\n\t) {\n\t\t// The controller did not start the network itself. We only keep this if we have a home ID and node ID\n\t\thomeId = source.controller.learnedHomeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\thomeId = source.controller.ownHomeId;\n\t\tcontrollerConfiguration &= ~ControllerCapabilityFlags.OnOtherNetwork;\n\t\t// Reconstruct the node ID. If we don't know, 1 is a good default\n\t\tif (controllerConfiguration & ControllerCapabilityFlags.SUC) {\n\t\t\tsource.controller.nodeId = source.controller.staticControllerNodeId\n\t\t\t\t|| 1;\n\t\t} else {\n\t\t\tsource.controller.nodeId = 1;\n\t\t}\n\t}\n\n\t// https://github.com/zwave-js/zwave-js/issues/6055\n\t// Some controllers have invalid information for the IDs\n\tlet maxNodeId = source.controller.maxNodeId;\n\tif (maxNodeId === 0xff) maxNodeId = source.controller.lastNodeId;\n\tlet reservedId = source.controller.reservedId;\n\tif (reservedId === 0xff) reservedId = 0;\n\n\tconst ret: NVMJSON = {\n\t\t// Start out with format 0 (= protocol version 7.0.0), the jsonToNVM routines will do further conversion\n\t\tformat: 0,\n\t\tcontroller: {\n\t\t\t// This will contain the original 6.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\thomeId,\n\t\t\tnodeId: source.controller.nodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId,\n\t\t\treservedId,\n\t\t\tsystemState: source.controller.systemState ?? 0,\n\t\t\tpreferredRepeaters: source.controller.preferredRepeaters,\n\n\t\t\t// RF config exists on both series but isn't compatible\n\n\t\t\tisListening: controllerNode.isListening,\n\t\t\toptionalFunctionality: controllerNode.optionalFunctionality,\n\t\t\tgenericDeviceClass: controllerNode.genericDeviceClass,\n\t\t\tspecificDeviceClass: controllerNode.specificDeviceClass ?? 0,\n\n\t\t\tcommandClasses: {\n\t\t\t\tincludedInsecurely: source.controller.commandClasses,\n\t\t\t\tincludedSecurelyInsecureCCs: [],\n\t\t\t\tincludedSecurelySecureCCs: [],\n\t\t\t},\n\n\t\t\tapplicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// but the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\nexport function json700To500(json: NVMJSON): NVM500JSON {\n\tconst source = cloneDeep(json);\n\n\tlet ownHomeId: string;\n\tlet learnedHomeId: string | null = null;\n\tlet nodeId: number;\n\tif (\n\t\tsource.controller.controllerConfiguration\n\t\t& ControllerCapabilityFlags.OnOtherNetwork\n\t) {\n\t\t// The controller did not start the network itself\n\t\townHomeId = learnedHomeId = source.controller.homeId;\n\t\tnodeId = source.controller.nodeId;\n\t} else {\n\t\t// The controller did start the network itself\n\t\townHomeId = source.controller.homeId;\n\t\t// 500 series controllers expect the node ID to be 0 when they are the primary\n\t\tnodeId = 0;\n\t}\n\n\tconst ret: NVM500JSON = {\n\t\tformat: 500,\n\t\tcontroller: {\n\t\t\t// This will contain the original 7.x protocol version, but the jsonToNVM routines will update it\n\t\t\tprotocolVersion: source.controller.protocolVersion,\n\t\t\tapplicationVersion: source.controller.applicationVersion,\n\t\t\t// The 700 series does not distinguish between own and learned home ID in NVM\n\t\t\t// We infer it from the controller configuration if we need it\n\t\t\townHomeId,\n\t\t\tlearnedHomeId,\n\t\t\tnodeId,\n\t\t\tlastNodeId: source.controller.lastNodeId,\n\t\t\tstaticControllerNodeId: source.controller.staticControllerNodeId,\n\t\t\tsucLastIndex: source.controller.sucLastIndex,\n\t\t\tcontrollerConfiguration: source.controller.controllerConfiguration,\n\t\t\tsucUpdateEntries: source.controller.sucUpdateEntries,\n\t\t\tmaxNodeId: source.controller.maxNodeId,\n\t\t\treservedId: source.controller.reservedId,\n\t\t\tsystemState: source.controller.systemState,\n\t\t\twatchdogStarted: 0,\n\t\t\tpreferredRepeaters: json.controller.preferredRepeaters ?? [],\n\n\t\t\t// RF config exists on both series but isn't compatible. So set the default,\n\t\t\t// it will be taken from the target NVM on restore.\n\t\t\trfConfig: {\n\t\t\t\tpowerLevelNormal: [255, 255, 255],\n\t\t\t\tpowerLevelLow: [255, 255, 255],\n\t\t\t\tpowerMode: 255,\n\t\t\t\tpowerModeExtintEnable: 255,\n\t\t\t\tpowerModeWutTimeout: 0xffffffff,\n\t\t\t},\n\n\t\t\tcommandClasses: source.controller.commandClasses.includedInsecurely,\n\n\t\t\tapplicationData: source.controller.applicationData,\n\t\t},\n\t\t// The node entries are actually compatible between the two JSON versions\n\t\t// just the types are structured differently\n\t\tnodes: source.nodes,\n\t};\n\treturn ret;\n}\n\n/** Converts the given source NVM into a format that is compatible with the given target NVM */\nexport async function migrateNVM(\n\tsourceNVM: BytesView,\n\ttargetNVM: BytesView,\n\toptions: MigrateNVMOptions = {},\n): Promise<BytesView> {\n\tlet source: ParsedNVM;\n\tlet target: ParsedNVM;\n\tlet sourceProtocolFileFormat: number | undefined;\n\tlet targetProtocolFileFormat: number | undefined;\n\n\ttry {\n\t\tsource = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(sourceNVM),\n\t\t};\n\t\tsourceProtocolFileFormat = source.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\tsource = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(sourceNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\tsource = { type: \"unknown\" };\n\t\t\tsourceProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\tsource = { type: \"unknown\" };\n\t\t}\n\t}\n\n\ttry {\n\t\ttarget = {\n\t\t\ttype: 700,\n\t\t\tjson: await nvmToJSON(targetNVM),\n\t\t};\n\t\ttargetProtocolFileFormat = target.json.format;\n\t} catch (e) {\n\t\tif (isZWaveError(e) && e.code === ZWaveErrorCodes.NVM_InvalidFormat) {\n\t\t\t// This is not a 700 series NVM, maybe it is a 500 series one?\n\t\t\ttarget = {\n\t\t\t\ttype: 500,\n\t\t\t\tjson: await nvm500ToJSON(targetNVM),\n\t\t\t};\n\t\t} else if (\n\t\t\tisZWaveError(e)\n\t\t\t&& e.code === ZWaveErrorCodes.NVM_NotSupported\n\t\t\t&& source.type === 700\n\t\t\t&& isObject(e.context)\n\t\t\t&& typeof e.context.protocolFileFormat === \"number\"\n\t\t) {\n\t\t\t// This is a 700 series NVM, but the protocol version is not (yet) supported\n\t\t\ttarget = { type: \"unknown\" };\n\t\t\ttargetProtocolFileFormat = e.context.protocolFileFormat;\n\t\t} else {\n\t\t\ttarget = { type: \"unknown\" };\n\t\t}\n\t}\n\n\tconst {\n\t\tpreserveApplicationData = true,\n\t\tpreserveNeighbors = true,\n\t\tpreserveRoutes = true,\n\t\tpreserveSUCUpdateEntries = true,\n\t} = options;\n\n\tconst preserveAll = preserveApplicationData\n\t\t&& preserveNeighbors\n\t\t&& preserveRoutes\n\t\t&& preserveSUCUpdateEntries;\n\n\t// Short circuit if...\n\tif (\n\t\ttarget.type === \"unknown\"\n\t\t&& targetProtocolFileFormat\n\t\t&& targetProtocolFileFormat > MAX_PROTOCOL_FILE_FORMAT\n\t\t&& sourceProtocolFileFormat\n\t\t&& sourceProtocolFileFormat <= targetProtocolFileFormat\n\t\t&& sourceNVM.length === targetNVM.length\n\t\t// ...everything should be preserved and...\n\t\t&& preserveAll\n\t) {\n\t\t// ...both the source and the target are 700 series, but at least the target uses an unsupported protocol version.\n\t\t// We can be sure however that the target can upgrade any 700 series NVM to its protocol version, as long as the\n\t\t// source protocol version is not higher than the target's\n\t\treturn sourceNVM;\n\t} else if (\n\t\tsource.type === 700\n\t\t&& target.type === 700\n\t\t// ...the source and target NVMs have the same size and structure\n\t\t&& sourceNVM.length === targetNVM.length\n\t\t&& source.json.meta.sharedFileSystem\n\t\t\t=== target.json.meta.sharedFileSystem\n\t\t// ...everything should be preserved,...\n\t\t&& preserveAll\n\t) {\n\t\t// ... the source and target protocol versions are compatible without conversion\n\t\tconst sourceProtocolVersion = source.json.controller.protocolVersion;\n\t\tconst targetProtocolVersion = target.json.controller.protocolVersion;\n\t\t// ... and the application version on the both is compatible with the respective protocol version\n\t\tconst sourceApplicationVersion =\n\t\t\tsource.json.controller.applicationVersion;\n\t\tconst targetApplicationVersion =\n\t\t\ttarget.json.controller.applicationVersion;\n\n\t\t// The 700 series firmware can automatically upgrade backups from a previous protocol version\n\t\t// Not sure when that ability was added. To be on the safe side, allow it for 7.16+ which definitely supports it.\n\t\tif (\n\t\t\tsemverGte(targetProtocolVersion, \"7.16.0\")\n\t\t\t&& semverGte(targetProtocolVersion, sourceProtocolVersion)\n\t\t\t// the application version is updated on every update, protocol version only when the format changes\n\t\t\t// so this is a good indicator if the NVMs are in a compatible state\n\t\t\t&& semverGte(targetApplicationVersion, targetProtocolVersion)\n\t\t\t&& semverGte(sourceApplicationVersion, sourceProtocolVersion)\n\t\t\t// avoid preserving broken 255.x versions which appear on some controllers\n\t\t\t&& semverLt(sourceApplicationVersion, \"255.0.0\")\n\t\t\t&& semverLt(targetApplicationVersion, \"255.0.0\")\n\t\t\t// and avoid restoring a backup with a shifted 800 series application version file\n\t\t\t&& (!hasShiftedAppVersion800File(source.json))\n\t\t) {\n\t\t\treturn sourceNVM;\n\t\t}\n\t} else if (source.type === \"unknown\" && target.type !== \"unknown\") {\n\t\t// ...only the source has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The source NVM has an unsupported format, which cannot be restored on a ${target.type}-series NVM!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type !== \"unknown\" && target.type === \"unknown\") {\n\t\t// ...only the target has an unsupported format, so we have to convert but can't\n\t\tthrow new ZWaveError(\n\t\t\t`The target NVM has an unsupported format, cannot restore ${source.type}-series NVM onto it!`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t} else if (source.type === \"unknown\" && target.type === \"unknown\") {\n\t\t// ...both are an unsupported format, meaning pre-6.61 SDK, which we cannot convert\n\t\treturn sourceNVM;\n\t}\n\n\t// TypeScript doesn't understand multi-variable narrowings (yet)\n\tsource = source as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\ttarget = target as Exclude<ParsedNVM, { type: \"unknown\" }>;\n\n\t// Some 700 series NVMs have a strange 255.x application version - fix that first\n\tif (\n\t\ttarget.type === 700\n\t\t&& semverGte(target.json.controller.applicationVersion, \"255.0.0\")\n\t) {\n\t\t// replace both with the protocol version\n\t\ttarget.json.controller.applicationVersion =\n\t\t\ttarget.json.controller.protocolVersion;\n\t}\n\n\t// In any case, preserve the application version of the target stick\n\tsource.json.controller.applicationVersion =\n\t\ttarget.json.controller.applicationVersion;\n\n\t// Remove information we do not want to preserve\n\tif (!preserveApplicationData) {\n\t\tsource.json.controller.applicationData = undefined;\n\t}\n\tif (!preserveNeighbors) {\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.neighbors = [];\n\t\t\t}\n\t\t}\n\t}\n\tif (!preserveRoutes) {\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.appRouteLock = false;\n\t\t\t\tnode.lwr = undefined;\n\t\t\t\tnode.nlwr = undefined;\n\t\t\t}\n\t\t}\n\t}\n\tif (!preserveSUCUpdateEntries) {\n\t\tsource.json.controller.sucUpdateEntries = [];\n\t\tsource.json.controller.sucLastIndex = 0xff;\n\t\tfor (const node of Object.values(source.json.nodes)) {\n\t\t\tif (!node.isVirtual) {\n\t\t\t\tnode.sucUpdateIndex = 0xfe;\n\t\t\t\tnode.sucPendingUpdate = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (source.type === 500 && target.type === 500) {\n\t\t// Both are 500, so we just need to update the metadata to match the target\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...source.json,\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// If the target is a 500 series stick, preserve the RF config\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else if (source.type === 500 && target.type === 700) {\n\t\t// We need to upgrade the source to 700 series\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\tlrNodes: {},\n\t\t\t...json500To700(source.json, true),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t} else if (source.type === 700 && target.type === 500) {\n\t\t// We need to downgrade the source to 500 series\n\t\tconst json: Required<NVM500JSON> = {\n\t\t\t...json700To500(source.json),\n\t\t\tmeta: target.json.meta,\n\t\t};\n\t\t// The target is a different series, try to preserve the RF config of the target stick\n\t\tjson.controller.rfConfig = target.json.controller.rfConfig;\n\t\treturn jsonToNVM500(json, target.json.controller.protocolVersion);\n\t} else {\n\t\t// Both are 700, so we just need to update the metadata to match the target\n\t\tconst json: NVMJSONWithMeta = {\n\t\t\t...(source.json as NVMJSONWithMeta),\n\t\t\tmeta: (target.json as NVMJSONWithMeta).meta,\n\t\t};\n\t\t// 700 series distinguishes the NVM format by the application version\n\t\treturn jsonToNVM(json, target.json.controller.applicationVersion);\n\t}\n}\n\n/**\n * Detects whether the app version file on a 800 series controller is shifted by 1 byte\n */\nfunction hasShiftedAppVersion800File(\n\tjson: NVMJSONWithMeta,\n): boolean {\n\t// We can only detect this on 800 series controllers with the shared FS\n\tif (!json.meta.sharedFileSystem) return false;\n\n\tconst protocolVersion = semverParse(json.controller.protocolVersion);\n\t// Invalid protocol version, cannot fix anything\n\tif (!protocolVersion) return false;\n\n\tconst applicationVersion = semverParse(json.controller.applicationVersion);\n\t// Invalid application version, cannot fix anything\n\tif (!applicationVersion) return false;\n\n\t// We consider the version shifted if:\n\t// - the app version format is the major protocol version\n\t// - the app version major is the minor protocol version +/- 3\n\n\tif (json.applicationFileFormat !== protocolVersion.major) return false;\n\tif (Math.abs(applicationVersion.major - protocolVersion.minor) > 3) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_consts", "import_adapter", "import_shared", "ret", "semverParse", "semverLte", "semverGte", "semverLt"]
|
|
7
7
|
}
|
|
@@ -39,7 +39,7 @@ export declare function nvmFileID<Class extends typeof NVMFile>(id: number | ((i
|
|
|
39
39
|
/**
|
|
40
40
|
* Retrieves the file ID defined for a NVM file class
|
|
41
41
|
*/
|
|
42
|
-
export declare function getNVMFileID
|
|
42
|
+
export declare function getNVMFileID(id: NVMFile): number | ((id: number) => boolean);
|
|
43
43
|
/**
|
|
44
44
|
* Looks up the NVM file constructor for a given file ID
|
|
45
45
|
*/
|
|
@@ -47,7 +47,7 @@ export declare function getNVMFileConstructor(id: number): NVMFileConstructor<NV
|
|
|
47
47
|
/**
|
|
48
48
|
* Retrieves the file ID defined for a NVM file class
|
|
49
49
|
*/
|
|
50
|
-
export declare function getNVMFileIDStatic
|
|
50
|
+
export declare function getNVMFileIDStatic(classConstructor: NVMFileConstructor<NVMFile>): number | ((id: number) => boolean);
|
|
51
51
|
export type NVMSection = "application" | "protocol";
|
|
52
52
|
/** Defines in which section an NVM file is stored */
|
|
53
53
|
export declare const nvmSection: <TTarget extends typeof NVMFile>(section: NVMSection) => TypedClassDecorator<TTarget>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/NVMFile.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { createSimpleReflectionDecorator } from \"@zwave-js/core/reflection\";\nimport {\n\tBytes,\n\ttype BytesView,\n\ttype TypedClassDecorator,\n\tisUint8Array,\n\tnum2hex,\n} from \"@zwave-js/shared\";\nimport {\n\tFragmentType,\n\tNVM3_MAX_OBJ_SIZE_SMALL,\n\tObjectType,\n} from \"../consts.js\";\nimport type { NVM3Object } from \"../object.js\";\n\nexport interface NVMFileBaseOptions {\n\tfileId?: number;\n\tfileVersion: string;\n}\nexport interface NVMFileDeserializationOptions extends NVMFileBaseOptions {\n\tfileId: number;\n\tdata: Bytes;\n}\n\nexport function gotDeserializationOptions(\n\toptions: NVMFileOptions,\n): options is NVMFileDeserializationOptions {\n\treturn \"data\" in options && isUint8Array(options.data);\n}\n\nexport interface NVMFileCreationOptions extends NVMFileBaseOptions {}\n\nexport type NVMFileOptions =\n\t| NVMFileCreationOptions\n\t| NVMFileDeserializationOptions;\n\nexport class NVMFile {\n\tpublic constructor(options: NVMFileOptions) {\n\t\tthis.fileVersion = options.fileVersion;\n\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.fileId = options.fileId;\n\t\t\tthis.payload = options.data;\n\t\t} else {\n\t\t\tconst fileId = options.fileId ?? getNVMFileID(this);\n\t\t\tif (typeof fileId === \"number\") {\n\t\t\t\tthis.fileId = fileId;\n\t\t\t}\n\t\t\tthis.payload = new Bytes();\n\t\t}\n\t}\n\n\tprotected payload: Bytes;\n\tpublic fileId: number = 0;\n\tpublic fileVersion: string;\n\n\t/**\n\t * Creates an instance of the NVM file that is contained in the given NVM object\n\t */\n\tpublic static from(\n\t\tfileId: number,\n\t\tdata: BytesView,\n\t\tfileVersion: string,\n\t): NVMFile {\n\t\tconst Constructor = getNVMFileConstructor(fileId)!;\n\t\treturn new Constructor({\n\t\t\tfileId,\n\t\t\tfileVersion,\n\t\t\tdata,\n\t\t});\n\t}\n\n\t/**\n\t * Serializes this NVMFile into an NVM Object\n\t */\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tif (!this.fileId) {\n\t\t\tthrow new Error(\"The NVM file ID must be set before serializing\");\n\t\t}\n\t\treturn {\n\t\t\tkey: this.fileId,\n\t\t\tdata: this.payload,\n\t\t\t// We only support large and small data objects for now\n\t\t\ttype: this.payload.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t: ObjectType.DataLarge,\n\t\t\t// By default output unfragmented objects, they will be split later\n\t\t\tfragmentType: FragmentType.None,\n\t\t};\n\t}\n\n\tpublic toJSON(): Record<string, any> {\n\t\treturn {\n\t\t\t\"file ID\": `0x${\n\t\t\t\tthis.fileId.toString(16)\n\t\t\t} (${this.constructor.name})`,\n\t\t};\n\t}\n}\n\nconst METADATA_nvmFileID = Symbol(\"nvmFileID\");\nconst METADATA_nvmFileIDMap = Symbol(\"nvmFileIDMap\");\n\ntype NVMFileIDMap = Map<\n\tnumber | ((id: number) => boolean),\n\tNVMFileConstructor<NVMFile>\n>;\n\nexport type NVMFileConstructor<T extends NVMFile> = typeof NVMFile & {\n\tnew (options: any): T;\n};\n\n/**\n * Defines the ID associated with a NVM file class\n */\nexport function nvmFileID<Class extends typeof NVMFile>(\n\tid: number | ((id: number) => boolean),\n): TypedClassDecorator<Class> {\n\treturn (messageClass) => {\n\t\tReflect.defineMetadata(METADATA_nvmFileID, id, messageClass);\n\n\t\t// also store a map in the NVMFile metadata for lookup.\n\t\tconst map: NVMFileIDMap =\n\t\t\tReflect.getMetadata(METADATA_nvmFileIDMap, NVMFile) || new Map();\n\t\tmap.set(id, messageClass as unknown as NVMFileConstructor<NVMFile>);\n\t\tReflect.defineMetadata(METADATA_nvmFileIDMap, map, NVMFile);\n\t};\n}\n\n/**\n * Retrieves the file ID defined for a NVM file class\n */\nexport function getNVMFileID
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAAA,kBAA4C;AAC5C,wBAAgD;AAChD,oBAMO;AACP,oBAIO;AAYD,SAAU,0BACf,SAAuB;AAEvB,SAAO,UAAU,eAAW,4BAAa,QAAQ,IAAI;AACtD;AAJgB;AAYV,MAAO,QAAO;EArCpB,OAqCoB;;;EACnB,YAAmB,SAAuB;AACzC,SAAK,cAAc,QAAQ;AAE3B,QAAI,0BAA0B,OAAO,GAAG;AACvC,WAAK,SAAS,QAAQ;AACtB,WAAK,UAAU,QAAQ;IACxB,OAAO;AACN,YAAM,SAAS,QAAQ,UAAU,aAAa,IAAI;AAClD,UAAI,OAAO,WAAW,UAAU;AAC/B,aAAK,SAAS;MACf;AACA,WAAK,UAAU,IAAI,oBAAK;IACzB;EACD;EAEU;EACH,SAAiB;EACjB;;;;EAKA,OAAO,KACb,QACA,MACA,aAAmB;AAEnB,UAAM,cAAc,sBAAsB,MAAM;AAChD,WAAO,IAAI,YAAY;MACtB;MACA;MACA;KACA;EACF;;;;EAKO,YAAS;AACf,QAAI,CAAC,KAAK,QAAQ;AACjB,YAAM,IAAI,MAAM,gDAAgD;IACjE;AACA,WAAO;MACN,KAAK,KAAK;MACV,MAAM,KAAK;;MAEX,MAAM,KAAK,QAAQ,UAAU,wCAC1B,yBAAW,YACX,yBAAW;;MAEd,cAAc,2BAAa;;EAE7B;EAEO,SAAM;AACZ,WAAO;MACN,WAAW,KACV,KAAK,OAAO,SAAS,EAAE,CACxB,KAAK,KAAK,YAAY,IAAI;;EAE5B;;AAGD,MAAM,qBAAqB,OAAO,WAAW;AAC7C,MAAM,wBAAwB,OAAO,cAAc;AAc7C,SAAU,UACf,IAAsC;AAEtC,SAAO,CAAC,iBAAgB;AACvB,YAAQ,eAAe,oBAAoB,IAAI,YAAY;AAG3D,UAAM,MACL,QAAQ,YAAY,uBAAuB,OAAO,KAAK,oBAAI,IAAG;AAC/D,QAAI,IAAI,IAAI,YAAsD;AAClE,YAAQ,eAAe,uBAAuB,KAAK,OAAO;EAC3D;AACD;AAZgB;AAiBV,SAAU,aACf,
|
|
4
|
+
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { createSimpleReflectionDecorator } from \"@zwave-js/core/reflection\";\nimport {\n\tBytes,\n\ttype BytesView,\n\ttype TypedClassDecorator,\n\tisUint8Array,\n\tnum2hex,\n} from \"@zwave-js/shared\";\nimport {\n\tFragmentType,\n\tNVM3_MAX_OBJ_SIZE_SMALL,\n\tObjectType,\n} from \"../consts.js\";\nimport type { NVM3Object } from \"../object.js\";\n\nexport interface NVMFileBaseOptions {\n\tfileId?: number;\n\tfileVersion: string;\n}\nexport interface NVMFileDeserializationOptions extends NVMFileBaseOptions {\n\tfileId: number;\n\tdata: Bytes;\n}\n\nexport function gotDeserializationOptions(\n\toptions: NVMFileOptions,\n): options is NVMFileDeserializationOptions {\n\treturn \"data\" in options && isUint8Array(options.data);\n}\n\nexport interface NVMFileCreationOptions extends NVMFileBaseOptions {}\n\nexport type NVMFileOptions =\n\t| NVMFileCreationOptions\n\t| NVMFileDeserializationOptions;\n\nexport class NVMFile {\n\tpublic constructor(options: NVMFileOptions) {\n\t\tthis.fileVersion = options.fileVersion;\n\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.fileId = options.fileId;\n\t\t\tthis.payload = options.data;\n\t\t} else {\n\t\t\tconst fileId = options.fileId ?? getNVMFileID(this);\n\t\t\tif (typeof fileId === \"number\") {\n\t\t\t\tthis.fileId = fileId;\n\t\t\t}\n\t\t\tthis.payload = new Bytes();\n\t\t}\n\t}\n\n\tprotected payload: Bytes;\n\tpublic fileId: number = 0;\n\tpublic fileVersion: string;\n\n\t/**\n\t * Creates an instance of the NVM file that is contained in the given NVM object\n\t */\n\tpublic static from(\n\t\tfileId: number,\n\t\tdata: BytesView,\n\t\tfileVersion: string,\n\t): NVMFile {\n\t\tconst Constructor = getNVMFileConstructor(fileId)!;\n\t\treturn new Constructor({\n\t\t\tfileId,\n\t\t\tfileVersion,\n\t\t\tdata,\n\t\t});\n\t}\n\n\t/**\n\t * Serializes this NVMFile into an NVM Object\n\t */\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tif (!this.fileId) {\n\t\t\tthrow new Error(\"The NVM file ID must be set before serializing\");\n\t\t}\n\t\treturn {\n\t\t\tkey: this.fileId,\n\t\t\tdata: this.payload,\n\t\t\t// We only support large and small data objects for now\n\t\t\ttype: this.payload.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t: ObjectType.DataLarge,\n\t\t\t// By default output unfragmented objects, they will be split later\n\t\t\tfragmentType: FragmentType.None,\n\t\t};\n\t}\n\n\tpublic toJSON(): Record<string, any> {\n\t\treturn {\n\t\t\t\"file ID\": `0x${\n\t\t\t\tthis.fileId.toString(16)\n\t\t\t} (${this.constructor.name})`,\n\t\t};\n\t}\n}\n\nconst METADATA_nvmFileID = Symbol(\"nvmFileID\");\nconst METADATA_nvmFileIDMap = Symbol(\"nvmFileIDMap\");\n\ntype NVMFileIDMap = Map<\n\tnumber | ((id: number) => boolean),\n\tNVMFileConstructor<NVMFile>\n>;\n\nexport type NVMFileConstructor<T extends NVMFile> = typeof NVMFile & {\n\tnew (options: any): T;\n};\n\n/**\n * Defines the ID associated with a NVM file class\n */\nexport function nvmFileID<Class extends typeof NVMFile>(\n\tid: number | ((id: number) => boolean),\n): TypedClassDecorator<Class> {\n\treturn (messageClass) => {\n\t\tReflect.defineMetadata(METADATA_nvmFileID, id, messageClass);\n\n\t\t// also store a map in the NVMFile metadata for lookup.\n\t\tconst map: NVMFileIDMap =\n\t\t\tReflect.getMetadata(METADATA_nvmFileIDMap, NVMFile) || new Map();\n\t\tmap.set(id, messageClass as unknown as NVMFileConstructor<NVMFile>);\n\t\tReflect.defineMetadata(METADATA_nvmFileIDMap, map, NVMFile);\n\t};\n}\n\n/**\n * Retrieves the file ID defined for a NVM file class\n */\nexport function getNVMFileID(\n\tid: NVMFile,\n): number | ((id: number) => boolean) {\n\t// get the class constructor\n\tconst constr = id.constructor;\n\t// retrieve the current metadata\n\tconst ret: number | undefined = id instanceof NVMFile\n\t\t? Reflect.getMetadata(METADATA_nvmFileID, constr)\n\t\t: undefined;\n\tif (ret == undefined) {\n\t\tthrow new ZWaveError(\n\t\t\t`No NVM file ID defined for ${constr.name}!`,\n\t\t\tZWaveErrorCodes.CC_Invalid,\n\t\t);\n\t}\n\treturn ret;\n}\n\n/**\n * Looks up the NVM file constructor for a given file ID\n */\nexport function getNVMFileConstructor(\n\tid: number,\n): NVMFileConstructor<NVMFile> | undefined {\n\t// Retrieve the constructor map from the NVMFile class\n\tconst map = Reflect.getMetadata(METADATA_nvmFileIDMap, NVMFile) as\n\t\t| NVMFileIDMap\n\t\t| undefined;\n\tif (map != undefined) {\n\t\tif (map.has(id)) return map.get(id);\n\t\t// Otherwise loop through predicates\n\t\tfor (const [key, value] of map.entries()) {\n\t\t\tif (typeof key === \"function\" && key(id)) return value;\n\t\t}\n\t}\n}\n\n/**\n * Retrieves the file ID defined for a NVM file class\n */\nexport function getNVMFileIDStatic(\n\tclassConstructor: NVMFileConstructor<NVMFile>,\n): number | ((id: number) => boolean) {\n\t// retrieve the current metadata\n\tconst ret = Reflect.getMetadata(METADATA_nvmFileID, classConstructor);\n\tif (ret == undefined) {\n\t\tthrow new ZWaveError(\n\t\t\t`No NVM file ID defined for ${classConstructor.name}!`,\n\t\t\tZWaveErrorCodes.CC_Invalid,\n\t\t);\n\t}\n\treturn ret;\n}\n\nexport type NVMSection = \"application\" | \"protocol\";\n\nconst nvmSectionDecorator = createSimpleReflectionDecorator<\n\ttypeof NVMFile,\n\t[section: NVMSection]\n>({\n\tname: \"nvmSection\",\n});\n\n/** Defines in which section an NVM file is stored */\nexport const nvmSection = nvmSectionDecorator.decorator;\n\n/** Returns in which section an NVM file is stored (using an instance of the file) */\nexport const getNVMSection = nvmSectionDecorator.lookupValue;\n\n/** Returns in which section an NVM file is stored (using the constructor of the file) */\nexport const getNVMSectionStatic = nvmSectionDecorator.lookupValueStatic;\n\n/** Returns in which NVM section the file with the given ID resides in */\nexport function getNVMSectionByFileID(fileId: number): NVMSection {\n\tconst File = getNVMFileConstructor(fileId);\n\tlet ret: NVMSection | undefined;\n\tif (File) {\n\t\tret = getNVMSectionStatic(File);\n\t}\n\tif (ret) return ret;\n\n\tthrow new ZWaveError(\n\t\t`NVM section for file with ID ${\n\t\t\tnum2hex(fileId)\n\t\t} could not be determined`,\n\t\tZWaveErrorCodes.Argument_Invalid,\n\t);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -4,6 +4,6 @@ export declare function computeBergerCode(word: number, numBits?: number): numbe
|
|
|
4
4
|
export declare function validateBergerCode(word: number, code: number, numBits?: number): void;
|
|
5
5
|
export declare function computeBergerCodeMulti(words: number[], numBits: number): number;
|
|
6
6
|
export declare function validateBergerCodeMulti(words: number[], numBits: number): void;
|
|
7
|
-
export declare function mapToObject<T
|
|
7
|
+
export declare function mapToObject<T>(map: Map<string | number, T>): Record<string, T>;
|
|
8
8
|
export declare function dumpNVM(nvm: NVM3): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm3/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\nimport type { NVM3 } from \"../NVM3.js\";\nimport { FragmentType, ObjectType, PageStatus } from \"./consts.js\";\nimport { NVMFile } from \"./files/NVMFile.js\";\nimport type { NVM3Object } from \"./object.js\";\n\n/** Counts the number of unset bits in the given word */\nexport function computeBergerCode(word: number, numBits: number = 32): number {\n\tlet ret = word;\n\n\t// Mask the number of bits we're interested in\n\tif (numBits < 32) {\n\t\tret &= (1 << numBits) - 1;\n\t}\n\n\t// And count the bits, see http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel\n\tret = ret - ((ret >> 1) & 0x55555555);\n\tret = (ret & 0x33333333) + ((ret >> 2) & 0x33333333);\n\tret = (((ret + (ret >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24;\n\n\treturn numBits - ret;\n}\n\nexport function validateBergerCode(\n\tword: number,\n\tcode: number,\n\tnumBits: number = 32,\n): void {\n\tif (computeBergerCode(word, numBits) !== code) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function computeBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): number {\n\tlet ret = 0;\n\tfor (const word of words) {\n\t\tret += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) break;\n\t\tnumBits -= 32;\n\t}\n\treturn ret;\n}\n\nexport function validateBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): void {\n\tlet actual = 0;\n\tlet expected: number;\n\tfor (const word of words) {\n\t\tactual += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) {\n\t\t\tconst maskSize = 32 - numBits;\n\t\t\tconst mask = (1 << maskSize) - 1;\n\t\t\texpected = (word >>> numBits) & mask;\n\t\t\tbreak;\n\t\t}\n\t\tnumBits -= 32;\n\t}\n\tif (actual !== expected!) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function mapToObject<T
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAA4C;AAC5C,oBAAoC;AAEpC,oBAAqD;AACrD,qBAAwB;AAIlB,SAAU,kBAAkB,MAAc,UAAkB,IAAE;AACnE,MAAI,MAAM;AAGV,MAAI,UAAU,IAAI;AACjB,YAAQ,KAAK,WAAW;EACzB;AAGA,QAAM,OAAQ,OAAO,IAAK;AAC1B,SAAO,MAAM,cAAgB,OAAO,IAAK;AACzC,SAAS,OAAO,OAAO,KAAM,aAAa,YAAc;AAExD,SAAO,UAAU;AAClB;AAdgB;AAgBV,SAAU,mBACf,MACA,MACA,UAAkB,IAAE;AAEpB,MAAI,kBAAkB,MAAM,OAAO,MAAM,MAAM;AAC9C,UAAM,IAAI,uBACT,kCACA,4BAAgB,iBAAiB;EAEnC;AACD;AAXgB;AAaV,SAAU,uBACf,OACA,SAAe;AAEf,MAAI,MAAM;AACV,aAAW,QAAQ,OAAO;AACzB,WAAO,kBAAkB,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACpD,QAAI,UAAU;AAAI;AAClB,eAAW;EACZ;AACA,SAAO;AACR;AAXgB;AAaV,SAAU,wBACf,OACA,SAAe;AAEf,MAAI,SAAS;AACb,MAAI;AACJ,aAAW,QAAQ,OAAO;AACzB,cAAU,kBAAkB,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACvD,QAAI,UAAU,IAAI;AACjB,YAAM,WAAW,KAAK;AACtB,YAAM,QAAQ,KAAK,YAAY;AAC/B,iBAAY,SAAS,UAAW;AAChC;IACD;AACA,eAAW;EACZ;AACA,MAAI,WAAW,UAAW;AACzB,UAAM,IAAI,uBACT,kCACA,4BAAgB,iBAAiB;EAEnC;AACD;AAtBgB;AAwBV,SAAU,YACf,
|
|
4
|
+
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\nimport type { NVM3 } from \"../NVM3.js\";\nimport { FragmentType, ObjectType, PageStatus } from \"./consts.js\";\nimport { NVMFile } from \"./files/NVMFile.js\";\nimport type { NVM3Object } from \"./object.js\";\n\n/** Counts the number of unset bits in the given word */\nexport function computeBergerCode(word: number, numBits: number = 32): number {\n\tlet ret = word;\n\n\t// Mask the number of bits we're interested in\n\tif (numBits < 32) {\n\t\tret &= (1 << numBits) - 1;\n\t}\n\n\t// And count the bits, see http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel\n\tret = ret - ((ret >> 1) & 0x55555555);\n\tret = (ret & 0x33333333) + ((ret >> 2) & 0x33333333);\n\tret = (((ret + (ret >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24;\n\n\treturn numBits - ret;\n}\n\nexport function validateBergerCode(\n\tword: number,\n\tcode: number,\n\tnumBits: number = 32,\n): void {\n\tif (computeBergerCode(word, numBits) !== code) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function computeBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): number {\n\tlet ret = 0;\n\tfor (const word of words) {\n\t\tret += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) break;\n\t\tnumBits -= 32;\n\t}\n\treturn ret;\n}\n\nexport function validateBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): void {\n\tlet actual = 0;\n\tlet expected: number;\n\tfor (const word of words) {\n\t\tactual += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) {\n\t\t\tconst maskSize = 32 - numBits;\n\t\t\tconst mask = (1 << maskSize) - 1;\n\t\t\texpected = (word >>> numBits) & mask;\n\t\t\tbreak;\n\t\t}\n\t\tnumBits -= 32;\n\t}\n\tif (actual !== expected!) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function mapToObject<T>(\n\tmap: Map<string | number, T>,\n): Record<string, T> {\n\tconst obj: Record<string | number, T> = {};\n\tfor (const [key, value] of map) {\n\t\tobj[key] = value;\n\t}\n\treturn obj;\n}\n\nfunction dumpObject(\n\tobj: NVM3Object & { offset: number },\n\tjson: boolean = false,\n): void {\n\ttry {\n\t\tif (json) {\n\t\t\tconst file = NVMFile.from(obj.key, obj.data!, \"7.0.0\");\n\t\t\tconsole.log(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\toffset: num2hex(obj.offset),\n\t\t\t\t\t\t...file.toJSON(),\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconsole.log();\n\t\t\treturn;\n\t\t}\n\t} catch {\n\t\t// ignore\n\t}\n\tconst prefix = json ? \"\" : \" \";\n\tconsole.log(`${prefix}\u00B7 offset: ${num2hex(obj.offset)}`);\n\tconsole.log(`${prefix} key: 0x${obj.key.toString(16)}`);\n\tconsole.log(`${prefix} type: ${ObjectType[obj.type]}`);\n\tconsole.log(`${prefix} fragment type: ${FragmentType[obj.fragmentType]}`);\n\tif (obj.data) {\n\t\tconsole.log(\n\t\t\t`${prefix} data: ${\n\t\t\t\tbuffer2hex(obj.data)\n\t\t\t} (${obj.data.length} bytes)`,\n\t\t);\n\t}\n\tconsole.log();\n}\n\nexport async function dumpNVM(nvm: NVM3): Promise<void> {\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`NVM section: ${name}`);\n\n\t\tfor (const page of section.pages) {\n\t\t\tconsole.log(\"\");\n\t\t\tconsole.log(`page (offset 0x${page.offset.toString(16)}):`);\n\t\t\tconsole.log(` version: ${page.version}`);\n\t\t\tconsole.log(` eraseCount: ${page.eraseCount}`);\n\t\t\tconsole.log(` status: ${PageStatus[page.status]}`);\n\t\t\tconsole.log(` encrypted: ${page.encrypted}`);\n\t\t\tconsole.log(` pageSize: ${page.pageSize}`);\n\t\t\tconsole.log(` writeSize: ${page.writeSize}`);\n\t\t\tconsole.log(` memoryMapped: ${page.memoryMapped}`);\n\t\t\tconsole.log(` deviceFamily: ${page.deviceFamily}`);\n\t\t\tconsole.log(\"\");\n\t\t\tif (page.objects.length) {\n\t\t\t\tconsole.log(` raw objects:`);\n\n\t\t\t\tfor (const objectHeader of page.objects) {\n\t\t\t\t\tconst objectData = objectHeader.type !== ObjectType.Deleted\n\t\t\t\t\t\t? await nvm.readObjectData(objectHeader)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tdumpObject({\n\t\t\t\t\t\toffset: objectHeader.offset,\n\t\t\t\t\t\tkey: objectHeader.key,\n\t\t\t\t\t\ttype: objectHeader.type,\n\t\t\t\t\t\tfragmentType: objectHeader.fragmentType,\n\t\t\t\t\t\tdata: objectData,\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log();\n\t\tconsole.log();\n\t}\n\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`${name} objects:`);\n\t\tfor (const [fileId, pageIndex] of section.objectLocations) {\n\t\t\tconst page = section.pages[pageIndex];\n\t\t\tconst objectHeader = page.objects.findLast((o) => o.key === fileId);\n\t\t\tif (!objectHeader) continue;\n\t\t\tconst objectData = await nvm.get(fileId, section);\n\n\t\t\tdumpObject({\n\t\t\t\toffset: objectHeader.offset,\n\t\t\t\tkey: fileId,\n\t\t\t\ttype: objectHeader.type,\n\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\tdata: objectData,\n\t\t\t}, true);\n\t\t}\n\n\t\tconsole.log();\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/esm/convert.js
CHANGED
|
@@ -930,7 +930,7 @@ export async function jsonToNVM(json, targetSDKVersion) {
|
|
|
930
930
|
target.controller.rfConfig ??= {
|
|
931
931
|
rfRegion: RFRegion["Default (EU)"],
|
|
932
932
|
txPower: 0.0,
|
|
933
|
-
measured0dBm:
|
|
933
|
+
measured0dBm: 3.3,
|
|
934
934
|
enablePTI: null,
|
|
935
935
|
maxTXPower: null,
|
|
936
936
|
nodeIdType: null,
|
package/build/esm/convert.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export declare function nvmFileID<Class extends typeof NVMFile>(id: number | ((i
|
|
|
39
39
|
/**
|
|
40
40
|
* Retrieves the file ID defined for a NVM file class
|
|
41
41
|
*/
|
|
42
|
-
export declare function getNVMFileID
|
|
42
|
+
export declare function getNVMFileID(id: NVMFile): number | ((id: number) => boolean);
|
|
43
43
|
/**
|
|
44
44
|
* Looks up the NVM file constructor for a given file ID
|
|
45
45
|
*/
|
|
@@ -47,7 +47,7 @@ export declare function getNVMFileConstructor(id: number): NVMFileConstructor<NV
|
|
|
47
47
|
/**
|
|
48
48
|
* Retrieves the file ID defined for a NVM file class
|
|
49
49
|
*/
|
|
50
|
-
export declare function getNVMFileIDStatic
|
|
50
|
+
export declare function getNVMFileIDStatic(classConstructor: NVMFileConstructor<NVMFile>): number | ((id: number) => boolean);
|
|
51
51
|
export type NVMSection = "application" | "protocol";
|
|
52
52
|
/** Defines in which section an NVM file is stored */
|
|
53
53
|
export declare const nvmSection: <TTarget extends typeof NVMFile>(section: NVMSection) => TypedClassDecorator<TTarget>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NVMFile.d.ts","sourceRoot":"","sources":["../../../../../src/lib/nvm3/files/NVMFile.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EAGxB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,6BAA8B,SAAQ,kBAAkB;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC;CACZ;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,cAAc,GACrB,OAAO,IAAI,6BAA6B,CAE1C;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;CAAG;AAErE,MAAM,MAAM,cAAc,GACvB,sBAAsB,GACtB,6BAA6B,CAAC;AAEjC,qBAAa,OAAO;IACnB,YAAmB,OAAO,EAAE,cAAc,EAazC;IAED,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,WAAW,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAc,IAAI,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,GACjB,OAAO,CAOT;IAED;;OAEG;IACI,SAAS,IAAI,UAAU,GAAG;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAc/C;IAEM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMnC;CACD;AAUD,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,OAAO,GAAG;IACpE,KAAK,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,OAAO,OAAO,EACrD,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GACpC,mBAAmB,CAAC,KAAK,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"NVMFile.d.ts","sourceRoot":"","sources":["../../../../../src/lib/nvm3/files/NVMFile.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,EACL,KAAK,SAAS,EACd,KAAK,mBAAmB,EAGxB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,6BAA8B,SAAQ,kBAAkB;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,CAAC;CACZ;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,cAAc,GACrB,OAAO,IAAI,6BAA6B,CAE1C;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;CAAG;AAErE,MAAM,MAAM,cAAc,GACvB,sBAAsB,GACtB,6BAA6B,CAAC;AAEjC,qBAAa,OAAO;IACnB,YAAmB,OAAO,EAAE,cAAc,EAazC;IAED,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;IAClB,MAAM,EAAE,MAAM,CAAK;IACnB,WAAW,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,OAAc,IAAI,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,GACjB,OAAO,CAOT;IAED;;OAEG;IACI,SAAS,IAAI,UAAU,GAAG;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAc/C;IAEM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMnC;CACD;AAUD,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,OAAO,IAAI,OAAO,OAAO,GAAG;IACpE,KAAK,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,OAAO,OAAO,EACrD,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,GACpC,mBAAmB,CAAC,KAAK,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,EAAE,EAAE,OAAO,GACT,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAcpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,MAAM,GACR,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAYzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,gBAAgB,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAC3C,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAUpC;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;AASpD,qDAAqD;AACrD,eAAO,MAAM,UAAU,uFAAgC,CAAC;AAExD,qFAAqF;AACrF,eAAO,MAAM,aAAa,6CAAkC,CAAC;AAE7D,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,oDAAwC,CAAC;AAEzE,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAchE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NVMFile.js","sourceRoot":"","sources":["../../../../../src/lib/nvm3/files/NVMFile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NVMFile.js","sourceRoot":"","sources":["../../../../../src/lib/nvm3/files/NVMFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ export declare function computeBergerCode(word: number, numBits?: number): numbe
|
|
|
4
4
|
export declare function validateBergerCode(word: number, code: number, numBits?: number): void;
|
|
5
5
|
export declare function computeBergerCodeMulti(words: number[], numBits: number): number;
|
|
6
6
|
export declare function validateBergerCodeMulti(words: number[], numBits: number): void;
|
|
7
|
-
export declare function mapToObject<T
|
|
7
|
+
export declare function mapToObject<T>(map: Map<string | number, T>): Record<string, T>;
|
|
8
8
|
export declare function dumpNVM(nvm: NVM3): Promise<void>;
|
|
9
9
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAKvC,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAc5E;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAW,GAClB,IAAI,CAON;AAED,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACb,MAAM,CAQR;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACb,IAAI,CAmBN;AAED,wBAAgB,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAKvC,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAc5E;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAW,GAClB,IAAI,CAON;AAED,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACb,MAAM,CAQR;AAED,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACb,IAAI,CAmBN;AAED,wBAAgB,WAAW,CAAC,CAAC,EAC5B,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAMnB;AAwCD,wBAAsB,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,wDAAwD;AACxD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAO,GAAW,EAAE;IACnE,IAAI,GAAG,GAAG,IAAI,CAAC;IAEf,8CAA8C;IAC9C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QAClB,GAAG,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,mGAAmG;IACnG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;IACtC,GAAG,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;IACrD,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAE3D,OAAO,OAAO,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,IAAY,EACZ,IAAY,EACZ,OAAO,GAAW,EAAE;IAEpB,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,UAAU,CACnB,gCAAgC,EAChC,eAAe,CAAC,iBAAiB,CACjC,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,KAAe,EACf,OAAe;IAEf,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO,GAAG,EAAE;YAAE,MAAM;QACxB,OAAO,IAAI,EAAE,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,KAAe,EACf,OAAe;IAEf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAgB,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,QAAQ,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;YACrC,MAAM;QACP,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,QAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CACnB,gCAAgC,EAChC,eAAe,CAAC,iBAAiB,CACjC,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,WAAW,CAC1B,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zwave-js/nvmedit",
|
|
3
|
-
"version": "15.25.
|
|
3
|
+
"version": "15.25.2",
|
|
4
4
|
"description": "zwave-js: library to edit NVM backups",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"publishConfig": {
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"node": ">= 20"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@zwave-js/core": "15.25.
|
|
52
|
-
"@zwave-js/shared": "15.
|
|
51
|
+
"@zwave-js/core": "15.25.2",
|
|
52
|
+
"@zwave-js/shared": "15.25.2",
|
|
53
53
|
"alcalzone-shared": "^5.0.0",
|
|
54
54
|
"reflect-metadata": "^0.2.2",
|
|
55
55
|
"semver": "^7.7.2",
|