diff --git a/easyflash/src/ef_env.c b/easyflash/src/ef_env.c index ca5fac8..b630f4a 100644 --- a/easyflash/src/ef_env.c +++ b/easyflash/src/ef_env.c @@ -134,8 +134,6 @@ #define ENV_LEN_OFFSET ((unsigned long)(&((struct env_hdr_data *)0)->len)) #define ENV_NAME_LEN_OFFSET ((unsigned long)(&((struct env_hdr_data *)0)->name_len)) -//#define ADDR_IS_SECTOR_HDR(addr) (addr % SECTOR_SIZE == 0) - #define VER_NUM_ENV_NAME "__ver_num__" enum sector_store_status { @@ -450,7 +448,9 @@ static bool get_env_from_cache(const char *name, size_t name_len, uint32_t *addr } #endif /* EF_ENV_USING_CACHE */ -//TODO 注释 +/* + * find the continue 0xFF flash address to end address + */ static uint32_t continue_ff_addr(uint32_t start, uint32_t end) { uint8_t buf[32], last_data = 0x00; @@ -473,7 +473,9 @@ static uint32_t continue_ff_addr(uint32_t start, uint32_t end) } } -//TODO 注释 +/* + * find the next ENV address by magic word on the flash + */ static uint32_t find_next_env_addr(uint32_t start, uint32_t end) { uint8_t buf[32]; @@ -495,7 +497,6 @@ static uint32_t find_next_env_addr(uint32_t start, uint32_t end) static uint32_t get_next_env_addr(sector_meta_data_t sector, env_meta_data_t pre_env) { - uint8_t status_table[ENV_STATUS_TABLE_SIZE]; uint32_t addr = FAILED_ADDR; if (sector->status.store == SECTOR_STORE_EMPTY) { @@ -510,10 +511,10 @@ static uint32_t get_next_env_addr(sector_meta_data_t sector, env_meta_data_t pre if (pre_env->crc_is_ok) { addr = pre_env->addr.start + pre_env->len; } else { - //TODO 注释 + /* when pre_env CRC check failed, maybe the flash has error data + * find_next_env_addr after pre_env address */ addr = pre_env->addr.start + EF_WG_ALIGN(1); } - /* check and find next ENV address */ addr = find_next_env_addr(addr, sector->addr + SECTOR_SIZE - SECTOR_HDR_DATA_SIZE); @@ -642,7 +643,7 @@ static EfErrCode read_sector_meta_data(uint32_t addr, sector_meta_data_t sector, sector->empty_env += env_meta.len; sector->remain -= env_meta.len; } - + /* check the empty ENV address by read continue 0xFF on flash */ { uint32_t ff_addr; @@ -754,7 +755,7 @@ static bool find_env(const char *key, env_meta_data_t env) read_env(env); return true; } -#endif +#endif /* EF_ENV_USING_CACHE */ find_ok = find_env_no_cache(key, env); @@ -762,7 +763,7 @@ static bool find_env(const char *key, env_meta_data_t env) if (find_ok) { update_env_cache(key, key_len, env->addr.start); } -#endif +#endif /* EF_ENV_USING_CACHE */ return find_ok; } @@ -806,11 +807,11 @@ static size_t get_env(const char *key, void *value_buf, size_t buf_len, size_t * * @param key ENV name * @param value_buf ENV blob buffer * @param buf_len ENV blob buffer length - * @param value_len return the length of the value saved on the flash, 0: NOT found + * @param saved_value_len return the length of the value saved on the flash, 0: NOT found * * @return the actually get size on successful */ -size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_t *value_len) +size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_t *saved_value_len) { size_t read_len = 0; @@ -822,7 +823,7 @@ size_t ef_get_env_blob(const char *key, void *value_buf, size_t buf_len, size_t /* lock the ENV cache */ ef_port_env_lock(); - read_len = get_env(key, value_buf, buf_len, value_len); + read_len = get_env(key, value_buf, buf_len, saved_value_len); /* unlock the ENV cache */ ef_port_env_unlock(); @@ -917,7 +918,7 @@ static EfErrCode update_sec_status(sector_meta_data_t sector, size_t new_env_len #ifdef EF_ENV_USING_CACHE /* delete the sector cache */ update_sector_cache(sector->addr, sector->addr + SECTOR_SIZE); -#endif +#endif /* EF_ENV_USING_CACHE */ if (is_full) { *is_full = true; @@ -1039,7 +1040,7 @@ static EfErrCode del_env(const char *key, env_meta_data_t old_env, bool complete /* only delete the ENV in flash and cache when only using del_env(key, env, true) in ef_del_env() */ update_env_cache(key, strlen(key), FAILED_ADDR); } -#endif +#endif /* EF_ENV_USING_CACHE */ last_is_complete_del = false; } @@ -1080,19 +1081,16 @@ static EfErrCode move_env(env_meta_data_t env) goto __exit; } } else { - //TODO 删除 - EF_DEBUG("EF_ENV_FULL.\n"); return EF_ENV_FULL; } - - /* update the new ENV sector status first */ - update_sec_status(§or, env->len, NULL); - /* start move the ENV */ { uint8_t buf[32]; size_t len, size, env_len = env->len; + /* update the new ENV sector status first */ + update_sec_status(§or, env->len, NULL); + write_status(env_addr, status_table, ENV_STATUS_NUM, ENV_PRE_WRITE); env_len -= ENV_MAGIC_OFFSET; for (len = 0, size = 0; len < env_len; len += size) { @@ -1110,7 +1108,7 @@ static EfErrCode move_env(env_meta_data_t env) update_sector_cache(EF_ALIGN_DOWN(env_addr, SECTOR_SIZE), env_addr + ENV_HDR_DATA_SIZE + EF_WG_ALIGN(env->name_len) + EF_WG_ALIGN(env->value_len)); update_env_cache(env->name, env->name_len, env_addr); -#endif +#endif /* EF_ENV_USING_CACHE */ } EF_DEBUG("Moved the ENV (%.*s) from 0x%08X to 0x%08X.\n", env->name_len, env->name, env->addr.start, env_addr); @@ -1163,7 +1161,6 @@ static bool do_gc(sector_meta_data_t sector, void *arg1, void *arg2) if (sector->check_ok && (sector->status.dirty == SECTOR_DIRTY_TRUE || sector->status.dirty == SECTOR_DIRTY_GC)) { uint8_t status_table[DIRTY_STATUS_TABLE_SIZE]; - //TODO 重复写入安全性验证 /* change the sector status to GC */ write_status(sector->addr + SECTOR_DIRTY_OFFSET, status_table, SECTOR_DIRTY_STATUS_NUM, SECTOR_DIRTY_GC); /* search all ENV */ @@ -1289,7 +1286,7 @@ static EfErrCode create_env_blob(sector_meta_data_t sector, const char *key, con env_addr + ENV_HDR_DATA_SIZE + EF_WG_ALIGN(env_hdr.name_len) + EF_WG_ALIGN(env_hdr.value_len)); } update_env_cache(key, env_hdr.name_len, env_addr); -#endif +#endif /* EF_ENV_USING_CACHE */ } /* write value */ if (result == EF_NO_ERR) {