feat: Add function to erase all settings

Added a zmk_settings_erase() function to clear all saved settings. This
does not go through Zephyr's settings subsystem, but instead directly
clears the data from the setting storage backend, so a reboot is needed
for it to take effect.
This commit is contained in:
Joel Spadin
2023-11-26 12:27:12 -06:00
committed by Pete Johanson
parent 2adaa00d10
commit 610a806c84
7 changed files with 112 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/storage/flash_map.h>
#include <zephyr/logging/log.h>
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
// SETTINGS_PARTITION must match settings_nvs.c
#if DT_HAS_CHOSEN(zephyr_settings_partition)
#define SETTINGS_PARTITION DT_FIXED_PARTITION_ID(DT_CHOSEN(zephyr_settings_partition))
#else
#define SETTINGS_PARTITION FIXED_PARTITION_ID(storage_partition)
#endif
int zmk_settings_erase(void) {
LOG_INF("Erasing settings flash partition");
const struct flash_area *fa;
int rc = flash_area_open(SETTINGS_PARTITION, &fa);
if (rc) {
LOG_ERR("Failed to open settings flash: %d", rc);
return rc;
}
rc = flash_area_erase(fa, 0, fa->fa_size);
if (rc) {
LOG_ERR("Failed to erase settings flash: %d", rc);
}
flash_area_close(fa);
return rc;
}