@zwave-js/nvmedit 14.0.0-beta.1 → 14.0.0-beta.4
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 +2 -0
- package/build/cjs/cli.js +170 -0
- package/build/cjs/cli.js.map +7 -0
- package/build/cjs/consts.js +38 -0
- package/build/cjs/consts.js.map +7 -0
- package/build/{convert.d.ts → cjs/convert.d.ts} +5 -5
- package/build/cjs/convert.js +1306 -0
- package/build/cjs/convert.js.map +7 -0
- package/build/cjs/index.d.ts +17 -0
- package/build/cjs/index.js +79 -0
- package/build/cjs/index.js.map +7 -0
- package/build/{index_safe.d.ts → cjs/index_safe.d.ts} +9 -9
- package/build/cjs/index_safe.js +39 -0
- package/build/cjs/index_safe.js.map +7 -0
- package/build/{lib → cjs/lib}/NVM3.d.ts +5 -5
- package/build/cjs/lib/NVM3.js +519 -0
- package/build/cjs/lib/NVM3.js.map +7 -0
- package/build/{lib → cjs/lib}/NVM500.d.ts +3 -3
- package/build/cjs/lib/NVM500.js +388 -0
- package/build/cjs/lib/NVM500.js.map +7 -0
- package/build/{lib → cjs/lib}/common/definitions.d.ts +3 -3
- package/build/cjs/lib/common/definitions.js +35 -0
- package/build/cjs/lib/common/definitions.js.map +7 -0
- package/build/cjs/lib/common/routeCache.js +87 -0
- package/build/cjs/lib/common/routeCache.js.map +7 -0
- package/build/cjs/lib/common/sucUpdateEntry.js +61 -0
- package/build/cjs/lib/common/sucUpdateEntry.js.map +7 -0
- package/build/{lib → cjs/lib}/common/utils.d.ts +1 -1
- package/build/cjs/lib/common/utils.js +88 -0
- package/build/cjs/lib/common/utils.js.map +7 -0
- package/build/{lib → cjs/lib}/io/BufferedNVMReader.d.ts +1 -1
- package/build/cjs/lib/io/BufferedNVMReader.js +94 -0
- package/build/cjs/lib/io/BufferedNVMReader.js.map +7 -0
- package/build/{lib → cjs/lib}/io/NVMFileIO.d.ts +1 -1
- package/build/cjs/lib/io/NVMFileIO.js +115 -0
- package/build/cjs/lib/io/NVMFileIO.js.map +7 -0
- package/build/{lib → cjs/lib}/io/NVMMemoryIO.d.ts +1 -1
- package/build/cjs/lib/io/NVMMemoryIO.js +67 -0
- package/build/cjs/lib/io/NVMMemoryIO.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/adapter.d.ts +3 -3
- package/build/cjs/lib/nvm3/adapter.js +862 -0
- package/build/cjs/lib/nvm3/adapter.js.map +7 -0
- package/build/cjs/lib/nvm3/consts.js +139 -0
- package/build/cjs/lib/nvm3/consts.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ApplicationCCsFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js +97 -0
- package/build/cjs/lib/nvm3/files/ApplicationCCsFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ApplicationDataFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js +57 -0
- package/build/cjs/lib/nvm3/files/ApplicationDataFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ApplicationNameFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js +60 -0
- package/build/cjs/lib/nvm3/files/ApplicationNameFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ApplicationRFConfigFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js +146 -0
- package/build/cjs/lib/nvm3/files/ApplicationRFConfigFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ApplicationTypeFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js +81 -0
- package/build/cjs/lib/nvm3/files/ApplicationTypeFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ControllerInfoFile.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js +170 -0
- package/build/cjs/lib/nvm3/files/ControllerInfoFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/NVMFile.d.ts +1 -1
- package/build/cjs/lib/nvm3/files/NVMFile.js +155 -0
- package/build/cjs/lib/nvm3/files/NVMFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/NodeInfoFiles.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js +288 -0
- package/build/cjs/lib/nvm3/files/NodeInfoFiles.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/ProtocolNodeMaskFiles.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js +189 -0
- package/build/cjs/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/RouteCacheFiles.d.ts +3 -3
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js +140 -0
- package/build/cjs/lib/nvm3/files/RouteCacheFiles.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/SUCUpdateEntriesFile.d.ts +3 -3
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js +131 -0
- package/build/cjs/lib/nvm3/files/SUCUpdateEntriesFile.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/files/VersionFiles.d.ts +2 -2
- package/build/cjs/lib/nvm3/files/VersionFiles.js +106 -0
- package/build/cjs/lib/nvm3/files/VersionFiles.js.map +7 -0
- package/build/cjs/lib/nvm3/files/index.d.ts +14 -0
- package/build/cjs/lib/nvm3/files/index.js +46 -0
- package/build/cjs/lib/nvm3/files/index.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/object.d.ts +1 -1
- package/build/cjs/lib/nvm3/object.js +131 -0
- package/build/cjs/lib/nvm3/object.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/page.d.ts +2 -2
- package/build/cjs/lib/nvm3/page.js +60 -0
- package/build/cjs/lib/nvm3/page.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm3/utils.d.ts +1 -1
- package/build/cjs/lib/nvm3/utils.js +165 -0
- package/build/cjs/lib/nvm3/utils.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm500/EntryParsers.d.ts +1 -1
- package/build/cjs/lib/nvm500/EntryParsers.js +106 -0
- package/build/cjs/lib/nvm500/EntryParsers.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm500/adapter.d.ts +2 -2
- package/build/cjs/lib/nvm500/adapter.js +370 -0
- package/build/cjs/lib/nvm500/adapter.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.js +207 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_6x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.js +223 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_7x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.js +250 -0
- package/build/cjs/lib/nvm500/impls/Bridge_6_8x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Static_6_6x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Static_6_6x.js +202 -0
- package/build/cjs/lib/nvm500/impls/Static_6_6x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Static_6_7x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Static_6_7x.js +218 -0
- package/build/cjs/lib/nvm500/impls/Static_6_7x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/Static_6_8x.d.ts +3 -0
- package/build/cjs/lib/nvm500/impls/Static_6_8x.js +246 -0
- package/build/cjs/lib/nvm500/impls/Static_6_8x.js.map +7 -0
- package/build/cjs/lib/nvm500/impls/index.d.ts +2 -0
- package/build/cjs/lib/nvm500/impls/index.js +42 -0
- package/build/cjs/lib/nvm500/impls/index.js.map +7 -0
- package/build/{lib → cjs/lib}/nvm500/shared.d.ts +3 -3
- package/build/cjs/lib/nvm500/shared.js +130 -0
- package/build/cjs/lib/nvm500/shared.js.map +7 -0
- package/build/{nvm500 → cjs/nvm500}/NVMParser.d.ts +4 -4
- package/build/cjs/nvm500/NVMParser.js +17 -0
- package/build/cjs/nvm500/NVMParser.js.map +7 -0
- package/build/cjs/package.json +3 -0
- package/build/esm/cli.d.ts +2 -0
- package/build/esm/cli.d.ts.map +1 -0
- package/build/{cli.js → esm/cli.js} +29 -33
- package/build/esm/cli.js.map +1 -0
- package/build/esm/consts.d.ts +5 -0
- package/build/esm/consts.d.ts.map +1 -0
- package/build/esm/consts.js +6 -0
- package/build/esm/consts.js.map +1 -0
- package/build/esm/convert.d.ts +94 -0
- package/build/esm/convert.d.ts.map +1 -0
- package/build/{convert.js → esm/convert.js} +177 -191
- package/build/esm/convert.js.map +1 -0
- package/build/esm/index.d.ts +17 -0
- package/build/esm/index.d.ts.map +1 -0
- package/build/esm/index.js +12 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/index_safe.d.ts +11 -0
- package/build/esm/index_safe.d.ts.map +1 -0
- package/build/esm/index_safe.js +5 -0
- package/build/esm/index_safe.js.map +1 -0
- package/build/esm/lib/NVM3.d.ts +53 -0
- package/build/esm/lib/NVM3.d.ts.map +1 -0
- package/build/{lib → esm/lib}/NVM3.js +121 -125
- package/build/esm/lib/NVM3.js.map +1 -0
- package/build/esm/lib/NVM500.d.ts +46 -0
- package/build/esm/lib/NVM500.d.ts.map +1 -0
- package/build/{lib → esm/lib}/NVM500.js +104 -108
- package/build/esm/lib/NVM500.js.map +1 -0
- package/build/esm/lib/common/definitions.d.ts +138 -0
- package/build/esm/lib/common/definitions.d.ts.map +1 -0
- package/build/{lib → esm/lib}/common/definitions.js +2 -5
- package/build/esm/lib/common/definitions.js.map +1 -0
- package/build/esm/lib/common/routeCache.d.ts +19 -0
- package/build/esm/lib/common/routeCache.d.ts.map +1 -0
- package/build/esm/lib/common/routeCache.js +52 -0
- package/build/esm/lib/common/routeCache.js.map +1 -0
- package/build/esm/lib/common/sucUpdateEntry.d.ts +11 -0
- package/build/esm/lib/common/sucUpdateEntry.d.ts.map +1 -0
- package/build/esm/lib/common/sucUpdateEntry.js +32 -0
- package/build/esm/lib/common/sucUpdateEntry.js.map +1 -0
- package/build/esm/lib/common/utils.d.ts +9 -0
- package/build/esm/lib/common/utils.d.ts.map +1 -0
- package/build/{lib → esm/lib}/common/utils.js +13 -22
- package/build/esm/lib/common/utils.js.map +1 -0
- package/build/esm/lib/io/BufferedNVMReader.d.ts +21 -0
- package/build/esm/lib/io/BufferedNVMReader.d.ts.map +1 -0
- package/build/{lib → esm/lib}/io/BufferedNVMReader.js +3 -7
- package/build/esm/lib/io/BufferedNVMReader.js.map +1 -0
- package/build/esm/lib/io/NVMFileIO.d.ts +24 -0
- package/build/esm/lib/io/NVMFileIO.d.ts.map +1 -0
- package/build/{lib → esm/lib}/io/NVMFileIO.js +15 -22
- package/build/esm/lib/io/NVMFileIO.js.map +1 -0
- package/build/esm/lib/io/NVMMemoryIO.d.ts +20 -0
- package/build/esm/lib/io/NVMMemoryIO.d.ts.map +1 -0
- package/build/{lib → esm/lib}/io/NVMMemoryIO.js +6 -10
- package/build/esm/lib/io/NVMMemoryIO.js.map +1 -0
- package/build/esm/lib/nvm3/adapter.d.ts +33 -0
- package/build/esm/lib/nvm3/adapter.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/adapter.js +121 -125
- package/build/esm/lib/nvm3/adapter.js.map +1 -0
- package/build/esm/lib/nvm3/consts.d.ts +50 -0
- package/build/esm/lib/nvm3/consts.d.ts.map +1 -0
- package/build/esm/lib/nvm3/consts.js +60 -0
- package/build/esm/lib/nvm3/consts.js.map +1 -0
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.d.ts +25 -0
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ApplicationCCsFile.js +14 -17
- package/build/esm/lib/nvm3/files/ApplicationCCsFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/ApplicationDataFile.d.ts +12 -0
- package/build/esm/lib/nvm3/files/ApplicationDataFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ApplicationDataFile.js +8 -11
- package/build/esm/lib/nvm3/files/ApplicationDataFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/ApplicationNameFile.d.ts +15 -0
- package/build/esm/lib/nvm3/files/ApplicationNameFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ApplicationNameFile.js +12 -15
- package/build/esm/lib/nvm3/files/ApplicationNameFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.d.ts +29 -0
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ApplicationRFConfigFile.js +21 -27
- package/build/esm/lib/nvm3/files/ApplicationRFConfigFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.d.ts +27 -0
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ApplicationTypeFile.js +10 -13
- package/build/esm/lib/nvm3/files/ApplicationTypeFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/ControllerInfoFile.d.ts +46 -0
- package/build/esm/lib/nvm3/files/ControllerInfoFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/ControllerInfoFile.js +17 -20
- package/build/esm/lib/nvm3/files/ControllerInfoFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/NVMFile.d.ts +60 -0
- package/build/esm/lib/nvm3/files/NVMFile.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/NVMFile.js +25 -35
- package/build/esm/lib/nvm3/files/NVMFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/NodeInfoFiles.d.ts +64 -0
- package/build/esm/lib/nvm3/files/NodeInfoFiles.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/NodeInfoFiles.js +59 -65
- package/build/esm/lib/nvm3/files/NodeInfoFiles.js.map +1 -0
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts +56 -0
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts.map +1 -0
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.js +138 -0
- package/build/esm/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -0
- package/build/esm/lib/nvm3/files/RouteCacheFiles.d.ts +36 -0
- package/build/esm/lib/nvm3/files/RouteCacheFiles.d.ts.map +1 -0
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js +115 -0
- package/build/esm/lib/nvm3/files/RouteCacheFiles.js.map +1 -0
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.d.ts +33 -0
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.d.ts.map +1 -0
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js +100 -0
- package/build/esm/lib/nvm3/files/SUCUpdateEntriesFile.js.map +1 -0
- package/build/esm/lib/nvm3/files/VersionFiles.d.ts +33 -0
- package/build/esm/lib/nvm3/files/VersionFiles.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/files/VersionFiles.js +20 -24
- package/build/esm/lib/nvm3/files/VersionFiles.js.map +1 -0
- package/build/esm/lib/nvm3/files/index.d.ts +14 -0
- package/build/esm/lib/nvm3/files/index.d.ts.map +1 -0
- package/build/esm/lib/nvm3/files/index.js +14 -0
- package/build/esm/lib/nvm3/files/index.js.map +1 -0
- package/build/esm/lib/nvm3/object.d.ts +29 -0
- package/build/esm/lib/nvm3/object.d.ts.map +1 -0
- package/build/esm/lib/nvm3/object.js +110 -0
- package/build/esm/lib/nvm3/object.js.map +1 -0
- package/build/esm/lib/nvm3/page.d.ts +21 -0
- package/build/esm/lib/nvm3/page.d.ts.map +1 -0
- package/build/esm/lib/nvm3/page.js +33 -0
- package/build/esm/lib/nvm3/page.js.map +1 -0
- package/build/esm/lib/nvm3/utils.d.ts +9 -0
- package/build/esm/lib/nvm3/utils.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm3/utils.js +21 -29
- package/build/esm/lib/nvm3/utils.js.map +1 -0
- package/build/esm/lib/nvm500/EntryParsers.d.ts +27 -0
- package/build/esm/lib/nvm500/EntryParsers.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm500/EntryParsers.js +18 -26
- package/build/esm/lib/nvm500/EntryParsers.js.map +1 -0
- package/build/esm/lib/nvm500/adapter.d.ts +22 -0
- package/build/esm/lib/nvm500/adapter.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm500/adapter.js +18 -22
- package/build/esm/lib/nvm500/adapter.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.js +180 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_6x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.js +196 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_7x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.js +223 -0
- package/build/esm/lib/nvm500/impls/Bridge_6_8x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_6x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Static_6_6x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_6x.js +175 -0
- package/build/esm/lib/nvm500/impls/Static_6_6x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_7x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Static_6_7x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_7x.js +191 -0
- package/build/esm/lib/nvm500/impls/Static_6_7x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_8x.d.ts +3 -0
- package/build/esm/lib/nvm500/impls/Static_6_8x.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/Static_6_8x.js +219 -0
- package/build/esm/lib/nvm500/impls/Static_6_8x.js.map +1 -0
- package/build/esm/lib/nvm500/impls/index.d.ts +2 -0
- package/build/esm/lib/nvm500/impls/index.d.ts.map +1 -0
- package/build/esm/lib/nvm500/impls/index.js +15 -0
- package/build/esm/lib/nvm500/impls/index.js.map +1 -0
- package/build/esm/lib/nvm500/shared.d.ts +69 -0
- package/build/esm/lib/nvm500/shared.d.ts.map +1 -0
- package/build/{lib → esm/lib}/nvm500/shared.js +22 -26
- package/build/esm/lib/nvm500/shared.js.map +1 -0
- package/build/esm/nvm500/NVMParser.d.ts +61 -0
- package/build/esm/nvm500/NVMParser.d.ts.map +1 -0
- package/build/esm/nvm500/NVMParser.js +2 -0
- package/build/{nvm500 → esm/nvm500}/NVMParser.js.map +1 -1
- package/build/esm/package.json +3 -0
- package/package.json +19 -17
- package/build/cli.d.ts +0 -3
- package/build/cli.d.ts.map +0 -1
- package/build/cli.js.map +0 -1
- package/build/consts.d.ts.map +0 -1
- package/build/consts.js +0 -9
- package/build/consts.js.map +0 -1
- package/build/convert.d.ts.map +0 -1
- package/build/convert.js.map +0 -1
- package/build/index.d.ts +0 -17
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -36
- package/build/index.js.map +0 -1
- package/build/index_safe.d.ts.map +0 -1
- package/build/index_safe.js +0 -13
- package/build/index_safe.js.map +0 -1
- package/build/lib/NVM3.d.ts.map +0 -1
- package/build/lib/NVM3.js.map +0 -1
- package/build/lib/NVM500.d.ts.map +0 -1
- package/build/lib/NVM500.js.map +0 -1
- package/build/lib/common/definitions.d.ts.map +0 -1
- package/build/lib/common/definitions.js.map +0 -1
- package/build/lib/common/routeCache.d.ts.map +0 -1
- package/build/lib/common/routeCache.js +0 -58
- package/build/lib/common/routeCache.js.map +0 -1
- package/build/lib/common/sucUpdateEntry.d.ts.map +0 -1
- package/build/lib/common/sucUpdateEntry.js +0 -36
- package/build/lib/common/sucUpdateEntry.js.map +0 -1
- package/build/lib/common/utils.d.ts.map +0 -1
- package/build/lib/common/utils.js.map +0 -1
- package/build/lib/io/BufferedNVMReader.d.ts.map +0 -1
- package/build/lib/io/BufferedNVMReader.js.map +0 -1
- package/build/lib/io/NVMFileIO.d.ts.map +0 -1
- package/build/lib/io/NVMFileIO.js.map +0 -1
- package/build/lib/io/NVMMemoryIO.d.ts.map +0 -1
- package/build/lib/io/NVMMemoryIO.js.map +0 -1
- package/build/lib/nvm3/adapter.d.ts.map +0 -1
- package/build/lib/nvm3/adapter.js.map +0 -1
- package/build/lib/nvm3/consts.d.ts.map +0 -1
- package/build/lib/nvm3/consts.js +0 -63
- package/build/lib/nvm3/consts.js.map +0 -1
- package/build/lib/nvm3/files/ApplicationCCsFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ApplicationCCsFile.js.map +0 -1
- package/build/lib/nvm3/files/ApplicationDataFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ApplicationDataFile.js.map +0 -1
- package/build/lib/nvm3/files/ApplicationNameFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ApplicationNameFile.js.map +0 -1
- package/build/lib/nvm3/files/ApplicationRFConfigFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ApplicationRFConfigFile.js.map +0 -1
- package/build/lib/nvm3/files/ApplicationTypeFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ApplicationTypeFile.js.map +0 -1
- package/build/lib/nvm3/files/ControllerInfoFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/ControllerInfoFile.js.map +0 -1
- package/build/lib/nvm3/files/NVMFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/NVMFile.js.map +0 -1
- package/build/lib/nvm3/files/NodeInfoFiles.d.ts.map +0 -1
- package/build/lib/nvm3/files/NodeInfoFiles.js.map +0 -1
- package/build/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts.map +0 -1
- package/build/lib/nvm3/files/ProtocolNodeMaskFiles.js +0 -142
- package/build/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +0 -1
- package/build/lib/nvm3/files/RouteCacheFiles.d.ts.map +0 -1
- package/build/lib/nvm3/files/RouteCacheFiles.js +0 -120
- package/build/lib/nvm3/files/RouteCacheFiles.js.map +0 -1
- package/build/lib/nvm3/files/SUCUpdateEntriesFile.d.ts.map +0 -1
- package/build/lib/nvm3/files/SUCUpdateEntriesFile.js +0 -104
- package/build/lib/nvm3/files/SUCUpdateEntriesFile.js.map +0 -1
- package/build/lib/nvm3/files/VersionFiles.d.ts.map +0 -1
- package/build/lib/nvm3/files/VersionFiles.js.map +0 -1
- package/build/lib/nvm3/files/index.d.ts +0 -14
- package/build/lib/nvm3/files/index.d.ts.map +0 -1
- package/build/lib/nvm3/files/index.js +0 -30
- package/build/lib/nvm3/files/index.js.map +0 -1
- package/build/lib/nvm3/object.d.ts.map +0 -1
- package/build/lib/nvm3/object.js +0 -119
- package/build/lib/nvm3/object.js.map +0 -1
- package/build/lib/nvm3/page.d.ts.map +0 -1
- package/build/lib/nvm3/page.js +0 -38
- package/build/lib/nvm3/page.js.map +0 -1
- package/build/lib/nvm3/utils.d.ts.map +0 -1
- package/build/lib/nvm3/utils.js.map +0 -1
- package/build/lib/nvm500/EntryParsers.d.ts.map +0 -1
- package/build/lib/nvm500/EntryParsers.js.map +0 -1
- package/build/lib/nvm500/adapter.d.ts.map +0 -1
- package/build/lib/nvm500/adapter.js.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_6x.d.ts +0 -3
- package/build/lib/nvm500/impls/Bridge_6_6x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_6x.js +0 -183
- package/build/lib/nvm500/impls/Bridge_6_6x.js.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_7x.d.ts +0 -3
- package/build/lib/nvm500/impls/Bridge_6_7x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_7x.js +0 -199
- package/build/lib/nvm500/impls/Bridge_6_7x.js.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_8x.d.ts +0 -3
- package/build/lib/nvm500/impls/Bridge_6_8x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Bridge_6_8x.js +0 -226
- package/build/lib/nvm500/impls/Bridge_6_8x.js.map +0 -1
- package/build/lib/nvm500/impls/Static_6_6x.d.ts +0 -3
- package/build/lib/nvm500/impls/Static_6_6x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Static_6_6x.js +0 -178
- package/build/lib/nvm500/impls/Static_6_6x.js.map +0 -1
- package/build/lib/nvm500/impls/Static_6_7x.d.ts +0 -3
- package/build/lib/nvm500/impls/Static_6_7x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Static_6_7x.js +0 -194
- package/build/lib/nvm500/impls/Static_6_7x.js.map +0 -1
- package/build/lib/nvm500/impls/Static_6_8x.d.ts +0 -3
- package/build/lib/nvm500/impls/Static_6_8x.d.ts.map +0 -1
- package/build/lib/nvm500/impls/Static_6_8x.js +0 -222
- package/build/lib/nvm500/impls/Static_6_8x.js.map +0 -1
- package/build/lib/nvm500/impls/index.d.ts +0 -2
- package/build/lib/nvm500/impls/index.d.ts.map +0 -1
- package/build/lib/nvm500/impls/index.js +0 -18
- package/build/lib/nvm500/impls/index.js.map +0 -1
- package/build/lib/nvm500/shared.d.ts.map +0 -1
- package/build/lib/nvm500/shared.js.map +0 -1
- package/build/nvm500/NVMParser.d.ts.map +0 -1
- package/build/nvm500/NVMParser.js +0 -3
- /package/build/{consts.d.ts → cjs/consts.d.ts} +0 -0
- /package/build/{lib → cjs/lib}/common/routeCache.d.ts +0 -0
- /package/build/{lib → cjs/lib}/common/sucUpdateEntry.d.ts +0 -0
- /package/build/{lib → cjs/lib}/nvm3/consts.d.ts +0 -0
|
@@ -0,0 +1,1306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var convert_exports = {};
|
|
30
|
+
__export(convert_exports, {
|
|
31
|
+
json500To700: () => json500To700,
|
|
32
|
+
json700To500: () => json700To500,
|
|
33
|
+
jsonToNVM: () => jsonToNVM,
|
|
34
|
+
jsonToNVM500: () => jsonToNVM500,
|
|
35
|
+
migrateNVM: () => migrateNVM,
|
|
36
|
+
nodeHasInfo: () => nodeHasInfo,
|
|
37
|
+
nvm500ToJSON: () => nvm500ToJSON,
|
|
38
|
+
nvmObjectsToJSON: () => nvmObjectsToJSON,
|
|
39
|
+
nvmToJSON: () => nvmToJSON
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(convert_exports);
|
|
42
|
+
var import_safe = require("@zwave-js/core/safe");
|
|
43
|
+
var import_safe2 = require("@zwave-js/shared/safe");
|
|
44
|
+
var import_typeguards = require("alcalzone-shared/typeguards/index.js");
|
|
45
|
+
var import_semver = __toESM(require("semver"), 1);
|
|
46
|
+
var import_consts = require("./consts.js");
|
|
47
|
+
var import_NVM3 = require("./lib/NVM3.js");
|
|
48
|
+
var import_NVM500 = require("./lib/NVM500.js");
|
|
49
|
+
var import_routeCache = require("./lib/common/routeCache.js");
|
|
50
|
+
var import_NVMMemoryIO = require("./lib/io/NVMMemoryIO.js");
|
|
51
|
+
var import_adapter = require("./lib/nvm3/adapter.js");
|
|
52
|
+
var import_consts2 = require("./lib/nvm3/consts.js");
|
|
53
|
+
var import_ApplicationNameFile = require("./lib/nvm3/files/ApplicationNameFile.js");
|
|
54
|
+
var import_files = require("./lib/nvm3/files/index.js");
|
|
55
|
+
var import_utils = require("./lib/nvm3/utils.js");
|
|
56
|
+
var import_adapter2 = require("./lib/nvm500/adapter.js");
|
|
57
|
+
var import_impls = require("./lib/nvm500/impls/index.js");
|
|
58
|
+
var import_shared = require("./lib/nvm500/shared.js");
|
|
59
|
+
function nodeHasInfo(node) {
|
|
60
|
+
return !node.isVirtual || Object.keys(node).length > 1;
|
|
61
|
+
}
|
|
62
|
+
function createEmptyPhysicalNode() {
|
|
63
|
+
return {
|
|
64
|
+
isVirtual: false,
|
|
65
|
+
isListening: false,
|
|
66
|
+
isFrequentListening: false,
|
|
67
|
+
isRouting: false,
|
|
68
|
+
supportedDataRates: [],
|
|
69
|
+
protocolVersion: 0,
|
|
70
|
+
optionalFunctionality: false,
|
|
71
|
+
nodeType: import_safe.NodeType["End Node"],
|
|
72
|
+
supportsSecurity: false,
|
|
73
|
+
supportsBeaming: false,
|
|
74
|
+
genericDeviceClass: 0,
|
|
75
|
+
specificDeviceClass: null,
|
|
76
|
+
neighbors: [],
|
|
77
|
+
sucUpdateIndex: 0,
|
|
78
|
+
appRouteLock: false,
|
|
79
|
+
routeSlaveSUC: false,
|
|
80
|
+
sucPendingUpdate: false,
|
|
81
|
+
pendingDiscovery: false,
|
|
82
|
+
lwr: null,
|
|
83
|
+
nlwr: null
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function createEmptyLRNode() {
|
|
87
|
+
return {
|
|
88
|
+
isListening: false,
|
|
89
|
+
isFrequentListening: false,
|
|
90
|
+
isRouting: false,
|
|
91
|
+
supportedDataRates: [],
|
|
92
|
+
protocolVersion: 3,
|
|
93
|
+
optionalFunctionality: false,
|
|
94
|
+
nodeType: import_safe.NodeType["End Node"],
|
|
95
|
+
supportsSecurity: true,
|
|
96
|
+
supportsBeaming: false,
|
|
97
|
+
genericDeviceClass: 0,
|
|
98
|
+
specificDeviceClass: null
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function nvmObjectsToJSON(objects) {
|
|
102
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
103
|
+
const getNode = (id) => {
|
|
104
|
+
if (!nodes.has(id))
|
|
105
|
+
nodes.set(id, createEmptyPhysicalNode());
|
|
106
|
+
return nodes.get(id);
|
|
107
|
+
};
|
|
108
|
+
const lrNodes = /* @__PURE__ */ new Map();
|
|
109
|
+
const getLRNode = (id) => {
|
|
110
|
+
if (!lrNodes.has(id))
|
|
111
|
+
lrNodes.set(id, createEmptyLRNode());
|
|
112
|
+
return lrNodes.get(id);
|
|
113
|
+
};
|
|
114
|
+
const getObject = (id) => {
|
|
115
|
+
if (typeof id === "number") {
|
|
116
|
+
return objects.get(id);
|
|
117
|
+
} else {
|
|
118
|
+
for (const [key, obj] of objects) {
|
|
119
|
+
if (id(key))
|
|
120
|
+
return obj;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const getObjectOrThrow = (id) => {
|
|
125
|
+
const ret2 = getObject(id);
|
|
126
|
+
if (ret2)
|
|
127
|
+
return ret2;
|
|
128
|
+
throw new import_safe.ZWaveError(`Object${typeof id === "number" ? ` ${(0, import_safe2.num2hex)(id)} (${id})` : ""} not found!`, import_safe.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
129
|
+
};
|
|
130
|
+
const getFileOrThrow = (id, fileVersion) => {
|
|
131
|
+
const obj = getObjectOrThrow(id);
|
|
132
|
+
return import_files.NVMFile.from(obj.key, obj.data, fileVersion);
|
|
133
|
+
};
|
|
134
|
+
const getFile = (id, fileVersion) => {
|
|
135
|
+
const obj = getObject(id);
|
|
136
|
+
if (!obj || !obj.data)
|
|
137
|
+
return void 0;
|
|
138
|
+
return import_files.NVMFile.from(obj.key, obj.data, fileVersion);
|
|
139
|
+
};
|
|
140
|
+
const protocolVersionFile = getFileOrThrow(import_files.ProtocolVersionFileID, "7.0.0");
|
|
141
|
+
const protocolFileFormat = protocolVersionFile.format;
|
|
142
|
+
const protocolVersion = `${protocolVersionFile.major}.${protocolVersionFile.minor}.${protocolVersionFile.patch}`;
|
|
143
|
+
if (protocolFileFormat > import_consts.MAX_PROTOCOL_FILE_FORMAT) {
|
|
144
|
+
throw new import_safe.ZWaveError(`Unsupported protocol file format: ${protocolFileFormat}`, import_safe.ZWaveErrorCodes.NVM_NotSupported, { protocolFileFormat });
|
|
145
|
+
}
|
|
146
|
+
const nodeIds = getFileOrThrow(import_files.ProtocolNodeListFileID, protocolVersion).nodeIds;
|
|
147
|
+
const appRouteLock = new Set(getFileOrThrow(import_files.ProtocolAppRouteLockNodeMaskFileID, protocolVersion).nodeIds);
|
|
148
|
+
const routeSlaveSUC = new Set(getFileOrThrow(import_files.ProtocolRouteSlaveSUCNodeMaskFileID, protocolVersion).nodeIds);
|
|
149
|
+
const sucPendingUpdate = new Set(getFileOrThrow(import_files.ProtocolSUCPendingUpdateNodeMaskFileID, protocolVersion).nodeIds);
|
|
150
|
+
const isVirtual = new Set(getFileOrThrow(import_files.ProtocolVirtualNodeMaskFileID, protocolVersion).nodeIds);
|
|
151
|
+
const pendingDiscovery = new Set(getFileOrThrow(import_files.ProtocolPendingDiscoveryNodeMaskFileID, protocolVersion).nodeIds);
|
|
152
|
+
const routeCacheExists = new Set(getFileOrThrow(import_files.ProtocolRouteCacheExistsNodeMaskFileID, protocolVersion).nodeIds);
|
|
153
|
+
for (const id of nodeIds) {
|
|
154
|
+
const node = getNode(id);
|
|
155
|
+
const rememberOnlyVirtual = () => {
|
|
156
|
+
nodes.set(id, {
|
|
157
|
+
isVirtual: true
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
let nodeInfo;
|
|
161
|
+
try {
|
|
162
|
+
if (protocolFileFormat === 0) {
|
|
163
|
+
const fileId = (0, import_files.nodeIdToNodeInfoFileIDV0)(id);
|
|
164
|
+
const file = getFileOrThrow(fileId, protocolVersion);
|
|
165
|
+
nodeInfo = file.nodeInfo;
|
|
166
|
+
} else {
|
|
167
|
+
const fileId = (0, import_files.nodeIdToNodeInfoFileIDV1)(id);
|
|
168
|
+
const file = getFileOrThrow(fileId, protocolVersion);
|
|
169
|
+
nodeInfo = file.nodeInfos.find((i) => i.nodeId === id);
|
|
170
|
+
}
|
|
171
|
+
} catch (e) {
|
|
172
|
+
if (e.message.includes("Object not found")) {
|
|
173
|
+
rememberOnlyVirtual();
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
throw e;
|
|
177
|
+
}
|
|
178
|
+
Object.assign(node, nodeInfo);
|
|
179
|
+
node.isVirtual = isVirtual.has(id);
|
|
180
|
+
node.appRouteLock = appRouteLock.has(id);
|
|
181
|
+
node.routeSlaveSUC = routeSlaveSUC.has(id);
|
|
182
|
+
node.sucPendingUpdate = sucPendingUpdate.has(id);
|
|
183
|
+
node.pendingDiscovery = pendingDiscovery.has(id);
|
|
184
|
+
if (routeCacheExists.has(id)) {
|
|
185
|
+
let routeCache;
|
|
186
|
+
if (protocolFileFormat === 0) {
|
|
187
|
+
const fileId = (0, import_files.nodeIdToRouteCacheFileIDV0)(id);
|
|
188
|
+
const file = getFile(fileId, protocolVersion);
|
|
189
|
+
routeCache = file?.routeCache;
|
|
190
|
+
} else {
|
|
191
|
+
const fileId = (0, import_files.nodeIdToRouteCacheFileIDV1)(id);
|
|
192
|
+
const file = getFile(fileId, protocolVersion);
|
|
193
|
+
routeCache = file?.routeCaches.find((i) => i.nodeId === id);
|
|
194
|
+
}
|
|
195
|
+
if (routeCache) {
|
|
196
|
+
node.lwr = routeCache.lwr;
|
|
197
|
+
node.nlwr = routeCache.nlwr;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
delete node.nodeId;
|
|
201
|
+
}
|
|
202
|
+
const lrNodeIds = getFile(import_files.ProtocolLRNodeListFileID, protocolVersion)?.nodeIds;
|
|
203
|
+
if (lrNodeIds) {
|
|
204
|
+
for (const id of lrNodeIds) {
|
|
205
|
+
const node = getLRNode(id);
|
|
206
|
+
const fileId = (0, import_files.nodeIdToLRNodeInfoFileIDV5)(id);
|
|
207
|
+
const file = getFileOrThrow(fileId, protocolVersion);
|
|
208
|
+
const { nodeId, ...nodeInfo } = file.nodeInfos.find((i) => i.nodeId === id);
|
|
209
|
+
Object.assign(node, nodeInfo);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const controllerInfoFile = getFileOrThrow(import_files.ControllerInfoFileID, protocolVersion);
|
|
213
|
+
let sucUpdateEntries;
|
|
214
|
+
if (protocolFileFormat < 5) {
|
|
215
|
+
sucUpdateEntries = getFileOrThrow(import_files.SUCUpdateEntriesFileIDV0, protocolVersion).updateEntries;
|
|
216
|
+
} else {
|
|
217
|
+
sucUpdateEntries = [];
|
|
218
|
+
for (let index = 0; index < import_consts.SUC_MAX_UPDATES; index += import_files.SUC_UPDATES_PER_FILE_V5) {
|
|
219
|
+
const file = getFile((0, import_files.sucUpdateIndexToSUCUpdateEntriesFileIDV5)(index), protocolVersion);
|
|
220
|
+
if (!file)
|
|
221
|
+
break;
|
|
222
|
+
sucUpdateEntries.push(...file.updateEntries);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const applicationVersionFile700 = getFile(import_files.ApplicationVersionFileID, "7.0.0");
|
|
226
|
+
const applicationVersionFile800 = getFile(import_files.ApplicationVersionFile800ID, "7.0.0");
|
|
227
|
+
const applicationVersionFile = applicationVersionFile700 ?? applicationVersionFile800;
|
|
228
|
+
if (!applicationVersionFile) {
|
|
229
|
+
throw new import_safe.ZWaveError("ApplicationVersionFile not found!", import_safe.ZWaveErrorCodes.NVM_ObjectNotFound);
|
|
230
|
+
}
|
|
231
|
+
const applicationVersion = `${applicationVersionFile.major}.${applicationVersionFile.minor}.${applicationVersionFile.patch}`;
|
|
232
|
+
const rfConfigFile = getFile(import_files.ApplicationRFConfigFileID, applicationVersion);
|
|
233
|
+
const applicationCCsFile = getFileOrThrow(import_files.ApplicationCCsFileID, applicationVersion);
|
|
234
|
+
const applicationDataFile = getFile(import_files.ApplicationDataFileID, applicationVersion);
|
|
235
|
+
const applicationTypeFile = getFileOrThrow(import_files.ApplicationTypeFileID, applicationVersion);
|
|
236
|
+
const applicationNameFile = getFile(import_ApplicationNameFile.ApplicationNameFileID, applicationVersion);
|
|
237
|
+
const preferredRepeaters = getFile(import_files.ProtocolPreferredRepeatersFileID, applicationVersion)?.nodeIds;
|
|
238
|
+
const controllerProps = [
|
|
239
|
+
"nodeId",
|
|
240
|
+
"lastNodeId",
|
|
241
|
+
"staticControllerNodeId",
|
|
242
|
+
"sucLastIndex",
|
|
243
|
+
"controllerConfiguration",
|
|
244
|
+
"sucAwarenessPushNeeded",
|
|
245
|
+
"maxNodeId",
|
|
246
|
+
"reservedId",
|
|
247
|
+
"systemState",
|
|
248
|
+
"lastNodeIdLR",
|
|
249
|
+
"maxNodeIdLR",
|
|
250
|
+
"reservedIdLR",
|
|
251
|
+
"primaryLongRangeChannelId",
|
|
252
|
+
"dcdcConfig"
|
|
253
|
+
];
|
|
254
|
+
const controller = {
|
|
255
|
+
protocolVersion,
|
|
256
|
+
applicationVersion,
|
|
257
|
+
homeId: (0, import_safe2.buffer2hex)(controllerInfoFile.homeId),
|
|
258
|
+
...(0, import_safe2.pick)(controllerInfoFile, controllerProps),
|
|
259
|
+
...(0, import_safe2.pick)(applicationTypeFile, [
|
|
260
|
+
"isListening",
|
|
261
|
+
"optionalFunctionality",
|
|
262
|
+
"genericDeviceClass",
|
|
263
|
+
"specificDeviceClass"
|
|
264
|
+
]),
|
|
265
|
+
commandClasses: (0, import_safe2.pick)(applicationCCsFile, [
|
|
266
|
+
"includedInsecurely",
|
|
267
|
+
"includedSecurelyInsecureCCs",
|
|
268
|
+
"includedSecurelySecureCCs"
|
|
269
|
+
]),
|
|
270
|
+
preferredRepeaters,
|
|
271
|
+
...rfConfigFile ? {
|
|
272
|
+
rfConfig: {
|
|
273
|
+
rfRegion: rfConfigFile.rfRegion,
|
|
274
|
+
txPower: rfConfigFile.txPower,
|
|
275
|
+
measured0dBm: rfConfigFile.measured0dBm,
|
|
276
|
+
enablePTI: rfConfigFile.enablePTI ?? null,
|
|
277
|
+
maxTXPower: rfConfigFile.maxTXPower ?? null,
|
|
278
|
+
nodeIdType: rfConfigFile.nodeIdType ?? null
|
|
279
|
+
}
|
|
280
|
+
} : {},
|
|
281
|
+
sucUpdateEntries,
|
|
282
|
+
applicationData: applicationDataFile?.applicationData.toString("hex") ?? null,
|
|
283
|
+
applicationName: applicationNameFile?.name ?? null
|
|
284
|
+
};
|
|
285
|
+
const optionalControllerProps = [
|
|
286
|
+
"sucAwarenessPushNeeded",
|
|
287
|
+
"lastNodeIdLR",
|
|
288
|
+
"maxNodeIdLR",
|
|
289
|
+
"reservedIdLR",
|
|
290
|
+
"primaryLongRangeChannelId",
|
|
291
|
+
"dcdcConfig",
|
|
292
|
+
"rfConfig",
|
|
293
|
+
"preferredRepeaters",
|
|
294
|
+
"applicationData"
|
|
295
|
+
];
|
|
296
|
+
for (const prop of optionalControllerProps) {
|
|
297
|
+
if (controller[prop] === void 0)
|
|
298
|
+
controller[prop] = null;
|
|
299
|
+
}
|
|
300
|
+
const ret = {
|
|
301
|
+
format: protocolFileFormat,
|
|
302
|
+
controller,
|
|
303
|
+
nodes: (0, import_utils.mapToObject)(nodes)
|
|
304
|
+
};
|
|
305
|
+
if (lrNodes.size > 0) {
|
|
306
|
+
ret.lrNodes = (0, import_utils.mapToObject)(lrNodes);
|
|
307
|
+
}
|
|
308
|
+
return ret;
|
|
309
|
+
}
|
|
310
|
+
function nvmJSONNodeToNodeInfo(nodeId, node) {
|
|
311
|
+
return {
|
|
312
|
+
nodeId,
|
|
313
|
+
...(0, import_safe2.pick)(node, [
|
|
314
|
+
"isListening",
|
|
315
|
+
"isFrequentListening",
|
|
316
|
+
"isRouting",
|
|
317
|
+
"supportedDataRates",
|
|
318
|
+
"protocolVersion",
|
|
319
|
+
"optionalFunctionality",
|
|
320
|
+
"nodeType",
|
|
321
|
+
"supportsSecurity",
|
|
322
|
+
"supportsBeaming",
|
|
323
|
+
"genericDeviceClass",
|
|
324
|
+
"specificDeviceClass",
|
|
325
|
+
"neighbors",
|
|
326
|
+
"sucUpdateIndex"
|
|
327
|
+
])
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function nvmJSONLRNodeToLRNodeInfo(nodeId, node) {
|
|
331
|
+
return {
|
|
332
|
+
nodeId,
|
|
333
|
+
...(0, import_safe2.pick)(node, [
|
|
334
|
+
"isListening",
|
|
335
|
+
"isFrequentListening",
|
|
336
|
+
"isRouting",
|
|
337
|
+
"supportedDataRates",
|
|
338
|
+
"protocolVersion",
|
|
339
|
+
"optionalFunctionality",
|
|
340
|
+
"nodeType",
|
|
341
|
+
"supportsSecurity",
|
|
342
|
+
"supportsBeaming",
|
|
343
|
+
"genericDeviceClass",
|
|
344
|
+
"specificDeviceClass"
|
|
345
|
+
])
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function nvmJSONControllerToFileOptions(ctrlr) {
|
|
349
|
+
const ret = {
|
|
350
|
+
homeId: import_safe2.Bytes.from(ctrlr.homeId.replace(/^0x/, ""), "hex"),
|
|
351
|
+
nodeId: ctrlr.nodeId,
|
|
352
|
+
lastNodeId: ctrlr.lastNodeId,
|
|
353
|
+
staticControllerNodeId: ctrlr.staticControllerNodeId,
|
|
354
|
+
sucLastIndex: ctrlr.sucLastIndex,
|
|
355
|
+
controllerConfiguration: ctrlr.controllerConfiguration,
|
|
356
|
+
maxNodeId: ctrlr.maxNodeId,
|
|
357
|
+
reservedId: ctrlr.reservedId,
|
|
358
|
+
systemState: ctrlr.systemState
|
|
359
|
+
};
|
|
360
|
+
if (ctrlr.sucAwarenessPushNeeded != void 0) {
|
|
361
|
+
ret.sucAwarenessPushNeeded = ctrlr.sucAwarenessPushNeeded;
|
|
362
|
+
} else {
|
|
363
|
+
Object.assign(ret, (0, import_safe.stripUndefined)((0, import_safe2.pick)(ctrlr, [
|
|
364
|
+
"sucAwarenessPushNeeded",
|
|
365
|
+
"lastNodeIdLR",
|
|
366
|
+
"maxNodeIdLR",
|
|
367
|
+
"reservedIdLR",
|
|
368
|
+
"primaryLongRangeChannelId",
|
|
369
|
+
"dcdcConfig"
|
|
370
|
+
])));
|
|
371
|
+
}
|
|
372
|
+
return ret;
|
|
373
|
+
}
|
|
374
|
+
async function nvmToJSON(buffer, debugLogs = false) {
|
|
375
|
+
const io = new import_NVMMemoryIO.NVMMemoryIO(buffer);
|
|
376
|
+
const nvm3 = new import_NVM3.NVM3(io);
|
|
377
|
+
const info = await nvm3.init();
|
|
378
|
+
const adapter = new import_adapter.NVM3Adapter(nvm3);
|
|
379
|
+
if (debugLogs) {
|
|
380
|
+
await (0, import_utils.dumpNVM)(nvm3);
|
|
381
|
+
}
|
|
382
|
+
const firstPageHeader = info.isSharedFileSystem ? info.sections.all.pages[0] : info.sections.protocol.pages[0];
|
|
383
|
+
const meta = {
|
|
384
|
+
sharedFileSystem: info.isSharedFileSystem,
|
|
385
|
+
...(0, import_safe2.pick)(firstPageHeader, [
|
|
386
|
+
"pageSize",
|
|
387
|
+
"writeSize",
|
|
388
|
+
"memoryMapped",
|
|
389
|
+
"deviceFamily"
|
|
390
|
+
])
|
|
391
|
+
};
|
|
392
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
393
|
+
const getNode = (id) => {
|
|
394
|
+
if (!nodes.has(id))
|
|
395
|
+
nodes.set(id, createEmptyPhysicalNode());
|
|
396
|
+
return nodes.get(id);
|
|
397
|
+
};
|
|
398
|
+
const lrNodes = /* @__PURE__ */ new Map();
|
|
399
|
+
const getLRNode = (id) => {
|
|
400
|
+
if (!lrNodes.has(id))
|
|
401
|
+
lrNodes.set(id, createEmptyLRNode());
|
|
402
|
+
return lrNodes.get(id);
|
|
403
|
+
};
|
|
404
|
+
const protocolFileFormat = await adapter.get({
|
|
405
|
+
domain: "controller",
|
|
406
|
+
type: "protocolFileFormat"
|
|
407
|
+
}, true);
|
|
408
|
+
if (protocolFileFormat > import_consts.MAX_PROTOCOL_FILE_FORMAT) {
|
|
409
|
+
throw new import_safe.ZWaveError(`Unsupported protocol file format: ${protocolFileFormat}`, import_safe.ZWaveErrorCodes.NVM_NotSupported, { protocolFileFormat });
|
|
410
|
+
}
|
|
411
|
+
const protocolVersion = await adapter.get({
|
|
412
|
+
domain: "controller",
|
|
413
|
+
type: "protocolVersion"
|
|
414
|
+
}, true);
|
|
415
|
+
const appRouteLock = new Set(await adapter.get({
|
|
416
|
+
domain: "controller",
|
|
417
|
+
type: "appRouteLock"
|
|
418
|
+
}, true));
|
|
419
|
+
const routeSlaveSUC = new Set(await adapter.get({
|
|
420
|
+
domain: "controller",
|
|
421
|
+
type: "routeSlaveSUC"
|
|
422
|
+
}, true));
|
|
423
|
+
const sucPendingUpdate = new Set(await adapter.get({
|
|
424
|
+
domain: "controller",
|
|
425
|
+
type: "sucPendingUpdate"
|
|
426
|
+
}, true));
|
|
427
|
+
const virtualNodeIds = new Set(await adapter.get({
|
|
428
|
+
domain: "controller",
|
|
429
|
+
type: "virtualNodeIds"
|
|
430
|
+
}, true));
|
|
431
|
+
const pendingDiscovery = new Set(await adapter.get({
|
|
432
|
+
domain: "controller",
|
|
433
|
+
type: "pendingDiscovery"
|
|
434
|
+
}, true));
|
|
435
|
+
const nodeIds = await adapter.get({
|
|
436
|
+
domain: "controller",
|
|
437
|
+
type: "nodeIds"
|
|
438
|
+
}, true);
|
|
439
|
+
for (const id of nodeIds) {
|
|
440
|
+
const node = getNode(id);
|
|
441
|
+
const nodeInfo = await adapter.get({
|
|
442
|
+
domain: "node",
|
|
443
|
+
nodeId: id,
|
|
444
|
+
type: "info"
|
|
445
|
+
}, true);
|
|
446
|
+
Object.assign(node, nodeInfo);
|
|
447
|
+
node.isVirtual = virtualNodeIds.has(id);
|
|
448
|
+
node.appRouteLock = appRouteLock.has(id);
|
|
449
|
+
node.routeSlaveSUC = routeSlaveSUC.has(id);
|
|
450
|
+
node.sucPendingUpdate = sucPendingUpdate.has(id);
|
|
451
|
+
node.pendingDiscovery = pendingDiscovery.has(id);
|
|
452
|
+
const routes = await adapter.get({
|
|
453
|
+
domain: "node",
|
|
454
|
+
nodeId: id,
|
|
455
|
+
type: "routes"
|
|
456
|
+
});
|
|
457
|
+
if (routes) {
|
|
458
|
+
node.lwr = routes.lwr;
|
|
459
|
+
node.nlwr = routes.nlwr;
|
|
460
|
+
}
|
|
461
|
+
delete node.nodeId;
|
|
462
|
+
}
|
|
463
|
+
const lrNodeIds = await adapter.get({
|
|
464
|
+
domain: "controller",
|
|
465
|
+
type: "lrNodeIds"
|
|
466
|
+
});
|
|
467
|
+
if (lrNodeIds) {
|
|
468
|
+
for (const id of lrNodeIds) {
|
|
469
|
+
const node = getLRNode(id);
|
|
470
|
+
const nodeInfo = await adapter.get({
|
|
471
|
+
domain: "lrnode",
|
|
472
|
+
nodeId: id,
|
|
473
|
+
type: "info"
|
|
474
|
+
}, true);
|
|
475
|
+
Object.assign(node, nodeInfo);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
const sucUpdateEntries = await adapter.get({
|
|
479
|
+
domain: "controller",
|
|
480
|
+
type: "sucUpdateEntries"
|
|
481
|
+
}, true);
|
|
482
|
+
const applicationVersion = await adapter.get({
|
|
483
|
+
domain: "controller",
|
|
484
|
+
type: "applicationVersion"
|
|
485
|
+
}, true);
|
|
486
|
+
const applicationFileFormat = await adapter.get({
|
|
487
|
+
domain: "controller",
|
|
488
|
+
type: "applicationFileFormat"
|
|
489
|
+
}, true);
|
|
490
|
+
const applicationData = await adapter.get({
|
|
491
|
+
domain: "controller",
|
|
492
|
+
type: "applicationData"
|
|
493
|
+
});
|
|
494
|
+
const applicationName = await adapter.get({
|
|
495
|
+
domain: "controller",
|
|
496
|
+
type: "applicationName"
|
|
497
|
+
});
|
|
498
|
+
const preferredRepeaters = await adapter.get({
|
|
499
|
+
domain: "controller",
|
|
500
|
+
type: "preferredRepeaters"
|
|
501
|
+
});
|
|
502
|
+
const controllerInfoFile = await adapter.getFile(import_files.ControllerInfoFileID, true);
|
|
503
|
+
const rfConfigFile = await adapter.getFile(import_files.ApplicationRFConfigFileID);
|
|
504
|
+
const applicationCCsFile = await adapter.getFile(import_files.ApplicationCCsFileID, true);
|
|
505
|
+
const applicationTypeFile = await adapter.getFile(import_files.ApplicationTypeFileID, true);
|
|
506
|
+
const controller = {
|
|
507
|
+
protocolVersion,
|
|
508
|
+
applicationVersion,
|
|
509
|
+
homeId: (0, import_safe2.buffer2hex)(controllerInfoFile.homeId),
|
|
510
|
+
...(0, import_safe2.pick)(controllerInfoFile, [
|
|
511
|
+
"nodeId",
|
|
512
|
+
"lastNodeId",
|
|
513
|
+
"staticControllerNodeId",
|
|
514
|
+
"sucLastIndex",
|
|
515
|
+
"controllerConfiguration",
|
|
516
|
+
"sucAwarenessPushNeeded",
|
|
517
|
+
"maxNodeId",
|
|
518
|
+
"reservedId",
|
|
519
|
+
"systemState",
|
|
520
|
+
"lastNodeIdLR",
|
|
521
|
+
"maxNodeIdLR",
|
|
522
|
+
"reservedIdLR",
|
|
523
|
+
"primaryLongRangeChannelId",
|
|
524
|
+
"dcdcConfig"
|
|
525
|
+
]),
|
|
526
|
+
...(0, import_safe2.pick)(applicationTypeFile, [
|
|
527
|
+
"isListening",
|
|
528
|
+
"optionalFunctionality",
|
|
529
|
+
"genericDeviceClass",
|
|
530
|
+
"specificDeviceClass"
|
|
531
|
+
]),
|
|
532
|
+
commandClasses: (0, import_safe2.pick)(applicationCCsFile, [
|
|
533
|
+
"includedInsecurely",
|
|
534
|
+
"includedSecurelyInsecureCCs",
|
|
535
|
+
"includedSecurelySecureCCs"
|
|
536
|
+
]),
|
|
537
|
+
preferredRepeaters,
|
|
538
|
+
...rfConfigFile ? {
|
|
539
|
+
rfConfig: {
|
|
540
|
+
rfRegion: rfConfigFile.rfRegion,
|
|
541
|
+
txPower: rfConfigFile.txPower,
|
|
542
|
+
measured0dBm: rfConfigFile.measured0dBm,
|
|
543
|
+
enablePTI: rfConfigFile.enablePTI ?? null,
|
|
544
|
+
maxTXPower: rfConfigFile.maxTXPower ?? null,
|
|
545
|
+
nodeIdType: rfConfigFile.nodeIdType ?? null
|
|
546
|
+
}
|
|
547
|
+
} : {},
|
|
548
|
+
sucUpdateEntries,
|
|
549
|
+
applicationData: (applicationData && import_safe2.Bytes.view(applicationData).toString("hex")) ?? null,
|
|
550
|
+
applicationName: applicationName ?? null
|
|
551
|
+
};
|
|
552
|
+
const optionalControllerProps = [
|
|
553
|
+
"sucAwarenessPushNeeded",
|
|
554
|
+
"lastNodeIdLR",
|
|
555
|
+
"maxNodeIdLR",
|
|
556
|
+
"reservedIdLR",
|
|
557
|
+
"primaryLongRangeChannelId",
|
|
558
|
+
"dcdcConfig",
|
|
559
|
+
"rfConfig",
|
|
560
|
+
"preferredRepeaters",
|
|
561
|
+
"applicationData"
|
|
562
|
+
];
|
|
563
|
+
for (const prop of optionalControllerProps) {
|
|
564
|
+
if (controller[prop] === void 0)
|
|
565
|
+
controller[prop] = null;
|
|
566
|
+
}
|
|
567
|
+
const ret = {
|
|
568
|
+
format: protocolFileFormat,
|
|
569
|
+
controller,
|
|
570
|
+
nodes: (0, import_utils.mapToObject)(nodes),
|
|
571
|
+
meta
|
|
572
|
+
};
|
|
573
|
+
if (applicationFileFormat !== 0) {
|
|
574
|
+
ret.applicationFileFormat = applicationFileFormat;
|
|
575
|
+
}
|
|
576
|
+
if (lrNodes.size > 0) {
|
|
577
|
+
ret.lrNodes = (0, import_utils.mapToObject)(lrNodes);
|
|
578
|
+
}
|
|
579
|
+
return ret;
|
|
580
|
+
}
|
|
581
|
+
async function nvm500ToJSON(buffer) {
|
|
582
|
+
const io = new import_NVMMemoryIO.NVMMemoryIO(buffer);
|
|
583
|
+
const nvm = new import_NVM500.NVM500(io);
|
|
584
|
+
const info = await nvm.init();
|
|
585
|
+
const meta = {
|
|
586
|
+
library: info.library,
|
|
587
|
+
...(0, import_safe2.pick)(info.nvmDescriptor, [
|
|
588
|
+
"manufacturerID",
|
|
589
|
+
"firmwareID",
|
|
590
|
+
"productType",
|
|
591
|
+
"productID"
|
|
592
|
+
])
|
|
593
|
+
};
|
|
594
|
+
const adapter = new import_adapter2.NVM500Adapter(nvm);
|
|
595
|
+
const appRouteLock = new Set(await adapter.get({
|
|
596
|
+
domain: "controller",
|
|
597
|
+
type: "appRouteLock"
|
|
598
|
+
}, true));
|
|
599
|
+
const routeSlaveSUC = new Set(await adapter.get({
|
|
600
|
+
domain: "controller",
|
|
601
|
+
type: "routeSlaveSUC"
|
|
602
|
+
}, true));
|
|
603
|
+
const sucPendingUpdate = new Set(await adapter.get({
|
|
604
|
+
domain: "controller",
|
|
605
|
+
type: "sucPendingUpdate"
|
|
606
|
+
}, true));
|
|
607
|
+
const virtualNodeIds = new Set(await adapter.get({
|
|
608
|
+
domain: "controller",
|
|
609
|
+
type: "virtualNodeIds"
|
|
610
|
+
}) ?? []);
|
|
611
|
+
const pendingDiscovery = new Set(await adapter.get({
|
|
612
|
+
domain: "controller",
|
|
613
|
+
type: "pendingDiscovery"
|
|
614
|
+
}, true));
|
|
615
|
+
const nodes = {};
|
|
616
|
+
for (let nodeId = 1; nodeId <= import_safe.MAX_NODES; nodeId++) {
|
|
617
|
+
const nodeInfo = await adapter.get({
|
|
618
|
+
domain: "node",
|
|
619
|
+
nodeId,
|
|
620
|
+
type: "info"
|
|
621
|
+
});
|
|
622
|
+
const isVirtual = virtualNodeIds.has(nodeId);
|
|
623
|
+
if (!nodeInfo) {
|
|
624
|
+
if (isVirtual) {
|
|
625
|
+
nodes[nodeId] = { isVirtual: true };
|
|
626
|
+
}
|
|
627
|
+
continue;
|
|
628
|
+
}
|
|
629
|
+
const routes = await adapter.get({
|
|
630
|
+
domain: "node",
|
|
631
|
+
nodeId,
|
|
632
|
+
type: "routes"
|
|
633
|
+
});
|
|
634
|
+
delete nodeInfo.nodeId;
|
|
635
|
+
nodes[nodeId] = {
|
|
636
|
+
...nodeInfo,
|
|
637
|
+
specificDeviceClass: nodeInfo.specificDeviceClass ?? null,
|
|
638
|
+
isVirtual,
|
|
639
|
+
appRouteLock: appRouteLock.has(nodeId),
|
|
640
|
+
routeSlaveSUC: routeSlaveSUC.has(nodeId),
|
|
641
|
+
sucPendingUpdate: sucPendingUpdate.has(nodeId),
|
|
642
|
+
pendingDiscovery: pendingDiscovery.has(nodeId),
|
|
643
|
+
lwr: routes?.lwr ?? null,
|
|
644
|
+
nlwr: routes?.nlwr ?? null
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
const ownNodeId = await adapter.get({
|
|
648
|
+
domain: "controller",
|
|
649
|
+
type: "nodeId"
|
|
650
|
+
}, true);
|
|
651
|
+
const ownHomeId = await adapter.get({
|
|
652
|
+
domain: "controller",
|
|
653
|
+
type: "homeId"
|
|
654
|
+
}, true);
|
|
655
|
+
let learnedHomeId = await adapter.get({
|
|
656
|
+
domain: "controller",
|
|
657
|
+
type: "learnedHomeId"
|
|
658
|
+
});
|
|
659
|
+
if (learnedHomeId?.length === 4 && learnedHomeId.every((b) => b === 0)) {
|
|
660
|
+
learnedHomeId = void 0;
|
|
661
|
+
}
|
|
662
|
+
const lastNodeId = await adapter.get({
|
|
663
|
+
domain: "controller",
|
|
664
|
+
type: "lastNodeId"
|
|
665
|
+
}, true);
|
|
666
|
+
const maxNodeId = await adapter.get({
|
|
667
|
+
domain: "controller",
|
|
668
|
+
type: "maxNodeId"
|
|
669
|
+
}, true);
|
|
670
|
+
const reservedId = await adapter.get({
|
|
671
|
+
domain: "controller",
|
|
672
|
+
type: "reservedId"
|
|
673
|
+
}, true);
|
|
674
|
+
const staticControllerNodeId = await adapter.get({
|
|
675
|
+
domain: "controller",
|
|
676
|
+
type: "staticControllerNodeId"
|
|
677
|
+
}, true);
|
|
678
|
+
const sucLastIndex = await adapter.get({
|
|
679
|
+
domain: "controller",
|
|
680
|
+
type: "sucLastIndex"
|
|
681
|
+
}, true);
|
|
682
|
+
const controllerConfiguration = await adapter.get({
|
|
683
|
+
domain: "controller",
|
|
684
|
+
type: "controllerConfiguration"
|
|
685
|
+
}, true);
|
|
686
|
+
const commandClasses = await adapter.get({
|
|
687
|
+
domain: "controller",
|
|
688
|
+
type: "commandClasses"
|
|
689
|
+
}, true);
|
|
690
|
+
const sucUpdateEntries = await adapter.get({
|
|
691
|
+
domain: "controller",
|
|
692
|
+
type: "sucUpdateEntries"
|
|
693
|
+
}, true);
|
|
694
|
+
const applicationData = await adapter.get({
|
|
695
|
+
domain: "controller",
|
|
696
|
+
type: "applicationData"
|
|
697
|
+
});
|
|
698
|
+
const preferredRepeaters = await adapter.get({
|
|
699
|
+
domain: "controller",
|
|
700
|
+
type: "preferredRepeaters"
|
|
701
|
+
}, true);
|
|
702
|
+
const systemState = await adapter.get({
|
|
703
|
+
domain: "controller",
|
|
704
|
+
type: "systemState"
|
|
705
|
+
}, true);
|
|
706
|
+
const watchdogStarted = await adapter.get({
|
|
707
|
+
domain: "controller",
|
|
708
|
+
type: "watchdogStarted"
|
|
709
|
+
}, true);
|
|
710
|
+
const powerLevelNormal = await adapter.get({
|
|
711
|
+
domain: "controller",
|
|
712
|
+
type: "powerLevelNormal"
|
|
713
|
+
}, true);
|
|
714
|
+
const powerLevelLow = await adapter.get({
|
|
715
|
+
domain: "controller",
|
|
716
|
+
type: "powerLevelLow"
|
|
717
|
+
}, true);
|
|
718
|
+
const powerMode = await adapter.get({
|
|
719
|
+
domain: "controller",
|
|
720
|
+
type: "powerMode"
|
|
721
|
+
}, true);
|
|
722
|
+
const powerModeExtintEnable = await adapter.get({
|
|
723
|
+
domain: "controller",
|
|
724
|
+
type: "powerModeExtintEnable"
|
|
725
|
+
}, true);
|
|
726
|
+
const powerModeWutTimeout = await adapter.get({
|
|
727
|
+
domain: "controller",
|
|
728
|
+
type: "powerModeWutTimeout"
|
|
729
|
+
}, true);
|
|
730
|
+
const controller = {
|
|
731
|
+
protocolVersion: info.nvmDescriptor.protocolVersion,
|
|
732
|
+
applicationVersion: info.nvmDescriptor.firmwareVersion,
|
|
733
|
+
ownHomeId: (0, import_safe2.buffer2hex)(ownHomeId),
|
|
734
|
+
learnedHomeId: learnedHomeId ? (0, import_safe2.buffer2hex)(learnedHomeId) : null,
|
|
735
|
+
nodeId: ownNodeId,
|
|
736
|
+
lastNodeId,
|
|
737
|
+
staticControllerNodeId,
|
|
738
|
+
sucLastIndex,
|
|
739
|
+
controllerConfiguration,
|
|
740
|
+
sucUpdateEntries,
|
|
741
|
+
maxNodeId,
|
|
742
|
+
reservedId,
|
|
743
|
+
systemState,
|
|
744
|
+
watchdogStarted,
|
|
745
|
+
rfConfig: {
|
|
746
|
+
powerLevelNormal,
|
|
747
|
+
powerLevelLow,
|
|
748
|
+
powerMode,
|
|
749
|
+
powerModeExtintEnable,
|
|
750
|
+
powerModeWutTimeout
|
|
751
|
+
},
|
|
752
|
+
preferredRepeaters,
|
|
753
|
+
commandClasses,
|
|
754
|
+
applicationData: (applicationData && import_safe2.Bytes.view(applicationData).toString("hex")) ?? null
|
|
755
|
+
};
|
|
756
|
+
return {
|
|
757
|
+
format: 500,
|
|
758
|
+
meta,
|
|
759
|
+
controller,
|
|
760
|
+
nodes
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
async function jsonToNVM(json, targetSDKVersion) {
|
|
764
|
+
const parsedVersion = import_semver.default.parse(targetSDKVersion);
|
|
765
|
+
if (!parsedVersion) {
|
|
766
|
+
throw new import_safe.ZWaveError(`Invalid SDK version: ${targetSDKVersion}`, import_safe.ZWaveErrorCodes.Argument_Invalid);
|
|
767
|
+
}
|
|
768
|
+
const sharedFileSystem = json.meta?.sharedFileSystem;
|
|
769
|
+
const nvmSize = sharedFileSystem ? import_consts2.ZWAVE_SHARED_NVM_SIZE : import_consts2.ZWAVE_APPLICATION_NVM_SIZE + import_consts2.ZWAVE_PROTOCOL_NVM_SIZE;
|
|
770
|
+
const ret = new Uint8Array(nvmSize);
|
|
771
|
+
const io = new import_NVMMemoryIO.NVMMemoryIO(ret);
|
|
772
|
+
const nvm3 = new import_NVM3.NVM3(io);
|
|
773
|
+
await nvm3.erase(json.meta);
|
|
774
|
+
const serializeFile = async (file) => {
|
|
775
|
+
const { key, data } = file.serialize();
|
|
776
|
+
await nvm3.set(key, data);
|
|
777
|
+
};
|
|
778
|
+
let targetApplicationVersion;
|
|
779
|
+
let targetProtocolVersion;
|
|
780
|
+
let targetProtocolFormat;
|
|
781
|
+
const HIGHEST_SUPPORTED_SDK_VERSION = "7.21.0";
|
|
782
|
+
if (import_semver.default.lte(targetSDKVersion, HIGHEST_SUPPORTED_SDK_VERSION)) {
|
|
783
|
+
targetApplicationVersion = import_semver.default.parse(targetSDKVersion);
|
|
784
|
+
} else {
|
|
785
|
+
targetApplicationVersion = import_semver.default.parse(HIGHEST_SUPPORTED_SDK_VERSION);
|
|
786
|
+
}
|
|
787
|
+
if (import_semver.default.gte(targetSDKVersion, "7.19.0")) {
|
|
788
|
+
targetProtocolVersion = import_semver.default.parse("7.19.0");
|
|
789
|
+
targetProtocolFormat = 5;
|
|
790
|
+
} else if (import_semver.default.gte(targetSDKVersion, "7.17.0")) {
|
|
791
|
+
targetProtocolVersion = import_semver.default.parse("7.17.0");
|
|
792
|
+
targetProtocolFormat = 4;
|
|
793
|
+
} else if (import_semver.default.gte(targetSDKVersion, "7.15.3")) {
|
|
794
|
+
targetProtocolVersion = import_semver.default.parse("7.15.3");
|
|
795
|
+
targetProtocolFormat = 3;
|
|
796
|
+
} else if (import_semver.default.gte(targetSDKVersion, "7.12.0")) {
|
|
797
|
+
targetProtocolVersion = import_semver.default.parse("7.12.0");
|
|
798
|
+
targetProtocolFormat = 2;
|
|
799
|
+
} else if (import_semver.default.gte(targetSDKVersion, "7.11.0")) {
|
|
800
|
+
targetProtocolVersion = import_semver.default.parse("7.11.0");
|
|
801
|
+
targetProtocolFormat = 1;
|
|
802
|
+
} else {
|
|
803
|
+
targetProtocolVersion = import_semver.default.parse("7.0.0");
|
|
804
|
+
targetProtocolFormat = 0;
|
|
805
|
+
}
|
|
806
|
+
const target = (0, import_safe2.cloneDeep)(json);
|
|
807
|
+
target.controller.protocolVersion = targetProtocolVersion.format();
|
|
808
|
+
target.format = targetProtocolFormat;
|
|
809
|
+
target.controller.applicationVersion = parsedVersion.format();
|
|
810
|
+
const ApplicationVersionConstructor = sharedFileSystem ? import_files.ApplicationVersionFile800 : import_files.ApplicationVersionFile;
|
|
811
|
+
const applVersionFile = new ApplicationVersionConstructor({
|
|
812
|
+
format: 0,
|
|
813
|
+
major: targetApplicationVersion.major,
|
|
814
|
+
minor: targetApplicationVersion.minor,
|
|
815
|
+
patch: targetApplicationVersion.patch,
|
|
816
|
+
fileVersion: targetProtocolVersion.format()
|
|
817
|
+
// does not matter for this file
|
|
818
|
+
});
|
|
819
|
+
await serializeFile(applVersionFile);
|
|
820
|
+
const protocolVersionFile = new import_files.ProtocolVersionFile({
|
|
821
|
+
format: targetProtocolFormat,
|
|
822
|
+
major: targetProtocolVersion.major,
|
|
823
|
+
minor: targetProtocolVersion.minor,
|
|
824
|
+
patch: targetProtocolVersion.patch,
|
|
825
|
+
fileVersion: targetProtocolVersion.format()
|
|
826
|
+
// does not matter for this file
|
|
827
|
+
});
|
|
828
|
+
await serializeFile(protocolVersionFile);
|
|
829
|
+
{
|
|
830
|
+
const { key, data } = protocolVersionFile.serialize();
|
|
831
|
+
await nvm3.set(key, data);
|
|
832
|
+
}
|
|
833
|
+
const adapter = new import_adapter.NVM3Adapter(nvm3);
|
|
834
|
+
const applTypeFile = new import_files.ApplicationTypeFile({
|
|
835
|
+
...(0, import_safe2.pick)(target.controller, [
|
|
836
|
+
"isListening",
|
|
837
|
+
"optionalFunctionality",
|
|
838
|
+
"genericDeviceClass",
|
|
839
|
+
"specificDeviceClass"
|
|
840
|
+
]),
|
|
841
|
+
fileVersion: target.controller.applicationVersion
|
|
842
|
+
});
|
|
843
|
+
adapter.setFile(applTypeFile);
|
|
844
|
+
const applCCsFile = new import_files.ApplicationCCsFile({
|
|
845
|
+
...(0, import_safe2.pick)(target.controller.commandClasses, [
|
|
846
|
+
"includedInsecurely",
|
|
847
|
+
"includedSecurelyInsecureCCs",
|
|
848
|
+
"includedSecurelySecureCCs"
|
|
849
|
+
]),
|
|
850
|
+
fileVersion: target.controller.applicationVersion
|
|
851
|
+
});
|
|
852
|
+
adapter.setFile(applCCsFile);
|
|
853
|
+
target.controller.rfConfig ??= {
|
|
854
|
+
rfRegion: import_safe.RFRegion["Default (EU)"],
|
|
855
|
+
txPower: 0,
|
|
856
|
+
measured0dBm: 3.3,
|
|
857
|
+
enablePTI: null,
|
|
858
|
+
maxTXPower: null,
|
|
859
|
+
nodeIdType: null
|
|
860
|
+
};
|
|
861
|
+
if (import_semver.default.gte(targetSDKVersion, "7.15.3")) {
|
|
862
|
+
target.controller.rfConfig.enablePTI ??= 0;
|
|
863
|
+
target.controller.rfConfig.maxTXPower ??= 14;
|
|
864
|
+
}
|
|
865
|
+
if (import_semver.default.gte(targetSDKVersion, "7.21.0")) {
|
|
866
|
+
target.controller.rfConfig.nodeIdType ??= import_safe.NodeIDType.Short;
|
|
867
|
+
}
|
|
868
|
+
const applRFConfigFile = new import_files.ApplicationRFConfigFile({
|
|
869
|
+
...(0, import_safe2.pick)(target.controller.rfConfig, [
|
|
870
|
+
"rfRegion",
|
|
871
|
+
"txPower",
|
|
872
|
+
"measured0dBm"
|
|
873
|
+
]),
|
|
874
|
+
enablePTI: target.controller.rfConfig.enablePTI ?? void 0,
|
|
875
|
+
maxTXPower: target.controller.rfConfig.maxTXPower ?? void 0,
|
|
876
|
+
nodeIdType: target.controller.rfConfig.nodeIdType ?? void 0,
|
|
877
|
+
fileVersion: target.controller.applicationVersion
|
|
878
|
+
});
|
|
879
|
+
adapter.setFile(applRFConfigFile);
|
|
880
|
+
if (target.controller.applicationData) {
|
|
881
|
+
await adapter.set({ domain: "controller", type: "applicationData" }, import_safe2.Bytes.from(target.controller.applicationData, "hex"));
|
|
882
|
+
}
|
|
883
|
+
if (target.controller.applicationName && target.meta?.sharedFileSystem) {
|
|
884
|
+
await adapter.set({ domain: "controller", type: "applicationName" }, target.controller.applicationName);
|
|
885
|
+
}
|
|
886
|
+
const nodeInfoExists = /* @__PURE__ */ new Set();
|
|
887
|
+
const lrNodeInfoExists = /* @__PURE__ */ new Set();
|
|
888
|
+
const virtualNodeIds = /* @__PURE__ */ new Set();
|
|
889
|
+
const appRouteLock = /* @__PURE__ */ new Set();
|
|
890
|
+
const routeSlaveSUC = /* @__PURE__ */ new Set();
|
|
891
|
+
const sucPendingUpdate = /* @__PURE__ */ new Set();
|
|
892
|
+
const pendingDiscovery = /* @__PURE__ */ new Set();
|
|
893
|
+
adapter.setFile(new import_files.ProtocolRouteCacheExistsNodeMaskFile({
|
|
894
|
+
nodeIds: [],
|
|
895
|
+
fileVersion: target.controller.protocolVersion
|
|
896
|
+
}));
|
|
897
|
+
for (const [id, node] of Object.entries(target.nodes)) {
|
|
898
|
+
const nodeId = parseInt(id);
|
|
899
|
+
if (!nodeHasInfo(node)) {
|
|
900
|
+
virtualNodeIds.add(nodeId);
|
|
901
|
+
continue;
|
|
902
|
+
} else {
|
|
903
|
+
nodeInfoExists.add(nodeId);
|
|
904
|
+
if (node.isVirtual)
|
|
905
|
+
virtualNodeIds.add(nodeId);
|
|
906
|
+
if (node.appRouteLock)
|
|
907
|
+
appRouteLock.add(nodeId);
|
|
908
|
+
if (node.routeSlaveSUC)
|
|
909
|
+
routeSlaveSUC.add(nodeId);
|
|
910
|
+
if (node.sucPendingUpdate)
|
|
911
|
+
sucPendingUpdate.add(nodeId);
|
|
912
|
+
if (node.pendingDiscovery)
|
|
913
|
+
pendingDiscovery.add(nodeId);
|
|
914
|
+
}
|
|
915
|
+
await adapter.set({ domain: "node", nodeId, type: "info" }, nvmJSONNodeToNodeInfo(nodeId, node));
|
|
916
|
+
if (node.lwr || node.nlwr) {
|
|
917
|
+
await adapter.set({ domain: "node", nodeId, type: "routes" }, {
|
|
918
|
+
lwr: node.lwr ?? (0, import_routeCache.getEmptyRoute)(),
|
|
919
|
+
nlwr: node.nlwr ?? (0, import_routeCache.getEmptyRoute)()
|
|
920
|
+
});
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
await adapter.set({ domain: "controller", type: "nodeIds" }, [...nodeInfoExists]);
|
|
924
|
+
if (target.lrNodes) {
|
|
925
|
+
for (const [id, node] of Object.entries(target.lrNodes)) {
|
|
926
|
+
const nodeId = parseInt(id);
|
|
927
|
+
lrNodeInfoExists.add(nodeId);
|
|
928
|
+
await adapter.set({ domain: "lrnode", nodeId, type: "info" }, nvmJSONLRNodeToLRNodeInfo(nodeId, node));
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
await adapter.set({ domain: "controller", type: "lrNodeIds" }, [...lrNodeInfoExists]);
|
|
932
|
+
if (targetProtocolFormat >= 3) {
|
|
933
|
+
target.controller.lastNodeIdLR ??= 255;
|
|
934
|
+
target.controller.maxNodeIdLR ??= 0;
|
|
935
|
+
target.controller.reservedIdLR ??= 0;
|
|
936
|
+
target.controller.primaryLongRangeChannelId ??= 0;
|
|
937
|
+
target.controller.dcdcConfig ??= 255;
|
|
938
|
+
}
|
|
939
|
+
adapter.setFile(new import_files.ControllerInfoFile(nvmJSONControllerToFileOptions(target.controller)));
|
|
940
|
+
await adapter.set({ domain: "controller", type: "appRouteLock" }, [...appRouteLock]);
|
|
941
|
+
await adapter.set({ domain: "controller", type: "routeSlaveSUC" }, [...routeSlaveSUC]);
|
|
942
|
+
await adapter.set({ domain: "controller", type: "sucPendingUpdate" }, [...sucPendingUpdate]);
|
|
943
|
+
await adapter.set({ domain: "controller", type: "virtualNodeIds" }, [...virtualNodeIds]);
|
|
944
|
+
await adapter.set({ domain: "controller", type: "pendingDiscovery" }, [...pendingDiscovery]);
|
|
945
|
+
if (target.controller.preferredRepeaters?.length) {
|
|
946
|
+
await adapter.set({ domain: "controller", type: "preferredRepeaters" }, target.controller.preferredRepeaters);
|
|
947
|
+
}
|
|
948
|
+
await adapter.set({ domain: "controller", type: "sucUpdateEntries" }, target.controller.sucUpdateEntries);
|
|
949
|
+
await adapter.commit();
|
|
950
|
+
await io.close();
|
|
951
|
+
return ret;
|
|
952
|
+
}
|
|
953
|
+
async function jsonToNVM500(json, protocolVersion) {
|
|
954
|
+
const impl = import_impls.nvm500Impls.find((p) => p.protocolVersions.includes(protocolVersion) && p.name.toLowerCase().startsWith(json.meta.library));
|
|
955
|
+
if (!impl) {
|
|
956
|
+
throw new import_safe.ZWaveError(`Did not find a matching implementation for protocol version ${protocolVersion} and library ${json.meta.library}. To convert 500-series NVMs, both the source and the target controller must be using Z-Wave SDK 6.61 or higher.`, import_safe.ZWaveErrorCodes.NVM_NotSupported);
|
|
957
|
+
}
|
|
958
|
+
const { layout, nvmSize } = (0, import_shared.resolveLayout)(impl.layout);
|
|
959
|
+
const ret = new Uint8Array(nvmSize);
|
|
960
|
+
const io = new import_NVMMemoryIO.NVMMemoryIO(ret);
|
|
961
|
+
const nvm = new import_NVM500.NVM500(io);
|
|
962
|
+
await nvm.erase({
|
|
963
|
+
layout,
|
|
964
|
+
nvmSize,
|
|
965
|
+
library: impl.library,
|
|
966
|
+
nvmDescriptor: {
|
|
967
|
+
...(0, import_safe2.pick)(json.meta, [
|
|
968
|
+
"manufacturerID",
|
|
969
|
+
"productType",
|
|
970
|
+
"productID",
|
|
971
|
+
"firmwareID"
|
|
972
|
+
]),
|
|
973
|
+
// Override the protocol version with the specified one
|
|
974
|
+
protocolVersion,
|
|
975
|
+
firmwareVersion: json.controller.applicationVersion
|
|
976
|
+
}
|
|
977
|
+
});
|
|
978
|
+
const adapter = new import_adapter2.NVM500Adapter(nvm);
|
|
979
|
+
const c = json.controller;
|
|
980
|
+
await adapter.set({ domain: "controller", type: "homeId" }, import_safe2.Bytes.from(c.ownHomeId.replace(/^0x/, ""), "hex"));
|
|
981
|
+
await adapter.set({ domain: "controller", type: "learnedHomeId" }, c.learnedHomeId ? import_safe2.Bytes.from(c.learnedHomeId.replace(/^0x/, ""), "hex") : void 0);
|
|
982
|
+
await adapter.set({ domain: "controller", type: "nodeId" }, c.nodeId);
|
|
983
|
+
await adapter.set({ domain: "controller", type: "lastNodeId" }, c.lastNodeId);
|
|
984
|
+
await adapter.set({ domain: "controller", type: "maxNodeId" }, c.maxNodeId);
|
|
985
|
+
await adapter.set({ domain: "controller", type: "reservedId" }, c.reservedId);
|
|
986
|
+
await adapter.set({ domain: "controller", type: "staticControllerNodeId" }, c.staticControllerNodeId);
|
|
987
|
+
await adapter.set({ domain: "controller", type: "controllerConfiguration" }, c.controllerConfiguration);
|
|
988
|
+
await adapter.set({ domain: "controller", type: "sucUpdateEntries" }, c.sucUpdateEntries);
|
|
989
|
+
await adapter.set({ domain: "controller", type: "sucLastIndex" }, c.sucLastIndex);
|
|
990
|
+
await adapter.set({ domain: "controller", type: "systemState" }, c.systemState);
|
|
991
|
+
await adapter.set({ domain: "controller", type: "watchdogStarted" }, c.watchdogStarted);
|
|
992
|
+
await adapter.set({ domain: "controller", type: "powerLevelNormal" }, c.rfConfig.powerLevelNormal);
|
|
993
|
+
await adapter.set({ domain: "controller", type: "powerLevelLow" }, c.rfConfig.powerLevelLow);
|
|
994
|
+
await adapter.set({ domain: "controller", type: "powerMode" }, c.rfConfig.powerMode);
|
|
995
|
+
await adapter.set({ domain: "controller", type: "powerModeExtintEnable" }, c.rfConfig.powerModeExtintEnable);
|
|
996
|
+
await adapter.set({ domain: "controller", type: "powerModeWutTimeout" }, c.rfConfig.powerModeWutTimeout);
|
|
997
|
+
await adapter.set({ domain: "controller", type: "preferredRepeaters" }, c.preferredRepeaters);
|
|
998
|
+
await adapter.set({ domain: "controller", type: "commandClasses" }, c.commandClasses);
|
|
999
|
+
if (c.applicationData) {
|
|
1000
|
+
await adapter.set({ domain: "controller", type: "applicationData" }, import_safe2.Bytes.from(c.applicationData, "hex"));
|
|
1001
|
+
}
|
|
1002
|
+
const appRouteLock = [];
|
|
1003
|
+
const routeSlaveSUC = [];
|
|
1004
|
+
const pendingDiscovery = [];
|
|
1005
|
+
const sucPendingUpdate = [];
|
|
1006
|
+
const virtualNodeIds = [];
|
|
1007
|
+
for (const [id, node] of Object.entries(json.nodes)) {
|
|
1008
|
+
const nodeId = parseInt(id);
|
|
1009
|
+
if (!nodeHasInfo(node)) {
|
|
1010
|
+
virtualNodeIds.push(nodeId);
|
|
1011
|
+
continue;
|
|
1012
|
+
}
|
|
1013
|
+
if (node.appRouteLock)
|
|
1014
|
+
appRouteLock.push(nodeId);
|
|
1015
|
+
if (node.routeSlaveSUC)
|
|
1016
|
+
routeSlaveSUC.push(nodeId);
|
|
1017
|
+
if (node.pendingDiscovery)
|
|
1018
|
+
pendingDiscovery.push(nodeId);
|
|
1019
|
+
if (node.sucPendingUpdate)
|
|
1020
|
+
sucPendingUpdate.push(nodeId);
|
|
1021
|
+
await adapter.set({ domain: "node", nodeId, type: "info" }, {
|
|
1022
|
+
nodeId,
|
|
1023
|
+
...node
|
|
1024
|
+
});
|
|
1025
|
+
if (node.lwr || node.nlwr) {
|
|
1026
|
+
await adapter.set({ domain: "node", nodeId, type: "routes" }, {
|
|
1027
|
+
lwr: node.lwr ?? void 0,
|
|
1028
|
+
nlwr: node.nlwr ?? void 0
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
await adapter.set({ domain: "controller", type: "appRouteLock" }, [...appRouteLock]);
|
|
1033
|
+
await adapter.set({ domain: "controller", type: "routeSlaveSUC" }, [...routeSlaveSUC]);
|
|
1034
|
+
await adapter.set({ domain: "controller", type: "sucPendingUpdate" }, [...sucPendingUpdate]);
|
|
1035
|
+
await adapter.set({ domain: "controller", type: "virtualNodeIds" }, [...virtualNodeIds]);
|
|
1036
|
+
await adapter.set({ domain: "controller", type: "pendingDiscovery" }, [...pendingDiscovery]);
|
|
1037
|
+
await adapter.commit();
|
|
1038
|
+
await io.close();
|
|
1039
|
+
return ret;
|
|
1040
|
+
}
|
|
1041
|
+
function json500To700(json, truncateApplicationData) {
|
|
1042
|
+
const source = (0, import_safe2.cloneDeep)(json);
|
|
1043
|
+
let controllerNode = source.nodes[source.controller.nodeId || 1];
|
|
1044
|
+
if (!nodeHasInfo(controllerNode)) {
|
|
1045
|
+
controllerNode = {
|
|
1046
|
+
isListening: true,
|
|
1047
|
+
optionalFunctionality: false,
|
|
1048
|
+
// Static PC Controller
|
|
1049
|
+
genericDeviceClass: 2,
|
|
1050
|
+
specificDeviceClass: 1
|
|
1051
|
+
};
|
|
1052
|
+
}
|
|
1053
|
+
let applicationData = null;
|
|
1054
|
+
if (source.controller.applicationData) {
|
|
1055
|
+
let raw = import_safe2.Bytes.from(source.controller.applicationData, "hex");
|
|
1056
|
+
let start = 0;
|
|
1057
|
+
while (start < raw.length && raw[start] === 0) {
|
|
1058
|
+
start++;
|
|
1059
|
+
}
|
|
1060
|
+
let end = raw.length - 1;
|
|
1061
|
+
while (end > start && raw[end] === 0) {
|
|
1062
|
+
end--;
|
|
1063
|
+
}
|
|
1064
|
+
raw = raw.subarray(start, end + 1);
|
|
1065
|
+
if (raw.length > 512) {
|
|
1066
|
+
if (!truncateApplicationData) {
|
|
1067
|
+
throw new import_safe.ZWaveError("Invalid NVM JSON: Application data would be truncated! Set truncateApplicationData to true to allow this.", import_safe.ZWaveErrorCodes.NVM_InvalidJSON);
|
|
1068
|
+
}
|
|
1069
|
+
raw = raw.subarray(0, 512);
|
|
1070
|
+
}
|
|
1071
|
+
applicationData = raw.toString("hex");
|
|
1072
|
+
}
|
|
1073
|
+
let controllerConfiguration = source.controller.controllerConfiguration;
|
|
1074
|
+
if (source.controller.controllerConfiguration === 255) {
|
|
1075
|
+
controllerConfiguration = import_safe.ControllerCapabilityFlags.SISPresent | import_safe.ControllerCapabilityFlags.WasRealPrimary | import_safe.ControllerCapabilityFlags.SUC;
|
|
1076
|
+
}
|
|
1077
|
+
let homeId;
|
|
1078
|
+
if (!!(controllerConfiguration & import_safe.ControllerCapabilityFlags.OnOtherNetwork) && source.controller.learnedHomeId && source.controller.nodeId) {
|
|
1079
|
+
homeId = source.controller.learnedHomeId;
|
|
1080
|
+
} else {
|
|
1081
|
+
homeId = source.controller.ownHomeId;
|
|
1082
|
+
controllerConfiguration &= ~import_safe.ControllerCapabilityFlags.OnOtherNetwork;
|
|
1083
|
+
if (controllerConfiguration & import_safe.ControllerCapabilityFlags.SUC) {
|
|
1084
|
+
source.controller.nodeId = source.controller.staticControllerNodeId || 1;
|
|
1085
|
+
} else {
|
|
1086
|
+
source.controller.nodeId = 1;
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
let maxNodeId = source.controller.maxNodeId;
|
|
1090
|
+
if (maxNodeId === 255)
|
|
1091
|
+
maxNodeId = source.controller.lastNodeId;
|
|
1092
|
+
let reservedId = source.controller.reservedId;
|
|
1093
|
+
if (reservedId === 255)
|
|
1094
|
+
reservedId = 0;
|
|
1095
|
+
const ret = {
|
|
1096
|
+
// Start out with format 0 (= protocol version 7.0.0), the jsonToNVM routines will do further conversion
|
|
1097
|
+
format: 0,
|
|
1098
|
+
controller: {
|
|
1099
|
+
// This will contain the original 6.x protocol version, but the jsonToNVM routines will update it
|
|
1100
|
+
protocolVersion: source.controller.protocolVersion,
|
|
1101
|
+
applicationVersion: source.controller.applicationVersion,
|
|
1102
|
+
homeId,
|
|
1103
|
+
nodeId: source.controller.nodeId,
|
|
1104
|
+
lastNodeId: source.controller.lastNodeId,
|
|
1105
|
+
staticControllerNodeId: source.controller.staticControllerNodeId,
|
|
1106
|
+
sucLastIndex: source.controller.sucLastIndex,
|
|
1107
|
+
controllerConfiguration,
|
|
1108
|
+
sucUpdateEntries: source.controller.sucUpdateEntries,
|
|
1109
|
+
maxNodeId,
|
|
1110
|
+
reservedId,
|
|
1111
|
+
systemState: source.controller.systemState,
|
|
1112
|
+
preferredRepeaters: source.controller.preferredRepeaters,
|
|
1113
|
+
// RF config exists on both series but isn't compatible
|
|
1114
|
+
isListening: controllerNode.isListening,
|
|
1115
|
+
optionalFunctionality: controllerNode.optionalFunctionality,
|
|
1116
|
+
genericDeviceClass: controllerNode.genericDeviceClass,
|
|
1117
|
+
specificDeviceClass: controllerNode.specificDeviceClass ?? 0,
|
|
1118
|
+
commandClasses: {
|
|
1119
|
+
includedInsecurely: source.controller.commandClasses,
|
|
1120
|
+
includedSecurelyInsecureCCs: [],
|
|
1121
|
+
includedSecurelySecureCCs: []
|
|
1122
|
+
},
|
|
1123
|
+
applicationData
|
|
1124
|
+
},
|
|
1125
|
+
// The node entries are actually compatible between the two JSON versions
|
|
1126
|
+
// but the types are structured differently
|
|
1127
|
+
nodes: source.nodes
|
|
1128
|
+
};
|
|
1129
|
+
return ret;
|
|
1130
|
+
}
|
|
1131
|
+
function json700To500(json) {
|
|
1132
|
+
const source = (0, import_safe2.cloneDeep)(json);
|
|
1133
|
+
let ownHomeId;
|
|
1134
|
+
let learnedHomeId = null;
|
|
1135
|
+
let nodeId;
|
|
1136
|
+
if (source.controller.controllerConfiguration & import_safe.ControllerCapabilityFlags.OnOtherNetwork) {
|
|
1137
|
+
ownHomeId = learnedHomeId = source.controller.homeId;
|
|
1138
|
+
nodeId = source.controller.nodeId;
|
|
1139
|
+
} else {
|
|
1140
|
+
ownHomeId = source.controller.homeId;
|
|
1141
|
+
nodeId = 0;
|
|
1142
|
+
}
|
|
1143
|
+
const ret = {
|
|
1144
|
+
format: 500,
|
|
1145
|
+
controller: {
|
|
1146
|
+
// This will contain the original 7.x protocol version, but the jsonToNVM routines will update it
|
|
1147
|
+
protocolVersion: source.controller.protocolVersion,
|
|
1148
|
+
applicationVersion: source.controller.applicationVersion,
|
|
1149
|
+
// The 700 series does not distinguish between own and learned home ID in NVM
|
|
1150
|
+
// We infer it from the controller configuration if we need it
|
|
1151
|
+
ownHomeId,
|
|
1152
|
+
learnedHomeId,
|
|
1153
|
+
nodeId,
|
|
1154
|
+
lastNodeId: source.controller.lastNodeId,
|
|
1155
|
+
staticControllerNodeId: source.controller.staticControllerNodeId,
|
|
1156
|
+
sucLastIndex: source.controller.sucLastIndex,
|
|
1157
|
+
controllerConfiguration: source.controller.controllerConfiguration,
|
|
1158
|
+
sucUpdateEntries: source.controller.sucUpdateEntries,
|
|
1159
|
+
maxNodeId: source.controller.maxNodeId,
|
|
1160
|
+
reservedId: source.controller.reservedId,
|
|
1161
|
+
systemState: source.controller.systemState,
|
|
1162
|
+
watchdogStarted: 0,
|
|
1163
|
+
preferredRepeaters: json.controller.preferredRepeaters ?? [],
|
|
1164
|
+
// RF config exists on both series but isn't compatible. So set the default,
|
|
1165
|
+
// it will be taken from the target NVM on restore.
|
|
1166
|
+
rfConfig: {
|
|
1167
|
+
powerLevelNormal: [255, 255, 255],
|
|
1168
|
+
powerLevelLow: [255, 255, 255],
|
|
1169
|
+
powerMode: 255,
|
|
1170
|
+
powerModeExtintEnable: 255,
|
|
1171
|
+
powerModeWutTimeout: 4294967295
|
|
1172
|
+
},
|
|
1173
|
+
commandClasses: source.controller.commandClasses.includedInsecurely,
|
|
1174
|
+
applicationData: source.controller.applicationData
|
|
1175
|
+
},
|
|
1176
|
+
// The node entries are actually compatible between the two JSON versions
|
|
1177
|
+
// just the types are structured differently
|
|
1178
|
+
nodes: source.nodes
|
|
1179
|
+
};
|
|
1180
|
+
return ret;
|
|
1181
|
+
}
|
|
1182
|
+
async function migrateNVM(sourceNVM, targetNVM) {
|
|
1183
|
+
let source;
|
|
1184
|
+
let target;
|
|
1185
|
+
let sourceProtocolFileFormat;
|
|
1186
|
+
let targetProtocolFileFormat;
|
|
1187
|
+
try {
|
|
1188
|
+
source = {
|
|
1189
|
+
type: 700,
|
|
1190
|
+
json: await nvmToJSON(sourceNVM)
|
|
1191
|
+
};
|
|
1192
|
+
sourceProtocolFileFormat = source.json.format;
|
|
1193
|
+
} catch (e) {
|
|
1194
|
+
if ((0, import_safe.isZWaveError)(e) && e.code === import_safe.ZWaveErrorCodes.NVM_InvalidFormat) {
|
|
1195
|
+
source = {
|
|
1196
|
+
type: 500,
|
|
1197
|
+
json: await nvm500ToJSON(sourceNVM)
|
|
1198
|
+
};
|
|
1199
|
+
} else if ((0, import_safe.isZWaveError)(e) && e.code === import_safe.ZWaveErrorCodes.NVM_NotSupported && (0, import_typeguards.isObject)(e.context) && typeof e.context.protocolFileFormat === "number") {
|
|
1200
|
+
source = { type: "unknown" };
|
|
1201
|
+
sourceProtocolFileFormat = e.context.protocolFileFormat;
|
|
1202
|
+
} else {
|
|
1203
|
+
source = { type: "unknown" };
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
try {
|
|
1207
|
+
target = {
|
|
1208
|
+
type: 700,
|
|
1209
|
+
json: await nvmToJSON(targetNVM)
|
|
1210
|
+
};
|
|
1211
|
+
targetProtocolFileFormat = target.json.format;
|
|
1212
|
+
} catch (e) {
|
|
1213
|
+
if ((0, import_safe.isZWaveError)(e) && e.code === import_safe.ZWaveErrorCodes.NVM_InvalidFormat) {
|
|
1214
|
+
target = {
|
|
1215
|
+
type: 500,
|
|
1216
|
+
json: await nvm500ToJSON(targetNVM)
|
|
1217
|
+
};
|
|
1218
|
+
} else if ((0, import_safe.isZWaveError)(e) && e.code === import_safe.ZWaveErrorCodes.NVM_NotSupported && source.type === 700 && (0, import_typeguards.isObject)(e.context) && typeof e.context.protocolFileFormat === "number") {
|
|
1219
|
+
target = { type: "unknown" };
|
|
1220
|
+
targetProtocolFileFormat = e.context.protocolFileFormat;
|
|
1221
|
+
} else {
|
|
1222
|
+
target = { type: "unknown" };
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
if (target.type === "unknown" && targetProtocolFileFormat && targetProtocolFileFormat > import_consts.MAX_PROTOCOL_FILE_FORMAT && sourceProtocolFileFormat && sourceProtocolFileFormat <= targetProtocolFileFormat && sourceNVM.length === targetNVM.length) {
|
|
1226
|
+
return sourceNVM;
|
|
1227
|
+
} else if (source.type === 700 && target.type === 700 && sourceNVM.length === targetNVM.length && source.json.meta.sharedFileSystem === target.json.meta.sharedFileSystem) {
|
|
1228
|
+
const sourceProtocolVersion = source.json.controller.protocolVersion;
|
|
1229
|
+
const targetProtocolVersion = target.json.controller.protocolVersion;
|
|
1230
|
+
const sourceApplicationVersion = source.json.controller.applicationVersion;
|
|
1231
|
+
const targetApplicationVersion = target.json.controller.applicationVersion;
|
|
1232
|
+
if (import_semver.default.gte(targetProtocolVersion, "7.16.0") && import_semver.default.gte(targetProtocolVersion, sourceProtocolVersion) && import_semver.default.gte(targetApplicationVersion, targetProtocolVersion) && import_semver.default.gte(sourceApplicationVersion, sourceProtocolVersion) && import_semver.default.lt(sourceApplicationVersion, "255.0.0") && import_semver.default.lt(targetApplicationVersion, "255.0.0") && !hasShiftedAppVersion800File(source.json)) {
|
|
1233
|
+
return sourceNVM;
|
|
1234
|
+
}
|
|
1235
|
+
} else if (source.type === "unknown" && target.type !== "unknown") {
|
|
1236
|
+
throw new import_safe.ZWaveError(`The source NVM has an unsupported format, which cannot be restored on a ${target.type}-series NVM!`, import_safe.ZWaveErrorCodes.NVM_NotSupported);
|
|
1237
|
+
} else if (source.type !== "unknown" && target.type === "unknown") {
|
|
1238
|
+
throw new import_safe.ZWaveError(`The target NVM has an unsupported format, cannot restore ${source.type}-series NVM onto it!`, import_safe.ZWaveErrorCodes.NVM_NotSupported);
|
|
1239
|
+
} else if (source.type === "unknown" && target.type === "unknown") {
|
|
1240
|
+
return sourceNVM;
|
|
1241
|
+
}
|
|
1242
|
+
source = source;
|
|
1243
|
+
target = target;
|
|
1244
|
+
if (target.type === 700 && import_semver.default.gte(target.json.controller.applicationVersion, "255.0.0")) {
|
|
1245
|
+
target.json.controller.applicationVersion = target.json.controller.protocolVersion;
|
|
1246
|
+
}
|
|
1247
|
+
source.json.controller.applicationVersion = target.json.controller.applicationVersion;
|
|
1248
|
+
if (source.type === 500 && target.type === 500) {
|
|
1249
|
+
const json = {
|
|
1250
|
+
...source.json,
|
|
1251
|
+
meta: target.json.meta
|
|
1252
|
+
};
|
|
1253
|
+
json.controller.rfConfig = target.json.controller.rfConfig;
|
|
1254
|
+
return jsonToNVM500(json, target.json.controller.protocolVersion);
|
|
1255
|
+
} else if (source.type === 500 && target.type === 700) {
|
|
1256
|
+
const json = {
|
|
1257
|
+
lrNodes: {},
|
|
1258
|
+
...json500To700(source.json, true),
|
|
1259
|
+
meta: target.json.meta
|
|
1260
|
+
};
|
|
1261
|
+
json.controller.rfConfig = target.json.controller.rfConfig;
|
|
1262
|
+
return jsonToNVM(json, target.json.controller.applicationVersion);
|
|
1263
|
+
} else if (source.type === 700 && target.type === 500) {
|
|
1264
|
+
const json = {
|
|
1265
|
+
...json700To500(source.json),
|
|
1266
|
+
meta: target.json.meta
|
|
1267
|
+
};
|
|
1268
|
+
json.controller.rfConfig = target.json.controller.rfConfig;
|
|
1269
|
+
return jsonToNVM500(json, target.json.controller.protocolVersion);
|
|
1270
|
+
} else {
|
|
1271
|
+
const json = {
|
|
1272
|
+
...source.json,
|
|
1273
|
+
meta: target.json.meta
|
|
1274
|
+
};
|
|
1275
|
+
return jsonToNVM(json, target.json.controller.applicationVersion);
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
function hasShiftedAppVersion800File(json) {
|
|
1279
|
+
if (!json.meta.sharedFileSystem)
|
|
1280
|
+
return false;
|
|
1281
|
+
const protocolVersion = import_semver.default.parse(json.controller.protocolVersion);
|
|
1282
|
+
if (!protocolVersion)
|
|
1283
|
+
return false;
|
|
1284
|
+
const applicationVersion = import_semver.default.parse(json.controller.applicationVersion);
|
|
1285
|
+
if (!applicationVersion)
|
|
1286
|
+
return false;
|
|
1287
|
+
if (json.applicationFileFormat !== protocolVersion.major)
|
|
1288
|
+
return false;
|
|
1289
|
+
if (Math.abs(applicationVersion.major - protocolVersion.minor) > 3) {
|
|
1290
|
+
return false;
|
|
1291
|
+
}
|
|
1292
|
+
return true;
|
|
1293
|
+
}
|
|
1294
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1295
|
+
0 && (module.exports = {
|
|
1296
|
+
json500To700,
|
|
1297
|
+
json700To500,
|
|
1298
|
+
jsonToNVM,
|
|
1299
|
+
jsonToNVM500,
|
|
1300
|
+
migrateNVM,
|
|
1301
|
+
nodeHasInfo,
|
|
1302
|
+
nvm500ToJSON,
|
|
1303
|
+
nvmObjectsToJSON,
|
|
1304
|
+
nvmToJSON
|
|
1305
|
+
});
|
|
1306
|
+
//# sourceMappingURL=convert.js.map
|