|
|
|
|
@ -173,7 +173,7 @@ EfErrCode ef_env_init(ef_env const *default_env, size_t default_env_size) {
|
|
|
|
|
*
|
|
|
|
|
* @return result
|
|
|
|
|
*/
|
|
|
|
|
EfErrCode ef_env_set_default(void){
|
|
|
|
|
EfErrCode ef_env_set_default(void) {
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
|
size_t i;
|
|
|
|
|
|
|
|
|
|
@ -293,7 +293,7 @@ static size_t get_env_detail_size(void) {
|
|
|
|
|
*
|
|
|
|
|
* @return size
|
|
|
|
|
*/
|
|
|
|
|
/* must be initialized */
|
|
|
|
|
/* must be initialized */
|
|
|
|
|
static size_t get_env_user_used_size(void) {
|
|
|
|
|
if (get_env_detail_end_addr() > get_cur_using_data_addr()) {
|
|
|
|
|
return get_env_detail_end_addr() - get_cur_using_data_addr();
|
|
|
|
|
@ -494,7 +494,7 @@ static EfErrCode del_env(const char *key) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set an ENV. If it value is empty, delete it.
|
|
|
|
|
* Set an ENV.
|
|
|
|
|
* If not find it in ENV table, then create it.
|
|
|
|
|
*
|
|
|
|
|
* @param key ENV name
|
|
|
|
|
@ -506,7 +506,7 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
|
char *old_env, *old_value;
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
|
if (!init_ok) {
|
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
|
return EF_ENV_INIT_FAILED;
|
|
|
|
|
}
|
|
|
|
|
@ -514,10 +514,6 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
|
/* lock the ENV cache */
|
|
|
|
|
ef_port_env_lock();
|
|
|
|
|
|
|
|
|
|
/* if ENV value is empty, delete it */
|
|
|
|
|
if ((value == NULL) || (*value == '\0')) {
|
|
|
|
|
result = del_env(key);
|
|
|
|
|
} else {
|
|
|
|
|
old_env = find_env(key);
|
|
|
|
|
/* If find this ENV, then compare the new value and old value. */
|
|
|
|
|
if (old_env) {
|
|
|
|
|
@ -534,7 +530,32 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
|
} else {
|
|
|
|
|
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 */
|
|
|
|
|
ef_port_env_unlock();
|
|
|
|
|
|
|
|
|
|
@ -551,7 +572,7 @@ EfErrCode ef_set_env(const char *key, const char *value) {
|
|
|
|
|
char *ef_get_env(const char *key) {
|
|
|
|
|
char *env = NULL, *value = NULL;
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
|
if (!init_ok) {
|
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
@ -579,7 +600,7 @@ void ef_print_env(void) {
|
|
|
|
|
uint8_t j;
|
|
|
|
|
char c;
|
|
|
|
|
|
|
|
|
|
if(!init_ok) {
|
|
|
|
|
if (!init_ok) {
|
|
|
|
|
EF_INFO("ENV isn't initialize OK.\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -743,7 +764,7 @@ EfErrCode ef_load_env(void) {
|
|
|
|
|
ef_port_read(area1_cur_using_addr + ENV_PARAM_PART_INDEX_SAVED_COUNT * 4,
|
|
|
|
|
&area1_saved_count, 4);
|
|
|
|
|
/* 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;
|
|
|
|
|
} else {
|
|
|
|
|
area0_is_valid = false;
|
|
|
|
|
@ -801,7 +822,7 @@ EfErrCode ef_save_env(void) {
|
|
|
|
|
/* change the ENV detail end address to next save area address */
|
|
|
|
|
set_env_detail_end_addr(get_cur_using_data_addr() + env_used_size);
|
|
|
|
|
/* area0 or area1 */
|
|
|
|
|
if(get_cur_using_data_addr() < get_env_start_addr() + ENV_AREA_SIZE / 2) {
|
|
|
|
|
if (get_cur_using_data_addr() < get_env_start_addr() + ENV_AREA_SIZE / 2) {
|
|
|
|
|
data_sec_end_addr = get_env_start_addr() + ENV_AREA_SIZE / 2 - 4;
|
|
|
|
|
} else {
|
|
|
|
|
data_sec_end_addr = get_env_start_addr() + ENV_AREA_SIZE - 4;
|
|
|
|
|
@ -943,7 +964,7 @@ static EfErrCode save_cur_using_data_addr(uint32_t cur_data_addr) {
|
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
|
uint32_t cur_system_sec_addr;
|
|
|
|
|
|
|
|
|
|
if (cur_data_addr < get_env_start_addr() + ENV_AREA_SIZE / 2){
|
|
|
|
|
if (cur_data_addr < get_env_start_addr() + ENV_AREA_SIZE / 2) {
|
|
|
|
|
/* current using system section is in ENV area0 */
|
|
|
|
|
cur_system_sec_addr = get_env_start_addr();
|
|
|
|
|
} else {
|
|
|
|
|
@ -989,6 +1010,25 @@ EfErrCode ef_set_and_save_env(const char *key, const char *value) {
|
|
|
|
|
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
|
|
|
|
|
/**
|
|
|
|
|
* Auto update ENV to latest default when current EF_ENV_VER is changed.
|
|
|
|
|
|