/* * storage_init() - Validate storage content and copy data to shadow memory * * INPUT * none * OUTPUT * none */ void storage_init(void) { ConfigFlash *stor_config; /* Find storage sector with valid data and set storage_location variable */ if(find_active_storage(&storage_location)) { stor_config = (ConfigFlash *)flash_write_helper(storage_location); } else { /* Set to storage sector1 as default if no sector has been initialized */ storage_location = STORAGE_SECT_DEFAULT; stor_config = (ConfigFlash *)flash_write_helper(storage_location); } /* Reset shadow configuration in RAM */ storage_reset(); /* Verify storage partition is initialized */ if(memcmp((void *)stor_config->meta.magic , STORAGE_MAGIC_STR, STORAGE_MAGIC_LEN) == 0) { /* Clear out stor_config before finding end config node */ memcpy(shadow_config.meta.uuid, (void *)&stor_config->meta.uuid, sizeof(shadow_config.meta.uuid)); data2hex(shadow_config.meta.uuid, sizeof(shadow_config.meta.uuid), shadow_config.meta.uuid_str); if(stor_config->storage.version) { if(stor_config->storage.version <= STORAGE_VERSION) { storage_from_flash(stor_config); } } /* New app with storage version changed! update the storage space */ if(stor_config->storage.version != STORAGE_VERSION) { storage_commit(); } } else { /* Keep storage area cleared */ storage_reset_uuid(); storage_commit(); } }
void storage_init(void) { storage_reset(); // if magic is ok if (memcmp((void *)FLASH_STORAGE_START, "stor", 4) == 0) { // load uuid memcpy(storage_uuid, (void *)(FLASH_STORAGE_START + 4), sizeof(storage_uuid)); data2hex(storage_uuid, sizeof(storage_uuid), storage_uuid_str); // load storage struct uint32_t version = ((Storage *)(FLASH_STORAGE_START + 4 + sizeof(storage_uuid)))->version; if (version && version <= STORAGE_VERSION) { storage_from_flash(version); } if (version != STORAGE_VERSION) { storage_commit(); } } else { storage_reset_uuid(); storage_commit(); } }
uint32_t storage_getPinFails(void) { storage_from_flash(STORAGE_VERSION); // reload from flash return storage.has_pin_failed_attempts ? storage.pin_failed_attempts : 0; }