@zwave-js/nvmedit 15.1.1 → 15.2.1
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.d.ts +1 -1
- package/build/cjs/cli.js +1 -2
- package/build/cjs/cli.js.map +2 -2
- package/build/cjs/convert.d.ts +3 -3
- package/build/cjs/convert.js +45 -45
- package/build/cjs/convert.js.map +3 -3
- package/build/cjs/lib/NVM3.js +17 -17
- package/build/cjs/lib/NVM3.js.map +3 -3
- package/build/cjs/lib/NVM500.js +54 -54
- package/build/cjs/lib/NVM500.js.map +3 -3
- package/build/cjs/lib/common/definitions.d.ts +5 -5
- package/build/cjs/lib/common/definitions.js.map +1 -1
- package/build/cjs/lib/common/routeCache.d.ts +2 -2
- package/build/cjs/lib/common/routeCache.js +10 -10
- package/build/cjs/lib/common/routeCache.js.map +3 -3
- package/build/cjs/lib/common/sucUpdateEntry.d.ts +1 -1
- package/build/cjs/lib/common/sucUpdateEntry.js +4 -4
- package/build/cjs/lib/common/sucUpdateEntry.js.map +1 -1
- package/build/cjs/lib/common/utils.js +6 -6
- package/build/cjs/lib/common/utils.js.map +2 -2
- package/build/cjs/lib/io/BufferedNVMReader.d.ts +1 -1
- package/build/cjs/lib/io/BufferedNVMReader.js +2 -2
- package/build/cjs/lib/io/BufferedNVMReader.js.map +2 -2
- package/build/cjs/lib/nvm3/adapter.d.ts +2 -2
- package/build/cjs/lib/nvm3/adapter.js +6 -6
- package/build/cjs/lib/nvm3/adapter.js.map +3 -3
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js +6 -6
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js.map +3 -3
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js.map +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js +9 -9
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js.map +3 -3
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js +3 -3
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/NVMFile.js +4 -4
- package/build/cjs/lib/nvm3/files/NVMFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js +18 -18
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js.map +3 -3
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js +5 -5
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -1
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js +11 -11
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js.map +3 -3
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js +3 -3
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js.map +2 -2
- package/build/cjs/lib/nvm3/files/index.d.ts +0 -1
- package/build/cjs/lib/nvm3/files/index.js +0 -1
- package/build/cjs/lib/nvm3/files/index.js.map +2 -2
- package/build/cjs/lib/nvm3/page.d.ts +1 -1
- package/build/cjs/lib/nvm3/page.js.map +1 -1
- package/build/cjs/lib/nvm3/utils.d.ts +1 -1
- package/build/cjs/lib/nvm3/utils.js +3 -3
- package/build/cjs/lib/nvm3/utils.js.map +1 -1
- package/build/cjs/lib/nvm500/EntryParsers.d.ts +2 -2
- package/build/cjs/lib/nvm500/EntryParsers.js +10 -10
- package/build/cjs/lib/nvm500/EntryParsers.js.map +3 -3
- package/build/cjs/lib/nvm500/adapter.d.ts +2 -2
- package/build/cjs/lib/nvm500/adapter.js.map +1 -1
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_6x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Static_6_6x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Static_6_6x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_7x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Static_6_7x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Static_6_7x.js.map +2 -2
- package/build/cjs/lib/nvm500/impls/Static_6_8x.d.ts +1 -1
- package/build/cjs/lib/nvm500/impls/Static_6_8x.js +7 -7
- package/build/cjs/lib/nvm500/impls/Static_6_8x.js.map +2 -2
- package/build/cjs/lib/nvm500/shared.d.ts +2 -2
- package/build/cjs/lib/nvm500/shared.js +2 -2
- package/build/cjs/lib/nvm500/shared.js.map +1 -1
- package/build/cjs/nvm500/NVMParser.d.ts +5 -5
- package/build/cjs/package.json +2 -1
- package/build/esm/cli.d.ts +1 -1
- package/build/esm/cli.d.ts.map +1 -1
- package/build/esm/cli.js +1 -2
- package/build/esm/cli.js.map +1 -1
- package/build/esm/convert.d.ts +3 -3
- package/build/esm/convert.d.ts.map +1 -1
- package/build/esm/convert.js +2 -2
- package/build/esm/convert.js.map +1 -1
- package/build/esm/lib/NVM3.js +2 -2
- package/build/esm/lib/NVM3.js.map +1 -1
- package/build/esm/lib/NVM500.js +1 -1
- package/build/esm/lib/NVM500.js.map +1 -1
- package/build/esm/lib/common/definitions.d.ts +5 -5
- package/build/esm/lib/common/definitions.d.ts.map +1 -1
- package/build/esm/lib/common/routeCache.d.ts +2 -2
- package/build/esm/lib/common/routeCache.d.ts.map +1 -1
- package/build/esm/lib/common/routeCache.js +2 -2
- package/build/esm/lib/common/routeCache.js.map +1 -1
- package/build/esm/lib/common/sucUpdateEntry.d.ts +1 -1
- package/build/esm/lib/common/sucUpdateEntry.d.ts.map +1 -1
- package/build/esm/lib/common/sucUpdateEntry.js +1 -1
- package/build/esm/lib/common/sucUpdateEntry.js.map +1 -1
- package/build/esm/lib/common/utils.js +1 -1
- package/build/esm/lib/common/utils.js.map +1 -1
- package/build/esm/lib/io/BufferedNVMReader.d.ts +1 -1
- package/build/esm/lib/io/BufferedNVMReader.d.ts.map +1 -1
- package/build/esm/lib/io/BufferedNVMReader.js +1 -1
- package/build/esm/lib/io/BufferedNVMReader.js.map +1 -1
- package/build/esm/lib/nvm3/adapter.d.ts +2 -2
- package/build/esm/lib/nvm3/adapter.d.ts.map +1 -1
- package/build/esm/lib/nvm3/adapter.js +2 -2
- package/build/esm/lib/nvm3/adapter.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.d.ts +2 -2
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.js +2 -2
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationDataFile.d.ts +1 -1
- package/build/esm/lib/nvm3/files/ApplicationDataFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationNameFile.d.ts +1 -1
- package/build/esm/lib/nvm3/files/ApplicationNameFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.d.ts +2 -2
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.js +2 -2
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.d.ts +1 -1
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.js +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 +1 -1
- package/build/esm/lib/nvm3/files/ControllerInfoFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/NVMFile.js +1 -1
- package/build/esm/lib/nvm3/files/NVMFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/NodeInfoFiles.d.ts +2 -2
- package/build/esm/lib/nvm3/files/NodeInfoFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/NodeInfoFiles.js +2 -2
- package/build/esm/lib/nvm3/files/NodeInfoFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.js +1 -1
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/RouteCacheFiles.d.ts +1 -1
- package/build/esm/lib/nvm3/files/RouteCacheFiles.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js +2 -2
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js.map +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.d.ts +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js +1 -1
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js.map +1 -1
- package/build/esm/lib/nvm3/files/index.d.ts +0 -1
- package/build/esm/lib/nvm3/files/index.d.ts.map +1 -1
- package/build/esm/lib/nvm3/files/index.js +0 -1
- package/build/esm/lib/nvm3/files/index.js.map +1 -1
- package/build/esm/lib/nvm3/page.d.ts +1 -1
- package/build/esm/lib/nvm3/page.d.ts.map +1 -1
- package/build/esm/lib/nvm3/utils.d.ts +1 -1
- package/build/esm/lib/nvm3/utils.d.ts.map +1 -1
- package/build/esm/lib/nvm3/utils.js +1 -1
- package/build/esm/lib/nvm3/utils.js.map +1 -1
- package/build/esm/lib/nvm500/EntryParsers.d.ts +2 -2
- package/build/esm/lib/nvm500/EntryParsers.d.ts.map +1 -1
- package/build/esm/lib/nvm500/EntryParsers.js +2 -2
- package/build/esm/lib/nvm500/EntryParsers.js.map +1 -1
- package/build/esm/lib/nvm500/adapter.d.ts +2 -2
- package/build/esm/lib/nvm500/adapter.d.ts.map +1 -1
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.d.ts +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +1 -1
- package/build/esm/lib/nvm500/impls/Static_6_8x.js.map +1 -1
- package/build/esm/lib/nvm500/shared.d.ts +2 -2
- package/build/esm/lib/nvm500/shared.d.ts.map +1 -1
- package/build/esm/lib/nvm500/shared.js +1 -1
- package/build/esm/lib/nvm500/shared.js.map +1 -1
- package/build/esm/nvm500/NVMParser.d.ts +5 -5
- package/build/esm/nvm500/NVMParser.d.ts.map +1 -1
- package/build/esm/package.json +2 -1
- package/package.json +4 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/common/definitions.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
4
|
+
"sourcesContent": ["import type { CommandClasses } from \"@zwave-js/core\";\nimport type { Expand } from \"@zwave-js/shared\";\nimport type {\n\tApplicationCCsFile,\n\tApplicationRFConfigFile,\n\tApplicationTypeFile,\n\tControllerInfoFile,\n\tLRNodeInfo,\n\tNodeInfo,\n} from \"../nvm3/files/index.js\";\nimport type { Route } from \"./routeCache.js\";\nimport type { SUCUpdateEntry } from \"./sucUpdateEntry.js\";\n\nexport enum NVMAccess {\n\tNone,\n\tRead,\n\tWrite,\n\tReadWrite,\n}\n\n/** Provides an abstraction to access the contents of an NVM at the binary level */\nexport interface NVMIO {\n\t/**\n\t * Opens the NVM for reading and/or writing.\n\t * Since different NVM implementations may or may not allow reading and writing at the same time,\n\t * the returned value indicates which access patterns are actually allowed.\n\t */\n\topen(access: NVMAccess.Read | NVMAccess.Write): Promise<NVMAccess>;\n\n\t/** Returns the size of the NVM, after it has been opened */\n\tget size(): number;\n\t/** Returns which access is currently allowed for this NVM implementation */\n\tget accessMode(): NVMAccess;\n\n\t/**\n\t * Determines the size of the data chunks that can be used for writing.\n\t * Requires the NVM to be readable.\n\t */\n\tdetermineChunkSize(): Promise<number>;\n\n\t/**\n\t * Reads a chunk of data with the given length from the NVM.\n\t * If the length is longer than the chunk size, or the end of the NVM is reached,\n\t * the returned buffer will be shorter than the requested length.\n\t */\n\tread(\n\t\toffset: number,\n\t\tlength: number,\n\t): Promise<{ buffer: Uint8Array; endOfFile: boolean }>;\n\n\t/**\n\t * Writes a chunk of data with the given length from the NVM.\n\t * The returned value indicates how many bytes were actually written.\n\t */\n\twrite(\n\t\toffset: number,\n\t\tdata: Uint8Array,\n\t): Promise<{ bytesWritten: number; endOfFile: boolean }>;\n\n\t/** Closes the NVM */\n\tclose(): Promise<void>;\n}\n\n/** A specific NVM implementation */\nexport interface NVM<ID, Data> {\n\t/** Checks if a property exists in the NVM */\n\thas(property: ID): Promise<boolean>;\n\n\t/** Reads a property from the NVM */\n\tget(property: ID): Promise<Data | undefined>;\n\n\t/** Writes a property to the NVM */\n\tset(property: ID, value: Data): Promise<void>;\n\n\t/** Deletes the property from the NVM */\n\tdelete(property: ID): Promise<void>;\n}\n\n/**\n * Provides an application-level abstraction over an NVM implementation\n */\nexport interface NVMAdapter {\n\t/** Reads a property from the NVM */\n\tget<T extends NVMProperty, R extends boolean = boolean>(\n\t\tproperty: T,\n\t\trequired?: R,\n\t): Promise<\n\t\tR extends true ? NVMPropertyToDataType<T>\n\t\t\t: (NVMPropertyToDataType<T> | undefined)\n\t>;\n\n\t/**\n\t * Changes a property to be written to the NVM later\n\t */\n\tset<T extends NVMProperty>(\n\t\tproperty: T,\n\t\tvalue: NVMPropertyToDataType<T>,\n\t): Promise<void>;\n\n\t/**\n\t * Marks a property for deletion from the NVM. In some implementations,\n\t * deleting one property may delete multiple properties that are stored together.\n\t */\n\tdelete(property: NVMProperty): Promise<void>;\n\n\t/** Returns whether there are pending changes that weren't written to the NVM yet */\n\thasPendingChanges(): boolean;\n\n\t/** Writes all pending changes to the NVM */\n\tcommit(): Promise<void>;\n}\n\nexport type ControllerNVMPropertyTypes = Expand<\n\t& {\n\t\tprotocolVersion: string;\n\t\tprotocolFileFormat: number;\n\t\tapplicationVersion: string;\n\t\tapplicationData: Uint8Array;\n\t\tpreferredRepeaters?: number[];\n\t\tsucUpdateEntries: SUCUpdateEntry[];\n\t\tappRouteLock: number[];\n\t\trouteSlaveSUC: number[];\n\t\tsucPendingUpdate: number[];\n\t\tpendingDiscovery: number[];\n\t\tvirtualNodeIds: number[];\n\t\tnodeIds: number[];\n\t}\n\t// 700+ series only\n\t& Partial<{\n\t\tapplicationFileFormat: number;\n\t\tapplicationName: string;\n\t\tlrNodeIds: number[];\n\t}>\n\t// 500 series only\n\t& Partial<{\n\t\tlearnedHomeId: Uint8Array;\n\t\tcommandClasses: CommandClasses[];\n\t\tsystemState: number;\n\t\twatchdogStarted: number;\n\t\tpowerLevelNormal: number[];\n\t\tpowerLevelLow: number[];\n\t\tpowerMode: number;\n\t\tpowerModeExtintEnable: number;\n\t\tpowerModeWutTimeout: number;\n\t}>\n\t& Pick<\n\t\tControllerInfoFile,\n\t\t| \"homeId\"\n\t\t| \"nodeId\"\n\t\t| \"lastNodeId\"\n\t\t| \"staticControllerNodeId\"\n\t\t| \"sucLastIndex\"\n\t\t| \"controllerConfiguration\"\n\t\t| \"sucAwarenessPushNeeded\"\n\t\t| \"maxNodeId\"\n\t\t| \"reservedId\"\n\t\t| \"systemState\"\n\t\t| \"lastNodeIdLR\"\n\t\t| \"maxNodeIdLR\"\n\t\t| \"reservedIdLR\"\n\t\t| \"primaryLongRangeChannelId\"\n\t\t| \"dcdcConfig\"\n\t>\n\t// 700+ series only\n\t& Partial<\n\t\tPick<\n\t\t\tApplicationCCsFile,\n\t\t\t| \"includedInsecurely\"\n\t\t\t| \"includedSecurelyInsecureCCs\"\n\t\t\t| \"includedSecurelySecureCCs\"\n\t\t>\n\t>\n\t// 700+ series only\n\t& Partial<\n\t\tPick<\n\t\t\tApplicationRFConfigFile,\n\t\t\t| \"rfRegion\"\n\t\t\t| \"txPower\"\n\t\t\t| \"measured0dBm\"\n\t\t\t| \"enablePTI\"\n\t\t\t| \"maxTXPower\"\n\t\t\t| \"nodeIdType\"\n\t\t>\n\t>\n\t// 700+ series only\n\t& Partial<\n\t\tPick<\n\t\t\tApplicationTypeFile,\n\t\t\t| \"isListening\"\n\t\t\t| \"optionalFunctionality\"\n\t\t\t| \"genericDeviceClass\"\n\t\t\t| \"specificDeviceClass\"\n\t\t>\n\t>\n>;\n\nexport interface NodeNVMPropertyTypes {\n\tinfo: NodeInfo;\n\troutes: { lwr?: Route; nlwr?: Route };\n}\n\nexport interface LRNodeNVMPropertyTypes {\n\tinfo: LRNodeInfo;\n}\n\nexport type ControllerNVMProperty = {\n\tdomain: \"controller\";\n\ttype: keyof ControllerNVMPropertyTypes;\n\tnodeId?: undefined;\n};\n\nexport type ControllerNVMPropertyToDataType<P extends ControllerNVMProperty> =\n\tControllerNVMPropertyTypes[P[\"type\"]];\n\nexport type NodeNVMProperty = {\n\tdomain: \"node\";\n\ttype: keyof NodeNVMPropertyTypes;\n\tnodeId: number;\n};\n\nexport type NodeNVMPropertyToDataType<P extends NodeNVMProperty> =\n\tP[\"type\"] extends keyof NodeNVMPropertyTypes\n\t\t? NodeNVMPropertyTypes[P[\"type\"]]\n\t\t: never;\n\nexport type LRNodeNVMProperty = {\n\tdomain: \"lrnode\";\n\ttype: keyof LRNodeNVMPropertyTypes;\n\tnodeId: number;\n};\n\nexport type LRNodeNVMPropertyToDataType<P extends LRNodeNVMProperty> =\n\tP[\"type\"] extends keyof LRNodeNVMPropertyTypes\n\t\t? LRNodeNVMPropertyTypes[P[\"type\"]]\n\t\t: never;\n\nexport type NVMProperty =\n\t| ControllerNVMProperty\n\t| NodeNVMProperty\n\t| LRNodeNVMProperty;\n\nexport type NVMPropertyToDataType<P extends NVMProperty> = P extends\n\tControllerNVMProperty ? ControllerNVMPropertyToDataType<P>\n\t: P extends NodeNVMProperty ? NodeNVMPropertyToDataType<P>\n\t: P extends LRNodeNVMProperty ? LRNodeNVMPropertyToDataType<P>\n\t: never;\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAaA;;;;;AAAA,IAAY;CAAZ,SAAYA,YAAS;AACpB,EAAAA,WAAAA,WAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,OAAA,IAAA,CAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,WAAA,IAAA,CAAA,IAAA;AACD,GALY,cAAA,YAAS,CAAA,EAAA;",
|
|
6
6
|
"names": ["NVMAccess"]
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type FLiRS, RouteProtocolDataRate } from "@zwave-js/core
|
|
2
|
-
import { Bytes } from "@zwave-js/shared
|
|
1
|
+
import { type FLiRS, RouteProtocolDataRate } from "@zwave-js/core";
|
|
2
|
+
import { Bytes } from "@zwave-js/shared";
|
|
3
3
|
export declare const ROUTECACHE_SIZE: number;
|
|
4
4
|
export declare const EMPTY_ROUTECACHE_FILL = 255;
|
|
5
5
|
export declare const emptyRouteCache: Uint8Array<ArrayBuffer>;
|
|
@@ -27,9 +27,9 @@ __export(routeCache_exports, {
|
|
|
27
27
|
parseRoute: () => parseRoute
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(routeCache_exports);
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
const ROUTE_SIZE =
|
|
30
|
+
var import_core = require("@zwave-js/core");
|
|
31
|
+
var import_shared = require("@zwave-js/shared");
|
|
32
|
+
const ROUTE_SIZE = import_core.MAX_REPEATERS + 1;
|
|
33
33
|
const ROUTECACHE_SIZE = 2 * ROUTE_SIZE;
|
|
34
34
|
const EMPTY_ROUTECACHE_FILL = 255;
|
|
35
35
|
const emptyRouteCache = new Uint8Array(ROUTECACHE_SIZE).fill(EMPTY_ROUTECACHE_FILL);
|
|
@@ -39,12 +39,12 @@ var Beaming;
|
|
|
39
39
|
Beaming2[Beaming2["250ms"] = 32] = "250ms";
|
|
40
40
|
})(Beaming || (Beaming = {}));
|
|
41
41
|
function parseRoute(buffer, offset) {
|
|
42
|
-
const routeConf = buffer[offset +
|
|
42
|
+
const routeConf = buffer[offset + import_core.MAX_REPEATERS];
|
|
43
43
|
const ret = {
|
|
44
44
|
beaming: Beaming[routeConf & 96] ?? false,
|
|
45
|
-
protocolRate: routeConf &
|
|
45
|
+
protocolRate: routeConf & import_core.protocolDataRateMask,
|
|
46
46
|
repeaterNodeIDs: [
|
|
47
|
-
...buffer.subarray(offset, offset +
|
|
47
|
+
...buffer.subarray(offset, offset + import_core.MAX_REPEATERS)
|
|
48
48
|
].filter((id) => id !== 0)
|
|
49
49
|
};
|
|
50
50
|
if (ret.repeaterNodeIDs[0] === 254)
|
|
@@ -53,10 +53,10 @@ function parseRoute(buffer, offset) {
|
|
|
53
53
|
}
|
|
54
54
|
__name(parseRoute, "parseRoute");
|
|
55
55
|
function encodeRoute(route) {
|
|
56
|
-
const ret = new
|
|
56
|
+
const ret = new import_shared.Bytes(ROUTE_SIZE).fill(0);
|
|
57
57
|
if (route) {
|
|
58
58
|
if (route.repeaterNodeIDs) {
|
|
59
|
-
for (let i = 0; i <
|
|
59
|
+
for (let i = 0; i < import_core.MAX_REPEATERS && i < route.repeaterNodeIDs.length; i++) {
|
|
60
60
|
ret[i] = route.repeaterNodeIDs[i];
|
|
61
61
|
}
|
|
62
62
|
} else {
|
|
@@ -65,7 +65,7 @@ function encodeRoute(route) {
|
|
|
65
65
|
let routeConf = 0;
|
|
66
66
|
if (route.beaming)
|
|
67
67
|
routeConf |= Beaming[route.beaming] ?? 0;
|
|
68
|
-
routeConf |= route.protocolRate &
|
|
68
|
+
routeConf |= route.protocolRate & import_core.protocolDataRateMask;
|
|
69
69
|
ret[ROUTE_SIZE - 1] = routeConf;
|
|
70
70
|
}
|
|
71
71
|
return ret;
|
|
@@ -74,7 +74,7 @@ __name(encodeRoute, "encodeRoute");
|
|
|
74
74
|
function getEmptyRoute() {
|
|
75
75
|
return {
|
|
76
76
|
beaming: false,
|
|
77
|
-
protocolRate:
|
|
77
|
+
protocolRate: import_core.RouteProtocolDataRate.ZWave_40k,
|
|
78
78
|
repeaterNodeIDs: void 0
|
|
79
79
|
};
|
|
80
80
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/common/routeCache.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype FLiRS,\n\tMAX_REPEATERS,\n\tRouteProtocolDataRate,\n\tprotocolDataRateMask,\n} from \"@zwave-js/core
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAKO;AACP,
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import {\n\ttype FLiRS,\n\tMAX_REPEATERS,\n\tRouteProtocolDataRate,\n\tprotocolDataRateMask,\n} from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\n\nconst ROUTE_SIZE = MAX_REPEATERS + 1;\nexport const ROUTECACHE_SIZE = 2 * ROUTE_SIZE;\nexport const EMPTY_ROUTECACHE_FILL = 0xff;\nexport const emptyRouteCache = new Uint8Array(ROUTECACHE_SIZE)\n\t.fill(EMPTY_ROUTECACHE_FILL);\n\nenum Beaming {\n\t\"1000ms\" = 0x40,\n\t\"250ms\" = 0x20,\n}\n\nexport interface Route {\n\tbeaming: FLiRS;\n\tprotocolRate: RouteProtocolDataRate;\n\trepeaterNodeIDs?: number[];\n}\n\nexport interface RouteCache {\n\tnodeId: number;\n\tlwr: Route;\n\tnlwr: Route;\n}\n\nexport function parseRoute(buffer: Uint8Array, offset: number): Route {\n\tconst routeConf = buffer[offset + MAX_REPEATERS];\n\tconst ret: Route = {\n\t\tbeaming: (Beaming[routeConf & 0x60] ?? false) as FLiRS,\n\t\tprotocolRate: routeConf & protocolDataRateMask,\n\t\trepeaterNodeIDs: [\n\t\t\t...buffer.subarray(offset, offset + MAX_REPEATERS),\n\t\t].filter((id) => id !== 0),\n\t};\n\tif (ret.repeaterNodeIDs![0] === 0xfe) delete ret.repeaterNodeIDs;\n\treturn ret;\n}\n\nexport function encodeRoute(route: Route | undefined): Bytes {\n\tconst ret = new Bytes(ROUTE_SIZE).fill(0);\n\tif (route) {\n\t\tif (route.repeaterNodeIDs) {\n\t\t\tfor (\n\t\t\t\tlet i = 0;\n\t\t\t\ti < MAX_REPEATERS && i < route.repeaterNodeIDs.length;\n\t\t\t\ti++\n\t\t\t) {\n\t\t\t\tret[i] = route.repeaterNodeIDs[i];\n\t\t\t}\n\t\t} else {\n\t\t\tret[0] = 0xfe;\n\t\t}\n\t\tlet routeConf = 0;\n\t\tif (route.beaming) routeConf |= Beaming[route.beaming] ?? 0;\n\t\trouteConf |= route.protocolRate & protocolDataRateMask;\n\t\tret[ROUTE_SIZE - 1] = routeConf;\n\t}\n\n\treturn ret;\n}\n\nexport function getEmptyRoute(): Route {\n\treturn {\n\t\tbeaming: false,\n\t\tprotocolRate: RouteProtocolDataRate.ZWave_40k,\n\t\trepeaterNodeIDs: undefined,\n\t};\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;AAAA,kBAKO;AACP,oBAAsB;AAEtB,MAAM,aAAa,4BAAgB;AAC5B,MAAM,kBAAkB,IAAI;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,kBAAkB,IAAI,WAAW,eAAe,EAC3D,KAAK,qBAAqB;AAE5B,IAAK;CAAL,SAAKA,UAAO;AACX,EAAAA,SAAAA,SAAA,QAAA,IAAA,EAAA,IAAA;AACA,EAAAA,SAAAA,SAAA,OAAA,IAAA,EAAA,IAAA;AACD,GAHK,YAAA,UAAO,CAAA,EAAA;AAiBN,SAAU,WAAW,QAAoB,QAAc;AAC5D,QAAM,YAAY,OAAO,SAAS,yBAAa;AAC/C,QAAM,MAAa;IAClB,SAAU,QAAQ,YAAY,EAAI,KAAK;IACvC,cAAc,YAAY;IAC1B,iBAAiB;MAChB,GAAG,OAAO,SAAS,QAAQ,SAAS,yBAAa;MAChD,OAAO,CAAC,OAAO,OAAO,CAAC;;AAE1B,MAAI,IAAI,gBAAiB,CAAC,MAAM;AAAM,WAAO,IAAI;AACjD,SAAO;AACR;AAXgB;AAaV,SAAU,YAAY,OAAwB;AACnD,QAAM,MAAM,IAAI,oBAAM,UAAU,EAAE,KAAK,CAAC;AACxC,MAAI,OAAO;AACV,QAAI,MAAM,iBAAiB;AAC1B,eACK,IAAI,GACR,IAAI,6BAAiB,IAAI,MAAM,gBAAgB,QAC/C,KACC;AACD,YAAI,CAAC,IAAI,MAAM,gBAAgB,CAAC;MACjC;IACD,OAAO;AACN,UAAI,CAAC,IAAI;IACV;AACA,QAAI,YAAY;AAChB,QAAI,MAAM;AAAS,mBAAa,QAAQ,MAAM,OAAO,KAAK;AAC1D,iBAAa,MAAM,eAAe;AAClC,QAAI,aAAa,CAAC,IAAI;EACvB;AAEA,SAAO;AACR;AArBgB;AAuBV,SAAU,gBAAa;AAC5B,SAAO;IACN,SAAS;IACT,cAAc,kCAAsB;IACpC,iBAAiB;;AAEnB;AANgB;",
|
|
6
|
+
"names": ["Beaming"]
|
|
7
7
|
}
|
|
@@ -23,7 +23,7 @@ __export(sucUpdateEntry_exports, {
|
|
|
23
23
|
parseSUCUpdateEntry: () => parseSUCUpdateEntry
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(sucUpdateEntry_exports);
|
|
26
|
-
var
|
|
26
|
+
var import_core = require("@zwave-js/core");
|
|
27
27
|
var import_shared = require("@zwave-js/shared");
|
|
28
28
|
var import_consts = require("../../consts.js");
|
|
29
29
|
function parseSUCUpdateEntry(buffer, offset) {
|
|
@@ -33,7 +33,7 @@ function parseSUCUpdateEntry(buffer, offset) {
|
|
|
33
33
|
}
|
|
34
34
|
const nodeId = slice[0];
|
|
35
35
|
const changeType = slice[1];
|
|
36
|
-
const { supportedCCs, controlledCCs } = (0,
|
|
36
|
+
const { supportedCCs, controlledCCs } = (0, import_core.parseCCList)(slice.subarray(2, import_consts.SUC_UPDATE_ENTRY_SIZE));
|
|
37
37
|
return {
|
|
38
38
|
nodeId,
|
|
39
39
|
changeType,
|
|
@@ -47,9 +47,9 @@ function encodeSUCUpdateEntry(entry) {
|
|
|
47
47
|
if (entry) {
|
|
48
48
|
ret[0] = entry.nodeId;
|
|
49
49
|
ret[1] = entry.changeType;
|
|
50
|
-
const ccList = (0,
|
|
50
|
+
const ccList = (0, import_core.encodeCCList)(entry.supportedCCs, entry.controlledCCs);
|
|
51
51
|
if (ccList.length > import_consts.SUC_UPDATE_NODEPARM_MAX) {
|
|
52
|
-
throw new
|
|
52
|
+
throw new import_core.ZWaveError("Cannot encode SUC update entry, too many CCs", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
53
53
|
}
|
|
54
54
|
ret.set(ccList, 2);
|
|
55
55
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/common/sucUpdateEntry.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeCCList,\n\tparseCCList,\n} from \"@zwave-js/core
|
|
4
|
+
"sourcesContent": ["import {\n\ttype CommandClasses,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tencodeCCList,\n\tparseCCList,\n} from \"@zwave-js/core\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport {\n\tSUC_UPDATE_ENTRY_SIZE,\n\tSUC_UPDATE_NODEPARM_MAX,\n} from \"../../consts.js\";\n\nexport interface SUCUpdateEntry {\n\tnodeId: number;\n\tchangeType: number; // TODO: This is some kind of enum\n\tsupportedCCs: CommandClasses[];\n\tcontrolledCCs: CommandClasses[];\n}\n\nexport function parseSUCUpdateEntry(\n\tbuffer: Uint8Array,\n\toffset: number,\n): SUCUpdateEntry | undefined {\n\tconst slice = buffer.subarray(offset, offset + SUC_UPDATE_ENTRY_SIZE);\n\tif (slice.every((b) => b === 0x00 || b === 0xff)) {\n\t\treturn;\n\t}\n\tconst nodeId = slice[0];\n\tconst changeType = slice[1];\n\tconst { supportedCCs, controlledCCs } = parseCCList(\n\t\tslice.subarray(2, SUC_UPDATE_ENTRY_SIZE),\n\t);\n\treturn {\n\t\tnodeId,\n\t\tchangeType,\n\t\tsupportedCCs: supportedCCs.filter((cc) => cc > 0),\n\t\tcontrolledCCs: controlledCCs.filter((cc) => cc > 0),\n\t};\n}\n\nexport function encodeSUCUpdateEntry(\n\tentry: SUCUpdateEntry | undefined,\n): Bytes {\n\tconst ret = new Bytes(SUC_UPDATE_ENTRY_SIZE).fill(0);\n\tif (entry) {\n\t\tret[0] = entry.nodeId;\n\t\tret[1] = entry.changeType;\n\t\tconst ccList = encodeCCList(entry.supportedCCs, entry.controlledCCs);\n\t\tif (ccList.length > SUC_UPDATE_NODEPARM_MAX) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Cannot encode SUC update entry, too many CCs\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tret.set(ccList, 2);\n\t}\n\treturn ret;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAMO;AACP,oBAAsB;AACtB,oBAGO;AASD,SAAU,oBACf,QACA,QAAc;AAEd,QAAM,QAAQ,OAAO,SAAS,QAAQ,SAAS,mCAAqB;AACpE,MAAI,MAAM,MAAM,CAAC,MAAM,MAAM,KAAQ,MAAM,GAAI,GAAG;AACjD;EACD;AACA,QAAM,SAAS,MAAM,CAAC;AACtB,QAAM,aAAa,MAAM,CAAC;AAC1B,QAAM,EAAE,cAAc,cAAa,QAAK,yBACvC,MAAM,SAAS,GAAG,mCAAqB,CAAC;AAEzC,SAAO;IACN;IACA;IACA,cAAc,aAAa,OAAO,CAAC,OAAO,KAAK,CAAC;IAChD,eAAe,cAAc,OAAO,CAAC,OAAO,KAAK,CAAC;;AAEpD;AAnBgB;AAqBV,SAAU,qBACf,OAAiC;AAEjC,QAAM,MAAM,IAAI,oBAAM,mCAAqB,EAAE,KAAK,CAAC;AACnD,MAAI,OAAO;AACV,QAAI,CAAC,IAAI,MAAM;AACf,QAAI,CAAC,IAAI,MAAM;AACf,UAAM,aAAS,0BAAa,MAAM,cAAc,MAAM,aAAa;AACnE,QAAI,OAAO,SAAS,uCAAyB;AAC5C,YAAM,IAAI,uBACT,gDACA,4BAAgB,gBAAgB;IAElC;AACA,QAAI,IAAI,QAAQ,CAAC;EAClB;AACA,SAAO;AACR;AAjBgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -28,34 +28,34 @@ __export(utils_exports, {
|
|
|
28
28
|
nvmWriteBuffer: () => nvmWriteBuffer
|
|
29
29
|
});
|
|
30
30
|
module.exports = __toCommonJS(utils_exports);
|
|
31
|
-
var
|
|
31
|
+
var import_shared = require("@zwave-js/shared");
|
|
32
32
|
async function nvmReadUInt32LE(io, position) {
|
|
33
33
|
const { buffer } = await io.read(position, 4);
|
|
34
|
-
const bytes =
|
|
34
|
+
const bytes = import_shared.Bytes.view(buffer);
|
|
35
35
|
return bytes.readUInt32LE(0);
|
|
36
36
|
}
|
|
37
37
|
__name(nvmReadUInt32LE, "nvmReadUInt32LE");
|
|
38
38
|
async function nvmReadUInt16LE(io, position) {
|
|
39
39
|
const { buffer } = await io.read(position, 2);
|
|
40
|
-
const bytes =
|
|
40
|
+
const bytes = import_shared.Bytes.view(buffer);
|
|
41
41
|
return bytes.readUInt16LE(0);
|
|
42
42
|
}
|
|
43
43
|
__name(nvmReadUInt16LE, "nvmReadUInt16LE");
|
|
44
44
|
async function nvmReadUInt32BE(io, position) {
|
|
45
45
|
const { buffer } = await io.read(position, 4);
|
|
46
|
-
const bytes =
|
|
46
|
+
const bytes = import_shared.Bytes.view(buffer);
|
|
47
47
|
return bytes.readUInt32BE(0);
|
|
48
48
|
}
|
|
49
49
|
__name(nvmReadUInt32BE, "nvmReadUInt32BE");
|
|
50
50
|
async function nvmReadUInt16BE(io, position) {
|
|
51
51
|
const { buffer } = await io.read(position, 2);
|
|
52
|
-
const bytes =
|
|
52
|
+
const bytes = import_shared.Bytes.view(buffer);
|
|
53
53
|
return bytes.readUInt16BE(0);
|
|
54
54
|
}
|
|
55
55
|
__name(nvmReadUInt16BE, "nvmReadUInt16BE");
|
|
56
56
|
async function nvmReadUInt8(io, position) {
|
|
57
57
|
const { buffer } = await io.read(position, 1);
|
|
58
|
-
const bytes =
|
|
58
|
+
const bytes = import_shared.Bytes.view(buffer);
|
|
59
59
|
return bytes.readUInt8(0);
|
|
60
60
|
}
|
|
61
61
|
__name(nvmReadUInt8, "nvmReadUInt8");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/common/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAAA,
|
|
4
|
+
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\nimport type { NVMIO } from \"./definitions.js\";\n\nexport async function nvmReadUInt32LE(\n\tio: NVMIO,\n\tposition: number,\n): Promise<number> {\n\tconst { buffer } = await io.read(position, 4);\n\tconst bytes = Bytes.view(buffer);\n\treturn bytes.readUInt32LE(0);\n}\n\nexport async function nvmReadUInt16LE(\n\tio: NVMIO,\n\tposition: number,\n): Promise<number> {\n\tconst { buffer } = await io.read(position, 2);\n\tconst bytes = Bytes.view(buffer);\n\treturn bytes.readUInt16LE(0);\n}\n\nexport async function nvmReadUInt32BE(\n\tio: NVMIO,\n\tposition: number,\n): Promise<number> {\n\tconst { buffer } = await io.read(position, 4);\n\tconst bytes = Bytes.view(buffer);\n\treturn bytes.readUInt32BE(0);\n}\n\nexport async function nvmReadUInt16BE(\n\tio: NVMIO,\n\tposition: number,\n): Promise<number> {\n\tconst { buffer } = await io.read(position, 2);\n\tconst bytes = Bytes.view(buffer);\n\treturn bytes.readUInt16BE(0);\n}\n\nexport async function nvmReadUInt8(\n\tio: NVMIO,\n\tposition: number,\n): Promise<number> {\n\tconst { buffer } = await io.read(position, 1);\n\tconst bytes = Bytes.view(buffer);\n\treturn bytes.readUInt8(0);\n}\n\nexport async function nvmWriteBuffer(\n\tio: NVMIO,\n\tposition: number,\n\tbuffer: Uint8Array,\n): Promise<void> {\n\tconst chunkSize = await io.determineChunkSize();\n\tlet offset = 0;\n\twhile (offset < buffer.length) {\n\t\tconst chunk = buffer.subarray(offset, offset + chunkSize);\n\t\tconst { bytesWritten } = await io.write(position + offset, chunk);\n\t\toffset += bytesWritten;\n\t}\n}\n\nexport async function nvmReadBuffer(\n\tio: NVMIO,\n\tposition: number,\n\tlength: number,\n): Promise<Uint8Array> {\n\tconst ret = new Uint8Array(length);\n\tconst chunkSize = await io.determineChunkSize();\n\tlet offset = 0;\n\twhile (offset < length) {\n\t\tconst { buffer, endOfFile } = await io.read(\n\t\t\tposition + offset,\n\t\t\tMath.min(chunkSize, length - offset),\n\t\t);\n\t\tret.set(buffer, offset);\n\t\toffset += buffer.length;\n\t\tif (endOfFile) break;\n\t}\n\treturn ret.subarray(0, offset);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;AAAA,oBAAsB;AAGtB,eAAsB,gBACrB,IACA,UAAgB;AAEhB,QAAM,EAAE,OAAM,IAAK,MAAM,GAAG,KAAK,UAAU,CAAC;AAC5C,QAAM,QAAQ,oBAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,aAAa,CAAC;AAC5B;AAPsB;AAStB,eAAsB,gBACrB,IACA,UAAgB;AAEhB,QAAM,EAAE,OAAM,IAAK,MAAM,GAAG,KAAK,UAAU,CAAC;AAC5C,QAAM,QAAQ,oBAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,aAAa,CAAC;AAC5B;AAPsB;AAStB,eAAsB,gBACrB,IACA,UAAgB;AAEhB,QAAM,EAAE,OAAM,IAAK,MAAM,GAAG,KAAK,UAAU,CAAC;AAC5C,QAAM,QAAQ,oBAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,aAAa,CAAC;AAC5B;AAPsB;AAStB,eAAsB,gBACrB,IACA,UAAgB;AAEhB,QAAM,EAAE,OAAM,IAAK,MAAM,GAAG,KAAK,UAAU,CAAC;AAC5C,QAAM,QAAQ,oBAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,aAAa,CAAC;AAC5B;AAPsB;AAStB,eAAsB,aACrB,IACA,UAAgB;AAEhB,QAAM,EAAE,OAAM,IAAK,MAAM,GAAG,KAAK,UAAU,CAAC;AAC5C,QAAM,QAAQ,oBAAM,KAAK,MAAM;AAC/B,SAAO,MAAM,UAAU,CAAC;AACzB;AAPsB;AAStB,eAAsB,eACrB,IACA,UACA,QAAkB;AAElB,QAAM,YAAY,MAAM,GAAG,mBAAkB;AAC7C,MAAI,SAAS;AACb,SAAO,SAAS,OAAO,QAAQ;AAC9B,UAAM,QAAQ,OAAO,SAAS,QAAQ,SAAS,SAAS;AACxD,UAAM,EAAE,aAAY,IAAK,MAAM,GAAG,MAAM,WAAW,QAAQ,KAAK;AAChE,cAAU;EACX;AACD;AAZsB;AActB,eAAsB,cACrB,IACA,UACA,QAAc;AAEd,QAAM,MAAM,IAAI,WAAW,MAAM;AACjC,QAAM,YAAY,MAAM,GAAG,mBAAkB;AAC7C,MAAI,SAAS;AACb,SAAO,SAAS,QAAQ;AACvB,UAAM,EAAE,QAAQ,UAAS,IAAK,MAAM,GAAG,KACtC,WAAW,QACX,KAAK,IAAI,WAAW,SAAS,MAAM,CAAC;AAErC,QAAI,IAAI,QAAQ,MAAM;AACtB,cAAU,OAAO;AACjB,QAAI;AAAW;EAChB;AACA,SAAO,IAAI,SAAS,GAAG,MAAM;AAC9B;AAlBsB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -22,7 +22,7 @@ __export(BufferedNVMReader_exports, {
|
|
|
22
22
|
BufferedNVMReader: () => BufferedNVMReader
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(BufferedNVMReader_exports);
|
|
25
|
-
var
|
|
25
|
+
var import_shared = require("@zwave-js/shared");
|
|
26
26
|
class BufferedNVMReader {
|
|
27
27
|
static {
|
|
28
28
|
__name(this, "BufferedNVMReader");
|
|
@@ -66,7 +66,7 @@ class BufferedNVMReader {
|
|
|
66
66
|
if (secondChunkStart > firstChunkStart) {
|
|
67
67
|
chunks.push(await this.readBuffered(secondChunkStart, chunkSize));
|
|
68
68
|
}
|
|
69
|
-
const alignedBuffer =
|
|
69
|
+
const alignedBuffer = import_shared.Bytes.concat(chunks);
|
|
70
70
|
const endOfFile = offset + length >= this.size;
|
|
71
71
|
const buffer = alignedBuffer.subarray(offset - firstChunkStart, offset - firstChunkStart + length);
|
|
72
72
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/io/BufferedNVMReader.ts"],
|
|
4
|
-
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,
|
|
4
|
+
"sourcesContent": ["import { Bytes } from \"@zwave-js/shared\";\nimport type { NVMAccess, NVMIO } from \"../common/definitions.js\";\n\ninterface BufferedChunk {\n\toffset: number;\n\tdata: Uint8Array;\n}\n\nexport class BufferedNVMReader implements NVMIO {\n\tpublic constructor(inner: NVMIO) {\n\t\tthis._inner = inner;\n\t}\n\n\tprivate _inner: NVMIO;\n\t// Already-read chunks. There are a few rules to follow:\n\t// - Offsets MUST be multiples of the chunk size\n\t// - The size of each chunk must be exactly the chunk size\n\tprivate _buffer: BufferedChunk[] = [];\n\n\topen(access: NVMAccess.Read | NVMAccess.Write): Promise<NVMAccess> {\n\t\treturn this._inner.open(access);\n\t}\n\tget size(): number {\n\t\treturn this._inner.size;\n\t}\n\tget accessMode(): NVMAccess {\n\t\treturn this._inner.accessMode;\n\t}\n\tdetermineChunkSize(): Promise<number> {\n\t\treturn this._inner.determineChunkSize();\n\t}\n\n\tprivate async readBuffered(\n\t\talignedOffset: number,\n\t\tchunkSize: number,\n\t): Promise<Uint8Array> {\n\t\tlet buffered = this._buffer.find((chunk) =>\n\t\t\tchunk.offset === alignedOffset\n\t\t);\n\t\tif (!buffered) {\n\t\t\tconst { buffer: data } = await this._inner.read(\n\t\t\t\talignedOffset,\n\t\t\t\tchunkSize,\n\t\t\t);\n\t\t\tbuffered = { data, offset: alignedOffset };\n\t\t\tthis._buffer.push(buffered);\n\t\t}\n\t\treturn buffered.data;\n\t}\n\n\tasync read(\n\t\toffset: number,\n\t\tlength: number,\n\t): Promise<{ buffer: Uint8Array; endOfFile: boolean }> {\n\t\t// Limit the read size to the chunk size. This ensures we have to deal with maximum 2 chunks or read requests\n\t\tconst chunkSize = await this.determineChunkSize();\n\t\tlength = Math.min(length, chunkSize);\n\n\t\t// Figure out at which offsets to read\n\t\tconst firstChunkStart = offset - offset % chunkSize;\n\t\tconst secondChunkStart = (offset + length)\n\t\t\t- (offset + length) % chunkSize;\n\n\t\t// Read one or two chunks, depending on how many are needed\n\t\tconst chunks: Uint8Array[] = [];\n\t\tchunks.push(await this.readBuffered(firstChunkStart, chunkSize));\n\t\tif (secondChunkStart > firstChunkStart) {\n\t\t\tchunks.push(await this.readBuffered(secondChunkStart, chunkSize));\n\t\t}\n\t\tconst alignedBuffer = Bytes.concat(chunks);\n\n\t\t// Then slice out the section we need\n\t\tconst endOfFile = offset + length >= this.size;\n\t\tconst buffer = alignedBuffer.subarray(\n\t\t\toffset - firstChunkStart,\n\t\t\toffset - firstChunkStart + length,\n\t\t);\n\n\t\treturn {\n\t\t\tbuffer,\n\t\t\tendOfFile,\n\t\t};\n\t}\n\n\tasync write(\n\t\toffset: number,\n\t\tdata: Uint8Array,\n\t): Promise<{ bytesWritten: number; endOfFile: boolean }> {\n\t\tconst ret = await this._inner.write(offset, data);\n\n\t\t// Invalidate cached chunks\n\t\tconst chunkSize = await this.determineChunkSize();\n\t\t// Figure out at which offsets to read\n\t\tconst firstChunkStart = offset - offset % chunkSize;\n\t\tconst lastChunkStart = (offset + ret.bytesWritten)\n\t\t\t- (offset + ret.bytesWritten) % chunkSize;\n\n\t\t// TODO: We should update existing chunks where possible\n\t\tfor (let i = firstChunkStart; i <= lastChunkStart; i += chunkSize) {\n\t\t\tconst index = this._buffer.findIndex((chunk) => chunk.offset === i);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis._buffer.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tclose(): Promise<void> {\n\t\treturn this._inner.close();\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,oBAAsB;AAQhB,MAAO,kBAAiB;EAR9B,OAQ8B;;;EAC7B,YAAmB,OAAY;AAC9B,SAAK,SAAS;EACf;EAEQ;;;;EAIA,UAA2B,CAAA;EAEnC,KAAK,QAAwC;AAC5C,WAAO,KAAK,OAAO,KAAK,MAAM;EAC/B;EACA,IAAI,OAAI;AACP,WAAO,KAAK,OAAO;EACpB;EACA,IAAI,aAAU;AACb,WAAO,KAAK,OAAO;EACpB;EACA,qBAAkB;AACjB,WAAO,KAAK,OAAO,mBAAkB;EACtC;EAEQ,MAAM,aACb,eACA,WAAiB;AAEjB,QAAI,WAAW,KAAK,QAAQ,KAAK,CAAC,UACjC,MAAM,WAAW,aAAa;AAE/B,QAAI,CAAC,UAAU;AACd,YAAM,EAAE,QAAQ,KAAI,IAAK,MAAM,KAAK,OAAO,KAC1C,eACA,SAAS;AAEV,iBAAW,EAAE,MAAM,QAAQ,cAAa;AACxC,WAAK,QAAQ,KAAK,QAAQ;IAC3B;AACA,WAAO,SAAS;EACjB;EAEA,MAAM,KACL,QACA,QAAc;AAGd,UAAM,YAAY,MAAM,KAAK,mBAAkB;AAC/C,aAAS,KAAK,IAAI,QAAQ,SAAS;AAGnC,UAAM,kBAAkB,SAAS,SAAS;AAC1C,UAAM,mBAAoB,SAAS,UAC/B,SAAS,UAAU;AAGvB,UAAM,SAAuB,CAAA;AAC7B,WAAO,KAAK,MAAM,KAAK,aAAa,iBAAiB,SAAS,CAAC;AAC/D,QAAI,mBAAmB,iBAAiB;AACvC,aAAO,KAAK,MAAM,KAAK,aAAa,kBAAkB,SAAS,CAAC;IACjE;AACA,UAAM,gBAAgB,oBAAM,OAAO,MAAM;AAGzC,UAAM,YAAY,SAAS,UAAU,KAAK;AAC1C,UAAM,SAAS,cAAc,SAC5B,SAAS,iBACT,SAAS,kBAAkB,MAAM;AAGlC,WAAO;MACN;MACA;;EAEF;EAEA,MAAM,MACL,QACA,MAAgB;AAEhB,UAAM,MAAM,MAAM,KAAK,OAAO,MAAM,QAAQ,IAAI;AAGhD,UAAM,YAAY,MAAM,KAAK,mBAAkB;AAE/C,UAAM,kBAAkB,SAAS,SAAS;AAC1C,UAAM,iBAAkB,SAAS,IAAI,gBACjC,SAAS,IAAI,gBAAgB;AAGjC,aAAS,IAAI,iBAAiB,KAAK,gBAAgB,KAAK,WAAW;AAClE,YAAM,QAAQ,KAAK,QAAQ,UAAU,CAAC,UAAU,MAAM,WAAW,CAAC;AAClE,UAAI,UAAU,IAAI;AACjB,aAAK,QAAQ,OAAO,OAAO,CAAC;MAC7B;IACD;AAEA,WAAO;EACR;EAEA,QAAK;AACJ,WAAO,KAAK,OAAO,MAAK;EACzB;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { NVM3 } from "../NVM3.js";
|
|
2
|
+
import type { NVMAdapter, NVMProperty, NVMPropertyToDataType } from "../common/definitions.js";
|
|
3
3
|
import { NVMFile } from "./files/index.js";
|
|
4
4
|
export declare class NVM3Adapter implements NVMAdapter {
|
|
5
5
|
constructor(nvm: NVM3);
|
|
@@ -22,8 +22,8 @@ __export(adapter_exports, {
|
|
|
22
22
|
NVM3Adapter: () => NVM3Adapter
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(adapter_exports);
|
|
25
|
-
var
|
|
26
|
-
var
|
|
25
|
+
var import_core = require("@zwave-js/core");
|
|
26
|
+
var import_shared = require("@zwave-js/shared");
|
|
27
27
|
var import_helpers = require("alcalzone-shared/helpers");
|
|
28
28
|
var import_consts = require("../../consts.js");
|
|
29
29
|
var import_files = require("./files/index.js");
|
|
@@ -109,7 +109,7 @@ class NVM3Adapter {
|
|
|
109
109
|
async _expectFile(fileId, skipInit = false) {
|
|
110
110
|
const file = await this._getFile(fileId, skipInit);
|
|
111
111
|
if (!file) {
|
|
112
|
-
throw new
|
|
112
|
+
throw new import_core.ZWaveError(`NVM file ${(0, import_shared.num2hex)(fileId)} not found`, import_core.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
113
113
|
}
|
|
114
114
|
return file;
|
|
115
115
|
}
|
|
@@ -155,7 +155,7 @@ class NVM3Adapter {
|
|
|
155
155
|
const file = file700 ?? file800;
|
|
156
156
|
if (!file) {
|
|
157
157
|
if (required) {
|
|
158
|
-
throw new
|
|
158
|
+
throw new import_core.ZWaveError("ApplicationVersionFile not found!", import_core.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
159
159
|
} else {
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
@@ -347,7 +347,7 @@ class NVM3Adapter {
|
|
|
347
347
|
}
|
|
348
348
|
async setControllerNVMProperty(property, value) {
|
|
349
349
|
function failFileMissing() {
|
|
350
|
-
throw new
|
|
350
|
+
throw new import_core.ZWaveError("Cannot set property in NVM for non-existing file", import_core.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
351
351
|
}
|
|
352
352
|
__name(failFileMissing, "failFileMissing");
|
|
353
353
|
const expectFile = /* @__PURE__ */ __name(async (fileId) => {
|
|
@@ -379,7 +379,7 @@ class NVM3Adapter {
|
|
|
379
379
|
const file800 = await this._getFile(import_files.ApplicationVersionFile800ID);
|
|
380
380
|
const file = file700 ?? file800;
|
|
381
381
|
if (!file) {
|
|
382
|
-
throw new
|
|
382
|
+
throw new import_core.ZWaveError("ApplicationVersionFile not found!", import_core.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
383
383
|
}
|
|
384
384
|
const [major, minor, patch] = value.split(".").map((part) => parseInt(part, 10));
|
|
385
385
|
file.major = major;
|