@zwave-js/nvmedit 15.28.0 → 15.29.0
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/cli.js.map +2 -2
- package/build/cjs/convert.js +36 -12
- package/build/cjs/convert.js.map +2 -2
- package/build/cjs/lib/NVM3.js +16 -12
- package/build/cjs/lib/NVM3.js.map +2 -2
- package/build/cjs/lib/NVM500.js.map +2 -2
- package/build/cjs/lib/common/definitions.d.ts +1 -1
- package/build/cjs/lib/common/definitions.js.map +2 -2
- package/build/cjs/lib/common/routeCache.js.map +2 -2
- package/build/cjs/lib/common/sucUpdateEntry.js.map +2 -2
- package/build/cjs/lib/common/utils.js.map +2 -2
- package/build/cjs/lib/io/BufferedNVMReader.js.map +2 -2
- package/build/cjs/lib/io/NVMFileIO.js +1 -1
- package/build/cjs/lib/io/NVMFileIO.js.map +2 -2
- package/build/cjs/lib/io/NVMMemoryIO.js.map +2 -2
- package/build/cjs/lib/nvm3/adapter.d.ts +1 -1
- package/build/cjs/lib/nvm3/adapter.js.map +2 -2
- package/build/cjs/lib/nvm3/consts.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/NVMFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +2 -2
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js.map +2 -2
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/VersionFiles.js.map +2 -2
- package/build/cjs/lib/nvm3/object.js.map +2 -2
- package/build/cjs/lib/nvm3/page.js.map +2 -2
- package/build/cjs/lib/nvm3/utils.js.map +2 -2
- package/build/cjs/lib/nvm500/EntryParsers.js +1 -4
- package/build/cjs/lib/nvm500/EntryParsers.js.map +2 -2
- package/build/cjs/lib/nvm500/adapter.d.ts +1 -1
- package/build/cjs/lib/nvm500/adapter.js +3 -1
- package/build/cjs/lib/nvm500/adapter.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_6x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_7x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_8x.js.map +2 -2
- package/build/cjs/lib/nvm500/shared.js.map +2 -2
- package/build/esm/cli.js.map +1 -1
- package/build/esm/convert.d.ts.map +1 -1
- package/build/esm/convert.js +49 -28
- package/build/esm/convert.js.map +1 -1
- package/build/esm/lib/NVM3.d.ts.map +1 -1
- package/build/esm/lib/NVM3.js +22 -21
- package/build/esm/lib/NVM3.js.map +1 -1
- package/build/esm/lib/NVM500.d.ts.map +1 -1
- package/build/esm/lib/NVM500.js +4 -5
- package/build/esm/lib/NVM500.js.map +1 -1
- package/build/esm/lib/common/definitions.d.ts +1 -1
- package/build/esm/lib/common/definitions.d.ts.map +1 -1
- package/build/esm/lib/common/definitions.js.map +1 -1
- package/build/esm/lib/common/routeCache.d.ts.map +1 -1
- package/build/esm/lib/common/routeCache.js +1 -2
- package/build/esm/lib/common/routeCache.js.map +1 -1
- package/build/esm/lib/common/sucUpdateEntry.d.ts.map +1 -1
- package/build/esm/lib/common/sucUpdateEntry.js.map +1 -1
- package/build/esm/lib/common/utils.d.ts.map +1 -1
- package/build/esm/lib/common/utils.js.map +1 -1
- package/build/esm/lib/io/BufferedNVMReader.d.ts.map +1 -1
- package/build/esm/lib/io/BufferedNVMReader.js +6 -6
- package/build/esm/lib/io/BufferedNVMReader.js.map +1 -1
- package/build/esm/lib/io/NVMFileIO.d.ts.map +1 -1
- package/build/esm/lib/io/NVMFileIO.js +1 -1
- package/build/esm/lib/io/NVMFileIO.js.map +1 -1
- package/build/esm/lib/io/NVMMemoryIO.d.ts.map +1 -1
- package/build/esm/lib/io/NVMMemoryIO.js.map +1 -1
- package/build/esm/lib/nvm3/adapter.d.ts +1 -1
- package/build/esm/lib/nvm3/adapter.d.ts.map +1 -1
- package/build/esm/lib/nvm3/adapter.js +28 -22
- package/build/esm/lib/nvm3/adapter.js.map +1 -1
- package/build/esm/lib/nvm3/consts.js +1 -1
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationDataFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationDataFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationNameFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationNameFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ControllerInfoFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ControllerInfoFile.js.map +1 -1
- 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/files/NodeInfoFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/NodeInfoFiles.js +2 -4
- package/build/esm/lib/nvm3/files/NodeInfoFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/RouteCacheFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js +2 -4
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js +1 -2
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/VersionFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/VersionFiles.js.map +1 -1
- package/build/esm/lib/nvm3/object.d.ts.map +1 -1
- package/build/esm/lib/nvm3/object.js.map +1 -1
- package/build/esm/lib/nvm3/page.d.ts.map +1 -1
- package/build/esm/lib/nvm3/page.js.map +1 -1
- package/build/esm/lib/nvm3/utils.d.ts.map +1 -1
- package/build/esm/lib/nvm3/utils.js.map +1 -1
- package/build/esm/lib/nvm500/EntryParsers.d.ts.map +1 -1
- package/build/esm/lib/nvm500/EntryParsers.js +4 -5
- package/build/esm/lib/nvm500/EntryParsers.js.map +1 -1
- package/build/esm/lib/nvm500/adapter.d.ts +1 -1
- package/build/esm/lib/nvm500/adapter.d.ts.map +1 -1
- package/build/esm/lib/nvm500/adapter.js +10 -12
- package/build/esm/lib/nvm500/adapter.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_6x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_6x.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_7x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_7x.js.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_8x.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_8x.js.map +1 -1
- package/build/esm/lib/nvm500/shared.d.ts.map +1 -1
- package/build/esm/lib/nvm500/shared.js.map +1 -1
- package/build/esm/nvm500/NVMParser.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/NodeInfoFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype DataRate,\n\ttype FLiRS,\n\tMAX_NODES,\n\tMAX_NODES_LR,\n\tNUM_NODEMASK_BYTES,\n\ttype NodeProtocolInfo,\n\tNodeType,\n\tencodeBitMask,\n\tencodeNodeProtocolInfo,\n\tparseBitMask,\n\tparseNodeProtocolInfo,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView, pick } from \"@zwave-js/shared\";\nimport type { NVM3Object } from \"../object.js\";\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const NODEINFOS_PER_FILE_V1 = 4;\nexport const LR_NODEINFOS_PER_FILE_V5 = 50;\nconst NODEINFO_SIZE = 1 + 5 + NUM_NODEMASK_BYTES;\nconst LR_NODEINFO_SIZE = 3;\nconst EMPTY_NODEINFO_FILL = 0xff;\nconst emptyNodeInfo = new Uint8Array(NODEINFO_SIZE).fill(EMPTY_NODEINFO_FILL);\n\nexport interface NodeInfo\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tnodeId: number;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n\tneighbors: number[];\n\tsucUpdateIndex: number;\n}\n\nfunction parseNodeInfo(\n\tnodeId: number,\n\tbuffer: BytesView,\n\toffset: number,\n): NodeInfo {\n\tconst { hasSpecificDeviceClass, ...protocolInfo } = parseNodeProtocolInfo(\n\t\tbuffer,\n\t\toffset,\n\t);\n\tconst genericDeviceClass = buffer[offset + 3];\n\tconst specificDeviceClass = hasSpecificDeviceClass\n\t\t? buffer[offset + 4]\n\t\t: null;\n\tconst neighbors = parseBitMask(\n\t\tbuffer.subarray(offset + 5, offset + 5 + NUM_NODEMASK_BYTES),\n\t);\n\tconst sucUpdateIndex = buffer[offset + 5 + NUM_NODEMASK_BYTES];\n\treturn {\n\t\tnodeId,\n\t\t...protocolInfo,\n\t\tgenericDeviceClass,\n\t\tspecificDeviceClass,\n\t\tneighbors,\n\t\tsucUpdateIndex,\n\t};\n}\n\nfunction encodeNodeInfo(nodeInfo: NodeInfo): Bytes {\n\tconst ret = new Bytes(NODEINFO_SIZE);\n\n\tconst hasSpecificDeviceClass = nodeInfo.specificDeviceClass != null;\n\tconst protocolInfo: NodeProtocolInfo = {\n\t\t...pick(nodeInfo, [\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]),\n\t\thasSpecificDeviceClass,\n\t};\n\tret.set(encodeNodeProtocolInfo(protocolInfo), 0);\n\n\tret[3] = nodeInfo.genericDeviceClass;\n\tif (hasSpecificDeviceClass) ret[4] = nodeInfo.specificDeviceClass!;\n\tret.set(encodeBitMask(nodeInfo.neighbors, MAX_NODES), 5);\n\tret[5 + NUM_NODEMASK_BYTES] = nodeInfo.sucUpdateIndex;\n\n\treturn ret;\n}\n\nexport interface LRNodeInfo\n\textends Omit<NodeProtocolInfo, \"hasSpecificDeviceClass\">\n{\n\tnodeId: number;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n}\n\nfunction parseLRNodeInfo(\n\tnodeId: number,\n\tbuffer: BytesView,\n\toffset: number,\n): LRNodeInfo {\n\t// The node info in LR NVM files is packed:\n\t// Byte 0 CAPABILITY:\n\t// Bit 0: Routing (?)\n\t// Bit 1: Listening\n\t// Bit 2: has specific device class (?)\n\t// Bit 3: Beam capability\n\t// Bit 4: Optional functionality\n\t// Bits 5-6: FLiRS\n\t// Bit 7: Unused (?)\n\t// Byte 1: Generic device class\n\t// Byte 2: Specific device class\n\n\t// Protocol version is always 3\n\t// Security is always true\n\t// Supported speed is always 100kbps (speed = 0, speed ext = 2)\n\t// Never: routing end node, controller\n\n\tconst capability = buffer[offset];\n\tconst isRouting = !!(capability & 0b0000_0001); // ZWLR Mesh??\n\tconst isListening = !!(capability & 0b0000_0010);\n\tconst hasSpecificDeviceClass = !!(capability & 0b0000_0100);\n\tconst supportsBeaming = !!(capability & 0b0000_1000);\n\tconst optionalFunctionality = !!(capability & 0b0001_0000);\n\tlet isFrequentListening: FLiRS;\n\tswitch (capability & 0b0110_0000) {\n\t\tcase 0b0100_0000:\n\t\t\tisFrequentListening = \"1000ms\";\n\t\t\tbreak;\n\t\tcase 0b0010_0000:\n\t\t\tisFrequentListening = \"250ms\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tisFrequentListening = false;\n\t}\n\tconst nodeType = NodeType[\"End Node\"];\n\tconst supportsSecurity = true;\n\tconst protocolVersion = 3;\n\tconst supportedDataRates: DataRate[] = [100000];\n\n\treturn {\n\t\tnodeId,\n\t\tisRouting,\n\t\tisListening,\n\t\tsupportsBeaming,\n\t\tisFrequentListening,\n\t\toptionalFunctionality,\n\t\tnodeType,\n\t\tsupportsSecurity,\n\t\tprotocolVersion,\n\t\tsupportedDataRates,\n\t\tgenericDeviceClass: buffer[offset + 1],\n\t\tspecificDeviceClass: hasSpecificDeviceClass ? buffer[offset + 2] : null,\n\t};\n}\n\nfunction encodeLRNodeInfo(nodeInfo: LRNodeInfo): BytesView {\n\tconst ret = new Bytes(LR_NODEINFO_SIZE);\n\n\tlet capability = 0;\n\tif (nodeInfo.isRouting) capability |= 0b0000_0001;\n\tif (nodeInfo.isListening) capability |= 0b0000_0010;\n\tif (nodeInfo.specificDeviceClass != null) capability |= 0b0000_0100;\n\tif (nodeInfo.supportsBeaming) capability |= 0b0000_1000;\n\tif (nodeInfo.optionalFunctionality) capability |= 0b0001_0000;\n\tif (nodeInfo.isFrequentListening === \"1000ms\") {\n\t\tcapability |= 0b0100_0000;\n\t} else if (nodeInfo.isFrequentListening === \"250ms\") {\n\t\tcapability |= 0b0010_0000;\n\t}\n\n\tret[0] = capability;\n\tret[1] = nodeInfo.genericDeviceClass;\n\tret[2] = nodeInfo.specificDeviceClass ?? 0;\n\n\treturn ret;\n}\n\nexport interface NodeInfoFileV0Options extends NVMFileCreationOptions {\n\tnodeInfo: NodeInfo;\n}\n\nexport const NodeInfoFileV0IDBase = 0x50100;\nexport function nodeIdToNodeInfoFileIDV0(nodeId: number): number {\n\treturn NodeInfoFileV0IDBase + nodeId - 1;\n}\n\n@nvmFileID(\n\t(id) => id >= NodeInfoFileV0IDBase && id < NodeInfoFileV0IDBase + MAX_NODES,\n)\n@nvmSection(\"protocol\")\nexport class NodeInfoFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | NodeInfoFileV0Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfo = parseNodeInfo(\n\t\t\t\tthis.fileId - NodeInfoFileV0IDBase + 1,\n\t\t\t\tthis.payload,\n\t\t\t\t0,\n\t\t\t);\n\t\t} else {\n\t\t\tthis.nodeInfo = options.nodeInfo;\n\t\t}\n\t}\n\n\tpublic nodeInfo: NodeInfo;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.fileId = nodeIdToNodeInfoFileIDV0(this.nodeInfo.nodeId);\n\t\tthis.payload = encodeNodeInfo(this.nodeInfo);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tnodeInfo: this.nodeInfo,\n\t\t};\n\t}\n}\n\nexport interface NodeInfoFileV1Options extends NVMFileCreationOptions {\n\tnodeInfos: NodeInfo[];\n}\n\nexport const NodeInfoFileV1IDBase = 0x50200;\nexport function nodeIdToNodeInfoFileIDV1(nodeId: number): number {\n\treturn (\n\t\tNodeInfoFileV1IDBase + Math.floor((nodeId - 1) / NODEINFOS_PER_FILE_V1)\n\t);\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= NodeInfoFileV1IDBase\n\t\t&& id < NodeInfoFileV1IDBase + MAX_NODES / NODEINFOS_PER_FILE_V1,\n)\n@nvmSection(\"protocol\")\nexport class NodeInfoFileV1 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | NodeInfoFileV1Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfos = [];\n\t\t\tfor (let i = 0; i < NODEINFOS_PER_FILE_V1; i++) {\n\t\t\t\tconst nodeId = (this.fileId - NodeInfoFileV1IDBase)\n\t\t\t\t\t\t* NODEINFOS_PER_FILE_V1\n\t\t\t\t\t+ 1\n\t\t\t\t\t+ i;\n\t\t\t\tconst offset = i * NODEINFO_SIZE;\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + NODEINFO_SIZE,\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyNodeInfo)) continue;\n\n\t\t\t\tconst nodeInfo = parseNodeInfo(\n\t\t\t\t\tnodeId,\n\t\t\t\t\tentry,\n\t\t\t\t\t0,\n\t\t\t\t);\n\t\t\t\tthis.nodeInfos.push(nodeInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nodeInfos = options.nodeInfos;\n\t\t}\n\t}\n\n\tpublic nodeInfos: NodeInfo[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// The infos must be sorted by node ID\n\t\tthis.nodeInfos.sort((a, b) => a.nodeId - b.nodeId);\n\t\tconst minNodeId = this.nodeInfos[0].nodeId;\n\t\tthis.fileId = nodeIdToNodeInfoFileIDV1(minNodeId);\n\n\t\tthis.payload = new Bytes(NODEINFO_SIZE * NODEINFOS_PER_FILE_V1).fill(\n\t\t\tEMPTY_NODEINFO_FILL,\n\t\t);\n\n\t\tconst minFileNodeId =\n\t\t\tMath.floor((minNodeId - 1) / NODEINFOS_PER_FILE_V1)\n\t\t\t\t* NODEINFOS_PER_FILE_V1\n\t\t\t+ 1;\n\n\t\tfor (const nodeInfo of this.nodeInfos) {\n\t\t\tconst offset = (nodeInfo.nodeId - minFileNodeId) * NODEINFO_SIZE;\n\t\t\tthis.payload.set(encodeNodeInfo(nodeInfo), offset);\n\t\t}\n\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node infos\": this.nodeInfos,\n\t\t};\n\t}\n}\n\nexport interface LRNodeInfoFileV5Options extends NVMFileCreationOptions {\n\tnodeInfos: LRNodeInfo[];\n}\n\nexport const LRNodeInfoFileV5IDBase = 0x50800;\nexport function nodeIdToLRNodeInfoFileIDV5(nodeId: number): number {\n\treturn (\n\t\tLRNodeInfoFileV5IDBase\n\t\t+ Math.floor((nodeId - 256) / LR_NODEINFOS_PER_FILE_V5)\n\t);\n}\n\n// Counting starts with 5, because we only implemented this after reaching protocol file format 5\n@nvmFileID(\n\t(id) =>\n\t\tid >= LRNodeInfoFileV5IDBase\n\t\t&& id\n\t\t\t< LRNodeInfoFileV5IDBase + MAX_NODES_LR / LR_NODEINFOS_PER_FILE_V5,\n)\n@nvmSection(\"protocol\")\nexport class LRNodeInfoFileV5 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | LRNodeInfoFileV5Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfos = [];\n\t\t\tfor (let i = 0; i < LR_NODEINFOS_PER_FILE_V5; i++) {\n\t\t\t\tconst nodeId = (this.fileId - LRNodeInfoFileV5IDBase)\n\t\t\t\t\t\t* LR_NODEINFOS_PER_FILE_V5\n\t\t\t\t\t+ 256\n\t\t\t\t\t+ i;\n\t\t\t\tconst offset = i * LR_NODEINFO_SIZE;\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + LR_NODEINFO_SIZE,\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyNodeInfo)) continue;\n\n\t\t\t\tconst nodeInfo = parseLRNodeInfo(\n\t\t\t\t\tnodeId,\n\t\t\t\t\tentry,\n\t\t\t\t\t0,\n\t\t\t\t);\n\t\t\t\tthis.nodeInfos.push(nodeInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nodeInfos = options.nodeInfos;\n\t\t}\n\t}\n\n\tpublic nodeInfos: LRNodeInfo[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// The infos must be sorted by node ID\n\t\tthis.nodeInfos.sort((a, b) => a.nodeId - b.nodeId);\n\t\tconst minNodeId = this.nodeInfos[0].nodeId;\n\t\tthis.fileId = nodeIdToLRNodeInfoFileIDV5(minNodeId);\n\n\t\tthis.payload = new Bytes(LR_NODEINFO_SIZE * LR_NODEINFOS_PER_FILE_V5)\n\t\t\t.fill(EMPTY_NODEINFO_FILL);\n\n\t\tconst minFileNodeId =\n\t\t\tMath.floor((minNodeId - 256) / LR_NODEINFOS_PER_FILE_V5)\n\t\t\t\t* LR_NODEINFOS_PER_FILE_V5\n\t\t\t+ 256;\n\n\t\tfor (const nodeInfo of this.nodeInfos) {\n\t\t\tconst offset = (nodeInfo.nodeId - minFileNodeId) * LR_NODEINFO_SIZE;\n\t\t\tthis.payload.set(encodeLRNodeInfo(nodeInfo), offset);\n\t\t}\n\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node infos\": this.nodeInfos,\n\t\t};\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAYO;AACP,oBAA4C;
|
|
4
|
+
"sourcesContent": ["import {\n\ttype DataRate,\n\ttype FLiRS,\n\tMAX_NODES,\n\tMAX_NODES_LR,\n\tNUM_NODEMASK_BYTES,\n\ttype NodeProtocolInfo,\n\tNodeType,\n\tencodeBitMask,\n\tencodeNodeProtocolInfo,\n\tparseBitMask,\n\tparseNodeProtocolInfo,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView, pick } from \"@zwave-js/shared\";\n\nimport type { NVM3Object } from \"../object.js\";\n\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const NODEINFOS_PER_FILE_V1 = 4;\nexport const LR_NODEINFOS_PER_FILE_V5 = 50;\nconst NODEINFO_SIZE = 1 + 5 + NUM_NODEMASK_BYTES;\nconst LR_NODEINFO_SIZE = 3;\nconst EMPTY_NODEINFO_FILL = 0xff;\nconst emptyNodeInfo = new Uint8Array(NODEINFO_SIZE).fill(EMPTY_NODEINFO_FILL);\n\nexport interface NodeInfo extends Omit<\n\tNodeProtocolInfo,\n\t\"hasSpecificDeviceClass\"\n> {\n\tnodeId: number;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n\tneighbors: number[];\n\tsucUpdateIndex: number;\n}\n\nfunction parseNodeInfo(\n\tnodeId: number,\n\tbuffer: BytesView,\n\toffset: number,\n): NodeInfo {\n\tconst { hasSpecificDeviceClass, ...protocolInfo } = parseNodeProtocolInfo(\n\t\tbuffer,\n\t\toffset,\n\t);\n\tconst genericDeviceClass = buffer[offset + 3];\n\tconst specificDeviceClass = hasSpecificDeviceClass\n\t\t? buffer[offset + 4]\n\t\t: null;\n\tconst neighbors = parseBitMask(\n\t\tbuffer.subarray(offset + 5, offset + 5 + NUM_NODEMASK_BYTES),\n\t);\n\tconst sucUpdateIndex = buffer[offset + 5 + NUM_NODEMASK_BYTES];\n\treturn {\n\t\tnodeId,\n\t\t...protocolInfo,\n\t\tgenericDeviceClass,\n\t\tspecificDeviceClass,\n\t\tneighbors,\n\t\tsucUpdateIndex,\n\t};\n}\n\nfunction encodeNodeInfo(nodeInfo: NodeInfo): Bytes {\n\tconst ret = new Bytes(NODEINFO_SIZE);\n\n\tconst hasSpecificDeviceClass = nodeInfo.specificDeviceClass != null;\n\tconst protocolInfo: NodeProtocolInfo = {\n\t\t...pick(nodeInfo, [\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]),\n\t\thasSpecificDeviceClass,\n\t};\n\tret.set(encodeNodeProtocolInfo(protocolInfo), 0);\n\n\tret[3] = nodeInfo.genericDeviceClass;\n\tif (hasSpecificDeviceClass) ret[4] = nodeInfo.specificDeviceClass!;\n\tret.set(encodeBitMask(nodeInfo.neighbors, MAX_NODES), 5);\n\tret[5 + NUM_NODEMASK_BYTES] = nodeInfo.sucUpdateIndex;\n\n\treturn ret;\n}\n\nexport interface LRNodeInfo extends Omit<\n\tNodeProtocolInfo,\n\t\"hasSpecificDeviceClass\"\n> {\n\tnodeId: number;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass?: number | null;\n}\n\nfunction parseLRNodeInfo(\n\tnodeId: number,\n\tbuffer: BytesView,\n\toffset: number,\n): LRNodeInfo {\n\t// The node info in LR NVM files is packed:\n\t// Byte 0 CAPABILITY:\n\t// Bit 0: Routing (?)\n\t// Bit 1: Listening\n\t// Bit 2: has specific device class (?)\n\t// Bit 3: Beam capability\n\t// Bit 4: Optional functionality\n\t// Bits 5-6: FLiRS\n\t// Bit 7: Unused (?)\n\t// Byte 1: Generic device class\n\t// Byte 2: Specific device class\n\n\t// Protocol version is always 3\n\t// Security is always true\n\t// Supported speed is always 100kbps (speed = 0, speed ext = 2)\n\t// Never: routing end node, controller\n\n\tconst capability = buffer[offset];\n\tconst isRouting = !!(capability & 0b0000_0001); // ZWLR Mesh??\n\tconst isListening = !!(capability & 0b0000_0010);\n\tconst hasSpecificDeviceClass = !!(capability & 0b0000_0100);\n\tconst supportsBeaming = !!(capability & 0b0000_1000);\n\tconst optionalFunctionality = !!(capability & 0b0001_0000);\n\tlet isFrequentListening: FLiRS;\n\tswitch (capability & 0b0110_0000) {\n\t\tcase 0b0100_0000:\n\t\t\tisFrequentListening = \"1000ms\";\n\t\t\tbreak;\n\t\tcase 0b0010_0000:\n\t\t\tisFrequentListening = \"250ms\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tisFrequentListening = false;\n\t}\n\tconst nodeType = NodeType[\"End Node\"];\n\tconst supportsSecurity = true;\n\tconst protocolVersion = 3;\n\tconst supportedDataRates: DataRate[] = [100000];\n\n\treturn {\n\t\tnodeId,\n\t\tisRouting,\n\t\tisListening,\n\t\tsupportsBeaming,\n\t\tisFrequentListening,\n\t\toptionalFunctionality,\n\t\tnodeType,\n\t\tsupportsSecurity,\n\t\tprotocolVersion,\n\t\tsupportedDataRates,\n\t\tgenericDeviceClass: buffer[offset + 1],\n\t\tspecificDeviceClass: hasSpecificDeviceClass ? buffer[offset + 2] : null,\n\t};\n}\n\nfunction encodeLRNodeInfo(nodeInfo: LRNodeInfo): BytesView {\n\tconst ret = new Bytes(LR_NODEINFO_SIZE);\n\n\tlet capability = 0;\n\tif (nodeInfo.isRouting) capability |= 0b0000_0001;\n\tif (nodeInfo.isListening) capability |= 0b0000_0010;\n\tif (nodeInfo.specificDeviceClass != null) capability |= 0b0000_0100;\n\tif (nodeInfo.supportsBeaming) capability |= 0b0000_1000;\n\tif (nodeInfo.optionalFunctionality) capability |= 0b0001_0000;\n\tif (nodeInfo.isFrequentListening === \"1000ms\") {\n\t\tcapability |= 0b0100_0000;\n\t} else if (nodeInfo.isFrequentListening === \"250ms\") {\n\t\tcapability |= 0b0010_0000;\n\t}\n\n\tret[0] = capability;\n\tret[1] = nodeInfo.genericDeviceClass;\n\tret[2] = nodeInfo.specificDeviceClass ?? 0;\n\n\treturn ret;\n}\n\nexport interface NodeInfoFileV0Options extends NVMFileCreationOptions {\n\tnodeInfo: NodeInfo;\n}\n\nexport const NodeInfoFileV0IDBase = 0x50100;\nexport function nodeIdToNodeInfoFileIDV0(nodeId: number): number {\n\treturn NodeInfoFileV0IDBase + nodeId - 1;\n}\n\n@nvmFileID(\n\t(id) => id >= NodeInfoFileV0IDBase && id < NodeInfoFileV0IDBase + MAX_NODES,\n)\n@nvmSection(\"protocol\")\nexport class NodeInfoFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | NodeInfoFileV0Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfo = parseNodeInfo(\n\t\t\t\tthis.fileId - NodeInfoFileV0IDBase + 1,\n\t\t\t\tthis.payload,\n\t\t\t\t0,\n\t\t\t);\n\t\t} else {\n\t\t\tthis.nodeInfo = options.nodeInfo;\n\t\t}\n\t}\n\n\tpublic nodeInfo: NodeInfo;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.fileId = nodeIdToNodeInfoFileIDV0(this.nodeInfo.nodeId);\n\t\tthis.payload = encodeNodeInfo(this.nodeInfo);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tnodeInfo: this.nodeInfo,\n\t\t};\n\t}\n}\n\nexport interface NodeInfoFileV1Options extends NVMFileCreationOptions {\n\tnodeInfos: NodeInfo[];\n}\n\nexport const NodeInfoFileV1IDBase = 0x50200;\nexport function nodeIdToNodeInfoFileIDV1(nodeId: number): number {\n\treturn (\n\t\tNodeInfoFileV1IDBase + Math.floor((nodeId - 1) / NODEINFOS_PER_FILE_V1)\n\t);\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= NodeInfoFileV1IDBase\n\t\t&& id < NodeInfoFileV1IDBase + MAX_NODES / NODEINFOS_PER_FILE_V1,\n)\n@nvmSection(\"protocol\")\nexport class NodeInfoFileV1 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | NodeInfoFileV1Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfos = [];\n\t\t\tfor (let i = 0; i < NODEINFOS_PER_FILE_V1; i++) {\n\t\t\t\tconst nodeId =\n\t\t\t\t\t(this.fileId - NodeInfoFileV1IDBase) * NODEINFOS_PER_FILE_V1\n\t\t\t\t\t+ 1\n\t\t\t\t\t+ i;\n\t\t\t\tconst offset = i * NODEINFO_SIZE;\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + NODEINFO_SIZE,\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyNodeInfo)) continue;\n\n\t\t\t\tconst nodeInfo = parseNodeInfo(nodeId, entry, 0);\n\t\t\t\tthis.nodeInfos.push(nodeInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nodeInfos = options.nodeInfos;\n\t\t}\n\t}\n\n\tpublic nodeInfos: NodeInfo[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// The infos must be sorted by node ID\n\t\tthis.nodeInfos.sort((a, b) => a.nodeId - b.nodeId);\n\t\tconst minNodeId = this.nodeInfos[0].nodeId;\n\t\tthis.fileId = nodeIdToNodeInfoFileIDV1(minNodeId);\n\n\t\tthis.payload = new Bytes(NODEINFO_SIZE * NODEINFOS_PER_FILE_V1).fill(\n\t\t\tEMPTY_NODEINFO_FILL,\n\t\t);\n\n\t\tconst minFileNodeId =\n\t\t\tMath.floor((minNodeId - 1) / NODEINFOS_PER_FILE_V1)\n\t\t\t\t* NODEINFOS_PER_FILE_V1\n\t\t\t+ 1;\n\n\t\tfor (const nodeInfo of this.nodeInfos) {\n\t\t\tconst offset = (nodeInfo.nodeId - minFileNodeId) * NODEINFO_SIZE;\n\t\t\tthis.payload.set(encodeNodeInfo(nodeInfo), offset);\n\t\t}\n\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node infos\": this.nodeInfos,\n\t\t};\n\t}\n}\n\nexport interface LRNodeInfoFileV5Options extends NVMFileCreationOptions {\n\tnodeInfos: LRNodeInfo[];\n}\n\nexport const LRNodeInfoFileV5IDBase = 0x50800;\nexport function nodeIdToLRNodeInfoFileIDV5(nodeId: number): number {\n\treturn (\n\t\tLRNodeInfoFileV5IDBase\n\t\t+ Math.floor((nodeId - 256) / LR_NODEINFOS_PER_FILE_V5)\n\t);\n}\n\n// Counting starts with 5, because we only implemented this after reaching protocol file format 5\n@nvmFileID(\n\t(id) =>\n\t\tid >= LRNodeInfoFileV5IDBase\n\t\t&& id\n\t\t\t< LRNodeInfoFileV5IDBase + MAX_NODES_LR / LR_NODEINFOS_PER_FILE_V5,\n)\n@nvmSection(\"protocol\")\nexport class LRNodeInfoFileV5 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | LRNodeInfoFileV5Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeInfos = [];\n\t\t\tfor (let i = 0; i < LR_NODEINFOS_PER_FILE_V5; i++) {\n\t\t\t\tconst nodeId =\n\t\t\t\t\t(this.fileId - LRNodeInfoFileV5IDBase)\n\t\t\t\t\t\t* LR_NODEINFOS_PER_FILE_V5\n\t\t\t\t\t+ 256\n\t\t\t\t\t+ i;\n\t\t\t\tconst offset = i * LR_NODEINFO_SIZE;\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + LR_NODEINFO_SIZE,\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyNodeInfo)) continue;\n\n\t\t\t\tconst nodeInfo = parseLRNodeInfo(nodeId, entry, 0);\n\t\t\t\tthis.nodeInfos.push(nodeInfo);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nodeInfos = options.nodeInfos;\n\t\t}\n\t}\n\n\tpublic nodeInfos: LRNodeInfo[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// The infos must be sorted by node ID\n\t\tthis.nodeInfos.sort((a, b) => a.nodeId - b.nodeId);\n\t\tconst minNodeId = this.nodeInfos[0].nodeId;\n\t\tthis.fileId = nodeIdToLRNodeInfoFileIDV5(minNodeId);\n\n\t\tthis.payload = new Bytes(\n\t\t\tLR_NODEINFO_SIZE * LR_NODEINFOS_PER_FILE_V5,\n\t\t).fill(EMPTY_NODEINFO_FILL);\n\n\t\tconst minFileNodeId =\n\t\t\tMath.floor((minNodeId - 256) / LR_NODEINFOS_PER_FILE_V5)\n\t\t\t\t* LR_NODEINFOS_PER_FILE_V5\n\t\t\t+ 256;\n\n\t\tfor (const nodeInfo of this.nodeInfos) {\n\t\t\tconst offset = (nodeInfo.nodeId - minFileNodeId) * LR_NODEINFO_SIZE;\n\t\t\tthis.payload.set(encodeLRNodeInfo(nodeInfo), offset);\n\t\t}\n\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node infos\": this.nodeInfos,\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/ProtocolNodeMaskFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import { NODE_ID_MAX, encodeBitMask, parseBitMask } from \"@zwave-js/core\";\nimport type { Bytes } from \"@zwave-js/shared\";\nimport type { NVM3Object } from \"../object.js\";\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport interface ProtocolNodeMaskFileOptions extends NVMFileCreationOptions {\n\tnodeIds: number[];\n}\n\nexport class ProtocolNodeMaskFile extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | ProtocolNodeMaskFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeIdSet = new Set(parseBitMask(this.payload));\n\t\t} else {\n\t\t\tthis.nodeIdSet = new Set(options.nodeIds);\n\t\t}\n\t}\n\n\tpublic nodeIdSet: Set<number>;\n\tpublic get nodeIds(): number[] {\n\t\treturn [...this.nodeIdSet];\n\t}\n\tpublic set nodeIds(value: number[]) {\n\t\tthis.nodeIdSet = new Set(value);\n\t}\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = encodeBitMask([...this.nodeIdSet], NODE_ID_MAX);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node IDs\": [...this.nodeIdSet].join(\", \"),\n\t\t};\n\t}\n}\n\nexport const ProtocolPreferredRepeatersFileID = 0x50002;\n\n@nvmFileID(ProtocolPreferredRepeatersFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolPreferredRepeatersFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolNodeListFileID = 0x50005;\n\n@nvmFileID(ProtocolNodeListFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolNodeListFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolAppRouteLockNodeMaskFileID = 0x50006;\n\n@nvmFileID(ProtocolAppRouteLockNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolAppRouteLockNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolRouteSlaveSUCNodeMaskFileID = 0x50007;\n\n@nvmFileID(ProtocolRouteSlaveSUCNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolRouteSlaveSUCNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolSUCPendingUpdateNodeMaskFileID = 0x50008;\n\n@nvmFileID(ProtocolSUCPendingUpdateNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolSUCPendingUpdateNodeMaskFile
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAyD;
|
|
4
|
+
"sourcesContent": ["import { NODE_ID_MAX, encodeBitMask, parseBitMask } from \"@zwave-js/core\";\nimport type { Bytes } from \"@zwave-js/shared\";\n\nimport type { NVM3Object } from \"../object.js\";\n\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport interface ProtocolNodeMaskFileOptions extends NVMFileCreationOptions {\n\tnodeIds: number[];\n}\n\nexport class ProtocolNodeMaskFile extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | ProtocolNodeMaskFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeIdSet = new Set(parseBitMask(this.payload));\n\t\t} else {\n\t\t\tthis.nodeIdSet = new Set(options.nodeIds);\n\t\t}\n\t}\n\n\tpublic nodeIdSet: Set<number>;\n\tpublic get nodeIds(): number[] {\n\t\treturn [...this.nodeIdSet];\n\t}\n\tpublic set nodeIds(value: number[]) {\n\t\tthis.nodeIdSet = new Set(value);\n\t}\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = encodeBitMask([...this.nodeIdSet], NODE_ID_MAX);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node IDs\": [...this.nodeIdSet].join(\", \"),\n\t\t};\n\t}\n}\n\nexport const ProtocolPreferredRepeatersFileID = 0x50002;\n\n@nvmFileID(ProtocolPreferredRepeatersFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolPreferredRepeatersFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolNodeListFileID = 0x50005;\n\n@nvmFileID(ProtocolNodeListFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolNodeListFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolAppRouteLockNodeMaskFileID = 0x50006;\n\n@nvmFileID(ProtocolAppRouteLockNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolAppRouteLockNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolRouteSlaveSUCNodeMaskFileID = 0x50007;\n\n@nvmFileID(ProtocolRouteSlaveSUCNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolRouteSlaveSUCNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolSUCPendingUpdateNodeMaskFileID = 0x50008;\n\n@nvmFileID(ProtocolSUCPendingUpdateNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolSUCPendingUpdateNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolVirtualNodeMaskFileID = 0x50009;\n\n@nvmFileID(ProtocolVirtualNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolVirtualNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolPendingDiscoveryNodeMaskFileID = 0x5000a;\n\n@nvmFileID(ProtocolPendingDiscoveryNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolPendingDiscoveryNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolRouteCacheExistsNodeMaskFileID = 0x5000b;\n\n@nvmFileID(ProtocolRouteCacheExistsNodeMaskFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolRouteCacheExistsNodeMaskFile extends ProtocolNodeMaskFile {}\n\nexport const ProtocolLRNodeListFileID = 0x5000c;\n\n@nvmFileID(ProtocolLRNodeListFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolLRNodeListFile extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | ProtocolNodeMaskFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.nodeIdSet = new Set(parseBitMask(this.payload, 256));\n\t\t} else {\n\t\t\tthis.nodeIdSet = new Set(options.nodeIds);\n\t\t}\n\t}\n\n\tpublic nodeIdSet: Set<number>;\n\tpublic get nodeIds(): number[] {\n\t\treturn [...this.nodeIdSet];\n\t}\n\tpublic set nodeIds(value: number[]) {\n\t\tthis.nodeIdSet = new Set(value);\n\t}\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// There are only 128 bytes for the bitmask, so the LR node IDs only go up to 1279\n\t\tthis.payload = encodeBitMask([...this.nodeIdSet], 1279, 256);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"node IDs\": [...this.nodeIdSet].join(\", \"),\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/RouteCacheFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import { MAX_NODES, MAX_REPEATERS } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport {\n\tEMPTY_ROUTECACHE_FILL,\n\tROUTECACHE_SIZE,\n\ttype RouteCache,\n\temptyRouteCache,\n\tencodeRoute,\n\tparseRoute,\n} from \"../../common/routeCache.js\";\nimport type { NVM3Object } from \"../object.js\";\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const ROUTECACHES_PER_FILE_V1 = 8;\n\nexport interface RouteCacheFileV0Options extends NVMFileCreationOptions {\n\trouteCache: RouteCache;\n}\n\nexport const RouteCacheFileV0IDBase = 0x50400;\nexport function nodeIdToRouteCacheFileIDV0(nodeId: number): number {\n\treturn RouteCacheFileV0IDBase + nodeId - 1;\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= RouteCacheFileV0IDBase && id < RouteCacheFileV0IDBase + MAX_NODES,\n)\n@nvmSection(\"protocol\")\nexport class RouteCacheFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | RouteCacheFileV0Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tconst nodeId = this.fileId - RouteCacheFileV0IDBase + 1;\n\t\t\tconst lwr = parseRoute(this.payload, 0);\n\t\t\tconst nlwr = parseRoute(this.payload, MAX_REPEATERS + 1);\n\t\t\tthis.routeCache = { nodeId, lwr, nlwr };\n\t\t} else {\n\t\t\tthis.routeCache = options.routeCache;\n\t\t}\n\t}\n\n\tpublic routeCache: RouteCache;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.fileId = nodeIdToRouteCacheFileIDV0(this.routeCache.nodeId);\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeRoute(this.routeCache.lwr),\n\t\t\tencodeRoute(this.routeCache.nlwr),\n\t\t]);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\trouteCache: this.routeCache,\n\t\t};\n\t}\n}\n\nexport interface RouteCacheFileV1Options extends NVMFileCreationOptions {\n\trouteCaches: RouteCache[];\n}\n\nexport const RouteCacheFileV1IDBase = 0x51400;\nexport function nodeIdToRouteCacheFileIDV1(nodeId: number): number {\n\treturn (\n\t\tRouteCacheFileV1IDBase\n\t\t+ Math.floor((nodeId - 1) / ROUTECACHES_PER_FILE_V1)\n\t);\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= RouteCacheFileV1IDBase\n\t\t&& id < RouteCacheFileV1IDBase + MAX_NODES / ROUTECACHES_PER_FILE_V1,\n)\n@nvmSection(\"protocol\")\nexport class RouteCacheFileV1 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | RouteCacheFileV1Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.routeCaches = [];\n\t\t\tfor (let i = 0; i < ROUTECACHES_PER_FILE_V1; i++) {\n\t\t\t\tconst offset = i * 2 * (MAX_REPEATERS + 1);\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + 2 * (MAX_REPEATERS + 1),\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyRouteCache)) continue;\n\n\t\t\t\tconst nodeId
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAyC;AACzC,oBAAsB;
|
|
4
|
+
"sourcesContent": ["import { MAX_NODES, MAX_REPEATERS } from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\n\nimport {\n\tEMPTY_ROUTECACHE_FILL,\n\tROUTECACHE_SIZE,\n\ttype RouteCache,\n\temptyRouteCache,\n\tencodeRoute,\n\tparseRoute,\n} from \"../../common/routeCache.js\";\nimport type { NVM3Object } from \"../object.js\";\n\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const ROUTECACHES_PER_FILE_V1 = 8;\n\nexport interface RouteCacheFileV0Options extends NVMFileCreationOptions {\n\trouteCache: RouteCache;\n}\n\nexport const RouteCacheFileV0IDBase = 0x50400;\nexport function nodeIdToRouteCacheFileIDV0(nodeId: number): number {\n\treturn RouteCacheFileV0IDBase + nodeId - 1;\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= RouteCacheFileV0IDBase && id < RouteCacheFileV0IDBase + MAX_NODES,\n)\n@nvmSection(\"protocol\")\nexport class RouteCacheFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | RouteCacheFileV0Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tconst nodeId = this.fileId - RouteCacheFileV0IDBase + 1;\n\t\t\tconst lwr = parseRoute(this.payload, 0);\n\t\t\tconst nlwr = parseRoute(this.payload, MAX_REPEATERS + 1);\n\t\t\tthis.routeCache = { nodeId, lwr, nlwr };\n\t\t} else {\n\t\t\tthis.routeCache = options.routeCache;\n\t\t}\n\t}\n\n\tpublic routeCache: RouteCache;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.fileId = nodeIdToRouteCacheFileIDV0(this.routeCache.nodeId);\n\t\tthis.payload = Bytes.concat([\n\t\t\tencodeRoute(this.routeCache.lwr),\n\t\t\tencodeRoute(this.routeCache.nlwr),\n\t\t]);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\trouteCache: this.routeCache,\n\t\t};\n\t}\n}\n\nexport interface RouteCacheFileV1Options extends NVMFileCreationOptions {\n\trouteCaches: RouteCache[];\n}\n\nexport const RouteCacheFileV1IDBase = 0x51400;\nexport function nodeIdToRouteCacheFileIDV1(nodeId: number): number {\n\treturn (\n\t\tRouteCacheFileV1IDBase\n\t\t+ Math.floor((nodeId - 1) / ROUTECACHES_PER_FILE_V1)\n\t);\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= RouteCacheFileV1IDBase\n\t\t&& id < RouteCacheFileV1IDBase + MAX_NODES / ROUTECACHES_PER_FILE_V1,\n)\n@nvmSection(\"protocol\")\nexport class RouteCacheFileV1 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | RouteCacheFileV1Options,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.routeCaches = [];\n\t\t\tfor (let i = 0; i < ROUTECACHES_PER_FILE_V1; i++) {\n\t\t\t\tconst offset = i * 2 * (MAX_REPEATERS + 1);\n\t\t\t\tconst entry = this.payload.subarray(\n\t\t\t\t\toffset,\n\t\t\t\t\toffset + 2 * (MAX_REPEATERS + 1),\n\t\t\t\t);\n\t\t\t\tif (entry.equals(emptyRouteCache)) continue;\n\n\t\t\t\tconst nodeId =\n\t\t\t\t\t(this.fileId - RouteCacheFileV1IDBase)\n\t\t\t\t\t\t* ROUTECACHES_PER_FILE_V1\n\t\t\t\t\t+ 1\n\t\t\t\t\t+ i;\n\t\t\t\tconst lwr = parseRoute(this.payload, offset);\n\t\t\t\tconst nlwr = parseRoute(\n\t\t\t\t\tthis.payload,\n\t\t\t\t\toffset + MAX_REPEATERS + 1,\n\t\t\t\t);\n\n\t\t\t\tthis.routeCaches.push({ nodeId, lwr, nlwr });\n\t\t\t}\n\t\t} else {\n\t\t\tthis.routeCaches = options.routeCaches;\n\t\t}\n\t}\n\n\tpublic routeCaches: RouteCache[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\t// The route infos must be sorted by node ID\n\t\tthis.routeCaches.sort((a, b) => a.nodeId - b.nodeId);\n\t\tconst minNodeId = this.routeCaches[0].nodeId;\n\t\tthis.fileId = nodeIdToRouteCacheFileIDV1(minNodeId);\n\n\t\tthis.payload = new Bytes(\n\t\t\tROUTECACHES_PER_FILE_V1 * ROUTECACHE_SIZE,\n\t\t).fill(EMPTY_ROUTECACHE_FILL);\n\n\t\tconst minFileNodeId =\n\t\t\tMath.floor((minNodeId - 1) / ROUTECACHES_PER_FILE_V1)\n\t\t\t\t* ROUTECACHES_PER_FILE_V1\n\t\t\t+ 1;\n\n\t\tfor (const routeCache of this.routeCaches) {\n\t\t\tconst offset =\n\t\t\t\t(routeCache.nodeId - minFileNodeId) * ROUTECACHE_SIZE;\n\t\t\tconst routes = Bytes.concat([\n\t\t\t\tencodeRoute(routeCache.lwr),\n\t\t\t\tencodeRoute(routeCache.nlwr),\n\t\t\t]);\n\t\t\tthis.payload.set(routes, offset);\n\t\t}\n\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"route caches\": this.routeCaches,\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/SUCUpdateEntriesFile.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\nimport { SUC_MAX_UPDATES, SUC_UPDATE_ENTRY_SIZE } from \"../../../consts.js\";\nimport {\n\ttype SUCUpdateEntry,\n\tencodeSUCUpdateEntry,\n\tparseSUCUpdateEntry,\n} from \"../../common/sucUpdateEntry.js\";\nimport type { NVM3Object } from \"../object.js\";\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const SUC_UPDATES_PER_FILE_V5 = 8;\n\nexport interface SUCUpdateEntriesFileOptions extends NVMFileCreationOptions {\n\tupdateEntries: SUCUpdateEntry[];\n}\n\nexport const SUCUpdateEntriesFileIDV0 = 0x50003;\n\n@nvmFileID(SUCUpdateEntriesFileIDV0)\n@nvmSection(\"protocol\")\nexport class SUCUpdateEntriesFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | SUCUpdateEntriesFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.updateEntries = [];\n\t\t\tfor (let entry = 0; entry < SUC_MAX_UPDATES; entry++) {\n\t\t\t\tconst offset = entry * SUC_UPDATE_ENTRY_SIZE;\n\t\t\t\tconst updateEntry = parseSUCUpdateEntry(this.payload, offset);\n\t\t\t\tif (updateEntry) this.updateEntries.push(updateEntry);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.updateEntries = options.updateEntries;\n\t\t}\n\t}\n\n\tpublic updateEntries: SUCUpdateEntry[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = new Bytes(SUC_MAX_UPDATES * SUC_UPDATE_ENTRY_SIZE).fill(\n\t\t\t0,\n\t\t);\n\t\tfor (let i = 0; i < this.updateEntries.length; i++) {\n\t\t\tconst offset = i * SUC_UPDATE_ENTRY_SIZE;\n\t\t\tconst entry = this.updateEntries[i];\n\t\t\tthis.payload.set(encodeSUCUpdateEntry(entry), offset);\n\t\t}\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"SUC update entries\": this.updateEntries,\n\t\t};\n\t}\n}\n\nexport const SUCUpdateEntriesFileV5IDBase = 0x54000;\nexport const SUCUpdateEntriesFileV5IDMax
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAAsB;
|
|
4
|
+
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\n\nimport { SUC_MAX_UPDATES, SUC_UPDATE_ENTRY_SIZE } from \"../../../consts.js\";\nimport {\n\ttype SUCUpdateEntry,\n\tencodeSUCUpdateEntry,\n\tparseSUCUpdateEntry,\n} from \"../../common/sucUpdateEntry.js\";\nimport type { NVM3Object } from \"../object.js\";\n\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport const SUC_UPDATES_PER_FILE_V5 = 8;\n\nexport interface SUCUpdateEntriesFileOptions extends NVMFileCreationOptions {\n\tupdateEntries: SUCUpdateEntry[];\n}\n\nexport const SUCUpdateEntriesFileIDV0 = 0x50003;\n\n@nvmFileID(SUCUpdateEntriesFileIDV0)\n@nvmSection(\"protocol\")\nexport class SUCUpdateEntriesFileV0 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | SUCUpdateEntriesFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.updateEntries = [];\n\t\t\tfor (let entry = 0; entry < SUC_MAX_UPDATES; entry++) {\n\t\t\t\tconst offset = entry * SUC_UPDATE_ENTRY_SIZE;\n\t\t\t\tconst updateEntry = parseSUCUpdateEntry(this.payload, offset);\n\t\t\t\tif (updateEntry) this.updateEntries.push(updateEntry);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.updateEntries = options.updateEntries;\n\t\t}\n\t}\n\n\tpublic updateEntries: SUCUpdateEntry[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = new Bytes(SUC_MAX_UPDATES * SUC_UPDATE_ENTRY_SIZE).fill(\n\t\t\t0,\n\t\t);\n\t\tfor (let i = 0; i < this.updateEntries.length; i++) {\n\t\t\tconst offset = i * SUC_UPDATE_ENTRY_SIZE;\n\t\t\tconst entry = this.updateEntries[i];\n\t\t\tthis.payload.set(encodeSUCUpdateEntry(entry), offset);\n\t\t}\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"SUC update entries\": this.updateEntries,\n\t\t};\n\t}\n}\n\nexport const SUCUpdateEntriesFileV5IDBase = 0x54000;\nexport const SUCUpdateEntriesFileV5IDMax =\n\tSUCUpdateEntriesFileV5IDBase\n\t+ SUC_MAX_UPDATES / SUC_UPDATES_PER_FILE_V5\n\t- 1;\nexport function sucUpdateIndexToSUCUpdateEntriesFileIDV5(\n\tindex: number,\n): number {\n\treturn (\n\t\tSUCUpdateEntriesFileV5IDBase\n\t\t+ Math.floor(index / SUC_UPDATES_PER_FILE_V5)\n\t);\n}\n\n@nvmFileID(\n\t(id) =>\n\t\tid >= SUCUpdateEntriesFileV5IDBase && id <= SUCUpdateEntriesFileV5IDMax,\n)\n@nvmSection(\"protocol\")\nexport class SUCUpdateEntriesFileV5 extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | SUCUpdateEntriesFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.updateEntries = [];\n\t\t\tfor (let entry = 0; entry < SUC_UPDATES_PER_FILE_V5; entry++) {\n\t\t\t\tconst offset = entry * SUC_UPDATE_ENTRY_SIZE;\n\t\t\t\tconst updateEntry = parseSUCUpdateEntry(this.payload, offset);\n\t\t\t\tif (updateEntry) this.updateEntries.push(updateEntry);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.updateEntries = options.updateEntries;\n\t\t}\n\t}\n\n\tpublic updateEntries: SUCUpdateEntry[];\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = new Bytes(\n\t\t\tSUC_UPDATES_PER_FILE_V5 * SUC_UPDATE_ENTRY_SIZE,\n\t\t).fill(0xff);\n\t\tfor (let i = 0; i < this.updateEntries.length; i++) {\n\t\t\tconst offset = i * SUC_UPDATE_ENTRY_SIZE;\n\t\t\tconst entry = this.updateEntries[i];\n\t\t\tthis.payload.set(encodeSUCUpdateEntry(entry), offset);\n\t\t}\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\t\"SUC update entries\": this.updateEntries,\n\t\t};\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAAsB;AAEtB,oBAAuD;AACvD,4BAIO;AAGP,qBAOO;AAEA,MAAM,0BAA0B;AAMhC,MAAM,2BAA2B;IAI3B,0BAAsB,MAAA;8BAFlC,0BAAU,wBAAwB,OAClC,2BAAW,UAAU,CAAC;;;;oBACqB;8CAAA,YAAO;WAAA;;;;;;;;AAAnD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACZ,YACC,SAAoE;AAEpE,YAAM,OAAO;AACb,cAAI,0CAA0B,OAAO,GAAG;AACvC,aAAK,gBAAgB,CAAA;AACrB,iBAAS,QAAQ,GAAG,QAAQ,+BAAiB,SAAS;AACrD,gBAAM,SAAS,QAAQ;AACvB,gBAAM,kBAAc,2CAAoB,KAAK,SAAS,MAAM;AAC5D,cAAI;AAAa,iBAAK,cAAc,KAAK,WAAW;QACrD;MACD,OAAO;AACN,aAAK,gBAAgB,QAAQ;MAC9B;IACD;IAEO;IAEA,YAAS;AACf,WAAK,UAAU,IAAI,oBAAM,gCAAkB,mCAAqB,EAAE,KACjE,CAAC;AAEF,eAAS,IAAI,GAAG,IAAI,KAAK,cAAc,QAAQ,KAAK;AACnD,cAAM,SAAS,IAAI;AACnB,cAAM,QAAQ,KAAK,cAAc,CAAC;AAClC,aAAK,QAAQ,QAAI,4CAAqB,KAAK,GAAG,MAAM;MACrD;AACA,aAAO,MAAM,UAAS;IACvB;;IAGO,SAAM;AACZ,aAAO;QACN,GAAG,MAAM,OAAM;QACf,sBAAsB,KAAK;;IAE7B;;;;AAGM,MAAM,+BAA+B;AACrC,MAAM,8BACZ,+BACE,gCAAkB,0BAClB;AACG,SAAU,yCACf,OAAa;AAEb,SACC,+BACE,KAAK,MAAM,QAAQ,uBAAuB;AAE9C;AAPgB;IAcH,0BAAsB,MAAA;8BALlC,0BACA,CAAC,OACA,MAAM,gCAAgC,MAAM,2BAA2B,OAExE,2BAAW,UAAU,CAAC;;;;oBACqB;8CAAA,YAAO;WAAA;;;;;;;;AAAnD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;IACZ,YACC,SAAoE;AAEpE,YAAM,OAAO;AACb,cAAI,0CAA0B,OAAO,GAAG;AACvC,aAAK,gBAAgB,CAAA;AACrB,iBAAS,QAAQ,GAAG,QAAQ,yBAAyB,SAAS;AAC7D,gBAAM,SAAS,QAAQ;AACvB,gBAAM,kBAAc,2CAAoB,KAAK,SAAS,MAAM;AAC5D,cAAI;AAAa,iBAAK,cAAc,KAAK,WAAW;QACrD;MACD,OAAO;AACN,aAAK,gBAAgB,QAAQ;MAC9B;IACD;IAEO;IAEA,YAAS;AACf,WAAK,UAAU,IAAI,oBAClB,0BAA0B,mCAAqB,EAC9C,KAAK,GAAI;AACX,eAAS,IAAI,GAAG,IAAI,KAAK,cAAc,QAAQ,KAAK;AACnD,cAAM,SAAS,IAAI;AACnB,cAAM,QAAQ,KAAK,cAAc,CAAC;AAClC,aAAK,QAAQ,QAAI,4CAAqB,KAAK,GAAG,MAAM;MACrD;AACA,aAAO,MAAM,UAAS;IACvB;;IAGO,SAAM;AACZ,aAAO;QACN,GAAG,MAAM,OAAM;QACf,sBAAsB,KAAK;;IAE7B;;;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/nvm3/files/VersionFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\nimport type { NVM3Object } from \"../object.js\";\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport interface VersionFileOptions extends NVMFileCreationOptions {\n\tformat: number;\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n}\n\nexport class VersionFile extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | VersionFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.format = this.payload[3];\n\t\t\tthis.major = this.payload[2];\n\t\t\tthis.minor = this.payload[1];\n\t\t\tthis.patch = this.payload[0];\n\t\t} else {\n\t\t\tthis.format = options.format;\n\t\t\tthis.major = options.major;\n\t\t\tthis.minor = options.minor;\n\t\t\tthis.patch = options.patch;\n\t\t}\n\t}\n\n\tpublic format: number;\n\tpublic major: number;\n\tpublic minor: number;\n\tpublic patch: number;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.patch,\n\t\t\tthis.minor,\n\t\t\tthis.major,\n\t\t\tthis.format,\n\t\t]);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tformat: this.format,\n\t\t\tversion: `${this.major}.${this.minor}.${this.patch}`,\n\t\t};\n\t}\n}\n\nexport const ApplicationVersionFileID = 0x51000;\n\n@nvmFileID(ApplicationVersionFileID)\n@nvmSection(\"application\")\nexport class ApplicationVersionFile extends VersionFile {}\n\n// The 800 series has a shared application/protocol file system\n// and uses a different ID for the application version file\nexport const ApplicationVersionFile800ID = 0x41000;\n\n@nvmFileID(ApplicationVersionFile800ID)\n@nvmSection(\"application\")\nexport class ApplicationVersionFile800 extends VersionFile {}\n\nexport const ProtocolVersionFileID = 0x50000;\n\n@nvmFileID(ProtocolVersionFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolVersionFile extends VersionFile {}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAAsB;
|
|
4
|
+
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\n\nimport type { NVM3Object } from \"../object.js\";\n\nimport {\n\tNVMFile,\n\ttype NVMFileCreationOptions,\n\ttype NVMFileDeserializationOptions,\n\tgotDeserializationOptions,\n\tnvmFileID,\n\tnvmSection,\n} from \"./NVMFile.js\";\n\nexport interface VersionFileOptions extends NVMFileCreationOptions {\n\tformat: number;\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n}\n\nexport class VersionFile extends NVMFile {\n\tpublic constructor(\n\t\toptions: NVMFileDeserializationOptions | VersionFileOptions,\n\t) {\n\t\tsuper(options);\n\t\tif (gotDeserializationOptions(options)) {\n\t\t\tthis.format = this.payload[3];\n\t\t\tthis.major = this.payload[2];\n\t\t\tthis.minor = this.payload[1];\n\t\t\tthis.patch = this.payload[0];\n\t\t} else {\n\t\t\tthis.format = options.format;\n\t\t\tthis.major = options.major;\n\t\t\tthis.minor = options.minor;\n\t\t\tthis.patch = options.patch;\n\t\t}\n\t}\n\n\tpublic format: number;\n\tpublic major: number;\n\tpublic minor: number;\n\tpublic patch: number;\n\n\tpublic serialize(): NVM3Object & { data: Bytes } {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.patch,\n\t\t\tthis.minor,\n\t\t\tthis.major,\n\t\t\tthis.format,\n\t\t]);\n\t\treturn super.serialize();\n\t}\n\n\t// oxlint-disable-next-line typescript/explicit-module-boundary-types\n\tpublic toJSON() {\n\t\treturn {\n\t\t\t...super.toJSON(),\n\t\t\tformat: this.format,\n\t\t\tversion: `${this.major}.${this.minor}.${this.patch}`,\n\t\t};\n\t}\n}\n\nexport const ApplicationVersionFileID = 0x51000;\n\n@nvmFileID(ApplicationVersionFileID)\n@nvmSection(\"application\")\nexport class ApplicationVersionFile extends VersionFile {}\n\n// The 800 series has a shared application/protocol file system\n// and uses a different ID for the application version file\nexport const ApplicationVersionFile800ID = 0x41000;\n\n@nvmFileID(ApplicationVersionFile800ID)\n@nvmSection(\"application\")\nexport class ApplicationVersionFile800 extends VersionFile {}\n\nexport const ProtocolVersionFileID = 0x50000;\n\n@nvmFileID(ProtocolVersionFileID)\n@nvmSection(\"protocol\")\nexport class ProtocolVersionFile extends VersionFile {}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAAsB;AAItB,qBAOO;AASD,MAAO,oBAAoB,uBAAO;SAAA;;;EACvC,YACC,SAA2D;AAE3D,UAAM,OAAO;AACb,YAAI,0CAA0B,OAAO,GAAG;AACvC,WAAK,SAAS,KAAK,QAAQ,CAAC;AAC5B,WAAK,QAAQ,KAAK,QAAQ,CAAC;AAC3B,WAAK,QAAQ,KAAK,QAAQ,CAAC;AAC3B,WAAK,QAAQ,KAAK,QAAQ,CAAC;IAC5B,OAAO;AACN,WAAK,SAAS,QAAQ;AACtB,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,QAAQ;IACtB;EACD;EAEO;EACA;EACA;EACA;EAEA,YAAS;AACf,SAAK,UAAU,oBAAM,KAAK;MACzB,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;KACL;AACD,WAAO,MAAM,UAAS;EACvB;;EAGO,SAAM;AACZ,WAAO;MACN,GAAG,MAAM,OAAM;MACf,QAAQ,KAAK;MACb,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;;EAEpD;;AAGM,MAAM,2BAA2B;IAI3B,0BAAsB,MAAA;8BAFlC,0BAAU,wBAAwB,OAClC,2BAAW,aAAa,CAAC;;;;oBACkB;8CAAA,YAAW;WAAA;;;;;;;;AAAvD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;AAIN,MAAM,8BAA8B;IAI9B,6BAAyB,MAAA;8BAFrC,0BAAU,2BAA2B,OACrC,2BAAW,aAAa,CAAC;;;;oBACqB;iDAAA,YAAW;WAAA;;;;;;;;AAA1D,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;AAEN,MAAM,wBAAwB;IAIxB,uBAAmB,MAAA;8BAF/B,0BAAU,qBAAqB,OAC/B,2BAAW,UAAU,CAAC;;;;oBACkB;2CAAA,YAAW;WAAA;;;;;;;;AAApD,qCAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,0CAAA,YAAA,uBAAA;;;;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm3/object.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport {\n\tFragmentType,\n\tNVM3_CODE_LARGE_SHIFT,\n\tNVM3_CODE_SMALL_SHIFT,\n\tNVM3_COUNTER_SIZE,\n\tNVM3_OBJ_FRAGTYPE_MASK,\n\tNVM3_OBJ_FRAGTYPE_SHIFT,\n\tNVM3_OBJ_HEADER_SIZE_LARGE,\n\tNVM3_OBJ_HEADER_SIZE_SMALL,\n\tNVM3_OBJ_KEY_MASK,\n\tNVM3_OBJ_KEY_SHIFT,\n\tNVM3_OBJ_LARGE_LEN_MASK,\n\tNVM3_OBJ_TYPE_MASK,\n\tNVM3_WORD_SIZE,\n\tObjectType,\n} from \"./consts.js\";\nimport { computeBergerCode, computeBergerCodeMulti } from \"./utils.js\";\n\nexport interface NVM3ObjectHeader {\n\toffset: number;\n\ttype: ObjectType;\n\tkey: number;\n\tfragmentType: FragmentType;\n\t/** The length of the header */\n\theaderSize: number;\n\t/** The length of the object data */\n\tfragmentSize: number;\n\t/** The total length of the object in the NVM */\n\talignedSize: number;\n}\n\nexport interface NVM3Object {\n\ttype: ObjectType;\n\tfragmentType: FragmentType;\n\tkey: number;\n\tdata?: BytesView;\n}\n\nexport function serializeObject(obj: NVM3Object): BytesView {\n\tconst isLarge
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAAA,oBAAsC;
|
|
4
|
+
"sourcesContent": ["import { Bytes, type BytesView } from \"@zwave-js/shared\";\n\nimport {\n\tFragmentType,\n\tNVM3_CODE_LARGE_SHIFT,\n\tNVM3_CODE_SMALL_SHIFT,\n\tNVM3_COUNTER_SIZE,\n\tNVM3_OBJ_FRAGTYPE_MASK,\n\tNVM3_OBJ_FRAGTYPE_SHIFT,\n\tNVM3_OBJ_HEADER_SIZE_LARGE,\n\tNVM3_OBJ_HEADER_SIZE_SMALL,\n\tNVM3_OBJ_KEY_MASK,\n\tNVM3_OBJ_KEY_SHIFT,\n\tNVM3_OBJ_LARGE_LEN_MASK,\n\tNVM3_OBJ_TYPE_MASK,\n\tNVM3_WORD_SIZE,\n\tObjectType,\n} from \"./consts.js\";\nimport { computeBergerCode, computeBergerCodeMulti } from \"./utils.js\";\n\nexport interface NVM3ObjectHeader {\n\toffset: number;\n\ttype: ObjectType;\n\tkey: number;\n\tfragmentType: FragmentType;\n\t/** The length of the header */\n\theaderSize: number;\n\t/** The length of the object data */\n\tfragmentSize: number;\n\t/** The total length of the object in the NVM */\n\talignedSize: number;\n}\n\nexport interface NVM3Object {\n\ttype: ObjectType;\n\tfragmentType: FragmentType;\n\tkey: number;\n\tdata?: BytesView;\n}\n\nexport function serializeObject(obj: NVM3Object): BytesView {\n\tconst isLarge =\n\t\tobj.type === ObjectType.DataLarge\n\t\t|| obj.type === ObjectType.CounterLarge;\n\tconst headerSize = isLarge\n\t\t? NVM3_OBJ_HEADER_SIZE_LARGE\n\t\t: NVM3_OBJ_HEADER_SIZE_SMALL;\n\tconst dataLength = obj.data?.length ?? 0;\n\tconst ret = new Bytes(dataLength + headerSize);\n\n\t// Write header\n\tif (isLarge) {\n\t\tlet hdr2 = dataLength & NVM3_OBJ_LARGE_LEN_MASK;\n\n\t\tconst hdr1 =\n\t\t\t(obj.type & NVM3_OBJ_TYPE_MASK)\n\t\t\t| ((obj.key & NVM3_OBJ_KEY_MASK) << NVM3_OBJ_KEY_SHIFT)\n\t\t\t| ((obj.fragmentType & NVM3_OBJ_FRAGTYPE_MASK)\n\t\t\t\t<< NVM3_OBJ_FRAGTYPE_SHIFT);\n\n\t\tconst bergerCode = computeBergerCodeMulti(\n\t\t\t[hdr1, hdr2],\n\t\t\t32 + NVM3_CODE_LARGE_SHIFT,\n\t\t);\n\t\thdr2 |= bergerCode << NVM3_CODE_LARGE_SHIFT;\n\n\t\tret.writeInt32LE(hdr1, 0);\n\t\tret.writeInt32LE(hdr2, 4);\n\t} else {\n\t\tlet typeAndLen = obj.type;\n\t\tif (typeAndLen === ObjectType.DataSmall && dataLength > 0) {\n\t\t\ttypeAndLen += dataLength;\n\t\t}\n\t\tlet hdr1 =\n\t\t\t(typeAndLen & NVM3_OBJ_TYPE_MASK)\n\t\t\t| ((obj.key & NVM3_OBJ_KEY_MASK) << NVM3_OBJ_KEY_SHIFT);\n\t\tconst bergerCode = computeBergerCode(hdr1, NVM3_CODE_SMALL_SHIFT);\n\t\thdr1 |= bergerCode << NVM3_CODE_SMALL_SHIFT;\n\n\t\tret.writeInt32LE(hdr1, 0);\n\t}\n\n\t// Write data\n\tif (obj.data) {\n\t\tret.set(obj.data, headerSize);\n\t}\n\treturn ret;\n}\n\nexport function fragmentLargeObject(\n\tobj: NVM3Object & { type: ObjectType.DataLarge | ObjectType.CounterLarge },\n\tmaxFirstFragmentSizeWithHeader: number,\n\tmaxFragmentSizeWithHeader: number,\n): NVM3Object[] {\n\tconst ret: NVM3Object[] = [];\n\n\tif (\n\t\tobj.data!.length + NVM3_OBJ_HEADER_SIZE_LARGE\n\t\t<= maxFirstFragmentSizeWithHeader\n\t) {\n\t\treturn [obj];\n\t}\n\n\tlet offset = 0;\n\twhile (offset < obj.data!.length) {\n\t\tconst fragmentSize =\n\t\t\toffset === 0\n\t\t\t\t? maxFirstFragmentSizeWithHeader - NVM3_OBJ_HEADER_SIZE_LARGE\n\t\t\t\t: maxFragmentSizeWithHeader - NVM3_OBJ_HEADER_SIZE_LARGE;\n\t\tconst data = obj.data!.subarray(offset, offset + fragmentSize);\n\n\t\tret.push({\n\t\t\ttype: obj.type,\n\t\t\tkey: obj.key,\n\t\t\tfragmentType:\n\t\t\t\toffset === 0\n\t\t\t\t\t? FragmentType.First\n\t\t\t\t\t: data.length + NVM3_OBJ_HEADER_SIZE_LARGE\n\t\t\t\t\t\t < maxFragmentSizeWithHeader\n\t\t\t\t\t\t? FragmentType.Last\n\t\t\t\t\t\t: FragmentType.Next,\n\t\t\tdata,\n\t\t});\n\n\t\toffset += fragmentSize;\n\t}\n\n\treturn ret;\n}\n\nexport function getAlignedSize(size: number): number {\n\treturn (size + NVM3_WORD_SIZE - 1) & ~(NVM3_WORD_SIZE - 1);\n}\n\nexport function getHeaderSize(obj: NVM3Object): number {\n\tswitch (obj.type) {\n\t\tcase ObjectType.Deleted:\n\t\tcase ObjectType.CounterSmall:\n\t\tcase ObjectType.DataSmall:\n\t\t\treturn NVM3_OBJ_HEADER_SIZE_SMALL;\n\t\tcase ObjectType.CounterLarge:\n\t\tcase ObjectType.DataLarge:\n\t\t\treturn NVM3_OBJ_HEADER_SIZE_LARGE;\n\t}\n}\n\nexport function getFragmentSize(obj: NVM3Object): number {\n\tswitch (obj.type) {\n\t\tcase ObjectType.Deleted:\n\t\t\treturn 0;\n\t\tcase ObjectType.CounterSmall:\n\t\t\treturn NVM3_COUNTER_SIZE;\n\t\tcase ObjectType.DataSmall:\n\t\tcase ObjectType.DataLarge:\n\t\tcase ObjectType.CounterLarge:\n\t\t\treturn obj.data?.length ?? 0;\n\t}\n}\n\nexport function getRequiredSpace(obj: NVM3Object): number {\n\treturn getHeaderSize(obj) + getAlignedSize(getFragmentSize(obj));\n}\n\nexport function getObjectHeader(\n\tobj: NVM3Object,\n\toffset: number,\n): NVM3ObjectHeader {\n\tconst headerSize = getHeaderSize(obj);\n\tconst fragmentSize = getFragmentSize(obj);\n\treturn {\n\t\toffset,\n\t\tkey: obj.key,\n\t\ttype: obj.type,\n\t\tfragmentType: obj.fragmentType,\n\t\theaderSize,\n\t\tfragmentSize,\n\t\talignedSize: headerSize + getAlignedSize(fragmentSize),\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAAA,oBAAsC;AAEtC,oBAeO;AACP,mBAA0D;AAsBpD,SAAU,gBAAgB,KAAe;AAC9C,QAAM,UACL,IAAI,SAAS,yBAAW,aACrB,IAAI,SAAS,yBAAW;AAC5B,QAAM,aAAa,UAChB,2CACA;AACH,QAAM,aAAa,IAAI,MAAM,UAAU;AACvC,QAAM,MAAM,IAAI,oBAAM,aAAa,UAAU;AAG7C,MAAI,SAAS;AACZ,QAAI,OAAO,aAAa;AAExB,UAAM,OACJ,IAAI,OAAO,oCACR,IAAI,MAAM,oCAAsB,oCAChC,IAAI,eAAe,yCACnB;AAEL,UAAM,iBAAa,qCAClB,CAAC,MAAM,IAAI,GACX,KAAK,mCAAqB;AAE3B,YAAQ,cAAc;AAEtB,QAAI,aAAa,MAAM,CAAC;AACxB,QAAI,aAAa,MAAM,CAAC;EACzB,OAAO;AACN,QAAI,aAAa,IAAI;AACrB,QAAI,eAAe,yBAAW,aAAa,aAAa,GAAG;AAC1D,oBAAc;IACf;AACA,QAAI,OACF,aAAa,oCACV,IAAI,MAAM,oCAAsB;AACrC,UAAM,iBAAa,gCAAkB,MAAM,mCAAqB;AAChE,YAAQ,cAAc;AAEtB,QAAI,aAAa,MAAM,CAAC;EACzB;AAGA,MAAI,IAAI,MAAM;AACb,QAAI,IAAI,IAAI,MAAM,UAAU;EAC7B;AACA,SAAO;AACR;AA/CgB;AAiDV,SAAU,oBACf,KACA,gCACA,2BAAiC;AAEjC,QAAM,MAAoB,CAAA;AAE1B,MACC,IAAI,KAAM,SAAS,4CAChB,gCACF;AACD,WAAO,CAAC,GAAG;EACZ;AAEA,MAAI,SAAS;AACb,SAAO,SAAS,IAAI,KAAM,QAAQ;AACjC,UAAM,eACL,WAAW,IACR,iCAAiC,2CACjC,4BAA4B;AAChC,UAAM,OAAO,IAAI,KAAM,SAAS,QAAQ,SAAS,YAAY;AAE7D,QAAI,KAAK;MACR,MAAM,IAAI;MACV,KAAK,IAAI;MACT,cACC,WAAW,IACR,2BAAa,QACb,KAAK,SAAS,2CACX,4BACF,2BAAa,OACb,2BAAa;MAClB;KACA;AAED,cAAU;EACX;AAEA,SAAO;AACR;AAvCgB;AAyCV,SAAU,eAAe,MAAY;AAC1C,SAAQ,OAAO,+BAAiB,IAAK,EAAE,+BAAiB;AACzD;AAFgB;AAIV,SAAU,cAAc,KAAe;AAC5C,UAAQ,IAAI,MAAM;IACjB,KAAK,yBAAW;IAChB,KAAK,yBAAW;IAChB,KAAK,yBAAW;AACf,aAAO;IACR,KAAK,yBAAW;IAChB,KAAK,yBAAW;AACf,aAAO;EACT;AACD;AAVgB;AAYV,SAAU,gBAAgB,KAAe;AAC9C,UAAQ,IAAI,MAAM;IACjB,KAAK,yBAAW;AACf,aAAO;IACR,KAAK,yBAAW;AACf,aAAO;IACR,KAAK,yBAAW;IAChB,KAAK,yBAAW;IAChB,KAAK,yBAAW;AACf,aAAO,IAAI,MAAM,UAAU;EAC7B;AACD;AAXgB;AAaV,SAAU,iBAAiB,KAAe;AAC/C,SAAO,cAAc,GAAG,IAAI,eAAe,gBAAgB,GAAG,CAAC;AAChE;AAFgB;AAIV,SAAU,gBACf,KACA,QAAc;AAEd,QAAM,aAAa,cAAc,GAAG;AACpC,QAAM,eAAe,gBAAgB,GAAG;AACxC,SAAO;IACN;IACA,KAAK,IAAI;IACT,MAAM,IAAI;IACV,cAAc,IAAI;IAClB;IACA;IACA,aAAa,aAAa,eAAe,YAAY;;AAEvD;AAfgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm3/page.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport {\n\tNVM3_MIN_PAGE_SIZE,\n\tNVM3_PAGE_COUNTER_MASK,\n\tNVM3_PAGE_COUNTER_SIZE,\n\tNVM3_PAGE_HEADER_SIZE,\n\tNVM3_PAGE_MAGIC,\n\ttype PageStatus,\n\ttype PageWriteSize,\n} from \"./consts.js\";\nimport type { NVM3Object } from \"./object.js\";\nimport { computeBergerCode } from \"./utils.js\";\n\nexport interface NVM3PageHeader {\n\toffset: number;\n\tversion: number;\n\teraseCount: number;\n\tstatus: PageStatus;\n\tencrypted: boolean;\n\tpageSize: number;\n\twriteSize: PageWriteSize;\n\tmemoryMapped: boolean;\n\tdeviceFamily: number;\n}\n\nexport interface NVM3Page {\n\theader: NVM3PageHeader;\n\tobjects: NVM3Object[];\n}\n\n// The page size field has a value from 0 to 7 describing page sizes from 512 to 65536 bytes\nexport function pageSizeToBits(pageSize: number): number {\n\treturn Math.ceil(Math.log2(pageSize) - Math.log2(NVM3_MIN_PAGE_SIZE));\n}\n\nexport function pageSizeFromBits(bits: number): number {\n\treturn NVM3_MIN_PAGE_SIZE * Math.pow(2, bits);\n}\n\nexport function serializePageHeader(\n\theader: Omit<NVM3PageHeader, \"offset\">,\n): BytesView {\n\tconst ret = new Bytes(NVM3_PAGE_HEADER_SIZE);\n\n\tret.writeUInt16LE(header.version, 0);\n\tret.writeUInt16LE(NVM3_PAGE_MAGIC, 2);\n\n\tlet eraseCount = header.eraseCount & NVM3_PAGE_COUNTER_MASK;\n\tconst eraseCountCode = computeBergerCode(\n\t\teraseCount,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\teraseCount |= eraseCountCode << NVM3_PAGE_COUNTER_SIZE;\n\tret.writeInt32LE(eraseCount, 4);\n\n\tlet eraseCountInv = ~header.eraseCount & NVM3_PAGE_COUNTER_MASK;\n\tconst eraseCountInvCode = computeBergerCode(\n\t\teraseCountInv,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\teraseCountInv |= eraseCountInvCode << NVM3_PAGE_COUNTER_SIZE;\n\tret.writeInt32LE(eraseCountInv, 8);\n\n\tret.writeUInt32LE(header.status, 12);\n\n\tconst devInfo
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAAA,oBAAsC;
|
|
4
|
+
"sourcesContent": ["import { Bytes, type BytesView } from \"@zwave-js/shared\";\n\nimport {\n\tNVM3_MIN_PAGE_SIZE,\n\tNVM3_PAGE_COUNTER_MASK,\n\tNVM3_PAGE_COUNTER_SIZE,\n\tNVM3_PAGE_HEADER_SIZE,\n\tNVM3_PAGE_MAGIC,\n\ttype PageStatus,\n\ttype PageWriteSize,\n} from \"./consts.js\";\nimport type { NVM3Object } from \"./object.js\";\nimport { computeBergerCode } from \"./utils.js\";\n\nexport interface NVM3PageHeader {\n\toffset: number;\n\tversion: number;\n\teraseCount: number;\n\tstatus: PageStatus;\n\tencrypted: boolean;\n\tpageSize: number;\n\twriteSize: PageWriteSize;\n\tmemoryMapped: boolean;\n\tdeviceFamily: number;\n}\n\nexport interface NVM3Page {\n\theader: NVM3PageHeader;\n\tobjects: NVM3Object[];\n}\n\n// The page size field has a value from 0 to 7 describing page sizes from 512 to 65536 bytes\nexport function pageSizeToBits(pageSize: number): number {\n\treturn Math.ceil(Math.log2(pageSize) - Math.log2(NVM3_MIN_PAGE_SIZE));\n}\n\nexport function pageSizeFromBits(bits: number): number {\n\treturn NVM3_MIN_PAGE_SIZE * Math.pow(2, bits);\n}\n\nexport function serializePageHeader(\n\theader: Omit<NVM3PageHeader, \"offset\">,\n): BytesView {\n\tconst ret = new Bytes(NVM3_PAGE_HEADER_SIZE);\n\n\tret.writeUInt16LE(header.version, 0);\n\tret.writeUInt16LE(NVM3_PAGE_MAGIC, 2);\n\n\tlet eraseCount = header.eraseCount & NVM3_PAGE_COUNTER_MASK;\n\tconst eraseCountCode = computeBergerCode(\n\t\teraseCount,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\teraseCount |= eraseCountCode << NVM3_PAGE_COUNTER_SIZE;\n\tret.writeInt32LE(eraseCount, 4);\n\n\tlet eraseCountInv = ~header.eraseCount & NVM3_PAGE_COUNTER_MASK;\n\tconst eraseCountInvCode = computeBergerCode(\n\t\teraseCountInv,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\teraseCountInv |= eraseCountInvCode << NVM3_PAGE_COUNTER_SIZE;\n\tret.writeInt32LE(eraseCountInv, 8);\n\n\tret.writeUInt32LE(header.status, 12);\n\n\tconst devInfo =\n\t\t(header.deviceFamily & 0x7ff)\n\t\t| ((header.writeSize & 0b1) << 11)\n\t\t| ((header.memoryMapped ? 1 : 0) << 12)\n\t\t| (pageSizeToBits(header.pageSize) << 13);\n\tret.writeUInt16LE(devInfo, 16);\n\n\tconst formatInfo = header.encrypted ? 0xfffe : 0xffff;\n\tret.writeUInt16LE(formatInfo, 18);\n\n\treturn ret;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAAA,oBAAsC;AAEtC,oBAQO;AAEP,mBAAkC;AAoB5B,SAAU,eAAe,UAAgB;AAC9C,SAAO,KAAK,KAAK,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,gCAAkB,CAAC;AACrE;AAFgB;AAIV,SAAU,iBAAiB,MAAY;AAC5C,SAAO,mCAAqB,KAAK,IAAI,GAAG,IAAI;AAC7C;AAFgB;AAIV,SAAU,oBACf,QAAsC;AAEtC,QAAM,MAAM,IAAI,oBAAM,mCAAqB;AAE3C,MAAI,cAAc,OAAO,SAAS,CAAC;AACnC,MAAI,cAAc,+BAAiB,CAAC;AAEpC,MAAI,aAAa,OAAO,aAAa;AACrC,QAAM,qBAAiB,gCACtB,YACA,oCAAsB;AAEvB,gBAAc,kBAAkB;AAChC,MAAI,aAAa,YAAY,CAAC;AAE9B,MAAI,gBAAgB,CAAC,OAAO,aAAa;AACzC,QAAM,wBAAoB,gCACzB,eACA,oCAAsB;AAEvB,mBAAiB,qBAAqB;AACtC,MAAI,aAAa,eAAe,CAAC;AAEjC,MAAI,cAAc,OAAO,QAAQ,EAAE;AAEnC,QAAM,UACJ,OAAO,eAAe,QACnB,OAAO,YAAY,MAAQ,MAC3B,OAAO,eAAe,IAAI,MAAM,KACjC,eAAe,OAAO,QAAQ,KAAK;AACvC,MAAI,cAAc,SAAS,EAAE;AAE7B,QAAM,aAAa,OAAO,YAAY,QAAS;AAC/C,MAAI,cAAc,YAAY,EAAE;AAEhC,SAAO;AACR;AArCgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -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>(\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\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAA4C;AAC5C,oBAAoC;
|
|
4
|
+
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\n\nimport type { NVM3 } from \"../NVM3.js\";\n\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: ${buffer2hex(\n\t\t\t\tobj.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 =\n\t\t\t\t\t\tobjectHeader.type !== ObjectType.Deleted\n\t\t\t\t\t\t\t? await nvm.readObjectData(objectHeader)\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tdumpObject(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\toffset: objectHeader.offset,\n\t\t\t\t\t\t\tkey: objectHeader.key,\n\t\t\t\t\t\t\ttype: objectHeader.type,\n\t\t\t\t\t\t\tfragmentType: objectHeader.fragmentType,\n\t\t\t\t\t\t\tdata: objectData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\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\t{\n\t\t\t\t\toffset: objectHeader.offset,\n\t\t\t\t\tkey: fileId,\n\t\t\t\t\ttype: objectHeader.type,\n\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\tdata: objectData,\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t);\n\t\t}\n\n\t\tconsole.log();\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAA4C;AAC5C,oBAAoC;AAIpC,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,KAA4B;AAE5B,QAAM,MAAkC,CAAA;AACxC,aAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC/B,QAAI,GAAG,IAAI;EACZ;AACA,SAAO;AACR;AARgB;AAUhB,SAAS,WACR,KACA,OAAgB,OAAK;AAErB,MAAI;AACH,QAAI,MAAM;AACT,YAAM,OAAO,uBAAQ,KAAK,IAAI,KAAK,IAAI,MAAO,OAAO;AACrD,cAAQ,IACP,KAAK,UACJ;QACC,YAAQ,uBAAQ,IAAI,MAAM;QAC1B,GAAG,KAAK,OAAM;SAEf,MACA,CAAC,CACD;AAEF,cAAQ,IAAG;AACX;IACD;EACD,QAAQ;EAER;AACA,QAAM,SAAS,OAAO,KAAK;AAC3B,UAAQ,IAAI,GAAG,MAAM,oBAAa,uBAAQ,IAAI,MAAM,CAAC,EAAE;AACvD,UAAQ,IAAI,GAAG,MAAM,YAAY,IAAI,IAAI,SAAS,EAAE,CAAC,EAAE;AACvD,UAAQ,IAAI,GAAG,MAAM,WAAW,yBAAW,IAAI,IAAI,CAAC,EAAE;AACtD,UAAQ,IAAI,GAAG,MAAM,oBAAoB,2BAAa,IAAI,YAAY,CAAC,EAAE;AACzE,MAAI,IAAI,MAAM;AACb,YAAQ,IACP,GAAG,MAAM,eAAW,0BACnB,IAAI,IAAI,CACR,KAAK,IAAI,KAAK,MAAM,SAAS;EAEhC;AACA,UAAQ,IAAG;AACZ;AApCS;AAsCT,eAAsB,QAAQ,KAAS;AACtC,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,IAAI,KAAM,QAAQ,GAAG;AACjE,YAAQ,IAAI,gBAAgB,IAAI,EAAE;AAElC,eAAW,QAAQ,QAAQ,OAAO;AACjC,cAAQ,IAAI,EAAE;AACd,cAAQ,IAAI,kBAAkB,KAAK,OAAO,SAAS,EAAE,CAAC,IAAI;AAC1D,cAAQ,IAAI,cAAc,KAAK,OAAO,EAAE;AACxC,cAAQ,IAAI,iBAAiB,KAAK,UAAU,EAAE;AAC9C,cAAQ,IAAI,aAAa,yBAAW,KAAK,MAAM,CAAC,EAAE;AAClD,cAAQ,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAC5C,cAAQ,IAAI,eAAe,KAAK,QAAQ,EAAE;AAC1C,cAAQ,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAC5C,cAAQ,IAAI,mBAAmB,KAAK,YAAY,EAAE;AAClD,cAAQ,IAAI,mBAAmB,KAAK,YAAY,EAAE;AAClD,cAAQ,IAAI,EAAE;AACd,UAAI,KAAK,QAAQ,QAAQ;AACxB,gBAAQ,IAAI,gBAAgB;AAE5B,mBAAW,gBAAgB,KAAK,SAAS;AACxC,gBAAM,aACL,aAAa,SAAS,yBAAW,UAC9B,MAAM,IAAI,eAAe,YAAY,IACrC;AACJ,qBACC;YACC,QAAQ,aAAa;YACrB,KAAK,aAAa;YAClB,MAAM,aAAa;YACnB,cAAc,aAAa;YAC3B,MAAM;aAEP,KAAK;QAEP;MACD;IACD;AAEA,YAAQ,IAAG;AACX,YAAQ,IAAG;EACZ;AAEA,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,IAAI,KAAM,QAAQ,GAAG;AACjE,YAAQ,IAAI,GAAG,IAAI,WAAW;AAC9B,eAAW,CAAC,QAAQ,SAAS,KAAK,QAAQ,iBAAiB;AAC1D,YAAM,OAAO,QAAQ,MAAM,SAAS;AACpC,YAAM,eAAe,KAAK,QAAQ,SAAS,CAAC,MAAM,EAAE,QAAQ,MAAM;AAClE,UAAI,CAAC;AAAc;AACnB,YAAM,aAAa,MAAM,IAAI,IAAI,QAAQ,OAAO;AAEhD,iBACC;QACC,QAAQ,aAAa;QACrB,KAAK;QACL,MAAM,aAAa;QACnB,cAAc,2BAAa;QAC3B,MAAM;SAEP,IAAI;IAEN;AAEA,YAAQ,IAAG;EACZ;AACD;AAhEsB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -93,10 +93,7 @@ function encodeNVM500NodeInfo(nodeInfo) {
|
|
|
93
93
|
...nodeInfo,
|
|
94
94
|
hasSpecificDeviceClass: !!nodeInfo.specificDeviceClass
|
|
95
95
|
}),
|
|
96
|
-
[
|
|
97
|
-
nodeInfo.genericDeviceClass,
|
|
98
|
-
nodeInfo.specificDeviceClass ?? 0
|
|
99
|
-
]
|
|
96
|
+
[nodeInfo.genericDeviceClass, nodeInfo.specificDeviceClass ?? 0]
|
|
100
97
|
]);
|
|
101
98
|
}
|
|
102
99
|
__name(encodeNVM500NodeInfo, "encodeNVM500NodeInfo");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm500/EntryParsers.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype NodeProtocolInfo,\n\tencodeNodeProtocolInfo,\n\tparseNodeProtocolInfo,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport type { NVMModuleType } from \"./shared.js\";\n\nexport interface NVMDescriptor {\n\tmanufacturerID: number;\n\tfirmwareID: number;\n\tproductType: number;\n\tproductID: number;\n\tfirmwareVersion: string;\n\tprotocolVersion: string;\n}\n\nexport function parseNVMDescriptor(\n\tdata: BytesView,\n\toffset: number = 0,\n): NVMDescriptor {\n\tconst buffer = Bytes.view(data);\n\treturn {\n\t\tmanufacturerID: buffer.readUInt16BE(offset),\n\t\tfirmwareID: buffer.readUInt16BE(offset + 2),\n\t\tproductType: buffer.readUInt16BE(offset + 4),\n\t\tproductID: buffer.readUInt16BE(offset + 6),\n\t\tfirmwareVersion: `${buffer[offset + 8]}.${buffer[offset + 9]}`,\n\t\t// Z-Wave protocol versions are formatted as \"6.07\" and similar\n\t\tprotocolVersion: `${buffer[offset + 10]}.${
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAIO;AACP,oBAAsC;
|
|
4
|
+
"sourcesContent": ["import {\n\ttype NodeProtocolInfo,\n\tencodeNodeProtocolInfo,\n\tparseNodeProtocolInfo,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\n\nimport type { NVMModuleType } from \"./shared.js\";\n\nexport interface NVMDescriptor {\n\tmanufacturerID: number;\n\tfirmwareID: number;\n\tproductType: number;\n\tproductID: number;\n\tfirmwareVersion: string;\n\tprotocolVersion: string;\n}\n\nexport function parseNVMDescriptor(\n\tdata: BytesView,\n\toffset: number = 0,\n): NVMDescriptor {\n\tconst buffer = Bytes.view(data);\n\treturn {\n\t\tmanufacturerID: buffer.readUInt16BE(offset),\n\t\tfirmwareID: buffer.readUInt16BE(offset + 2),\n\t\tproductType: buffer.readUInt16BE(offset + 4),\n\t\tproductID: buffer.readUInt16BE(offset + 6),\n\t\tfirmwareVersion: `${buffer[offset + 8]}.${buffer[offset + 9]}`,\n\t\t// Z-Wave protocol versions are formatted as \"6.07\" and similar\n\t\tprotocolVersion: `${buffer[offset + 10]}.${buffer[offset + 11]\n\t\t\t.toString()\n\t\t\t.padStart(2, \"0\")}`,\n\t};\n}\n\nexport function encodeNVMDescriptor(descriptor: NVMDescriptor): Bytes {\n\tconst ret = new Bytes(12);\n\tret.writeUInt16BE(descriptor.manufacturerID, 0);\n\tret.writeUInt16BE(descriptor.firmwareID, 2);\n\tret.writeUInt16BE(descriptor.productType, 4);\n\tret.writeUInt16BE(descriptor.productID, 6);\n\tconst fwVersionParts = descriptor.firmwareVersion\n\t\t.split(\".\")\n\t\t.map((i) => parseInt(i));\n\tret[8] = fwVersionParts[0];\n\tret[9] = fwVersionParts[1];\n\tconst protocolVersionParts = descriptor.protocolVersion\n\t\t.split(\".\")\n\t\t.map((i) => parseInt(i));\n\tret[10] = protocolVersionParts[0];\n\tret[11] = protocolVersionParts[1];\n\treturn ret;\n}\n\nexport interface NVMModuleDescriptor {\n\tsize: number;\n\ttype: NVMModuleType;\n\tversion: string;\n}\n\nexport function parseNVMModuleDescriptor(\n\tdata: BytesView,\n\toffset: number = 0,\n): NVMModuleDescriptor {\n\tconst buffer = Bytes.view(data);\n\treturn {\n\t\tsize: buffer.readUInt16BE(offset),\n\t\ttype: buffer[offset + 2],\n\t\tversion: `${buffer[offset + 3]}.${buffer[offset + 4]}`,\n\t};\n}\n\nexport function encodeNVMModuleDescriptor(\n\tdescriptior: NVMModuleDescriptor,\n): Bytes {\n\tconst ret = new Bytes(5);\n\tret.writeUInt16BE(descriptior.size, 0);\n\tret[2] = descriptior.type;\n\tconst versionParts = descriptior.version.split(\".\").map((i) => parseInt(i));\n\tret[3] = versionParts[0];\n\tret[4] = versionParts[1];\n\treturn ret;\n}\n\nexport interface NVM500NodeInfo extends Omit<\n\tNodeProtocolInfo,\n\t\"hasSpecificDeviceClass\"\n> {\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number | null;\n}\n\nexport function parseNVM500NodeInfo(\n\tbuffer: BytesView,\n\toffset: number,\n): NVM500NodeInfo {\n\tconst { hasSpecificDeviceClass, ...protocolInfo } = parseNodeProtocolInfo(\n\t\tbuffer,\n\t\toffset,\n\t);\n\tconst genericDeviceClass = buffer[offset + 3];\n\tconst specificDeviceClass = hasSpecificDeviceClass\n\t\t? buffer[offset + 4]\n\t\t: null;\n\treturn {\n\t\t...protocolInfo,\n\t\tgenericDeviceClass,\n\t\tspecificDeviceClass,\n\t};\n}\n\nexport function encodeNVM500NodeInfo(nodeInfo: NVM500NodeInfo): Bytes {\n\treturn Bytes.concat([\n\t\tencodeNodeProtocolInfo({\n\t\t\t...nodeInfo,\n\t\t\thasSpecificDeviceClass: !!nodeInfo.specificDeviceClass,\n\t\t}),\n\t\t[nodeInfo.genericDeviceClass, nodeInfo.specificDeviceClass ?? 0],\n\t]);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAIO;AACP,oBAAsC;AAahC,SAAU,mBACf,MACA,SAAiB,GAAC;AAElB,QAAM,SAAS,oBAAM,KAAK,IAAI;AAC9B,SAAO;IACN,gBAAgB,OAAO,aAAa,MAAM;IAC1C,YAAY,OAAO,aAAa,SAAS,CAAC;IAC1C,aAAa,OAAO,aAAa,SAAS,CAAC;IAC3C,WAAW,OAAO,aAAa,SAAS,CAAC;IACzC,iBAAiB,GAAG,OAAO,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC;;IAE5D,iBAAiB,GAAG,OAAO,SAAS,EAAE,CAAC,IAAI,OAAO,SAAS,EAAE,EAC3D,SAAQ,EACR,SAAS,GAAG,GAAG,CAAC;;AAEpB;AAhBgB;AAkBV,SAAU,oBAAoB,YAAyB;AAC5D,QAAM,MAAM,IAAI,oBAAM,EAAE;AACxB,MAAI,cAAc,WAAW,gBAAgB,CAAC;AAC9C,MAAI,cAAc,WAAW,YAAY,CAAC;AAC1C,MAAI,cAAc,WAAW,aAAa,CAAC;AAC3C,MAAI,cAAc,WAAW,WAAW,CAAC;AACzC,QAAM,iBAAiB,WAAW,gBAChC,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;AACxB,MAAI,CAAC,IAAI,eAAe,CAAC;AACzB,MAAI,CAAC,IAAI,eAAe,CAAC;AACzB,QAAM,uBAAuB,WAAW,gBACtC,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;AACxB,MAAI,EAAE,IAAI,qBAAqB,CAAC;AAChC,MAAI,EAAE,IAAI,qBAAqB,CAAC;AAChC,SAAO;AACR;AAjBgB;AAyBV,SAAU,yBACf,MACA,SAAiB,GAAC;AAElB,QAAM,SAAS,oBAAM,KAAK,IAAI;AAC9B,SAAO;IACN,MAAM,OAAO,aAAa,MAAM;IAChC,MAAM,OAAO,SAAS,CAAC;IACvB,SAAS,GAAG,OAAO,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC;;AAEtD;AAVgB;AAYV,SAAU,0BACf,aAAgC;AAEhC,QAAM,MAAM,IAAI,oBAAM,CAAC;AACvB,MAAI,cAAc,YAAY,MAAM,CAAC;AACrC,MAAI,CAAC,IAAI,YAAY;AACrB,QAAM,eAAe,YAAY,QAAQ,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;AAC1E,MAAI,CAAC,IAAI,aAAa,CAAC;AACvB,MAAI,CAAC,IAAI,aAAa,CAAC;AACvB,SAAO;AACR;AAVgB;AAoBV,SAAU,oBACf,QACA,QAAc;AAEd,QAAM,EAAE,wBAAwB,GAAG,aAAY,QAAK,mCACnD,QACA,MAAM;AAEP,QAAM,qBAAqB,OAAO,SAAS,CAAC;AAC5C,QAAM,sBAAsB,yBACzB,OAAO,SAAS,CAAC,IACjB;AACH,SAAO;IACN,GAAG;IACH;IACA;;AAEF;AAjBgB;AAmBV,SAAU,qBAAqB,UAAwB;AAC5D,SAAO,oBAAM,OAAO;QACnB,oCAAuB;MACtB,GAAG;MACH,wBAAwB,CAAC,CAAC,SAAS;KACnC;IACD,CAAC,SAAS,oBAAoB,SAAS,uBAAuB,CAAC;GAC/D;AACF;AARgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@ import type { NVMAdapter, NVMProperty, NVMPropertyToDataType } from "../common/d
|
|
|
3
3
|
export declare class NVM500Adapter implements NVMAdapter {
|
|
4
4
|
constructor(nvm: NVM500);
|
|
5
5
|
private _nvm;
|
|
6
|
-
get<T extends NVMProperty, R extends boolean = boolean>(property: T, required?: R): Promise<R extends true ? NonNullable<NVMPropertyToDataType<T>> :
|
|
6
|
+
get<T extends NVMProperty, R extends boolean = boolean>(property: T, required?: R): Promise<R extends true ? NonNullable<NVMPropertyToDataType<T>> : NVMPropertyToDataType<T> | undefined>;
|
|
7
7
|
private getOnly;
|
|
8
8
|
private getSingle;
|
|
9
9
|
private getAll;
|
|
@@ -253,7 +253,9 @@ class NVM500Adapter {
|
|
|
253
253
|
return this.setOnly("NVM_SYSTEM_STATE", value);
|
|
254
254
|
case "commandClasses": {
|
|
255
255
|
await this.setOnly("EEOFFSET_CMDCLASS_LEN_far", value.length);
|
|
256
|
-
const CCs = Array.from({
|
|
256
|
+
const CCs = Array.from({
|
|
257
|
+
length: import_shared2.APPL_NODEPARM_MAX
|
|
258
|
+
}).fill(255);
|
|
257
259
|
for (let i = 0; i < value.length; i++) {
|
|
258
260
|
if (i < import_shared2.APPL_NODEPARM_MAX) {
|
|
259
261
|
CCs[i] = value[i];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm500/adapter.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tZWaveError,\n\tZWaveErrorCodes,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport { assertNever } from \"alcalzone-shared/helpers\";\nimport { SUC_MAX_UPDATES } from \"../../consts.js\";\nimport type { NVM500, NVM500Info } from \"../NVM500.js\";\nimport type {\n\tControllerNVMProperty,\n\tNVMAdapter,\n\tNVMProperty,\n\tNVMPropertyToDataType,\n\tNodeNVMProperty,\n} from \"../common/definitions.js\";\nimport type { Route } from \"../common/routeCache.js\";\nimport type { SUCUpdateEntry } from \"../common/sucUpdateEntry.js\";\nimport type { NodeInfo } from \"../nvm3/files/index.js\";\nimport type { NVM500NodeInfo } from \"./EntryParsers.js\";\nimport {\n\tAPPL_NODEPARM_MAX,\n\ttype NVMData,\n\ttype NVMEntryName,\n\tNVM_SERIALAPI_HOST_SIZE,\n} from \"./shared.js\";\n\nexport class NVM500Adapter implements NVMAdapter {\n\tpublic constructor(nvm: NVM500) {\n\t\tthis._nvm = nvm;\n\t}\n\n\tprivate _nvm: NVM500;\n\n\tpublic async get<T extends NVMProperty, R extends boolean = boolean>(\n\t\tproperty: T,\n\t\trequired?: R,\n\t): Promise<\n\t\tR extends true ? NonNullable<NVMPropertyToDataType<T>>\n\t\t\t: (NVMPropertyToDataType<T> | undefined)\n\t> {\n\t\tconst info = this._nvm.info ?? await this._nvm.init();\n\n\t\tlet ret: unknown;\n\t\tif (property.domain === \"controller\") {\n\t\t\tret = await this.getControllerNVMProperty(info, property);\n\t\t} else if (property.domain === \"lrnode\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`500 series NVM has no support for Long Range node information`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t} else {\n\t\t\tret = await this.getNodeNVMProperty(property);\n\t\t}\n\t\tif (required && ret === undefined) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`NVM data for property ${JSON.stringify(property)} not found`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t}\n\t\treturn ret as any;\n\t}\n\n\tprivate async getOnly<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t): Promise<T | undefined> {\n\t\tconst data = await this._nvm.get(property);\n\t\treturn data?.[0] as T | undefined;\n\t}\n\n\tprivate async getSingle<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t\tindex: number,\n\t): Promise<T | undefined> {\n\t\tconst data = await this._nvm.getSingle(property, index);\n\t\treturn data as T | undefined;\n\t}\n\n\tprivate getAll<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t): Promise<T[] | undefined> {\n\t\treturn this._nvm.get(property) as any;\n\t}\n\n\tprivate async getControllerNVMProperty(\n\t\tinfo: NVM500Info,\n\t\tproperty: ControllerNVMProperty,\n\t): Promise<unknown> {\n\t\tswitch (property.type) {\n\t\t\tcase \"protocolVersion\":\n\t\t\t\treturn info.nvmDescriptor.protocolVersion;\n\t\t\tcase \"applicationVersion\":\n\t\t\t\treturn info.nvmDescriptor.firmwareVersion;\n\n\t\t\tcase \"protocolFileFormat\":\n\t\t\tcase \"applicationFileFormat\":\n\t\t\t\t// Not supported in 500 series, but we use 500 in JSON to designate a 500 series NVM\n\t\t\t\treturn 500;\n\n\t\t\tcase \"applicationData\":\n\t\t\t\treturn this.getOnly<BytesView>(\n\t\t\t\t\t\"EEOFFSET_HOST_OFFSET_START_far\",\n\t\t\t\t);\n\n\t\t\tcase \"applicationName\":\n\t\t\t\t// Not supported in 500 series\n\t\t\t\treturn;\n\n\t\t\tcase \"homeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = await this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_HOME_ID_far\",\n\t\t\t\t);\n\t\t\t\tif (homeId == undefined) return;\n\t\t\t\tconst ret = new Bytes(4).fill(0);\n\t\t\t\t// FIXME: BE? LE?\n\t\t\t\tret.writeUInt32BE(homeId, 0);\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tcase \"learnedHomeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = await this.getOnly<number>(\"NVM_HOMEID_far\");\n\t\t\t\tif (homeId == undefined) return;\n\t\t\t\tconst ret = new Bytes(4).fill(0);\n\t\t\t\t// FIXME: BE? LE?\n\t\t\t\tret.writeUInt32BE(homeId, 0);\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tcase \"nodeId\":\n\t\t\t\treturn this.getOnly<number>(\"NVM_NODEID_far\");\n\n\t\t\tcase \"lastNodeId\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_LAST_USED_NODE_ID_START_far\",\n\t\t\t\t);\n\n\t\t\tcase \"staticControllerNodeId\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_STATIC_CONTROLLER_NODE_ID_START_far\",\n\t\t\t\t);\n\t\t\tcase \"sucLastIndex\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_SUC_LAST_INDEX_START_far\",\n\t\t\t\t);\n\t\t\tcase \"controllerConfiguration\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_CONTROLLER_CONFIGURATION_far\",\n\t\t\t\t);\n\n\t\t\tcase \"maxNodeId\":\n\t\t\t\treturn this.getOnly<number>(\"EX_NVM_MAX_NODE_ID_far\");\n\t\t\tcase \"reservedId\":\n\t\t\t\treturn this.getOnly<number>(\"EX_NVM_RESERVED_ID_far\");\n\t\t\tcase \"systemState\":\n\t\t\t\treturn this.getOnly<number>(\"NVM_SYSTEM_STATE\");\n\n\t\t\tcase \"commandClasses\": {\n\t\t\t\tconst numCCs = await this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_LEN_far\",\n\t\t\t\t);\n\t\t\t\tconst ret = await this.getAll<CommandClasses>(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_far\",\n\t\t\t\t);\n\t\t\t\treturn ret?.slice(0, numCCs);\n\t\t\t}\n\n\t\t\tcase \"preferredRepeaters\":\n\t\t\t\treturn this.getOnly<number[]>(\"NVM_PREFERRED_REPEATERS_far\");\n\n\t\t\tcase \"appRouteLock\": {\n\t\t\t\treturn this.getOnly<number[]>(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_APP_LOCK_far\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"routeSlaveSUC\": {\n\t\t\t\treturn this.getOnly<number[]>(\n\t\t\t\t\t\"EX_NVM_SUC_ROUTING_SLAVE_LIST_START_far\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"sucPendingUpdate\": {\n\t\t\t\treturn this.getOnly<number[]>(\"EX_NVM_PENDING_UPDATE_far\");\n\t\t\t}\n\t\t\tcase \"pendingDiscovery\": {\n\t\t\t\treturn this.getOnly<number[]>(\"NVM_PENDING_DISCOVERY_far\");\n\t\t\t}\n\n\t\t\tcase \"nodeIds\": {\n\t\t\t\tconst nodeInfos = await this.getAll<NVM500NodeInfo>(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t);\n\t\t\t\treturn nodeInfos\n\t\t\t\t\t?.map((info, index) => info ? (index + 1) : undefined)\n\t\t\t\t\t.filter((id) => id != undefined);\n\t\t\t}\n\n\t\t\tcase \"virtualNodeIds\": {\n\t\t\t\tconst ret = await this.getOnly<number[]>(\n\t\t\t\t\t\"EX_NVM_BRIDGE_NODEPOOL_START_far\",\n\t\t\t\t);\n\t\t\t\treturn ret ?? [];\n\t\t\t}\n\n\t\t\tcase \"sucUpdateEntries\": {\n\t\t\t\tconst ret = await this.getAll<SUCUpdateEntry>(\n\t\t\t\t\t\"EX_NVM_SUC_NODE_LIST_START_far\",\n\t\t\t\t);\n\t\t\t\treturn ret?.filter(Boolean);\n\t\t\t}\n\n\t\t\tcase \"watchdogStarted\":\n\t\t\t\treturn this.getOnly<number>(\"EEOFFSET_WATCHDOG_STARTED_far\");\n\n\t\t\tcase \"powerLevelNormal\":\n\t\t\t\treturn this.getAll<number>(\n\t\t\t\t\t\"EEOFFSET_POWERLEVEL_NORMAL_far\",\n\t\t\t\t);\n\t\t\tcase \"powerLevelLow\":\n\t\t\t\treturn this.getAll<number>(\n\t\t\t\t\t\"EEOFFSET_POWERLEVEL_LOW_far\",\n\t\t\t\t);\n\t\t\tcase \"powerMode\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_far\",\n\t\t\t\t);\n\t\t\tcase \"powerModeExtintEnable\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_EXTINT_ENABLE_far\",\n\t\t\t\t);\n\t\t\tcase \"powerModeWutTimeout\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_WUT_TIMEOUT_far\",\n\t\t\t\t);\n\n\t\t\tcase \"sucAwarenessPushNeeded\":\n\t\t\tcase \"lastNodeIdLR\":\n\t\t\tcase \"maxNodeIdLR\":\n\t\t\tcase \"reservedIdLR\":\n\t\t\tcase \"primaryLongRangeChannelId\":\n\t\t\tcase \"dcdcConfig\":\n\t\t\tcase \"lrNodeIds\":\n\t\t\tcase \"includedInsecurely\":\n\t\t\tcase \"includedSecurelyInsecureCCs\":\n\t\t\tcase \"includedSecurelySecureCCs\":\n\t\t\tcase \"rfRegion\":\n\t\t\tcase \"txPower\":\n\t\t\tcase \"measured0dBm\":\n\t\t\tcase \"enablePTI\":\n\t\t\tcase \"maxTXPower\":\n\t\t\tcase \"nodeIdType\":\n\t\t\tcase \"isListening\":\n\t\t\tcase \"optionalFunctionality\":\n\t\t\tcase \"genericDeviceClass\":\n\t\t\tcase \"specificDeviceClass\":\n\t\t\t\t// Not supported on 500 series, 700+ series only\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tassertNever(property.type);\n\t\t}\n\t}\n\n\tprivate async getNodeNVMProperty(\n\t\tproperty: NodeNVMProperty,\n\t): Promise<unknown> {\n\t\tswitch (property.type) {\n\t\t\tcase \"info\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst nodeInfo = await this.getSingle<NVM500NodeInfo>(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t);\n\t\t\t\tconst sucUpdateIndex = await this.getSingle<number>(\n\t\t\t\t\t\"EX_NVM_SUC_CONTROLLER_LIST_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t) ?? 0xff;\n\t\t\t\tconst neighbors = await this.getSingle<number[]>(\n\t\t\t\t\t\"EX_NVM_ROUTING_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t) ?? [];\n\n\t\t\t\tif (!nodeInfo) return;\n\n\t\t\t\treturn {\n\t\t\t\t\tnodeId,\n\t\t\t\t\t...nodeInfo,\n\t\t\t\t\tneighbors,\n\t\t\t\t\tsucUpdateIndex,\n\t\t\t\t} satisfies NodeInfo;\n\t\t\t}\n\n\t\t\tcase \"routes\": {\n\t\t\t\tconst lwr = await this.getSingle<Route>(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t);\n\t\t\t\tconst nlwr = await this.getSingle<Route>(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_NLWR_SR_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t);\n\t\t\t\treturn { lwr, nlwr };\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setOnly(\n\t\tproperty: NVMEntryName,\n\t\tvalue: NVMData,\n\t): Promise<void> {\n\t\treturn this._nvm.set(property, [value]);\n\t}\n\n\tprivate setSingle(\n\t\tproperty: NVMEntryName,\n\t\tindex: number,\n\t\tvalue: NVMData,\n\t): Promise<void> {\n\t\treturn this._nvm.setSingle(property, index, value);\n\t}\n\n\tprivate setAll(\n\t\tproperty: NVMEntryName,\n\t\tvalue: NVMData[],\n\t): Promise<void> {\n\t\treturn this._nvm.set(property, value);\n\t}\n\n\tset<T extends NVMProperty>(\n\t\tproperty: T,\n\t\tvalue: NVMPropertyToDataType<T>,\n\t): Promise<void> {\n\t\tif (property.domain === \"controller\") {\n\t\t\treturn this.setControllerNVMProperty(property, value);\n\t\t} else if (property.domain === \"lrnode\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`500 series NVM has no support for Long Range node information`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t} else {\n\t\t\treturn this.setNodeNVMProperty(property, value);\n\t\t}\n\t}\n\n\tprivate async setControllerNVMProperty(\n\t\tproperty: ControllerNVMProperty,\n\t\tvalue: any,\n\t): Promise<void> {\n\t\tswitch (property.type) {\n\t\t\tcase \"protocolVersion\":\n\t\t\tcase \"applicationVersion\":\n\t\t\t\t// Only written during erase\n\t\t\t\treturn;\n\n\t\t\tcase \"protocolFileFormat\":\n\t\t\tcase \"applicationFileFormat\":\n\t\t\t\t// Cannot be written\n\t\t\t\treturn;\n\n\t\t\tcase \"applicationData\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_HOST_OFFSET_START_far\",\n\t\t\t\t\tvalue ?? new Bytes(NVM_SERIALAPI_HOST_SIZE).fill(0xff),\n\t\t\t\t);\n\n\t\t\tcase \"applicationName\":\n\t\t\t\t// Not supported in 500 series\n\t\t\t\treturn;\n\n\t\t\tcase \"homeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = value.readUInt32BE(0);\n\t\t\t\treturn this.setOnly(\"EX_NVM_HOME_ID_far\", homeId);\n\t\t\t}\n\n\t\t\tcase \"learnedHomeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst learnedHomeId = value?.readUInt32BE(0) ?? 0x00000000;\n\t\t\t\treturn this.setOnly(\"NVM_HOMEID_far\", learnedHomeId);\n\t\t\t}\n\n\t\t\tcase \"nodeId\":\n\t\t\t\treturn this.setOnly(\"NVM_NODEID_far\", value);\n\n\t\t\tcase \"lastNodeId\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_LAST_USED_NODE_ID_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"staticControllerNodeId\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_STATIC_CONTROLLER_NODE_ID_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"sucLastIndex\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_SUC_LAST_INDEX_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"controllerConfiguration\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_CONTROLLER_CONFIGURATION_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"maxNodeId\":\n\t\t\t\treturn this.setOnly(\"EX_NVM_MAX_NODE_ID_far\", value);\n\t\t\tcase \"reservedId\":\n\t\t\t\treturn this.setOnly(\"EX_NVM_RESERVED_ID_far\", value);\n\t\t\tcase \"systemState\":\n\t\t\t\treturn this.setOnly(\"NVM_SYSTEM_STATE\", value);\n\n\t\t\tcase \"commandClasses\": {\n\t\t\t\tawait this.setOnly(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_LEN_far\",\n\t\t\t\t\tvalue.length,\n\t\t\t\t);\n\t\t\t\tconst CCs = Array.from<number>({ length: APPL_NODEPARM_MAX })\n\t\t\t\t\t.fill(0xff);\n\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\tif (i < APPL_NODEPARM_MAX) {\n\t\t\t\t\t\tCCs[i] = value[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.setAll(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_far\",\n\t\t\t\t\tCCs,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcase \"preferredRepeaters\":\n\t\t\t\treturn this.setOnly(\"NVM_PREFERRED_REPEATERS_far\", value);\n\n\t\t\tcase \"appRouteLock\": {\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_APP_LOCK_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"routeSlaveSUC\": {\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_SUC_ROUTING_SLAVE_LIST_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"sucPendingUpdate\": {\n\t\t\t\treturn this.setOnly(\"EX_NVM_PENDING_UPDATE_far\", value);\n\t\t\t}\n\t\t\tcase \"pendingDiscovery\": {\n\t\t\t\treturn this.setOnly(\"NVM_PENDING_DISCOVERY_far\", value);\n\t\t\t}\n\n\t\t\tcase \"nodeIds\":\n\t\t\t\t// Cannot be written. Is implied by the node info table\n\t\t\t\treturn;\n\n\t\t\tcase \"virtualNodeIds\": {\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_BRIDGE_NODEPOOL_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"sucUpdateEntries\": {\n\t\t\t\tconst entries = value as SUCUpdateEntry[];\n\t\t\t\tconst sucUpdateEntries = Array\n\t\t\t\t\t.from<SUCUpdateEntry | undefined>({\n\t\t\t\t\t\tlength: SUC_MAX_UPDATES,\n\t\t\t\t\t})\n\t\t\t\t\t.fill(undefined);\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tif (i < SUC_MAX_UPDATES) {\n\t\t\t\t\t\tsucUpdateEntries[i] = entries[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.setAll(\n\t\t\t\t\t\"EX_NVM_SUC_NODE_LIST_START_far\",\n\t\t\t\t\tsucUpdateEntries,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"watchdogStarted\":\n\t\t\t\treturn this.setOnly(\"EEOFFSET_WATCHDOG_STARTED_far\", value);\n\n\t\t\tcase \"powerLevelNormal\":\n\t\t\t\treturn this.setAll(\n\t\t\t\t\t\"EEOFFSET_POWERLEVEL_NORMAL_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"powerLevelLow\":\n\t\t\t\treturn this.setAll(\n\t\t\t\t\t\"EEOFFSET_POWERLEVEL_LOW_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"powerMode\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"powerModeExtintEnable\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_EXTINT_ENABLE_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"powerModeWutTimeout\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_WUT_TIMEOUT_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"sucAwarenessPushNeeded\":\n\t\t\tcase \"lastNodeIdLR\":\n\t\t\tcase \"maxNodeIdLR\":\n\t\t\tcase \"reservedIdLR\":\n\t\t\tcase \"primaryLongRangeChannelId\":\n\t\t\tcase \"dcdcConfig\":\n\t\t\tcase \"lrNodeIds\":\n\t\t\tcase \"includedInsecurely\":\n\t\t\tcase \"includedSecurelyInsecureCCs\":\n\t\t\tcase \"includedSecurelySecureCCs\":\n\t\t\tcase \"rfRegion\":\n\t\t\tcase \"txPower\":\n\t\t\tcase \"measured0dBm\":\n\t\t\tcase \"enablePTI\":\n\t\t\tcase \"maxTXPower\":\n\t\t\tcase \"nodeIdType\":\n\t\t\tcase \"isListening\":\n\t\t\tcase \"optionalFunctionality\":\n\t\t\tcase \"genericDeviceClass\":\n\t\t\tcase \"specificDeviceClass\":\n\t\t\t\t// Not supported on 500 series, 700+ series only\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tassertNever(property.type);\n\t\t}\n\t}\n\n\tprivate async setNodeNVMProperty(\n\t\tproperty: NodeNVMProperty,\n\t\tvalue: any,\n\t): Promise<void> {\n\t\tswitch (property.type) {\n\t\t\tcase \"info\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst node = value as NodeInfo;\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\tisListening: node.isListening,\n\t\t\t\t\t\t\tisFrequentListening: node.isFrequentListening,\n\t\t\t\t\t\t\tisRouting: node.isRouting,\n\t\t\t\t\t\t\tsupportedDataRates: node.supportedDataRates,\n\t\t\t\t\t\t\tprotocolVersion: node.protocolVersion,\n\t\t\t\t\t\t\toptionalFunctionality: node.optionalFunctionality,\n\t\t\t\t\t\t\tnodeType: node.nodeType,\n\t\t\t\t\t\t\tsupportsSecurity: node.supportsSecurity,\n\t\t\t\t\t\t\tsupportsBeaming: node.supportsBeaming,\n\t\t\t\t\t\t\tgenericDeviceClass: node.genericDeviceClass,\n\t\t\t\t\t\t\tspecificDeviceClass: node.specificDeviceClass\n\t\t\t\t\t\t\t\t?? null,\n\t\t\t\t\t\t} satisfies NVM500NodeInfo\n\t\t\t\t\t\t: undefined,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_SUC_CONTROLLER_LIST_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode?.sucUpdateIndex ?? 0xfe,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTING_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode?.neighbors,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"routes\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst routes = value as { lwr?: Route; nlwr?: Route };\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\troutes.lwr,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_NLWR_SR_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t\troutes.nlwr,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async delete(_property: NVMProperty): Promise<void> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic hasPendingChanges(): boolean {\n\t\t// We don't buffer changes\n\t\treturn false;\n\t}\n\n\tpublic async commit(): Promise<void> {\n\t\t// We don't buffer changes at the moment\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,kBAIO;AACP,oBAAsC;AACtC,qBAA4B;
|
|
4
|
+
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tZWaveError,\n\tZWaveErrorCodes,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView } from \"@zwave-js/shared\";\nimport { assertNever } from \"alcalzone-shared/helpers\";\n\nimport { SUC_MAX_UPDATES } from \"../../consts.js\";\nimport type { NVM500, NVM500Info } from \"../NVM500.js\";\nimport type {\n\tControllerNVMProperty,\n\tNVMAdapter,\n\tNVMProperty,\n\tNVMPropertyToDataType,\n\tNodeNVMProperty,\n} from \"../common/definitions.js\";\nimport type { Route } from \"../common/routeCache.js\";\nimport type { SUCUpdateEntry } from \"../common/sucUpdateEntry.js\";\nimport type { NodeInfo } from \"../nvm3/files/index.js\";\n\nimport type { NVM500NodeInfo } from \"./EntryParsers.js\";\nimport {\n\tAPPL_NODEPARM_MAX,\n\ttype NVMData,\n\ttype NVMEntryName,\n\tNVM_SERIALAPI_HOST_SIZE,\n} from \"./shared.js\";\n\nexport class NVM500Adapter implements NVMAdapter {\n\tpublic constructor(nvm: NVM500) {\n\t\tthis._nvm = nvm;\n\t}\n\n\tprivate _nvm: NVM500;\n\n\tpublic async get<T extends NVMProperty, R extends boolean = boolean>(\n\t\tproperty: T,\n\t\trequired?: R,\n\t): Promise<\n\t\tR extends true\n\t\t\t? NonNullable<NVMPropertyToDataType<T>>\n\t\t\t: NVMPropertyToDataType<T> | undefined\n\t> {\n\t\tconst info = this._nvm.info ?? (await this._nvm.init());\n\n\t\tlet ret: unknown;\n\t\tif (property.domain === \"controller\") {\n\t\t\tret = await this.getControllerNVMProperty(info, property);\n\t\t} else if (property.domain === \"lrnode\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`500 series NVM has no support for Long Range node information`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t} else {\n\t\t\tret = await this.getNodeNVMProperty(property);\n\t\t}\n\t\tif (required && ret === undefined) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`NVM data for property ${JSON.stringify(property)} not found`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t}\n\t\treturn ret as any;\n\t}\n\n\tprivate async getOnly<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t): Promise<T | undefined> {\n\t\tconst data = await this._nvm.get(property);\n\t\treturn data?.[0] as T | undefined;\n\t}\n\n\tprivate async getSingle<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t\tindex: number,\n\t): Promise<T | undefined> {\n\t\tconst data = await this._nvm.getSingle(property, index);\n\t\treturn data as T | undefined;\n\t}\n\n\tprivate getAll<T extends NVMData>(\n\t\tproperty: NVMEntryName,\n\t): Promise<T[] | undefined> {\n\t\treturn this._nvm.get(property) as any;\n\t}\n\n\tprivate async getControllerNVMProperty(\n\t\tinfo: NVM500Info,\n\t\tproperty: ControllerNVMProperty,\n\t): Promise<unknown> {\n\t\tswitch (property.type) {\n\t\t\tcase \"protocolVersion\":\n\t\t\t\treturn info.nvmDescriptor.protocolVersion;\n\t\t\tcase \"applicationVersion\":\n\t\t\t\treturn info.nvmDescriptor.firmwareVersion;\n\n\t\t\tcase \"protocolFileFormat\":\n\t\t\tcase \"applicationFileFormat\":\n\t\t\t\t// Not supported in 500 series, but we use 500 in JSON to designate a 500 series NVM\n\t\t\t\treturn 500;\n\n\t\t\tcase \"applicationData\":\n\t\t\t\treturn this.getOnly<BytesView>(\n\t\t\t\t\t\"EEOFFSET_HOST_OFFSET_START_far\",\n\t\t\t\t);\n\n\t\t\tcase \"applicationName\":\n\t\t\t\t// Not supported in 500 series\n\t\t\t\treturn;\n\n\t\t\tcase \"homeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = await this.getOnly<number>(\"EX_NVM_HOME_ID_far\");\n\t\t\t\tif (homeId == undefined) return;\n\t\t\t\tconst ret = new Bytes(4).fill(0);\n\t\t\t\t// FIXME: BE? LE?\n\t\t\t\tret.writeUInt32BE(homeId, 0);\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tcase \"learnedHomeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = await this.getOnly<number>(\"NVM_HOMEID_far\");\n\t\t\t\tif (homeId == undefined) return;\n\t\t\t\tconst ret = new Bytes(4).fill(0);\n\t\t\t\t// FIXME: BE? LE?\n\t\t\t\tret.writeUInt32BE(homeId, 0);\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tcase \"nodeId\":\n\t\t\t\treturn this.getOnly<number>(\"NVM_NODEID_far\");\n\n\t\t\tcase \"lastNodeId\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_LAST_USED_NODE_ID_START_far\",\n\t\t\t\t);\n\n\t\t\tcase \"staticControllerNodeId\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_STATIC_CONTROLLER_NODE_ID_START_far\",\n\t\t\t\t);\n\t\t\tcase \"sucLastIndex\":\n\t\t\t\treturn this.getOnly<number>(\"EX_NVM_SUC_LAST_INDEX_START_far\");\n\t\t\tcase \"controllerConfiguration\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EX_NVM_CONTROLLER_CONFIGURATION_far\",\n\t\t\t\t);\n\n\t\t\tcase \"maxNodeId\":\n\t\t\t\treturn this.getOnly<number>(\"EX_NVM_MAX_NODE_ID_far\");\n\t\t\tcase \"reservedId\":\n\t\t\t\treturn this.getOnly<number>(\"EX_NVM_RESERVED_ID_far\");\n\t\t\tcase \"systemState\":\n\t\t\t\treturn this.getOnly<number>(\"NVM_SYSTEM_STATE\");\n\n\t\t\tcase \"commandClasses\": {\n\t\t\t\tconst numCCs = await this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_LEN_far\",\n\t\t\t\t);\n\t\t\t\tconst ret = await this.getAll<CommandClasses>(\n\t\t\t\t\t\"EEOFFSET_CMDCLASS_far\",\n\t\t\t\t);\n\t\t\t\treturn ret?.slice(0, numCCs);\n\t\t\t}\n\n\t\t\tcase \"preferredRepeaters\":\n\t\t\t\treturn this.getOnly<number[]>(\"NVM_PREFERRED_REPEATERS_far\");\n\n\t\t\tcase \"appRouteLock\": {\n\t\t\t\treturn this.getOnly<number[]>(\"EX_NVM_ROUTECACHE_APP_LOCK_far\");\n\t\t\t}\n\t\t\tcase \"routeSlaveSUC\": {\n\t\t\t\treturn this.getOnly<number[]>(\n\t\t\t\t\t\"EX_NVM_SUC_ROUTING_SLAVE_LIST_START_far\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"sucPendingUpdate\": {\n\t\t\t\treturn this.getOnly<number[]>(\"EX_NVM_PENDING_UPDATE_far\");\n\t\t\t}\n\t\t\tcase \"pendingDiscovery\": {\n\t\t\t\treturn this.getOnly<number[]>(\"NVM_PENDING_DISCOVERY_far\");\n\t\t\t}\n\n\t\t\tcase \"nodeIds\": {\n\t\t\t\tconst nodeInfos = await this.getAll<NVM500NodeInfo>(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t);\n\t\t\t\treturn nodeInfos\n\t\t\t\t\t?.map((info, index) => (info ? index + 1 : undefined))\n\t\t\t\t\t.filter((id) => id != undefined);\n\t\t\t}\n\n\t\t\tcase \"virtualNodeIds\": {\n\t\t\t\tconst ret = await this.getOnly<number[]>(\n\t\t\t\t\t\"EX_NVM_BRIDGE_NODEPOOL_START_far\",\n\t\t\t\t);\n\t\t\t\treturn ret ?? [];\n\t\t\t}\n\n\t\t\tcase \"sucUpdateEntries\": {\n\t\t\t\tconst ret = await this.getAll<SUCUpdateEntry>(\n\t\t\t\t\t\"EX_NVM_SUC_NODE_LIST_START_far\",\n\t\t\t\t);\n\t\t\t\treturn ret?.filter(Boolean);\n\t\t\t}\n\n\t\t\tcase \"watchdogStarted\":\n\t\t\t\treturn this.getOnly<number>(\"EEOFFSET_WATCHDOG_STARTED_far\");\n\n\t\t\tcase \"powerLevelNormal\":\n\t\t\t\treturn this.getAll<number>(\"EEOFFSET_POWERLEVEL_NORMAL_far\");\n\t\t\tcase \"powerLevelLow\":\n\t\t\t\treturn this.getAll<number>(\"EEOFFSET_POWERLEVEL_LOW_far\");\n\t\t\tcase \"powerMode\":\n\t\t\t\treturn this.getOnly<number>(\"EEOFFSET_MODULE_POWER_MODE_far\");\n\t\t\tcase \"powerModeExtintEnable\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_EXTINT_ENABLE_far\",\n\t\t\t\t);\n\t\t\tcase \"powerModeWutTimeout\":\n\t\t\t\treturn this.getOnly<number>(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_WUT_TIMEOUT_far\",\n\t\t\t\t);\n\n\t\t\tcase \"sucAwarenessPushNeeded\":\n\t\t\tcase \"lastNodeIdLR\":\n\t\t\tcase \"maxNodeIdLR\":\n\t\t\tcase \"reservedIdLR\":\n\t\t\tcase \"primaryLongRangeChannelId\":\n\t\t\tcase \"dcdcConfig\":\n\t\t\tcase \"lrNodeIds\":\n\t\t\tcase \"includedInsecurely\":\n\t\t\tcase \"includedSecurelyInsecureCCs\":\n\t\t\tcase \"includedSecurelySecureCCs\":\n\t\t\tcase \"rfRegion\":\n\t\t\tcase \"txPower\":\n\t\t\tcase \"measured0dBm\":\n\t\t\tcase \"enablePTI\":\n\t\t\tcase \"maxTXPower\":\n\t\t\tcase \"nodeIdType\":\n\t\t\tcase \"isListening\":\n\t\t\tcase \"optionalFunctionality\":\n\t\t\tcase \"genericDeviceClass\":\n\t\t\tcase \"specificDeviceClass\":\n\t\t\t\t// Not supported on 500 series, 700+ series only\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tassertNever(property.type);\n\t\t}\n\t}\n\n\tprivate async getNodeNVMProperty(\n\t\tproperty: NodeNVMProperty,\n\t): Promise<unknown> {\n\t\tswitch (property.type) {\n\t\t\tcase \"info\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst nodeInfo = await this.getSingle<NVM500NodeInfo>(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t);\n\t\t\t\tconst sucUpdateIndex =\n\t\t\t\t\t(await this.getSingle<number>(\n\t\t\t\t\t\t\"EX_NVM_SUC_CONTROLLER_LIST_START_far\",\n\t\t\t\t\t\tnodeId - 1,\n\t\t\t\t\t)) ?? 0xff;\n\t\t\t\tconst neighbors =\n\t\t\t\t\t(await this.getSingle<number[]>(\n\t\t\t\t\t\t\"EX_NVM_ROUTING_TABLE_START_far\",\n\t\t\t\t\t\tnodeId - 1,\n\t\t\t\t\t)) ?? [];\n\n\t\t\t\tif (!nodeInfo) return;\n\n\t\t\t\treturn {\n\t\t\t\t\tnodeId,\n\t\t\t\t\t...nodeInfo,\n\t\t\t\t\tneighbors,\n\t\t\t\t\tsucUpdateIndex,\n\t\t\t\t} satisfies NodeInfo;\n\t\t\t}\n\n\t\t\tcase \"routes\": {\n\t\t\t\tconst lwr = await this.getSingle<Route>(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t);\n\t\t\t\tconst nlwr = await this.getSingle<Route>(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_NLWR_SR_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t);\n\t\t\t\treturn { lwr, nlwr };\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setOnly(property: NVMEntryName, value: NVMData): Promise<void> {\n\t\treturn this._nvm.set(property, [value]);\n\t}\n\n\tprivate setSingle(\n\t\tproperty: NVMEntryName,\n\t\tindex: number,\n\t\tvalue: NVMData,\n\t): Promise<void> {\n\t\treturn this._nvm.setSingle(property, index, value);\n\t}\n\n\tprivate setAll(property: NVMEntryName, value: NVMData[]): Promise<void> {\n\t\treturn this._nvm.set(property, value);\n\t}\n\n\tset<T extends NVMProperty>(\n\t\tproperty: T,\n\t\tvalue: NVMPropertyToDataType<T>,\n\t): Promise<void> {\n\t\tif (property.domain === \"controller\") {\n\t\t\treturn this.setControllerNVMProperty(property, value);\n\t\t} else if (property.domain === \"lrnode\") {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`500 series NVM has no support for Long Range node information`,\n\t\t\t\tZWaveErrorCodes.NVM_ObjectNotFound,\n\t\t\t);\n\t\t} else {\n\t\t\treturn this.setNodeNVMProperty(property, value);\n\t\t}\n\t}\n\n\tprivate async setControllerNVMProperty(\n\t\tproperty: ControllerNVMProperty,\n\t\tvalue: any,\n\t): Promise<void> {\n\t\tswitch (property.type) {\n\t\t\tcase \"protocolVersion\":\n\t\t\tcase \"applicationVersion\":\n\t\t\t\t// Only written during erase\n\t\t\t\treturn;\n\n\t\t\tcase \"protocolFileFormat\":\n\t\t\tcase \"applicationFileFormat\":\n\t\t\t\t// Cannot be written\n\t\t\t\treturn;\n\n\t\t\tcase \"applicationData\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_HOST_OFFSET_START_far\",\n\t\t\t\t\tvalue ?? new Bytes(NVM_SERIALAPI_HOST_SIZE).fill(0xff),\n\t\t\t\t);\n\n\t\t\tcase \"applicationName\":\n\t\t\t\t// Not supported in 500 series\n\t\t\t\treturn;\n\n\t\t\tcase \"homeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst homeId = value.readUInt32BE(0);\n\t\t\t\treturn this.setOnly(\"EX_NVM_HOME_ID_far\", homeId);\n\t\t\t}\n\n\t\t\tcase \"learnedHomeId\": {\n\t\t\t\t// 500 series stores the home ID as a number\n\t\t\t\tconst learnedHomeId = value?.readUInt32BE(0) ?? 0x00000000;\n\t\t\t\treturn this.setOnly(\"NVM_HOMEID_far\", learnedHomeId);\n\t\t\t}\n\n\t\t\tcase \"nodeId\":\n\t\t\t\treturn this.setOnly(\"NVM_NODEID_far\", value);\n\n\t\t\tcase \"lastNodeId\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_LAST_USED_NODE_ID_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"staticControllerNodeId\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_STATIC_CONTROLLER_NODE_ID_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"sucLastIndex\":\n\t\t\t\treturn this.setOnly(\"EX_NVM_SUC_LAST_INDEX_START_far\", value);\n\t\t\tcase \"controllerConfiguration\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_CONTROLLER_CONFIGURATION_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"maxNodeId\":\n\t\t\t\treturn this.setOnly(\"EX_NVM_MAX_NODE_ID_far\", value);\n\t\t\tcase \"reservedId\":\n\t\t\t\treturn this.setOnly(\"EX_NVM_RESERVED_ID_far\", value);\n\t\t\tcase \"systemState\":\n\t\t\t\treturn this.setOnly(\"NVM_SYSTEM_STATE\", value);\n\n\t\t\tcase \"commandClasses\": {\n\t\t\t\tawait this.setOnly(\"EEOFFSET_CMDCLASS_LEN_far\", value.length);\n\t\t\t\tconst CCs = Array.from<number>({\n\t\t\t\t\tlength: APPL_NODEPARM_MAX,\n\t\t\t\t}).fill(0xff);\n\t\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\t\tif (i < APPL_NODEPARM_MAX) {\n\t\t\t\t\t\tCCs[i] = value[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.setAll(\"EEOFFSET_CMDCLASS_far\", CCs);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcase \"preferredRepeaters\":\n\t\t\t\treturn this.setOnly(\"NVM_PREFERRED_REPEATERS_far\", value);\n\n\t\t\tcase \"appRouteLock\": {\n\t\t\t\treturn this.setOnly(\"EX_NVM_ROUTECACHE_APP_LOCK_far\", value);\n\t\t\t}\n\t\t\tcase \"routeSlaveSUC\": {\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EX_NVM_SUC_ROUTING_SLAVE_LIST_START_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase \"sucPendingUpdate\": {\n\t\t\t\treturn this.setOnly(\"EX_NVM_PENDING_UPDATE_far\", value);\n\t\t\t}\n\t\t\tcase \"pendingDiscovery\": {\n\t\t\t\treturn this.setOnly(\"NVM_PENDING_DISCOVERY_far\", value);\n\t\t\t}\n\n\t\t\tcase \"nodeIds\":\n\t\t\t\t// Cannot be written. Is implied by the node info table\n\t\t\t\treturn;\n\n\t\t\tcase \"virtualNodeIds\": {\n\t\t\t\treturn this.setOnly(\"EX_NVM_BRIDGE_NODEPOOL_START_far\", value);\n\t\t\t}\n\n\t\t\tcase \"sucUpdateEntries\": {\n\t\t\t\tconst entries = value as SUCUpdateEntry[];\n\t\t\t\tconst sucUpdateEntries = Array.from<SUCUpdateEntry | undefined>(\n\t\t\t\t\t{\n\t\t\t\t\t\tlength: SUC_MAX_UPDATES,\n\t\t\t\t\t},\n\t\t\t\t).fill(undefined);\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tif (i < SUC_MAX_UPDATES) {\n\t\t\t\t\t\tsucUpdateEntries[i] = entries[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.setAll(\n\t\t\t\t\t\"EX_NVM_SUC_NODE_LIST_START_far\",\n\t\t\t\t\tsucUpdateEntries,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"watchdogStarted\":\n\t\t\t\treturn this.setOnly(\"EEOFFSET_WATCHDOG_STARTED_far\", value);\n\n\t\t\tcase \"powerLevelNormal\":\n\t\t\t\treturn this.setAll(\"EEOFFSET_POWERLEVEL_NORMAL_far\", value);\n\t\t\tcase \"powerLevelLow\":\n\t\t\t\treturn this.setAll(\"EEOFFSET_POWERLEVEL_LOW_far\", value);\n\t\t\tcase \"powerMode\":\n\t\t\t\treturn this.setOnly(\"EEOFFSET_MODULE_POWER_MODE_far\", value);\n\t\t\tcase \"powerModeExtintEnable\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_EXTINT_ENABLE_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\t\t\tcase \"powerModeWutTimeout\":\n\t\t\t\treturn this.setOnly(\n\t\t\t\t\t\"EEOFFSET_MODULE_POWER_MODE_WUT_TIMEOUT_far\",\n\t\t\t\t\tvalue,\n\t\t\t\t);\n\n\t\t\tcase \"sucAwarenessPushNeeded\":\n\t\t\tcase \"lastNodeIdLR\":\n\t\t\tcase \"maxNodeIdLR\":\n\t\t\tcase \"reservedIdLR\":\n\t\t\tcase \"primaryLongRangeChannelId\":\n\t\t\tcase \"dcdcConfig\":\n\t\t\tcase \"lrNodeIds\":\n\t\t\tcase \"includedInsecurely\":\n\t\t\tcase \"includedSecurelyInsecureCCs\":\n\t\t\tcase \"includedSecurelySecureCCs\":\n\t\t\tcase \"rfRegion\":\n\t\t\tcase \"txPower\":\n\t\t\tcase \"measured0dBm\":\n\t\t\tcase \"enablePTI\":\n\t\t\tcase \"maxTXPower\":\n\t\t\tcase \"nodeIdType\":\n\t\t\tcase \"isListening\":\n\t\t\tcase \"optionalFunctionality\":\n\t\t\tcase \"genericDeviceClass\":\n\t\t\tcase \"specificDeviceClass\":\n\t\t\t\t// Not supported on 500 series, 700+ series only\n\t\t\t\treturn;\n\n\t\t\tdefault:\n\t\t\t\tassertNever(property.type);\n\t\t}\n\t}\n\n\tprivate async setNodeNVMProperty(\n\t\tproperty: NodeNVMProperty,\n\t\tvalue: any,\n\t): Promise<void> {\n\t\tswitch (property.type) {\n\t\t\tcase \"info\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst node = value as NodeInfo;\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_NODE_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode\n\t\t\t\t\t\t? ({\n\t\t\t\t\t\t\t\tisListening: node.isListening,\n\t\t\t\t\t\t\t\tisFrequentListening: node.isFrequentListening,\n\t\t\t\t\t\t\t\tisRouting: node.isRouting,\n\t\t\t\t\t\t\t\tsupportedDataRates: node.supportedDataRates,\n\t\t\t\t\t\t\t\tprotocolVersion: node.protocolVersion,\n\t\t\t\t\t\t\t\toptionalFunctionality:\n\t\t\t\t\t\t\t\t\tnode.optionalFunctionality,\n\t\t\t\t\t\t\t\tnodeType: node.nodeType,\n\t\t\t\t\t\t\t\tsupportsSecurity: node.supportsSecurity,\n\t\t\t\t\t\t\t\tsupportsBeaming: node.supportsBeaming,\n\t\t\t\t\t\t\t\tgenericDeviceClass: node.genericDeviceClass,\n\t\t\t\t\t\t\t\tspecificDeviceClass:\n\t\t\t\t\t\t\t\t\tnode.specificDeviceClass ?? null,\n\t\t\t\t\t\t\t} satisfies NVM500NodeInfo)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_SUC_CONTROLLER_LIST_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode?.sucUpdateIndex ?? 0xfe,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTING_TABLE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\tnode?.neighbors,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tcase \"routes\": {\n\t\t\t\tconst nodeId = property.nodeId;\n\t\t\t\tconst routes = value as { lwr?: Route; nlwr?: Route };\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_START_far\",\n\t\t\t\t\tnodeId - 1,\n\t\t\t\t\troutes.lwr,\n\t\t\t\t);\n\t\t\t\tawait this.setSingle(\n\t\t\t\t\t\"EX_NVM_ROUTECACHE_NLWR_SR_START_far\",\n\t\t\t\t\tproperty.nodeId - 1,\n\t\t\t\t\troutes.nlwr,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async delete(_property: NVMProperty): Promise<void> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\tpublic hasPendingChanges(): boolean {\n\t\t// We don't buffer changes\n\t\treturn false;\n\t}\n\n\tpublic async commit(): Promise<void> {\n\t\t// We don't buffer changes at the moment\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_shared", "info"]
|
|
7
7
|
}
|