|
|
|
@ -130,16 +130,16 @@ EfErrCode ef_env_init(ef_env const *default_env, size_t default_env_size) {
|
|
|
|
if (ENV_USER_SETTING_SIZE % EF_ERASE_MIN_SIZE == 0) {
|
|
|
|
if (ENV_USER_SETTING_SIZE % EF_ERASE_MIN_SIZE == 0) {
|
|
|
|
EF_ASSERT(ENV_USER_SETTING_SIZE == ENV_AREA_SIZE);
|
|
|
|
EF_ASSERT(ENV_USER_SETTING_SIZE == ENV_AREA_SIZE);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
EF_ASSERT((ENV_USER_SETTING_SIZE/EF_ERASE_MIN_SIZE + 1)*EF_ERASE_MIN_SIZE == ENV_AREA_SIZE);
|
|
|
|
EF_ASSERT((ENV_USER_SETTING_SIZE / EF_ERASE_MIN_SIZE + 1)*EF_ERASE_MIN_SIZE == ENV_AREA_SIZE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
/* total_size must be aligned with erase_min_size */
|
|
|
|
/* total_size must be aligned with erase_min_size */
|
|
|
|
if (ENV_USER_SETTING_SIZE % EF_ERASE_MIN_SIZE == 0) {
|
|
|
|
if (ENV_USER_SETTING_SIZE % EF_ERASE_MIN_SIZE == 0) {
|
|
|
|
/* it has double area when used power fail safeguard mode */
|
|
|
|
/* it has double area when used power fail safeguard mode */
|
|
|
|
EF_ASSERT(2*ENV_USER_SETTING_SIZE == ENV_AREA_SIZE);
|
|
|
|
EF_ASSERT(2 * ENV_USER_SETTING_SIZE == ENV_AREA_SIZE);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
/* it has double area when used power fail safeguard mode */
|
|
|
|
/* it has double area when used power fail safeguard mode */
|
|
|
|
EF_ASSERT(2*(ENV_USER_SETTING_SIZE/EF_ERASE_MIN_SIZE + 1)*EF_ERASE_MIN_SIZE == ENV_AREA_SIZE);
|
|
|
|
EF_ASSERT(2 * (ENV_USER_SETTING_SIZE / EF_ERASE_MIN_SIZE + 1)*EF_ERASE_MIN_SIZE == ENV_AREA_SIZE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
@ -170,7 +170,7 @@ 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);
|
|
|
|
extern EfErrCode ef_env_ver_num_set_default(void);
|
|
|
|
|
|
|
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
@ -433,7 +433,7 @@ static EfErrCode create_env(const char *key, const char *value) {
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return result
|
|
|
|
* @return result
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
static EfErrCode del_env(const char *key){
|
|
|
|
static EfErrCode del_env(const char *key) {
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
char *del_env = NULL;
|
|
|
|
char *del_env = NULL;
|
|
|
|
size_t del_env_length, remain_env_length;
|
|
|
|
size_t del_env_length, remain_env_length;
|
|
|
|
@ -478,7 +478,7 @@ static EfErrCode del_env(const char *key){
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Set an ENV. If it value is empty, delete it.
|
|
|
|
* Set an ENV.If it value is NULL, delete it.
|
|
|
|
* If not find it in ENV table, then create it.
|
|
|
|
* If not find it in ENV table, then create it.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param key ENV name
|
|
|
|
* @param key ENV name
|
|
|
|
@ -490,7 +490,7 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
char *old_env, *old_value;
|
|
|
|
char *old_env, *old_value;
|
|
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
if (!init_ok) {
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
return EF_ENV_INIT_FAILED;
|
|
|
|
return EF_ENV_INIT_FAILED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -498,8 +498,8 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
/* lock the ENV cache */
|
|
|
|
/* lock the ENV cache */
|
|
|
|
ef_port_env_lock();
|
|
|
|
ef_port_env_lock();
|
|
|
|
|
|
|
|
|
|
|
|
/* if ENV value is empty, delete it */
|
|
|
|
/* if ENV value is NULL, delete it */
|
|
|
|
if ((value == NULL) || *value == '\0') {
|
|
|
|
if (value == NULL) {
|
|
|
|
result = del_env(key);
|
|
|
|
result = del_env(key);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
old_env = find_env(key);
|
|
|
|
old_env = find_env(key);
|
|
|
|
@ -519,6 +519,33 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
result = create_env(key, value);
|
|
|
|
result = create_env(key, value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* unlock the ENV cache */
|
|
|
|
|
|
|
|
ef_port_env_unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Del an ENV.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param key ENV name
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @return result
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
EfErrCode ef_del_env(const char *key) {
|
|
|
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!init_ok) {
|
|
|
|
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
|
|
|
|
return EF_ENV_INIT_FAILED;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* lock the ENV cache */
|
|
|
|
|
|
|
|
ef_port_env_lock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result = del_env(key);
|
|
|
|
|
|
|
|
|
|
|
|
/* unlock the ENV cache */
|
|
|
|
/* unlock the ENV cache */
|
|
|
|
ef_port_env_unlock();
|
|
|
|
ef_port_env_unlock();
|
|
|
|
|
|
|
|
|
|
|
|
@ -535,7 +562,7 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
char *ef_get_env(const char *key) {
|
|
|
|
char *ef_get_env(const char *key) {
|
|
|
|
char *env = NULL, *value = NULL;
|
|
|
|
char *env = NULL, *value = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
if (!init_ok) {
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
return NULL;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -564,7 +591,7 @@ void ef_print_env(void) {
|
|
|
|
uint8_t j;
|
|
|
|
uint8_t j;
|
|
|
|
char c;
|
|
|
|
char c;
|
|
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
if (!init_ok) {
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -679,7 +706,7 @@ EfErrCode ef_load_env(void) {
|
|
|
|
ef_port_read(area1_start_address + ENV_PARAM_INDEX_SAVED_COUNT * 4,
|
|
|
|
ef_port_read(area1_start_address + ENV_PARAM_INDEX_SAVED_COUNT * 4,
|
|
|
|
&area1_saved_count, 4);
|
|
|
|
&area1_saved_count, 4);
|
|
|
|
/* the bigger saved count area is valid */
|
|
|
|
/* the bigger saved count area is valid */
|
|
|
|
if ((area0_saved_count > area1_saved_count)||((area0_saved_count == 0)&&(area1_saved_count == 0xFFFFFFFF))) {
|
|
|
|
if ((area0_saved_count > area1_saved_count) || ((area0_saved_count == 0) && (area1_saved_count == 0xFFFFFFFF))) {
|
|
|
|
area1_is_valid = false;
|
|
|
|
area1_is_valid = false;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
area0_is_valid = false;
|
|
|
|
area0_is_valid = false;
|
|
|
|
@ -828,6 +855,25 @@ EfErrCode ef_set_and_save_env(const char *key, const char *value) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Del and save an ENV. If del ENV is success then will save it.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param key ENV name
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @return result
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
EfErrCode ef_del_and_save_env(const char *key) {
|
|
|
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result = ef_del_env(key);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (result == EF_NO_ERR) {
|
|
|
|
|
|
|
|
result = ef_save_env();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
#ifdef EF_ENV_AUTO_UPDATE
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Auto update ENV to latest default when current EF_ENV_VER is changed.
|
|
|
|
* Auto update ENV to latest default when current EF_ENV_VER is changed.
|
|
|
|
|