|
|
|
@ -56,6 +56,11 @@ enum {
|
|
|
|
ENV_PARAM_INDEX_SAVED_COUNT,
|
|
|
|
ENV_PARAM_INDEX_SAVED_COUNT,
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
|
|
|
|
/* current version number for ENV */
|
|
|
|
|
|
|
|
ENV_PARAM_INDEX_VER_NUM,
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* data section CRC32 code index in system section */
|
|
|
|
/* data section CRC32 code index in system section */
|
|
|
|
ENV_PARAM_INDEX_DATA_CRC,
|
|
|
|
ENV_PARAM_INDEX_DATA_CRC,
|
|
|
|
/* flash ENV parameters word size */
|
|
|
|
/* flash ENV parameters word size */
|
|
|
|
@ -96,6 +101,7 @@ static size_t get_env_user_used_size(void);
|
|
|
|
static EfErrCode create_env(const char *key, const char *value);
|
|
|
|
static EfErrCode create_env(const char *key, const char *value);
|
|
|
|
static uint32_t calc_env_crc(void);
|
|
|
|
static uint32_t calc_env_crc(void);
|
|
|
|
static bool env_crc_is_ok(void);
|
|
|
|
static bool env_crc_is_ok(void);
|
|
|
|
|
|
|
|
static EfErrCode env_auto_update(void);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Flash ENV initialize.
|
|
|
|
* Flash ENV initialize.
|
|
|
|
@ -145,10 +151,17 @@ EfErrCode ef_env_init(ef_env const *default_env, size_t default_env_size) {
|
|
|
|
|
|
|
|
|
|
|
|
result = ef_load_env();
|
|
|
|
result = ef_load_env();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
|
|
|
|
if (result == EF_NO_ERR) {
|
|
|
|
|
|
|
|
env_auto_update();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if (result == EF_NO_ERR) {
|
|
|
|
if (result == EF_NO_ERR) {
|
|
|
|
init_ok = true;
|
|
|
|
init_ok = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -158,6 +171,8 @@ EfErrCode ef_env_init(ef_env const *default_env, size_t default_env_size) {
|
|
|
|
* @return result
|
|
|
|
* @return result
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
EfErrCode ef_env_set_default(void){
|
|
|
|
EfErrCode ef_env_set_default(void){
|
|
|
|
|
|
|
|
extern EfErrCode ef_env_ver_num_set_default(void);
|
|
|
|
|
|
|
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
size_t i;
|
|
|
|
size_t i;
|
|
|
|
|
|
|
|
|
|
|
|
@ -175,6 +190,11 @@ EfErrCode ef_env_set_default(void){
|
|
|
|
env_cache[ENV_PARAM_INDEX_SAVED_COUNT] = 0;
|
|
|
|
env_cache[ENV_PARAM_INDEX_SAVED_COUNT] = 0;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
|
|
|
|
/* initialize version number */
|
|
|
|
|
|
|
|
env_cache[ENV_PARAM_INDEX_VER_NUM] = EF_ENV_VER_NUM;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* create default ENV */
|
|
|
|
/* create default ENV */
|
|
|
|
for (i = 0; i < default_env_set_size; i++) {
|
|
|
|
for (i = 0; i < default_env_set_size; i++) {
|
|
|
|
create_env(default_env_set[i].key, default_env_set[i].value);
|
|
|
|
create_env(default_env_set[i].key, default_env_set[i].value);
|
|
|
|
@ -193,7 +213,6 @@ EfErrCode ef_env_set_default(void){
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -562,12 +581,17 @@ void ef_print_env(void) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef EF_ENV_USING_PFS_MODE
|
|
|
|
#ifndef EF_ENV_USING_PFS_MODE
|
|
|
|
ef_print("\nENV size: %ld/%ld bytes.\n", get_env_user_used_size(), ENV_USER_SETTING_SIZE);
|
|
|
|
ef_print("\nmode: normal\n");
|
|
|
|
|
|
|
|
ef_print("size: %ld/%ld bytes.\n", get_env_user_used_size(), ENV_USER_SETTING_SIZE);
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
ef_print("\nENV size: %ld/%ld bytes, write bytes %ld/%ld, saved count: %ld, mode: power fail safeguard.\n",
|
|
|
|
ef_print("\nmode: power fail safeguard\n");
|
|
|
|
get_env_user_used_size(), ENV_USER_SETTING_SIZE, ef_get_env_write_bytes(),
|
|
|
|
ef_print("size: %ld/%ld bytes, write bytes %ld/%ld.\n", get_env_user_used_size(),
|
|
|
|
ENV_AREA_SIZE, env_cache[ENV_PARAM_INDEX_SAVED_COUNT]);
|
|
|
|
ENV_USER_SETTING_SIZE, ef_get_env_write_bytes(), ENV_AREA_SIZE);
|
|
|
|
|
|
|
|
ef_print("saved count: %ld\n", env_cache[ENV_PARAM_INDEX_SAVED_COUNT]);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
|
|
|
|
ef_print("ver num: %d\n", env_cache[ENV_PARAM_INDEX_VER_NUM]);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -804,6 +828,39 @@ EfErrCode ef_set_and_save_env(const char *key, const char *value) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Auto update ENV to latest default when current EF_ENV_VER is changed.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @return result
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
static EfErrCode env_auto_update(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
size_t i;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* lock the ENV cache */
|
|
|
|
|
|
|
|
ef_port_env_lock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* check version number */
|
|
|
|
|
|
|
|
if (env_cache[ENV_PARAM_INDEX_VER_NUM] != EF_ENV_VER_NUM) {
|
|
|
|
|
|
|
|
env_cache_changed = true;
|
|
|
|
|
|
|
|
/* update version number */
|
|
|
|
|
|
|
|
env_cache[ENV_PARAM_INDEX_VER_NUM] = EF_ENV_VER_NUM;
|
|
|
|
|
|
|
|
/* add a new ENV when it's not found */
|
|
|
|
|
|
|
|
for (i = 0; i < default_env_set_size; i++) {
|
|
|
|
|
|
|
|
if (find_env(default_env_set[i].key) == NULL) {
|
|
|
|
|
|
|
|
create_env(default_env_set[i].key, default_env_set[i].value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* unlock the ENV cache */
|
|
|
|
|
|
|
|
ef_port_env_unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ef_save_env();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* EF_ENV_AUTO_UPDATE */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* EF_ENV_USING_WL_MODE */
|
|
|
|
#endif /* EF_ENV_USING_WL_MODE */
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* EF_USING_ENV */
|
|
|
|
#endif /* EF_USING_ENV */
|
|
|
|
|