diff --git a/include/flash_map.h b/include/flash_map.h index cb2b3877cf5..1feaca4516f 100644 --- a/include/flash_map.h +++ b/include/flash_map.h @@ -172,6 +172,24 @@ u8_t flash_area_align(const struct flash_area *fa); int flash_area_get_sectors(int fa_id, u32_t *count, struct flash_sector *sectors); +/** + * Flash map iteration callback + * + * @param fa flash area + * @param user_data User supplied data + * + */ +typedef void (*flash_area_cb_t)(const struct flash_area *fa, + void *user_data); + +/** + * Iterate over flash map + * + * @param user_cb User callback + * @param user_data User supplied data + */ +void flash_area_foreach(flash_area_cb_t user_cb, void *user_data); + /** * Check whether given flash area has supporting flash driver * in the system. diff --git a/subsys/storage/flash_map/flash_map.c b/subsys/storage/flash_map/flash_map.c index b4224fbe890..46b896957f7 100644 --- a/subsys/storage/flash_map/flash_map.c +++ b/subsys/storage/flash_map/flash_map.c @@ -41,6 +41,13 @@ static struct flash_area const *get_flash_area_from_id(int idx) return NULL; } +void flash_area_foreach(flash_area_cb_t user_cb, void *user_data) +{ + for (int i = 0; i < flash_map_entries; i++) { + user_cb(&flash_map[i], user_data); + } +} + int flash_area_open(u8_t id, const struct flash_area **fap) { const struct flash_area *area;