esp_err_t Storage::init(uint32_t baseSector, uint32_t sectorCount) { auto err = mPageManager.load(baseSector, sectorCount); if (err != ESP_OK) { mState = StorageState::INVALID; return err; } // load namespaces list clearNamespaces(); std::fill_n(mNamespaceUsage.data(), mNamespaceUsage.byteSize() / 4, 0); for (auto it = mPageManager.begin(); it != mPageManager.end(); ++it) { Page& p = *it; size_t itemIndex = 0; Item item; while (p.findItem(Page::NS_INDEX, ItemType::U8, nullptr, itemIndex, item) == ESP_OK) { NamespaceEntry* entry = new NamespaceEntry; item.getKey(entry->mName, sizeof(entry->mName) - 1); item.getValue(entry->mIndex); mNamespaces.push_back(entry); mNamespaceUsage.set(entry->mIndex, true); itemIndex += item.span; } } mNamespaceUsage.set(0, true); mNamespaceUsage.set(255, true); mState = StorageState::ACTIVE; #ifndef ESP_PLATFORM debugCheck(); #endif return ESP_OK; }
esp_err_t Storage::init(uint32_t baseSector, uint32_t sectorCount) { auto err = mPageManager.load(baseSector, sectorCount); if (err != ESP_OK) { mState = StorageState::INVALID; return err; } // load namespaces list clearNamespaces(); std::fill_n(mNamespaceUsage.data(), mNamespaceUsage.byteSize() / 4, 0); for (auto it = mPageManager.begin(); it != mPageManager.end(); ++it) { Page& p = *it; size_t itemIndex = 0; Item item; while (p.findItem(Page::NS_INDEX, ItemType::U8, nullptr, itemIndex, item) == ESP_OK) { NamespaceEntry* entry = new NamespaceEntry; item.getKey(entry->mName, sizeof(entry->mName) - 1); item.getValue(entry->mIndex); mNamespaces.push_back(entry); mNamespaceUsage.set(entry->mIndex, true); itemIndex += item.span; } } mNamespaceUsage.set(0, true); mNamespaceUsage.set(255, true); mState = StorageState::ACTIVE; // Populate list of multi-page index entries. TBlobIndexList blobIdxList; populateBlobIndices(blobIdxList); // Remove the entries for which there is no parent multi-page index. eraseOrphanDataBlobs(blobIdxList); // Purge the blob index list blobIdxList.clearAndFreeNodes(); #ifndef ESP_PLATFORM debugCheck(); #endif return ESP_OK; }
Storage::~Storage() { clearNamespaces(); }