@zwave-js/nvmedit 15.13.0 → 15.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/lib/NVM3.d.ts +1 -1
- package/build/cjs/lib/NVM3.js +2 -2
- package/build/cjs/lib/NVM3.js.map +2 -2
- package/build/cjs/lib/nvm3/utils.js +1 -1
- package/build/cjs/lib/nvm3/utils.js.map +2 -2
- package/build/esm/lib/NVM3.d.ts +1 -1
- package/build/esm/lib/NVM3.d.ts.map +1 -1
- package/build/esm/lib/NVM3.js +3 -3
- package/build/esm/lib/NVM3.js.map +1 -1
- package/build/esm/lib/nvm3/utils.js +1 -1
- package/build/esm/lib/nvm3/utils.js.map +1 -1
- package/package.json +1 -1
package/build/cjs/lib/NVM3.d.ts
CHANGED
|
@@ -42,7 +42,7 @@ export declare class NVM3 implements NVM<number, Uint8Array> {
|
|
|
42
42
|
private getNVMSectionForFile;
|
|
43
43
|
has(fileId: number): Promise<boolean>;
|
|
44
44
|
readObjectData(object: NVM3ObjectHeader): Promise<Uint8Array>;
|
|
45
|
-
get(fileId: number): Promise<Uint8Array | undefined>;
|
|
45
|
+
get(fileId: number, section?: NVM3SectionInfo): Promise<Uint8Array | undefined>;
|
|
46
46
|
private writeObjects;
|
|
47
47
|
set(property: number, value: Uint8Array): Promise<void>;
|
|
48
48
|
/** Writes multiple values to the NVM at once. `null` / `undefined` cause the value to be deleted */
|
package/build/cjs/lib/NVM3.js
CHANGED
|
@@ -161,9 +161,9 @@ class NVM3 {
|
|
|
161
161
|
readObjectData(object) {
|
|
162
162
|
return (0, import_utils.nvmReadBuffer)(this._io, object.offset + object.headerSize, object.fragmentSize);
|
|
163
163
|
}
|
|
164
|
-
async get(fileId) {
|
|
164
|
+
async get(fileId, section) {
|
|
165
165
|
this._info ??= await this.init();
|
|
166
|
-
|
|
166
|
+
section ??= this.getNVMSectionForFile(fileId);
|
|
167
167
|
const pages = section.pages;
|
|
168
168
|
let parts;
|
|
169
169
|
let complete = false;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/NVM3.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { type NVM, NVMAccess, type NVMIO } from \"./common/definitions.js\";\nimport {\n\tnvmReadBuffer,\n\tnvmReadUInt32LE,\n\tnvmWriteBuffer,\n} from \"./common/utils.js\";\nimport {\n\tFLASH_MAX_PAGE_SIZE_700,\n\tFLASH_MAX_PAGE_SIZE_800,\n\tFragmentType,\n\tNVM3_CODE_LARGE_SHIFT,\n\tNVM3_CODE_SMALL_SHIFT,\n\tNVM3_COUNTER_SIZE,\n\tNVM3_MAX_OBJ_SIZE_SMALL,\n\tNVM3_OBJ_FRAGTYPE_MASK,\n\tNVM3_OBJ_FRAGTYPE_SHIFT,\n\tNVM3_OBJ_HEADER_SIZE_LARGE,\n\tNVM3_OBJ_KEY_MASK,\n\tNVM3_OBJ_KEY_SHIFT,\n\tNVM3_OBJ_LARGE_LEN_MASK,\n\tNVM3_OBJ_TYPE_MASK,\n\tNVM3_PAGE_COUNTER_MASK,\n\tNVM3_PAGE_COUNTER_SIZE,\n\tNVM3_PAGE_HEADER_SIZE,\n\tNVM3_PAGE_MAGIC,\n\tObjectType,\n\tPageStatus,\n\tPageWriteSize,\n\tZWAVE_APPLICATION_NVM_SIZE,\n} from \"./nvm3/consts.js\";\nimport {\n\tApplicationVersionFile800ID,\n\ttype NVMSection,\n\tgetNVMSectionByFileID,\n} from \"./nvm3/files/index.js\";\nimport {\n\ttype NVM3Object,\n\ttype NVM3ObjectHeader,\n\tfragmentLargeObject,\n\tgetAlignedSize,\n\tgetObjectHeader,\n\tgetRequiredSpace,\n\tserializeObject,\n} from \"./nvm3/object.js\";\nimport {\n\ttype NVM3PageHeader,\n\tpageSizeFromBits,\n\tserializePageHeader,\n} from \"./nvm3/page.js\";\nimport { validateBergerCode, validateBergerCodeMulti } from \"./nvm3/utils.js\";\n\n// TODO: Possible optimizations:\n// Investigate if there is a better way to determine whether the NVM\n// uses a shared FS or not. The current implementation scans all objects\n// to find the 800 series application version file.\n// Alternatively, we could simply check if each page starts with an object header.\n// If yes, read the objects lazily when needed. If not, remember that the page is empty.\n\nexport type NVM3PageInfo = NVM3PageHeader & {\n\tobjects: NVM3ObjectHeader[];\n};\n\nexport interface NVM3SectionInfo {\n\tpages: NVM3PageInfo[];\n\t/** The index of the current page */\n\tcurrentPage: number;\n\t/** The next byte to write in the current page */\n\toffsetInPage: number;\n\t/** A map of file IDs and page indizes in which their last copy resides */\n\tobjectLocations: Map<number, number>;\n}\n\nexport type NVM3FileSystemInfo = {\n\tisSharedFileSystem: true;\n\tsections: Record<\"all\", NVM3SectionInfo>;\n} | {\n\tisSharedFileSystem: false;\n\tsections: Record<NVMSection, NVM3SectionInfo>;\n};\n\nexport interface NVM3Meta {\n\tsharedFileSystem: boolean;\n\tpageSize: number;\n\tdeviceFamily: number;\n\twriteSize: PageWriteSize;\n\tmemoryMapped: boolean;\n}\n\nexport type NVM3EraseOptions = Partial<NVM3Meta>;\n\nexport class NVM3 implements NVM<number, Uint8Array> {\n\tpublic constructor(io: NVMIO) {\n\t\tthis._io = io;\n\t}\n\n\tprivate _io: NVMIO;\n\tprivate _access: NVMAccess = NVMAccess.None;\n\n\tprivate _info: NVM3FileSystemInfo | undefined;\n\tpublic get info(): NVM3FileSystemInfo | undefined {\n\t\treturn this._info;\n\t}\n\n\tprivate async ensureReadable(): Promise<void> {\n\t\tif (\n\t\t\tthis._access === NVMAccess.Read\n\t\t\t|| this._access === NVMAccess.ReadWrite\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._access === NVMAccess.Write) {\n\t\t\tawait this._io.close();\n\t\t}\n\t\tthis._access = await this._io.open(NVMAccess.Read);\n\t}\n\n\tprivate async ensureWritable(): Promise<void> {\n\t\tif (\n\t\t\tthis._access === NVMAccess.Write\n\t\t\t|| this._access === NVMAccess.ReadWrite\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._access === NVMAccess.Read) {\n\t\t\tawait this._io.close();\n\t\t}\n\t\tthis._access = await this._io.open(NVMAccess.Write);\n\t}\n\n\tpublic async init(): Promise<NVM3FileSystemInfo> {\n\t\tawait this.ensureReadable();\n\n\t\tlet pageOffset = 0;\n\t\t// Determine NVM size, scan pages\n\t\tconst pages: NVM3PageInfo[] = [];\n\t\tlet isSharedFileSystem = false;\n\t\twhile (pageOffset < this._io.size) {\n\t\t\t// console.debug(\n\t\t\t// \t`NVM3 init() - reading page header at offset ${\n\t\t\t// \t\tnum2hex(pageOffset)\n\t\t\t// \t}`,\n\t\t\t// );\n\t\t\tconst header = await readPageHeader(this._io, pageOffset);\n\t\t\tpages.push({\n\t\t\t\t...header,\n\t\t\t\tobjects: [],\n\t\t\t});\n\t\t\tpageOffset += header.pageSize;\n\t\t}\n\n\t\t// Scan each page for objects\n\t\tfor (const page of pages) {\n\t\t\t// Scan objects in this page\n\t\t\tlet objectOffset = page.offset + NVM3_PAGE_HEADER_SIZE;\n\t\t\tconst nextPageOffset = page.offset + page.pageSize;\n\t\t\twhile (objectOffset < nextPageOffset) {\n\t\t\t\t// console.debug(\n\t\t\t\t// \t`NVM3 init() - reading object header. page offset ${\n\t\t\t\t// \t\tnum2hex(page.offset)\n\t\t\t\t// \t}, object offset ${num2hex(objectOffset)}`,\n\t\t\t\t// );\n\t\t\t\tconst objectHeader = await readObjectHeader(\n\t\t\t\t\tthis._io,\n\t\t\t\t\tobjectOffset,\n\t\t\t\t);\n\t\t\t\tif (objectHeader) {\n\t\t\t\t\tpage.objects.push(objectHeader);\n\t\t\t\t\tobjectOffset += objectHeader.alignedSize;\n\n\t\t\t\t\t// Detect the 800 series shared protocol & application NVM file system\n\t\t\t\t\t// by looking for the 800 series application version file\n\t\t\t\t\tif (objectHeader.key === ApplicationVersionFile800ID) {\n\t\t\t\t\t\tisSharedFileSystem = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Reached the end of the data in this page\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// By convention, we only use the applicationPages in that case\n\t\tlet applicationPages: NVM3PageInfo[];\n\t\tlet protocolPages: NVM3PageInfo[];\n\n\t\tif (isSharedFileSystem) {\n\t\t\tapplicationPages = pages;\n\t\t\tprotocolPages = [];\n\t\t} else {\n\t\t\tapplicationPages = pages.filter(\n\t\t\t\t(p) => p.offset < ZWAVE_APPLICATION_NVM_SIZE,\n\t\t\t);\n\t\t\tprotocolPages = pages.filter(\n\t\t\t\t(p) => p.offset >= ZWAVE_APPLICATION_NVM_SIZE,\n\t\t\t);\n\t\t}\n\n\t\t// NVM3 layouts pages in a ring buffer. Pages are written from front to back, then occupied pages\n\t\t// are erased and overwritten. Pages at the start of the memory section may have an erase count that's 1 higher\n\t\t// than the pages at the end.\n\t\tconst pageInfoToSectionInfo = (\n\t\t\tpages: NVM3PageInfo[],\n\t\t): NVM3SectionInfo => {\n\t\t\t// Find the current page, which is either:\n\t\t\t// - The last page with the high erase count that contains an object\n\t\t\tconst maxEraseCount = Math.max(...pages.map((p) => p.eraseCount));\n\t\t\tlet currentPageIndex = pages.findLastIndex((p) =>\n\t\t\t\tp.eraseCount === maxEraseCount && p.objects.length > 0\n\t\t\t);\n\t\t\t// - or if there is none, the last page with the lower erase count that contains an object\n\t\t\tif (currentPageIndex === -1) {\n\t\t\t\tcurrentPageIndex = pages.findLastIndex((p) =>\n\t\t\t\t\tp.objects.length > 0\n\t\t\t\t);\n\t\t\t}\n\t\t\t// - Or if no objects exist at all, the beginning of the section\n\t\t\tif (currentPageIndex === -1) currentPageIndex = 0;\n\n\t\t\t// Find the next free byte of the current page\n\t\t\tconst currentPage = pages[currentPageIndex];\n\t\t\tlet offset = NVM3_PAGE_HEADER_SIZE;\n\t\t\tfor (const object of currentPage.objects) {\n\t\t\t\toffset += object.alignedSize;\n\t\t\t}\n\n\t\t\tconst objectLocations = new Map<number, number>();\n\t\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t\tconst page = pages[i];\n\t\t\t\tfor (const object of page.objects) {\n\t\t\t\t\tconst location = objectLocations.get(object.key);\n\t\t\t\t\tif (location == undefined) {\n\t\t\t\t\t\t// Object seen for the first time, remember the page it is in\n\t\t\t\t\t\tobjectLocations.set(object.key, i);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(object.fragmentType === FragmentType.None\n\t\t\t\t\t\t\t|| object.fragmentType === FragmentType.First)\n\t\t\t\t\t\t&& (page.eraseCount >= pages[location].eraseCount)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Object was seen before. Only remember it if it is the only\n\t\t\t\t\t\t// or first fragment and the object appears in a later location\n\t\t\t\t\t\t// of the ring buffer\n\t\t\t\t\t\tobjectLocations.set(object.key, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tpages,\n\t\t\t\toffsetInPage: offset,\n\t\t\t\tcurrentPage: currentPageIndex,\n\t\t\t\tobjectLocations,\n\t\t\t};\n\t\t};\n\n\t\tif (isSharedFileSystem) {\n\t\t\tthis._info = {\n\t\t\t\tisSharedFileSystem: true,\n\t\t\t\tsections: {\n\t\t\t\t\tall: pageInfoToSectionInfo(applicationPages),\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tthis._info = {\n\t\t\t\tisSharedFileSystem: false,\n\t\t\t\tsections: {\n\t\t\t\t\tapplication: pageInfoToSectionInfo(applicationPages),\n\t\t\t\t\tprotocol: pageInfoToSectionInfo(protocolPages),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn this._info;\n\t}\n\n\tprivate getNVMSectionForFile(fileId: number): NVM3SectionInfo {\n\t\t// Determine which ring buffer to read in\n\t\treturn this._info!.isSharedFileSystem\n\t\t\t? this._info!.sections.all\n\t\t\t: this._info!.sections[getNVMSectionByFileID(fileId)];\n\t}\n\n\tpublic async has(fileId: number): Promise<boolean> {\n\t\tthis._info ??= await this.init();\n\n\t\t// Determine which ring buffer to read in\n\t\tconst section = this.getNVMSectionForFile(fileId);\n\n\t\treturn section.objectLocations.has(fileId);\n\t}\n\n\tpublic readObjectData(object: NVM3ObjectHeader): Promise<Uint8Array> {\n\t\treturn nvmReadBuffer(\n\t\t\tthis._io,\n\t\t\tobject.offset + object.headerSize,\n\t\t\tobject.fragmentSize,\n\t\t);\n\t}\n\n\tpublic async get(fileId: number): Promise<Uint8Array | undefined> {\n\t\tthis._info ??= await this.init();\n\n\t\t// Determine which ring buffer to read in\n\t\tconst section = this.getNVMSectionForFile(fileId);\n\n\t\tconst pages = section.pages;\n\n\t\t// TODO: There should be no need for scanning, since we know the object locations after init().\n\n\t\t// Start scanning backwards through the pages ring buffer, starting with the current page\n\t\tlet parts: Uint8Array[] | undefined;\n\t\tlet complete = false;\n\t\tlet objType: ObjectType | undefined;\n\t\tconst resetFragments = () => {\n\t\t\t// if (parts?.length) {\n\t\t\t// \tconsole.debug(\"Resetting fragmented object\");\n\t\t\t// }\n\t\t\tparts = undefined;\n\t\t\tcomplete = false;\n\t\t};\n\t\tpages: for (let offset = 0; offset < pages.length; offset++) {\n\t\t\tconst index = (section.currentPage - offset + pages.length)\n\t\t\t\t% pages.length;\n\t\t\tconst page = pages[index];\n\t\t\t// console.debug(\n\t\t\t// \t`NVM3.get(${fileId}): scanning page ${index} at offset ${\n\t\t\t// \t\tnum2hex(page.offset)\n\t\t\t// \t}`,\n\t\t\t// );\n\t\t\t// Scan objects in this page, read backwards.\n\t\t\t// The last non-deleted object wins\n\t\t\tobjects: for (let j = page.objects.length - 1; j >= 0; j--) {\n\t\t\t\tconst object = page.objects[j];\n\n\t\t\t\tconst readObject = () => this.readObjectData(object);\n\n\t\t\t\tif (object.key !== fileId) {\n\t\t\t\t\t// Reset any fragmented objects when encountering a different key\n\t\t\t\t\tresetFragments();\n\t\t\t\t\tcontinue objects;\n\t\t\t\t}\n\n\t\t\t\tif (object.type === ObjectType.Deleted) {\n\t\t\t\t\t// Last action for this object was a deletion. There is no data.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (object.fragmentType === FragmentType.None) {\n\t\t\t\t\t// console.debug(\n\t\t\t\t\t// \t`NVM3.get(${fileId}): found complete object - header offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t// );\n\t\t\t\t\t// This is a complete object\n\t\t\t\t\tparts = [await readObject()];\n\t\t\t\t\tobjType = object.type;\n\t\t\t\t\tcomplete = true;\n\t\t\t\t\tbreak pages;\n\t\t\t\t} else if (object.fragmentType === FragmentType.Last) {\n\t\t\t\t\t// console.debug(\n\t\t\t\t\t// \t`NVM3.get(${fileId}): found LAST fragment - header offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t// );\n\t\t\t\t\tparts = [await readObject()];\n\t\t\t\t\tobjType = object.type;\n\t\t\t\t\tcomplete = false;\n\t\t\t\t} else if (object.fragmentType === FragmentType.Next) {\n\t\t\t\t\tif (parts?.length && objType === object.type) {\n\t\t\t\t\t\t// console.debug(\n\t\t\t\t\t\t// \t`NVM3.get(${fileId}): found NEXT fragment - header offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t\t// );\n\t\t\t\t\t\tparts.unshift(await readObject());\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This shouldn't be here\n\t\t\t\t\t\tresetFragments();\n\t\t\t\t\t}\n\t\t\t\t} else if (object.fragmentType === FragmentType.First) {\n\t\t\t\t\tif (parts?.length && objType === object.type) {\n\t\t\t\t\t\t// console.debug(\n\t\t\t\t\t\t// \t`NVM3.get(${fileId}): found FIRST fragment - header offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t\t// );\n\t\t\t\t\t\tparts.unshift(await readObject());\n\t\t\t\t\t\tcomplete = true;\n\t\t\t\t\t\tbreak pages;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This shouldn't be here\n\t\t\t\t\t\tresetFragments();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!parts?.length || !complete || objType == undefined) return;\n\n\t\treturn Bytes.concat(parts);\n\t}\n\n\tprivate async writeObjects(objects: NVM3Object[]): Promise<void> {\n\t\tconst section = this.getNVMSectionForFile(objects[0].key);\n\n\t\tlet page = section.pages[section.currentPage];\n\t\tlet remainingSpace = page.pageSize\n\t\t\t- NVM3_PAGE_HEADER_SIZE\n\t\t\t- section.offsetInPage;\n\n\t\t// TODO: See if we can avoid double writes on a page change\n\n\t\t/** Moves to the next page and erases it if necessary */\n\t\tconst nextPage = async () => {\n\t\t\tsection.currentPage = (section.currentPage + 1)\n\t\t\t\t% section.pages.length;\n\t\t\tpage = section.pages[section.currentPage];\n\n\t\t\t// Find headers of objects that need to be preserved\n\t\t\tconst toPreserve = [...section.objectLocations].filter((\n\t\t\t\t[, pageIndex],\n\t\t\t) => pageIndex === section.currentPage)\n\t\t\t\t.map(([fileID]) =>\n\t\t\t\t\tpage.objects.findLast((h) => h.key === fileID)\n\t\t\t\t)\n\t\t\t\t.filter((h) => h != undefined)\n\t\t\t\t.filter((h) => h.type !== ObjectType.Deleted);\n\t\t\t// And add the objects to the TODO list\n\t\t\tfor (const header of toPreserve) {\n\t\t\t\tconst data = await this.get(header.key);\n\t\t\t\tconsole.error(`Need to preserve object ${num2hex(header.key)}\n page index: ${section.currentPage}\n object type: ${getEnumMemberName(ObjectType, header.type)}\n data: ${data != undefined ? `${data.length} bytes` : \"(no data)\"}`);\n\t\t\t\tobjects.push({\n\t\t\t\t\tkey: header.key,\n\t\t\t\t\ttype: header.type,\n\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\tdata,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (page.objects.length > 0) {\n\t\t\t\t// The page needs to be erased\n\t\t\t\tpage.eraseCount++;\n\t\t\t\tpage.objects = [];\n\n\t\t\t\tconst pageHeaderBuffer = serializePageHeader(page);\n\t\t\t\tconst pageBuffer = new Uint8Array(page.pageSize).fill(0xff);\n\t\t\t\tpageBuffer.set(pageHeaderBuffer, 0);\n\n\t\t\t\tawait nvmWriteBuffer(this._io, page.offset, pageBuffer);\n\t\t\t}\n\n\t\t\tsection.offsetInPage = NVM3_PAGE_HEADER_SIZE;\n\t\t\tremainingSpace = page.pageSize - NVM3_PAGE_HEADER_SIZE;\n\t\t};\n\n\t\t// Go through the list of objects and write all of them to the NVM\n\t\tfor (const object of objects) {\n\t\t\tconst isLargeObject = object.type === ObjectType.DataLarge\n\t\t\t\t|| object.type === ObjectType.CounterLarge;\n\n\t\t\tlet fragments: NVM3Object[] | undefined;\n\n\t\t\tif (isLargeObject) {\n\t\t\t\t// Large objects may be fragmented\n\n\t\t\t\t// We need to start a new page, if the remaining space is not enough for\n\t\t\t\t// the object header plus additional data\n\t\t\t\tif (remainingSpace <= NVM3_OBJ_HEADER_SIZE_LARGE) {\n\t\t\t\t\tawait nextPage();\n\t\t\t\t}\n\n\t\t\t\tfragments = fragmentLargeObject(\n\t\t\t\t\tobject as any,\n\t\t\t\t\tremainingSpace,\n\t\t\t\t\tpage.pageSize - NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Small objects cannot be fragmented. If they don't fit,\n\t\t\t\t// they need to go on the next page.\n\t\t\t\tconst requiredSpace = getRequiredSpace(object);\n\t\t\t\tif (requiredSpace > remainingSpace) {\n\t\t\t\t\tawait nextPage();\n\t\t\t\t}\n\t\t\t\tfragments = [object];\n\t\t\t}\n\n\t\t\t// Write each fragment to the NVM. If there are multiple fragments,\n\t\t\t// each one but the first needs to be written at the beginning of a new page\n\t\t\tfor (let i = 0; i < fragments.length; i++) {\n\t\t\t\tif (i > 0) await nextPage();\n\t\t\t\tconst fragment = fragments[i];\n\n\t\t\t\tconst objBuffer = serializeObject(fragment);\n\t\t\t\tconst objOffset = page.offset + section.offsetInPage;\n\t\t\t\tawait this._io.write(objOffset, objBuffer);\n\t\t\t\tconst requiredSpace = getRequiredSpace(fragment);\n\t\t\t\tsection.offsetInPage += requiredSpace;\n\t\t\t\tremainingSpace -= requiredSpace;\n\n\t\t\t\t// Remember which objects exist in this page\n\t\t\t\tpage.objects.push(getObjectHeader(object, objOffset));\n\n\t\t\t\t// And remember where this object lives\n\t\t\t\tif (object.type === ObjectType.Deleted) {\n\t\t\t\t\tsection.objectLocations.delete(object.key);\n\t\t\t\t} else if (\n\t\t\t\t\tfragment.fragmentType === FragmentType.None\n\t\t\t\t\t|| fragment.fragmentType === FragmentType.First\n\t\t\t\t) {\n\t\t\t\t\tsection.objectLocations.set(\n\t\t\t\t\t\tfragment.key,\n\t\t\t\t\t\tsection.currentPage,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async set(property: number, value: Uint8Array): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\tawait this.writeObjects([{\n\t\t\tkey: property,\n\t\t\ttype: value.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t: ObjectType.DataLarge,\n\t\t\t// writeObject deals with fragmentation\n\t\t\tfragmentType: FragmentType.None,\n\t\t\tdata: value,\n\t\t}]);\n\t}\n\n\t/** Writes multiple values to the NVM at once. `null` / `undefined` cause the value to be deleted */\n\tpublic async setMany(\n\t\tvalues: [number, Uint8Array | null | undefined][],\n\t): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\t// Group objects by their NVM section\n\t\tconst objectsBySection = new Map<\n\t\t\tnumber, /* offset */\n\t\t\t[number, Uint8Array | null | undefined][]\n\t\t>();\n\t\tfor (const [key, value] of values) {\n\t\t\tconst sectionOffset =\n\t\t\t\tthis.getNVMSectionForFile(key).pages[0].offset;\n\t\t\tif (!objectsBySection.has(sectionOffset)) {\n\t\t\t\tobjectsBySection.set(sectionOffset, []);\n\t\t\t}\n\t\t\tobjectsBySection.get(sectionOffset)!.push([key, value]);\n\t\t}\n\n\t\t// And call writeObjects for each group\n\t\tfor (const objectGroups of objectsBySection.values()) {\n\t\t\tawait this.writeObjects(\n\t\t\t\tobjectGroups.map(([key, value]) => (value\n\t\t\t\t\t? {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\ttype: value.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t\t\t\t: ObjectType.DataLarge,\n\t\t\t\t\t\t// writeObject deals with fragmentation\n\t\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\t\tdata: value,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\ttype: ObjectType.Deleted,\n\t\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic async delete(property: number): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\tawait this.writeObjects([{\n\t\t\tkey: property,\n\t\t\ttype: ObjectType.Deleted,\n\t\t\tfragmentType: FragmentType.None,\n\t\t}]);\n\t}\n\n\tpublic async erase(options?: NVM3EraseOptions): Promise<void> {\n\t\tconst {\n\t\t\tdeviceFamily = 2047,\n\t\t\twriteSize = PageWriteSize.WRITE_SIZE_16,\n\t\t\tmemoryMapped = true,\n\t\t\tsharedFileSystem = false,\n\t\t} = options ?? {};\n\t\tconst maxPageSize = sharedFileSystem\n\t\t\t? FLASH_MAX_PAGE_SIZE_800\n\t\t\t: FLASH_MAX_PAGE_SIZE_700;\n\t\tconst pageSize = Math.min(\n\t\t\toptions?.pageSize ?? maxPageSize,\n\t\t\tmaxPageSize,\n\t\t);\n\n\t\t// Make sure we won't be writing incomplete pages\n\t\tif (this._io.size % pageSize !== 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. NVM size ${this._io.size} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!sharedFileSystem && ZWAVE_APPLICATION_NVM_SIZE % pageSize !== 0\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. The application NVM size ${ZWAVE_APPLICATION_NVM_SIZE} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!sharedFileSystem\n\t\t\t&& (this._io.size - ZWAVE_APPLICATION_NVM_SIZE) % pageSize !== 0\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. The protocol NVM size ${\n\t\t\t\t\tthis._io.size\n\t\t\t\t\t- ZWAVE_APPLICATION_NVM_SIZE\n\t\t\t\t} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tawait this.ensureWritable();\n\n\t\t// Create empty pages, write them to the NVM\n\t\tconst applicationPages: NVM3PageInfo[] = [];\n\t\tconst protocolPages: NVM3PageInfo[] = [];\n\n\t\tconst numPages = this._io.size / pageSize;\n\t\tfor (let i = 0; i < numPages; i++) {\n\t\t\tconst offset = i * pageSize;\n\t\t\tconst pageBuffer = new Uint8Array(pageSize).fill(0xff);\n\t\t\tconst pageHeader: NVM3PageHeader = {\n\t\t\t\toffset,\n\t\t\t\tversion: 0x01,\n\t\t\t\teraseCount: 0,\n\t\t\t\tencrypted: false,\n\t\t\t\tdeviceFamily,\n\t\t\t\tmemoryMapped,\n\t\t\t\tpageSize,\n\t\t\t\tstatus: PageStatus.OK,\n\t\t\t\twriteSize,\n\t\t\t};\n\t\t\tpageBuffer.set(serializePageHeader(pageHeader), 0);\n\t\t\tawait nvmWriteBuffer(this._io, offset, pageBuffer);\n\n\t\t\tif (sharedFileSystem || offset < ZWAVE_APPLICATION_NVM_SIZE) {\n\t\t\t\tapplicationPages.push({ ...pageHeader, objects: [] });\n\t\t\t} else {\n\t\t\t\tprotocolPages.push({ ...pageHeader, objects: [] });\n\t\t\t}\n\t\t}\n\n\t\t// Remember the pages we just created for further use\n\t\tthis._info = sharedFileSystem\n\t\t\t? {\n\t\t\t\tisSharedFileSystem: true,\n\t\t\t\tsections: {\n\t\t\t\t\tall: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: applicationPages,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {\n\t\t\t\tisSharedFileSystem: false,\n\t\t\t\tsections: {\n\t\t\t\t\tapplication: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: applicationPages,\n\t\t\t\t\t},\n\t\t\t\t\tprotocol: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: protocolPages,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nasync function readPageHeader(\n\tio: NVMIO,\n\toffset: number,\n): Promise<NVM3PageHeader> {\n\tif (offset > io.size - NVM3_PAGE_HEADER_SIZE) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Incomplete page in buffer!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst buffer = Bytes.view(\n\t\t(await io.read(offset, NVM3_PAGE_HEADER_SIZE)).buffer,\n\t);\n\n\tconst { version, eraseCount } = tryGetVersionAndEraseCount(buffer);\n\n\t// Page status\n\tconst status = buffer.readUInt32LE(12);\n\n\tconst devInfo = buffer.readUInt16LE(16);\n\tconst deviceFamily = devInfo & 0x7ff;\n\tconst writeSize = (devInfo >> 11) & 0b1;\n\tconst memoryMapped = !!((devInfo >> 12) & 0b1);\n\tlet pageSize = pageSizeFromBits((devInfo >> 13) & 0b111);\n\n\tif (pageSize > 0xffff) {\n\t\t// Some controllers have no valid info in the page size bits, resulting\n\t\t// in an impossibly large page size. To try and figure out the actual page\n\t\t// size without knowing the hardware, we scan the buffer for the next valid\n\t\t// page start.\n\t\tfor (let exponent = 0; exponent < 0b111; exponent++) {\n\t\t\tconst testPageSize = pageSizeFromBits(exponent);\n\t\t\tconst nextOffset = offset + testPageSize;\n\t\t\tif (\n\t\t\t\t// exactly end of NVM OR\n\t\t\t\tio.size === nextOffset\n\t\t\t\t// next page\n\t\t\t\t|| await isValidPageHeaderAtOffset(io, nextOffset)\n\t\t\t) {\n\t\t\t\tpageSize = testPageSize;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (pageSize > 0xffff) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Could not determine page size!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tif (io.size < offset + pageSize) {\n\t\tthrow new ZWaveError(\n\t\t\t`NVM contains incomplete page at offset ${num2hex(offset)}!`,\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst formatInfo = buffer.readUInt16LE(18);\n\tconst encrypted = !(formatInfo & 0b1);\n\n\treturn {\n\t\toffset,\n\t\tversion,\n\t\teraseCount,\n\t\tstatus,\n\t\tencrypted,\n\t\tpageSize,\n\t\twriteSize,\n\t\tmemoryMapped,\n\t\tdeviceFamily,\n\t};\n}\n\nfunction tryGetVersionAndEraseCount(\n\theader: Uint8Array,\n): { version: number; eraseCount: number } {\n\tconst buffer = Bytes.view(header);\n\tconst version = buffer.readUInt16LE(0);\n\tconst magic = buffer.readUInt16LE(2);\n\tif (magic !== NVM3_PAGE_MAGIC) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Not a valid NVM3 page!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\tif (version !== 0x01) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported NVM3 page version: ${version}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t}\n\n\t// The erase counter is saved twice, once normally, once inverted\n\tlet eraseCount = buffer.readUInt32LE(4);\n\tconst eraseCountCode = eraseCount >>> NVM3_PAGE_COUNTER_SIZE;\n\teraseCount &= NVM3_PAGE_COUNTER_MASK;\n\tvalidateBergerCode(eraseCount, eraseCountCode, NVM3_PAGE_COUNTER_SIZE);\n\n\tlet eraseCountInv = buffer.readUInt32LE(8);\n\tconst eraseCountInvCode = eraseCountInv >>> NVM3_PAGE_COUNTER_SIZE;\n\teraseCountInv &= NVM3_PAGE_COUNTER_MASK;\n\tvalidateBergerCode(\n\t\teraseCountInv,\n\t\teraseCountInvCode,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\n\tif (eraseCount !== (~eraseCountInv & NVM3_PAGE_COUNTER_MASK)) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Invalid erase count!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\treturn { version, eraseCount };\n}\n\nasync function isValidPageHeaderAtOffset(\n\tio: NVMIO,\n\toffset: number,\n): Promise<boolean> {\n\tif (offset > io.size - NVM3_PAGE_HEADER_SIZE) {\n\t\treturn false;\n\t}\n\n\tconst { buffer } = await io.read(offset, NVM3_PAGE_HEADER_SIZE);\n\n\ttry {\n\t\ttryGetVersionAndEraseCount(buffer);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function readObjectHeader(\n\tio: NVMIO,\n\toffset: number,\n): Promise<NVM3ObjectHeader | undefined> {\n\tlet headerSize = 4;\n\tconst hdr1 = await nvmReadUInt32LE(io, offset);\n\n\t// Skip over blank page areas\n\tif (hdr1 === 0xffffffff) return;\n\n\tconst key = (hdr1 >> NVM3_OBJ_KEY_SHIFT) & NVM3_OBJ_KEY_MASK;\n\tlet objType: ObjectType = hdr1 & NVM3_OBJ_TYPE_MASK;\n\tlet fragmentSize = 0;\n\tlet hdr2: number | undefined;\n\tconst isLarge = objType === ObjectType.DataLarge\n\t\t|| objType === ObjectType.CounterLarge;\n\tif (isLarge) {\n\t\thdr2 = await nvmReadUInt32LE(io, offset + 4);\n\t\theaderSize += 4;\n\t\tfragmentSize = hdr2 & NVM3_OBJ_LARGE_LEN_MASK;\n\t} else if (objType > ObjectType.DataSmall) {\n\t\t// In small objects with data, the length and object type are stored in the same value\n\t\tfragmentSize = objType - ObjectType.DataSmall;\n\t\tobjType = ObjectType.DataSmall;\n\t} else if (objType === ObjectType.CounterSmall) {\n\t\tfragmentSize = NVM3_COUNTER_SIZE;\n\t}\n\n\tconst fragmentType: FragmentType = isLarge\n\t\t? (hdr1 >>> NVM3_OBJ_FRAGTYPE_SHIFT) & NVM3_OBJ_FRAGTYPE_MASK\n\t\t: FragmentType.None;\n\n\tif (isLarge) {\n\t\tvalidateBergerCodeMulti([hdr1, hdr2!], 32 + NVM3_CODE_LARGE_SHIFT);\n\t} else {\n\t\tvalidateBergerCodeMulti([hdr1], NVM3_CODE_SMALL_SHIFT);\n\t}\n\n\tif (io.size < offset + headerSize + fragmentSize) {\n\t\tthrow new ZWaveError(\n\t\t\t`NVM contains incomplete object at offset ${num2hex(offset)}!`,\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst alignedFragmentSize = getAlignedSize(fragmentSize);\n\tconst alignedSize = headerSize + alignedFragmentSize;\n\n\treturn {\n\t\tkey,\n\t\toffset,\n\t\ttype: objType,\n\t\tfragmentType,\n\t\theaderSize,\n\t\tfragmentSize,\n\t\talignedSize,\n\t};\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { type NVM, NVMAccess, type NVMIO } from \"./common/definitions.js\";\nimport {\n\tnvmReadBuffer,\n\tnvmReadUInt32LE,\n\tnvmWriteBuffer,\n} from \"./common/utils.js\";\nimport {\n\tFLASH_MAX_PAGE_SIZE_700,\n\tFLASH_MAX_PAGE_SIZE_800,\n\tFragmentType,\n\tNVM3_CODE_LARGE_SHIFT,\n\tNVM3_CODE_SMALL_SHIFT,\n\tNVM3_COUNTER_SIZE,\n\tNVM3_MAX_OBJ_SIZE_SMALL,\n\tNVM3_OBJ_FRAGTYPE_MASK,\n\tNVM3_OBJ_FRAGTYPE_SHIFT,\n\tNVM3_OBJ_HEADER_SIZE_LARGE,\n\tNVM3_OBJ_KEY_MASK,\n\tNVM3_OBJ_KEY_SHIFT,\n\tNVM3_OBJ_LARGE_LEN_MASK,\n\tNVM3_OBJ_TYPE_MASK,\n\tNVM3_PAGE_COUNTER_MASK,\n\tNVM3_PAGE_COUNTER_SIZE,\n\tNVM3_PAGE_HEADER_SIZE,\n\tNVM3_PAGE_MAGIC,\n\tObjectType,\n\tPageStatus,\n\tPageWriteSize,\n\tZWAVE_APPLICATION_NVM_SIZE,\n} from \"./nvm3/consts.js\";\nimport {\n\tApplicationVersionFile800ID,\n\ttype NVMSection,\n\tgetNVMSectionByFileID,\n} from \"./nvm3/files/index.js\";\nimport {\n\ttype NVM3Object,\n\ttype NVM3ObjectHeader,\n\tfragmentLargeObject,\n\tgetAlignedSize,\n\tgetObjectHeader,\n\tgetRequiredSpace,\n\tserializeObject,\n} from \"./nvm3/object.js\";\nimport {\n\ttype NVM3PageHeader,\n\tpageSizeFromBits,\n\tserializePageHeader,\n} from \"./nvm3/page.js\";\nimport { validateBergerCode, validateBergerCodeMulti } from \"./nvm3/utils.js\";\n\n// TODO: Possible optimizations:\n// Investigate if there is a better way to determine whether the NVM\n// uses a shared FS or not. The current implementation scans all objects\n// to find the 800 series application version file.\n// Alternatively, we could simply check if each page starts with an object header.\n// If yes, read the objects lazily when needed. If not, remember that the page is empty.\n\nexport type NVM3PageInfo = NVM3PageHeader & {\n\tobjects: NVM3ObjectHeader[];\n};\n\nexport interface NVM3SectionInfo {\n\tpages: NVM3PageInfo[];\n\t/** The index of the current page */\n\tcurrentPage: number;\n\t/** The next byte to write in the current page */\n\toffsetInPage: number;\n\t/** A map of file IDs and page indizes in which their last copy resides */\n\tobjectLocations: Map<number, number>;\n}\n\nexport type NVM3FileSystemInfo = {\n\tisSharedFileSystem: true;\n\tsections: Record<\"all\", NVM3SectionInfo>;\n} | {\n\tisSharedFileSystem: false;\n\tsections: Record<NVMSection, NVM3SectionInfo>;\n};\n\nexport interface NVM3Meta {\n\tsharedFileSystem: boolean;\n\tpageSize: number;\n\tdeviceFamily: number;\n\twriteSize: PageWriteSize;\n\tmemoryMapped: boolean;\n}\n\nexport type NVM3EraseOptions = Partial<NVM3Meta>;\n\nexport class NVM3 implements NVM<number, Uint8Array> {\n\tpublic constructor(io: NVMIO) {\n\t\tthis._io = io;\n\t}\n\n\tprivate _io: NVMIO;\n\tprivate _access: NVMAccess = NVMAccess.None;\n\n\tprivate _info: NVM3FileSystemInfo | undefined;\n\tpublic get info(): NVM3FileSystemInfo | undefined {\n\t\treturn this._info;\n\t}\n\n\tprivate async ensureReadable(): Promise<void> {\n\t\tif (\n\t\t\tthis._access === NVMAccess.Read\n\t\t\t|| this._access === NVMAccess.ReadWrite\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._access === NVMAccess.Write) {\n\t\t\tawait this._io.close();\n\t\t}\n\t\tthis._access = await this._io.open(NVMAccess.Read);\n\t}\n\n\tprivate async ensureWritable(): Promise<void> {\n\t\tif (\n\t\t\tthis._access === NVMAccess.Write\n\t\t\t|| this._access === NVMAccess.ReadWrite\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._access === NVMAccess.Read) {\n\t\t\tawait this._io.close();\n\t\t}\n\t\tthis._access = await this._io.open(NVMAccess.Write);\n\t}\n\n\tpublic async init(): Promise<NVM3FileSystemInfo> {\n\t\tawait this.ensureReadable();\n\n\t\tlet pageOffset = 0;\n\t\t// Determine NVM size, scan pages\n\t\tconst pages: NVM3PageInfo[] = [];\n\t\tlet isSharedFileSystem = false;\n\t\twhile (pageOffset < this._io.size) {\n\t\t\t// console.debug(\n\t\t\t// \t`NVM3 init() - reading page header at offset ${\n\t\t\t// \t\tnum2hex(pageOffset)\n\t\t\t// \t}`,\n\t\t\t// );\n\t\t\tconst header = await readPageHeader(this._io, pageOffset);\n\t\t\tpages.push({\n\t\t\t\t...header,\n\t\t\t\tobjects: [],\n\t\t\t});\n\t\t\tpageOffset += header.pageSize;\n\t\t}\n\n\t\t// Scan each page for objects\n\t\tfor (const page of pages) {\n\t\t\t// Scan objects in this page\n\t\t\tlet objectOffset = page.offset + NVM3_PAGE_HEADER_SIZE;\n\t\t\tconst nextPageOffset = page.offset + page.pageSize;\n\t\t\twhile (objectOffset < nextPageOffset) {\n\t\t\t\t// console.debug(\n\t\t\t\t// \t`NVM3 init() - reading object header. page offset ${\n\t\t\t\t// \t\tnum2hex(page.offset)\n\t\t\t\t// \t}, object offset ${num2hex(objectOffset)}`,\n\t\t\t\t// );\n\t\t\t\tconst objectHeader = await readObjectHeader(\n\t\t\t\t\tthis._io,\n\t\t\t\t\tobjectOffset,\n\t\t\t\t);\n\t\t\t\tif (objectHeader) {\n\t\t\t\t\tpage.objects.push(objectHeader);\n\t\t\t\t\tobjectOffset += objectHeader.alignedSize;\n\n\t\t\t\t\t// Detect the 800 series shared protocol & application NVM file system\n\t\t\t\t\t// by looking for the 800 series application version file\n\t\t\t\t\tif (objectHeader.key === ApplicationVersionFile800ID) {\n\t\t\t\t\t\tisSharedFileSystem = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Reached the end of the data in this page\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// By convention, we only use the applicationPages in that case\n\t\tlet applicationPages: NVM3PageInfo[];\n\t\tlet protocolPages: NVM3PageInfo[];\n\n\t\tif (isSharedFileSystem) {\n\t\t\tapplicationPages = pages;\n\t\t\tprotocolPages = [];\n\t\t} else {\n\t\t\tapplicationPages = pages.filter(\n\t\t\t\t(p) => p.offset < ZWAVE_APPLICATION_NVM_SIZE,\n\t\t\t);\n\t\t\tprotocolPages = pages.filter(\n\t\t\t\t(p) => p.offset >= ZWAVE_APPLICATION_NVM_SIZE,\n\t\t\t);\n\t\t}\n\n\t\t// NVM3 layouts pages in a ring buffer. Pages are written from front to back, then occupied pages\n\t\t// are erased and overwritten. Pages at the start of the memory section may have an erase count that's 1 higher\n\t\t// than the pages at the end.\n\t\tconst pageInfoToSectionInfo = (\n\t\t\tpages: NVM3PageInfo[],\n\t\t): NVM3SectionInfo => {\n\t\t\t// Find the current page, which is either:\n\t\t\t// - The last page with the high erase count that contains an object\n\t\t\tconst maxEraseCount = Math.max(...pages.map((p) => p.eraseCount));\n\t\t\tlet currentPageIndex = pages.findLastIndex((p) =>\n\t\t\t\tp.eraseCount === maxEraseCount && p.objects.length > 0\n\t\t\t);\n\t\t\t// - or if there is none, the last page with the lower erase count that contains an object\n\t\t\tif (currentPageIndex === -1) {\n\t\t\t\tcurrentPageIndex = pages.findLastIndex((p) =>\n\t\t\t\t\tp.objects.length > 0\n\t\t\t\t);\n\t\t\t}\n\t\t\t// - Or if no objects exist at all, the beginning of the section\n\t\t\tif (currentPageIndex === -1) currentPageIndex = 0;\n\n\t\t\t// Find the next free byte of the current page\n\t\t\tconst currentPage = pages[currentPageIndex];\n\t\t\tlet offset = NVM3_PAGE_HEADER_SIZE;\n\t\t\tfor (const object of currentPage.objects) {\n\t\t\t\toffset += object.alignedSize;\n\t\t\t}\n\n\t\t\tconst objectLocations = new Map<number, number>();\n\t\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t\tconst page = pages[i];\n\t\t\t\tfor (const object of page.objects) {\n\t\t\t\t\tconst location = objectLocations.get(object.key);\n\t\t\t\t\tif (location == undefined) {\n\t\t\t\t\t\t// Object seen for the first time, remember the page it is in\n\t\t\t\t\t\tobjectLocations.set(object.key, i);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t(object.fragmentType === FragmentType.None\n\t\t\t\t\t\t\t|| object.fragmentType === FragmentType.First)\n\t\t\t\t\t\t&& (page.eraseCount >= pages[location].eraseCount)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Object was seen before. Only remember it if it is the only\n\t\t\t\t\t\t// or first fragment and the object appears in a later location\n\t\t\t\t\t\t// of the ring buffer\n\t\t\t\t\t\tobjectLocations.set(object.key, i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tpages,\n\t\t\t\toffsetInPage: offset,\n\t\t\t\tcurrentPage: currentPageIndex,\n\t\t\t\tobjectLocations,\n\t\t\t};\n\t\t};\n\n\t\tif (isSharedFileSystem) {\n\t\t\tthis._info = {\n\t\t\t\tisSharedFileSystem: true,\n\t\t\t\tsections: {\n\t\t\t\t\tall: pageInfoToSectionInfo(applicationPages),\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tthis._info = {\n\t\t\t\tisSharedFileSystem: false,\n\t\t\t\tsections: {\n\t\t\t\t\tapplication: pageInfoToSectionInfo(applicationPages),\n\t\t\t\t\tprotocol: pageInfoToSectionInfo(protocolPages),\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn this._info;\n\t}\n\n\tprivate getNVMSectionForFile(fileId: number): NVM3SectionInfo {\n\t\t// Determine which ring buffer to read in\n\t\treturn this._info!.isSharedFileSystem\n\t\t\t? this._info!.sections.all\n\t\t\t: this._info!.sections[getNVMSectionByFileID(fileId)];\n\t}\n\n\tpublic async has(fileId: number): Promise<boolean> {\n\t\tthis._info ??= await this.init();\n\n\t\t// Determine which ring buffer to read in\n\t\tconst section = this.getNVMSectionForFile(fileId);\n\n\t\treturn section.objectLocations.has(fileId);\n\t}\n\n\tpublic readObjectData(object: NVM3ObjectHeader): Promise<Uint8Array> {\n\t\treturn nvmReadBuffer(\n\t\t\tthis._io,\n\t\t\tobject.offset + object.headerSize,\n\t\t\tobject.fragmentSize,\n\t\t);\n\t}\n\n\tpublic async get(\n\t\tfileId: number,\n\t\tsection?: NVM3SectionInfo,\n\t): Promise<Uint8Array | undefined> {\n\t\tthis._info ??= await this.init();\n\n\t\t// Determine which ring buffer to read in, unless we were told to use a specific one\n\t\tsection ??= this.getNVMSectionForFile(fileId);\n\n\t\tconst pages = section.pages;\n\n\t\t// TODO: There should be no need for scanning, since we know the object locations after init().\n\n\t\t// Start scanning backwards through the pages ring buffer, starting with the current page\n\t\tlet parts: Uint8Array[] | undefined;\n\t\tlet complete = false;\n\t\tlet objType: ObjectType | undefined;\n\t\tconst resetFragments = () => {\n\t\t\t// if (parts?.length) {\n\t\t\t// \tconsole.debug(\"Resetting fragmented object\");\n\t\t\t// }\n\t\t\tparts = undefined;\n\t\t\tcomplete = false;\n\t\t};\n\t\tpages: for (let offset = 0; offset < pages.length; offset++) {\n\t\t\tconst index = (section.currentPage - offset + pages.length)\n\t\t\t\t% pages.length;\n\t\t\tconst page = pages[index];\n\t\t\t// console.debug(\n\t\t\t// \t`NVM3.get(${fileId}): scanning page ${index} at offset ${\n\t\t\t// \t\tnum2hex(page.offset)\n\t\t\t// \t}`,\n\t\t\t// );\n\t\t\t// Scan objects in this page, read backwards.\n\t\t\t// The last non-deleted object wins\n\t\t\tobjects: for (let j = page.objects.length - 1; j >= 0; j--) {\n\t\t\t\tconst object = page.objects[j];\n\n\t\t\t\tconst readObject = () => this.readObjectData(object);\n\n\t\t\t\tif (object.key !== fileId) {\n\t\t\t\t\t// Reset any fragmented objects when encountering a different key\n\t\t\t\t\tresetFragments();\n\t\t\t\t\tcontinue objects;\n\t\t\t\t}\n\n\t\t\t\tif (object.type === ObjectType.Deleted) {\n\t\t\t\t\t// Last action for this object was a deletion. There is no data.\n\t\t\t\t\treturn;\n\t\t\t\t} else if (object.fragmentType === FragmentType.None) {\n\t\t\t\t\t// console.debug(\n\t\t\t\t\t// \t`NVM3.get(${fileId}): found complete object - header offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t// );\n\t\t\t\t\t// This is a complete object\n\t\t\t\t\tparts = [await readObject()];\n\t\t\t\t\tobjType = object.type;\n\t\t\t\t\tcomplete = true;\n\t\t\t\t\tbreak pages;\n\t\t\t\t} else if (object.fragmentType === FragmentType.Last) {\n\t\t\t\t\t// console.debug(\n\t\t\t\t\t// \t`NVM3.get(${fileId}): found LAST fragment - header offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t// );\n\t\t\t\t\tparts = [await readObject()];\n\t\t\t\t\tobjType = object.type;\n\t\t\t\t\tcomplete = false;\n\t\t\t\t} else if (object.fragmentType === FragmentType.Next) {\n\t\t\t\t\tif (parts?.length && objType === object.type) {\n\t\t\t\t\t\t// console.debug(\n\t\t\t\t\t\t// \t`NVM3.get(${fileId}): found NEXT fragment - header offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t\t// );\n\t\t\t\t\t\tparts.unshift(await readObject());\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This shouldn't be here\n\t\t\t\t\t\tresetFragments();\n\t\t\t\t\t}\n\t\t\t\t} else if (object.fragmentType === FragmentType.First) {\n\t\t\t\t\tif (parts?.length && objType === object.type) {\n\t\t\t\t\t\t// console.debug(\n\t\t\t\t\t\t// \t`NVM3.get(${fileId}): found FIRST fragment - header offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset)\n\t\t\t\t\t\t// \t}, content offset ${\n\t\t\t\t\t\t// \t\tnum2hex(object.offset + object.headerSize)\n\t\t\t\t\t\t// \t}, length ${object.fragmentSize}`,\n\t\t\t\t\t\t// );\n\t\t\t\t\t\tparts.unshift(await readObject());\n\t\t\t\t\t\tcomplete = true;\n\t\t\t\t\t\tbreak pages;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This shouldn't be here\n\t\t\t\t\t\tresetFragments();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!parts?.length || !complete || objType == undefined) return;\n\n\t\treturn Bytes.concat(parts);\n\t}\n\n\tprivate async writeObjects(objects: NVM3Object[]): Promise<void> {\n\t\tconst section = this.getNVMSectionForFile(objects[0].key);\n\n\t\tlet page = section.pages[section.currentPage];\n\t\tlet remainingSpace = page.pageSize\n\t\t\t- NVM3_PAGE_HEADER_SIZE\n\t\t\t- section.offsetInPage;\n\n\t\t// TODO: See if we can avoid double writes on a page change\n\n\t\t/** Moves to the next page and erases it if necessary */\n\t\tconst nextPage = async () => {\n\t\t\tsection.currentPage = (section.currentPage + 1)\n\t\t\t\t% section.pages.length;\n\t\t\tpage = section.pages[section.currentPage];\n\n\t\t\t// Find headers of objects that need to be preserved\n\t\t\tconst toPreserve = [...section.objectLocations].filter((\n\t\t\t\t[, pageIndex],\n\t\t\t) => pageIndex === section.currentPage)\n\t\t\t\t.map(([fileID]) =>\n\t\t\t\t\tpage.objects.findLast((h) => h.key === fileID)\n\t\t\t\t)\n\t\t\t\t.filter((h) => h != undefined)\n\t\t\t\t.filter((h) => h.type !== ObjectType.Deleted);\n\t\t\t// And add the objects to the TODO list\n\t\t\tfor (const header of toPreserve) {\n\t\t\t\tconst data = await this.get(header.key);\n\t\t\t\tconsole.error(`Need to preserve object ${num2hex(header.key)}\n page index: ${section.currentPage}\n object type: ${getEnumMemberName(ObjectType, header.type)}\n data: ${data != undefined ? `${data.length} bytes` : \"(no data)\"}`);\n\t\t\t\tobjects.push({\n\t\t\t\t\tkey: header.key,\n\t\t\t\t\ttype: header.type,\n\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\tdata,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (page.objects.length > 0) {\n\t\t\t\t// The page needs to be erased\n\t\t\t\tpage.eraseCount++;\n\t\t\t\tpage.objects = [];\n\n\t\t\t\tconst pageHeaderBuffer = serializePageHeader(page);\n\t\t\t\tconst pageBuffer = new Uint8Array(page.pageSize).fill(0xff);\n\t\t\t\tpageBuffer.set(pageHeaderBuffer, 0);\n\n\t\t\t\tawait nvmWriteBuffer(this._io, page.offset, pageBuffer);\n\t\t\t}\n\n\t\t\tsection.offsetInPage = NVM3_PAGE_HEADER_SIZE;\n\t\t\tremainingSpace = page.pageSize - NVM3_PAGE_HEADER_SIZE;\n\t\t};\n\n\t\t// Go through the list of objects and write all of them to the NVM\n\t\tfor (const object of objects) {\n\t\t\tconst isLargeObject = object.type === ObjectType.DataLarge\n\t\t\t\t|| object.type === ObjectType.CounterLarge;\n\n\t\t\tlet fragments: NVM3Object[] | undefined;\n\n\t\t\tif (isLargeObject) {\n\t\t\t\t// Large objects may be fragmented\n\n\t\t\t\t// We need to start a new page, if the remaining space is not enough for\n\t\t\t\t// the object header plus additional data\n\t\t\t\tif (remainingSpace <= NVM3_OBJ_HEADER_SIZE_LARGE) {\n\t\t\t\t\tawait nextPage();\n\t\t\t\t}\n\n\t\t\t\tfragments = fragmentLargeObject(\n\t\t\t\t\tobject as any,\n\t\t\t\t\tremainingSpace,\n\t\t\t\t\tpage.pageSize - NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Small objects cannot be fragmented. If they don't fit,\n\t\t\t\t// they need to go on the next page.\n\t\t\t\tconst requiredSpace = getRequiredSpace(object);\n\t\t\t\tif (requiredSpace > remainingSpace) {\n\t\t\t\t\tawait nextPage();\n\t\t\t\t}\n\t\t\t\tfragments = [object];\n\t\t\t}\n\n\t\t\t// Write each fragment to the NVM. If there are multiple fragments,\n\t\t\t// each one but the first needs to be written at the beginning of a new page\n\t\t\tfor (let i = 0; i < fragments.length; i++) {\n\t\t\t\tif (i > 0) await nextPage();\n\t\t\t\tconst fragment = fragments[i];\n\n\t\t\t\tconst objBuffer = serializeObject(fragment);\n\t\t\t\tconst objOffset = page.offset + section.offsetInPage;\n\t\t\t\tawait this._io.write(objOffset, objBuffer);\n\t\t\t\tconst requiredSpace = getRequiredSpace(fragment);\n\t\t\t\tsection.offsetInPage += requiredSpace;\n\t\t\t\tremainingSpace -= requiredSpace;\n\n\t\t\t\t// Remember which objects exist in this page\n\t\t\t\tpage.objects.push(getObjectHeader(object, objOffset));\n\n\t\t\t\t// And remember where this object lives\n\t\t\t\tif (object.type === ObjectType.Deleted) {\n\t\t\t\t\tsection.objectLocations.delete(object.key);\n\t\t\t\t} else if (\n\t\t\t\t\tfragment.fragmentType === FragmentType.None\n\t\t\t\t\t|| fragment.fragmentType === FragmentType.First\n\t\t\t\t) {\n\t\t\t\t\tsection.objectLocations.set(\n\t\t\t\t\t\tfragment.key,\n\t\t\t\t\t\tsection.currentPage,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async set(property: number, value: Uint8Array): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\tawait this.writeObjects([{\n\t\t\tkey: property,\n\t\t\ttype: value.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t: ObjectType.DataLarge,\n\t\t\t// writeObject deals with fragmentation\n\t\t\tfragmentType: FragmentType.None,\n\t\t\tdata: value,\n\t\t}]);\n\t}\n\n\t/** Writes multiple values to the NVM at once. `null` / `undefined` cause the value to be deleted */\n\tpublic async setMany(\n\t\tvalues: [number, Uint8Array | null | undefined][],\n\t): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\t// Group objects by their NVM section\n\t\tconst objectsBySection = new Map<\n\t\t\tnumber, /* offset */\n\t\t\t[number, Uint8Array | null | undefined][]\n\t\t>();\n\t\tfor (const [key, value] of values) {\n\t\t\tconst sectionOffset =\n\t\t\t\tthis.getNVMSectionForFile(key).pages[0].offset;\n\t\t\tif (!objectsBySection.has(sectionOffset)) {\n\t\t\t\tobjectsBySection.set(sectionOffset, []);\n\t\t\t}\n\t\t\tobjectsBySection.get(sectionOffset)!.push([key, value]);\n\t\t}\n\n\t\t// And call writeObjects for each group\n\t\tfor (const objectGroups of objectsBySection.values()) {\n\t\t\tawait this.writeObjects(\n\t\t\t\tobjectGroups.map(([key, value]) => (value\n\t\t\t\t\t? {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\ttype: value.length <= NVM3_MAX_OBJ_SIZE_SMALL\n\t\t\t\t\t\t\t? ObjectType.DataSmall\n\t\t\t\t\t\t\t: ObjectType.DataLarge,\n\t\t\t\t\t\t// writeObject deals with fragmentation\n\t\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\t\tdata: value,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\ttype: ObjectType.Deleted,\n\t\t\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic async delete(property: number): Promise<void> {\n\t\tif (!this._info) await this.init();\n\t\tawait this.ensureWritable();\n\n\t\tawait this.writeObjects([{\n\t\t\tkey: property,\n\t\t\ttype: ObjectType.Deleted,\n\t\t\tfragmentType: FragmentType.None,\n\t\t}]);\n\t}\n\n\tpublic async erase(options?: NVM3EraseOptions): Promise<void> {\n\t\tconst {\n\t\t\tdeviceFamily = 2047,\n\t\t\twriteSize = PageWriteSize.WRITE_SIZE_16,\n\t\t\tmemoryMapped = true,\n\t\t\tsharedFileSystem = false,\n\t\t} = options ?? {};\n\t\tconst maxPageSize = sharedFileSystem\n\t\t\t? FLASH_MAX_PAGE_SIZE_800\n\t\t\t: FLASH_MAX_PAGE_SIZE_700;\n\t\tconst pageSize = Math.min(\n\t\t\toptions?.pageSize ?? maxPageSize,\n\t\t\tmaxPageSize,\n\t\t);\n\n\t\t// Make sure we won't be writing incomplete pages\n\t\tif (this._io.size % pageSize !== 0) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. NVM size ${this._io.size} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!sharedFileSystem && ZWAVE_APPLICATION_NVM_SIZE % pageSize !== 0\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. The application NVM size ${ZWAVE_APPLICATION_NVM_SIZE} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t} else if (\n\t\t\t!sharedFileSystem\n\t\t\t&& (this._io.size - ZWAVE_APPLICATION_NVM_SIZE) % pageSize !== 0\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Invalid page size. The protocol NVM size ${\n\t\t\t\t\tthis._io.size\n\t\t\t\t\t- ZWAVE_APPLICATION_NVM_SIZE\n\t\t\t\t} must be a multiple of the page size ${pageSize}.`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tawait this.ensureWritable();\n\n\t\t// Create empty pages, write them to the NVM\n\t\tconst applicationPages: NVM3PageInfo[] = [];\n\t\tconst protocolPages: NVM3PageInfo[] = [];\n\n\t\tconst numPages = this._io.size / pageSize;\n\t\tfor (let i = 0; i < numPages; i++) {\n\t\t\tconst offset = i * pageSize;\n\t\t\tconst pageBuffer = new Uint8Array(pageSize).fill(0xff);\n\t\t\tconst pageHeader: NVM3PageHeader = {\n\t\t\t\toffset,\n\t\t\t\tversion: 0x01,\n\t\t\t\teraseCount: 0,\n\t\t\t\tencrypted: false,\n\t\t\t\tdeviceFamily,\n\t\t\t\tmemoryMapped,\n\t\t\t\tpageSize,\n\t\t\t\tstatus: PageStatus.OK,\n\t\t\t\twriteSize,\n\t\t\t};\n\t\t\tpageBuffer.set(serializePageHeader(pageHeader), 0);\n\t\t\tawait nvmWriteBuffer(this._io, offset, pageBuffer);\n\n\t\t\tif (sharedFileSystem || offset < ZWAVE_APPLICATION_NVM_SIZE) {\n\t\t\t\tapplicationPages.push({ ...pageHeader, objects: [] });\n\t\t\t} else {\n\t\t\t\tprotocolPages.push({ ...pageHeader, objects: [] });\n\t\t\t}\n\t\t}\n\n\t\t// Remember the pages we just created for further use\n\t\tthis._info = sharedFileSystem\n\t\t\t? {\n\t\t\t\tisSharedFileSystem: true,\n\t\t\t\tsections: {\n\t\t\t\t\tall: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: applicationPages,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\t: {\n\t\t\t\tisSharedFileSystem: false,\n\t\t\t\tsections: {\n\t\t\t\t\tapplication: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: applicationPages,\n\t\t\t\t\t},\n\t\t\t\t\tprotocol: {\n\t\t\t\t\t\tcurrentPage: 0,\n\t\t\t\t\t\tobjectLocations: new Map(),\n\t\t\t\t\t\toffsetInPage: NVM3_PAGE_HEADER_SIZE,\n\t\t\t\t\t\tpages: protocolPages,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nasync function readPageHeader(\n\tio: NVMIO,\n\toffset: number,\n): Promise<NVM3PageHeader> {\n\tif (offset > io.size - NVM3_PAGE_HEADER_SIZE) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Incomplete page in buffer!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst buffer = Bytes.view(\n\t\t(await io.read(offset, NVM3_PAGE_HEADER_SIZE)).buffer,\n\t);\n\n\tconst { version, eraseCount } = tryGetVersionAndEraseCount(buffer);\n\n\t// Page status\n\tconst status = buffer.readUInt32LE(12);\n\n\tconst devInfo = buffer.readUInt16LE(16);\n\tconst deviceFamily = devInfo & 0x7ff;\n\tconst writeSize = (devInfo >> 11) & 0b1;\n\tconst memoryMapped = !!((devInfo >> 12) & 0b1);\n\tlet pageSize = pageSizeFromBits((devInfo >> 13) & 0b111);\n\n\tif (pageSize > 0xffff) {\n\t\t// Some controllers have no valid info in the page size bits, resulting\n\t\t// in an impossibly large page size. To try and figure out the actual page\n\t\t// size without knowing the hardware, we scan the buffer for the next valid\n\t\t// page start.\n\t\tfor (let exponent = 0; exponent < 0b111; exponent++) {\n\t\t\tconst testPageSize = pageSizeFromBits(exponent);\n\t\t\tconst nextOffset = offset + testPageSize;\n\t\t\tif (\n\t\t\t\t// exactly end of NVM OR\n\t\t\t\tio.size === nextOffset\n\t\t\t\t// next page\n\t\t\t\t|| await isValidPageHeaderAtOffset(io, nextOffset)\n\t\t\t) {\n\t\t\t\tpageSize = testPageSize;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (pageSize > 0xffff) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Could not determine page size!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tif (io.size < offset + pageSize) {\n\t\tthrow new ZWaveError(\n\t\t\t`NVM contains incomplete page at offset ${num2hex(offset)}!`,\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst formatInfo = buffer.readUInt16LE(18);\n\tconst encrypted = !(formatInfo & 0b1);\n\n\treturn {\n\t\toffset,\n\t\tversion,\n\t\teraseCount,\n\t\tstatus,\n\t\tencrypted,\n\t\tpageSize,\n\t\twriteSize,\n\t\tmemoryMapped,\n\t\tdeviceFamily,\n\t};\n}\n\nfunction tryGetVersionAndEraseCount(\n\theader: Uint8Array,\n): { version: number; eraseCount: number } {\n\tconst buffer = Bytes.view(header);\n\tconst version = buffer.readUInt16LE(0);\n\tconst magic = buffer.readUInt16LE(2);\n\tif (magic !== NVM3_PAGE_MAGIC) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Not a valid NVM3 page!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\tif (version !== 0x01) {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported NVM3 page version: ${version}`,\n\t\t\tZWaveErrorCodes.NVM_NotSupported,\n\t\t);\n\t}\n\n\t// The erase counter is saved twice, once normally, once inverted\n\tlet eraseCount = buffer.readUInt32LE(4);\n\tconst eraseCountCode = eraseCount >>> NVM3_PAGE_COUNTER_SIZE;\n\teraseCount &= NVM3_PAGE_COUNTER_MASK;\n\tvalidateBergerCode(eraseCount, eraseCountCode, NVM3_PAGE_COUNTER_SIZE);\n\n\tlet eraseCountInv = buffer.readUInt32LE(8);\n\tconst eraseCountInvCode = eraseCountInv >>> NVM3_PAGE_COUNTER_SIZE;\n\teraseCountInv &= NVM3_PAGE_COUNTER_MASK;\n\tvalidateBergerCode(\n\t\teraseCountInv,\n\t\teraseCountInvCode,\n\t\tNVM3_PAGE_COUNTER_SIZE,\n\t);\n\n\tif (eraseCount !== (~eraseCountInv & NVM3_PAGE_COUNTER_MASK)) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Invalid erase count!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\treturn { version, eraseCount };\n}\n\nasync function isValidPageHeaderAtOffset(\n\tio: NVMIO,\n\toffset: number,\n): Promise<boolean> {\n\tif (offset > io.size - NVM3_PAGE_HEADER_SIZE) {\n\t\treturn false;\n\t}\n\n\tconst { buffer } = await io.read(offset, NVM3_PAGE_HEADER_SIZE);\n\n\ttry {\n\t\ttryGetVersionAndEraseCount(buffer);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function readObjectHeader(\n\tio: NVMIO,\n\toffset: number,\n): Promise<NVM3ObjectHeader | undefined> {\n\tlet headerSize = 4;\n\tconst hdr1 = await nvmReadUInt32LE(io, offset);\n\n\t// Skip over blank page areas\n\tif (hdr1 === 0xffffffff) return;\n\n\tconst key = (hdr1 >> NVM3_OBJ_KEY_SHIFT) & NVM3_OBJ_KEY_MASK;\n\tlet objType: ObjectType = hdr1 & NVM3_OBJ_TYPE_MASK;\n\tlet fragmentSize = 0;\n\tlet hdr2: number | undefined;\n\tconst isLarge = objType === ObjectType.DataLarge\n\t\t|| objType === ObjectType.CounterLarge;\n\tif (isLarge) {\n\t\thdr2 = await nvmReadUInt32LE(io, offset + 4);\n\t\theaderSize += 4;\n\t\tfragmentSize = hdr2 & NVM3_OBJ_LARGE_LEN_MASK;\n\t} else if (objType > ObjectType.DataSmall) {\n\t\t// In small objects with data, the length and object type are stored in the same value\n\t\tfragmentSize = objType - ObjectType.DataSmall;\n\t\tobjType = ObjectType.DataSmall;\n\t} else if (objType === ObjectType.CounterSmall) {\n\t\tfragmentSize = NVM3_COUNTER_SIZE;\n\t}\n\n\tconst fragmentType: FragmentType = isLarge\n\t\t? (hdr1 >>> NVM3_OBJ_FRAGTYPE_SHIFT) & NVM3_OBJ_FRAGTYPE_MASK\n\t\t: FragmentType.None;\n\n\tif (isLarge) {\n\t\tvalidateBergerCodeMulti([hdr1, hdr2!], 32 + NVM3_CODE_LARGE_SHIFT);\n\t} else {\n\t\tvalidateBergerCodeMulti([hdr1], NVM3_CODE_SMALL_SHIFT);\n\t}\n\n\tif (io.size < offset + headerSize + fragmentSize) {\n\t\tthrow new ZWaveError(\n\t\t\t`NVM contains incomplete object at offset ${num2hex(offset)}!`,\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n\n\tconst alignedFragmentSize = getAlignedSize(fragmentSize);\n\tconst alignedSize = headerSize + alignedFragmentSize;\n\n\treturn {\n\t\tkey,\n\t\toffset,\n\t\ttype: objType,\n\t\tfragmentType,\n\t\theaderSize,\n\t\tfragmentSize,\n\t\talignedSize,\n\t};\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_utils", "pages"]
|
|
7
7
|
}
|
|
@@ -148,7 +148,7 @@ async function dumpNVM(nvm) {
|
|
|
148
148
|
const objectHeader = page.objects.findLast((o) => o.key === fileId);
|
|
149
149
|
if (!objectHeader)
|
|
150
150
|
continue;
|
|
151
|
-
const objectData = await nvm.get(fileId);
|
|
151
|
+
const objectData = await nvm.get(fileId, section);
|
|
152
152
|
dumpObject({
|
|
153
153
|
offset: objectHeader.offset,
|
|
154
154
|
key: fileId,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/nvm3/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\nimport type { NVM3 } from \"../NVM3.js\";\nimport { FragmentType, ObjectType, PageStatus } from \"./consts.js\";\nimport { NVMFile } from \"./files/NVMFile.js\";\nimport type { NVM3Object } from \"./object.js\";\n\n/** Counts the number of unset bits in the given word */\nexport function computeBergerCode(word: number, numBits: number = 32): number {\n\tlet ret = word;\n\n\t// Mask the number of bits we're interested in\n\tif (numBits < 32) {\n\t\tret &= (1 << numBits) - 1;\n\t}\n\n\t// And count the bits, see http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel\n\tret = ret - ((ret >> 1) & 0x55555555);\n\tret = (ret & 0x33333333) + ((ret >> 2) & 0x33333333);\n\tret = (((ret + (ret >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24;\n\n\treturn numBits - ret;\n}\n\nexport function validateBergerCode(\n\tword: number,\n\tcode: number,\n\tnumBits: number = 32,\n): void {\n\tif (computeBergerCode(word, numBits) !== code) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function computeBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): number {\n\tlet ret = 0;\n\tfor (const word of words) {\n\t\tret += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) break;\n\t\tnumBits -= 32;\n\t}\n\treturn ret;\n}\n\nexport function validateBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): void {\n\tlet actual = 0;\n\tlet expected: number;\n\tfor (const word of words) {\n\t\tactual += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) {\n\t\t\tconst maskSize = 32 - numBits;\n\t\t\tconst mask = (1 << maskSize) - 1;\n\t\t\texpected = (word >>> numBits) & mask;\n\t\t\tbreak;\n\t\t}\n\t\tnumBits -= 32;\n\t}\n\tif (actual !== expected!) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function mapToObject<T, TMap extends Map<string | number, T>>(\n\tmap: TMap,\n): Record<string, T> {\n\tconst obj: Record<string | number, T> = {};\n\tfor (const [key, value] of map) {\n\t\tobj[key] = value;\n\t}\n\treturn obj;\n}\n\nfunction dumpObject(\n\tobj: NVM3Object & { offset: number },\n\tjson: boolean = false,\n): void {\n\ttry {\n\t\tif (json) {\n\t\t\tconst file = NVMFile.from(obj.key, obj.data!, \"7.0.0\");\n\t\t\tconsole.log(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\toffset: num2hex(obj.offset),\n\t\t\t\t\t\t...file.toJSON(),\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconsole.log();\n\t\t\treturn;\n\t\t}\n\t} catch {\n\t\t// ignore\n\t}\n\tconst prefix = json ? \"\" : \" \";\n\tconsole.log(`${prefix}\u00B7 offset: ${num2hex(obj.offset)}`);\n\tconsole.log(`${prefix} key: 0x${obj.key.toString(16)}`);\n\tconsole.log(`${prefix} type: ${ObjectType[obj.type]}`);\n\tconsole.log(`${prefix} fragment type: ${FragmentType[obj.fragmentType]}`);\n\tif (obj.data) {\n\t\tconsole.log(\n\t\t\t`${prefix} data: ${\n\t\t\t\tbuffer2hex(obj.data)\n\t\t\t} (${obj.data.length} bytes)`,\n\t\t);\n\t}\n\tconsole.log();\n}\n\nexport async function dumpNVM(nvm: NVM3): Promise<void> {\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`NVM section: ${name}`);\n\n\t\tfor (const page of section.pages) {\n\t\t\tconsole.log(\"\");\n\t\t\tconsole.log(`page (offset 0x${page.offset.toString(16)}):`);\n\t\t\tconsole.log(` version: ${page.version}`);\n\t\t\tconsole.log(` eraseCount: ${page.eraseCount}`);\n\t\t\tconsole.log(` status: ${PageStatus[page.status]}`);\n\t\t\tconsole.log(` encrypted: ${page.encrypted}`);\n\t\t\tconsole.log(` pageSize: ${page.pageSize}`);\n\t\t\tconsole.log(` writeSize: ${page.writeSize}`);\n\t\t\tconsole.log(` memoryMapped: ${page.memoryMapped}`);\n\t\t\tconsole.log(` deviceFamily: ${page.deviceFamily}`);\n\t\t\tconsole.log(\"\");\n\t\t\tif (page.objects.length) {\n\t\t\t\tconsole.log(` raw objects:`);\n\n\t\t\t\tfor (const objectHeader of page.objects) {\n\t\t\t\t\tconst objectData = objectHeader.type !== ObjectType.Deleted\n\t\t\t\t\t\t? await nvm.readObjectData(objectHeader)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tdumpObject({\n\t\t\t\t\t\toffset: objectHeader.offset,\n\t\t\t\t\t\tkey: objectHeader.key,\n\t\t\t\t\t\ttype: objectHeader.type,\n\t\t\t\t\t\tfragmentType: objectHeader.fragmentType,\n\t\t\t\t\t\tdata: objectData,\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log();\n\t\tconsole.log();\n\t}\n\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`${name} objects:`);\n\t\tfor (const [fileId, pageIndex] of section.objectLocations) {\n\t\t\tconst page = section.pages[pageIndex];\n\t\t\tconst objectHeader = page.objects.findLast((o) => o.key === fileId);\n\t\t\tif (!objectHeader) continue;\n\t\t\tconst objectData = await nvm.get(fileId);\n\n\t\t\tdumpObject({\n\t\t\t\toffset: objectHeader.offset,\n\t\t\t\tkey: fileId,\n\t\t\t\ttype: objectHeader.type,\n\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\tdata: objectData,\n\t\t\t}, true);\n\t\t}\n\n\t\tconsole.log();\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { buffer2hex, num2hex } from \"@zwave-js/shared\";\nimport type { NVM3 } from \"../NVM3.js\";\nimport { FragmentType, ObjectType, PageStatus } from \"./consts.js\";\nimport { NVMFile } from \"./files/NVMFile.js\";\nimport type { NVM3Object } from \"./object.js\";\n\n/** Counts the number of unset bits in the given word */\nexport function computeBergerCode(word: number, numBits: number = 32): number {\n\tlet ret = word;\n\n\t// Mask the number of bits we're interested in\n\tif (numBits < 32) {\n\t\tret &= (1 << numBits) - 1;\n\t}\n\n\t// And count the bits, see http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel\n\tret = ret - ((ret >> 1) & 0x55555555);\n\tret = (ret & 0x33333333) + ((ret >> 2) & 0x33333333);\n\tret = (((ret + (ret >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24;\n\n\treturn numBits - ret;\n}\n\nexport function validateBergerCode(\n\tword: number,\n\tcode: number,\n\tnumBits: number = 32,\n): void {\n\tif (computeBergerCode(word, numBits) !== code) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function computeBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): number {\n\tlet ret = 0;\n\tfor (const word of words) {\n\t\tret += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) break;\n\t\tnumBits -= 32;\n\t}\n\treturn ret;\n}\n\nexport function validateBergerCodeMulti(\n\twords: number[],\n\tnumBits: number,\n): void {\n\tlet actual = 0;\n\tlet expected: number;\n\tfor (const word of words) {\n\t\tactual += computeBergerCode(word, Math.min(numBits, 32));\n\t\tif (numBits < 32) {\n\t\t\tconst maskSize = 32 - numBits;\n\t\t\tconst mask = (1 << maskSize) - 1;\n\t\t\texpected = (word >>> numBits) & mask;\n\t\t\tbreak;\n\t\t}\n\t\tnumBits -= 32;\n\t}\n\tif (actual !== expected!) {\n\t\tthrow new ZWaveError(\n\t\t\t\"Berger Code validation failed!\",\n\t\t\tZWaveErrorCodes.NVM_InvalidFormat,\n\t\t);\n\t}\n}\n\nexport function mapToObject<T, TMap extends Map<string | number, T>>(\n\tmap: TMap,\n): Record<string, T> {\n\tconst obj: Record<string | number, T> = {};\n\tfor (const [key, value] of map) {\n\t\tobj[key] = value;\n\t}\n\treturn obj;\n}\n\nfunction dumpObject(\n\tobj: NVM3Object & { offset: number },\n\tjson: boolean = false,\n): void {\n\ttry {\n\t\tif (json) {\n\t\t\tconst file = NVMFile.from(obj.key, obj.data!, \"7.0.0\");\n\t\t\tconsole.log(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\toffset: num2hex(obj.offset),\n\t\t\t\t\t\t...file.toJSON(),\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconsole.log();\n\t\t\treturn;\n\t\t}\n\t} catch {\n\t\t// ignore\n\t}\n\tconst prefix = json ? \"\" : \" \";\n\tconsole.log(`${prefix}\u00B7 offset: ${num2hex(obj.offset)}`);\n\tconsole.log(`${prefix} key: 0x${obj.key.toString(16)}`);\n\tconsole.log(`${prefix} type: ${ObjectType[obj.type]}`);\n\tconsole.log(`${prefix} fragment type: ${FragmentType[obj.fragmentType]}`);\n\tif (obj.data) {\n\t\tconsole.log(\n\t\t\t`${prefix} data: ${\n\t\t\t\tbuffer2hex(obj.data)\n\t\t\t} (${obj.data.length} bytes)`,\n\t\t);\n\t}\n\tconsole.log();\n}\n\nexport async function dumpNVM(nvm: NVM3): Promise<void> {\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`NVM section: ${name}`);\n\n\t\tfor (const page of section.pages) {\n\t\t\tconsole.log(\"\");\n\t\t\tconsole.log(`page (offset 0x${page.offset.toString(16)}):`);\n\t\t\tconsole.log(` version: ${page.version}`);\n\t\t\tconsole.log(` eraseCount: ${page.eraseCount}`);\n\t\t\tconsole.log(` status: ${PageStatus[page.status]}`);\n\t\t\tconsole.log(` encrypted: ${page.encrypted}`);\n\t\t\tconsole.log(` pageSize: ${page.pageSize}`);\n\t\t\tconsole.log(` writeSize: ${page.writeSize}`);\n\t\t\tconsole.log(` memoryMapped: ${page.memoryMapped}`);\n\t\t\tconsole.log(` deviceFamily: ${page.deviceFamily}`);\n\t\t\tconsole.log(\"\");\n\t\t\tif (page.objects.length) {\n\t\t\t\tconsole.log(` raw objects:`);\n\n\t\t\t\tfor (const objectHeader of page.objects) {\n\t\t\t\t\tconst objectData = objectHeader.type !== ObjectType.Deleted\n\t\t\t\t\t\t? await nvm.readObjectData(objectHeader)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tdumpObject({\n\t\t\t\t\t\toffset: objectHeader.offset,\n\t\t\t\t\t\tkey: objectHeader.key,\n\t\t\t\t\t\ttype: objectHeader.type,\n\t\t\t\t\t\tfragmentType: objectHeader.fragmentType,\n\t\t\t\t\t\tdata: objectData,\n\t\t\t\t\t}, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconsole.log();\n\t\tconsole.log();\n\t}\n\n\tfor (const [name, section] of Object.entries(nvm.info!.sections)) {\n\t\tconsole.log(`${name} objects:`);\n\t\tfor (const [fileId, pageIndex] of section.objectLocations) {\n\t\t\tconst page = section.pages[pageIndex];\n\t\t\tconst objectHeader = page.objects.findLast((o) => o.key === fileId);\n\t\t\tif (!objectHeader) continue;\n\t\t\tconst objectData = await nvm.get(fileId, section);\n\n\t\t\tdumpObject({\n\t\t\t\toffset: objectHeader.offset,\n\t\t\t\tkey: fileId,\n\t\t\t\ttype: objectHeader.type,\n\t\t\t\tfragmentType: FragmentType.None,\n\t\t\t\tdata: objectData,\n\t\t\t}, true);\n\t\t}\n\n\t\tconsole.log();\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/esm/lib/NVM3.d.ts
CHANGED
|
@@ -42,7 +42,7 @@ export declare class NVM3 implements NVM<number, Uint8Array> {
|
|
|
42
42
|
private getNVMSectionForFile;
|
|
43
43
|
has(fileId: number): Promise<boolean>;
|
|
44
44
|
readObjectData(object: NVM3ObjectHeader): Promise<Uint8Array>;
|
|
45
|
-
get(fileId: number): Promise<Uint8Array | undefined>;
|
|
45
|
+
get(fileId: number, section?: NVM3SectionInfo): Promise<Uint8Array | undefined>;
|
|
46
46
|
private writeObjects;
|
|
47
47
|
set(property: number, value: Uint8Array): Promise<void>;
|
|
48
48
|
/** Writes multiple values to the NVM at once. `null` / `undefined` cause the value to be deleted */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NVM3.d.ts","sourceRoot":"","sources":["../../../src/lib/NVM3.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAa,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAM1E,OAAO,EAqBN,aAAa,EAEb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEN,KAAK,gBAAgB,EAMrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,cAAc,EAGnB,MAAM,gBAAgB,CAAC;AAUxB,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG;IAC3C,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,kBAAkB,EAAE,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;CACzC,GAAG;IACH,kBAAkB,EAAE,KAAK,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjD,qBAAa,IAAK,YAAW,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;gBAChC,EAAE,EAAE,KAAK;IAI5B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,IAAW,IAAI,IAAI,kBAAkB,GAAG,SAAS,CAEhD;YAEa,cAAc;YAad,cAAc;IAaf,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAiJhD,OAAO,CAAC,oBAAoB;IAOf,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAQvD,GAAG,
|
|
1
|
+
{"version":3,"file":"NVM3.d.ts","sourceRoot":"","sources":["../../../src/lib/NVM3.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAa,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAM1E,OAAO,EAqBN,aAAa,EAEb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,UAAU,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEN,KAAK,gBAAgB,EAMrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,cAAc,EAGnB,MAAM,gBAAgB,CAAC;AAUxB,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG;IAC3C,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,kBAAkB,EAAE,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;CACzC,GAAG;IACH,kBAAkB,EAAE,KAAK,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjD,qBAAa,IAAK,YAAW,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;gBAChC,EAAE,EAAE,KAAK;IAI5B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,IAAW,IAAI,IAAI,kBAAkB,GAAG,SAAS,CAEhD;YAEa,cAAc;YAad,cAAc;IAaf,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAiJhD,OAAO,CAAC,oBAAoB;IAOf,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAQvD,GAAG,CACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;YA6GpB,YAAY;IAuHb,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAepE,oGAAoG;IACvF,OAAO,CACnB,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAC/C,OAAO,CAAC,IAAI,CAAC;IAyCH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvC,KAAK,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAuG7D"}
|
package/build/esm/lib/NVM3.js
CHANGED
|
@@ -175,10 +175,10 @@ export class NVM3 {
|
|
|
175
175
|
readObjectData(object) {
|
|
176
176
|
return nvmReadBuffer(this._io, object.offset + object.headerSize, object.fragmentSize);
|
|
177
177
|
}
|
|
178
|
-
async get(fileId) {
|
|
178
|
+
async get(fileId, section) {
|
|
179
179
|
this._info ??= await this.init();
|
|
180
|
-
// Determine which ring buffer to read in
|
|
181
|
-
|
|
180
|
+
// Determine which ring buffer to read in, unless we were told to use a specific one
|
|
181
|
+
section ??= this.getNVMSectionForFile(fileId);
|
|
182
182
|
const pages = section.pages;
|
|
183
183
|
// TODO: There should be no need for scanning, since we know the object locations after init().
|
|
184
184
|
// Start scanning backwards through the pages ring buffer, starting with the current page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NVM3.js","sourceRoot":"","sources":["../../../src/lib/NVM3.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NVM3.js","sourceRoot":"","sources":["../../../src/lib/NVM3.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,7 +120,7 @@ export async function dumpNVM(nvm) {
|
|
|
120
120
|
const objectHeader = page.objects.findLast((o) => o.key === fileId);
|
|
121
121
|
if (!objectHeader)
|
|
122
122
|
continue;
|
|
123
|
-
const objectData = await nvm.get(fileId);
|
|
123
|
+
const objectData = await nvm.get(fileId, section);
|
|
124
124
|
dumpObject({
|
|
125
125
|
offset: objectHeader.offset,
|
|
126
126
|
key: fileId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/nvm3/utils.ts"],"names":[],"mappings":"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"}
|