From c401ae113908320a47c9f829755304d5ca5885f9 Mon Sep 17 00:00:00 2001 From: brand Date: Wed, 20 Nov 2019 15:34:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E8=BF=AD=E4=BB=A3=E5=99=A8?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95=20=E8=B0=83=E7=94=A8ef=5Fe?= =?UTF-8?q?nv=5Fiterator=5Fto=5Ffirst()=E5=B0=86=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E5=99=A8=E6=8C=87=E5=90=91=E6=9C=80=E5=BC=80=E5=A7=8B=20?= =?UTF-8?q?=E8=B0=83=E7=94=A8ef=5Fenv=5Fiterator=5Fnext()=E5=B0=86?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E5=99=A8=E6=8C=87=E5=90=91=E4=B8=8B=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=8F=98=E9=87=8F=20=E8=B0=83=E7=94=A8ef=5Fenv=5Fiter?= =?UTF-8?q?ator=5Fnow=5Fname()=E8=8E=B7=E5=8F=96=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E5=99=A8=E5=BD=93=E5=89=8D=E6=8C=87=E5=90=91=E7=9A=84=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E7=9A=84=E5=90=8D=E5=AD=97=20=E8=B0=83=E7=94=A8ef=5Fe?= =?UTF-8?q?nv=5Fiterator=5Fnow=5Fvalue=5Flen()=E8=8E=B7=E5=8F=96=E8=BF=AD?= =?UTF-8?q?=E4=BB=A3=E5=99=A8=E5=BD=93=E5=89=8D=E6=8C=87=E5=90=91=E7=9A=84?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E7=9A=84=E6=95=B0=E6=8D=AE=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=20=E8=B0=83=E7=94=A8ef=5Fenv=5Fiterator=5Fnow=5Fvalue()?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BF=AD=E4=BB=A3=E5=99=A8=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=8C=87=E5=90=91=E7=9A=84=E5=8F=98=E9=87=8F=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=20=E6=B3=A8=E6=84=8F=E8=B0=83=E7=94=A8ef=5Fenv=5Fiter?= =?UTF-8?q?ator=5Fto=5Ffirst()=E4=B9=8B=E5=90=8E=E8=A6=81=E5=86=8D?= =?UTF-8?q?=E8=B0=83=E7=94=A8ef=5Fenv=5Fiterator=5Fnext()=E6=89=8D?= =?UTF-8?q?=E8=83=BD=E8=8E=B7=E5=8F=96=E7=AC=AC=E4=B8=80=E4=B8=AA=E5=85=83?= =?UTF-8?q?=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyflash/inc/easyflash.h | 8 +++-- easyflash/src/ef_env.c | 75 +++++++++++++++++++++++++++------------ 2 files changed, 59 insertions(+), 24 deletions(-) diff --git a/easyflash/inc/easyflash.h b/easyflash/inc/easyflash.h index b8d0932..d88aab5 100644 --- a/easyflash/inc/easyflash.h +++ b/easyflash/inc/easyflash.h @@ -112,8 +112,12 @@ EfErrCode ef_env_set_default(void); size_t ef_get_env_write_bytes(void); EfErrCode ef_set_and_save_env(const char *key, const char *value); EfErrCode ef_del_and_save_env(const char *key); -void env_iterator_to_first(); -char env_iterator_next(char *key, void *value_buf, size_t *value_len); +/* iterator*/ +void ef_env_iterator_to_first(void); +char *ef_env_iterator_now_name(void); +size_t ef_env_iterator_now_value_len(void); +size_t ef_env_iterator_now_value(void *value_buf, size_t buf_len); +char ef_env_iterator_next(void); #endif #ifdef EF_USING_IAP diff --git a/easyflash/src/ef_env.c b/easyflash/src/ef_env.c index dd3ab00..680ea88 100644 --- a/easyflash/src/ef_env.c +++ b/easyflash/src/ef_env.c @@ -1166,17 +1166,56 @@ __retry: return empty_env; } -static struct env_iterator_obj obj; +static struct env_iterator_obj _g_env_iter_obj; /** * @brief Traversing from scratch * */ -void env_iterator_to_first() +void ef_env_iterator_to_first() { - obj.sector.addr = FAILED_ADDR; - obj.env.addr.start = FAILED_ADDR; + _g_env_iter_obj.sector.addr = FAILED_ADDR; + _g_env_iter_obj.env.addr.start = FAILED_ADDR; +} +/** + * @brief get the name of env now + * + * @return char* name + */ +char *ef_env_iterator_now_name() +{ + return _g_env_iter_obj.env.name; +} +/** + * @brief get the size of value + * + * @return size_t the size of value + */ +size_t ef_env_iterator_now_value_len() +{ + return _g_env_iter_obj.env.value_len; +} +/** + * @brief get value of env now + * + * @param value_buf ENV blob buffer + * @param buf_len value_buf length + * @return size_t 0:Read the complete;nonzero:unread length + */ +size_t f_env_iterator_now_value(void *value_buf, size_t buf_len) +{ + if(buf_len < _g_env_iter_obj.env.value_len) + { + ef_port_read(_g_env_iter_obj.env.addr.value, (uint32_t *) value_buf, buf_len); + return _g_env_iter_obj.env.value_len - buf_len; + } + else + { + ef_port_read(_g_env_iter_obj.env.addr.value, (uint32_t *) value_buf, _g_env_iter_obj.env.value_len); + return 0; + } + + } - /** * @brief Get next blob ENV * @@ -1185,40 +1224,34 @@ void env_iterator_to_first() * @param value_len ENV blob buffer length * @return char 1:Traversal complete 0:Traversal not complete */ -char env_iterator_next(char *key, void *value_buf, size_t *value_len) +char ef_env_iterator_next() { uint32_t sec_addr; ef_port_env_lock(); - if (obj.sector.addr == FAILED_ADDR) + if (_g_env_iter_obj.sector.addr == FAILED_ADDR) { _reload: - if ((sec_addr = get_next_sector_addr(&obj.sector)) == FAILED_ADDR) + if ((sec_addr = get_next_sector_addr(&_g_env_iter_obj.sector)) == FAILED_ADDR) { ef_port_env_unlock(); return 1; } - if (read_sector_meta_data(sec_addr, &obj.sector, false) != EF_NO_ERR) + if (read_sector_meta_data(sec_addr, &_g_env_iter_obj.sector, false) != EF_NO_ERR) { goto _reload; } } - - if (obj.sector.status.store == SECTOR_STORE_USING || obj.sector.status.store == SECTOR_STORE_FULL) + if (_g_env_iter_obj.sector.status.store == SECTOR_STORE_USING || _g_env_iter_obj.sector.status.store == SECTOR_STORE_FULL) { /* search all ENV */ _next: - if ((obj.env.addr.start = get_next_env_addr(&obj.sector, &obj.env)) != FAILED_ADDR) + if ((_g_env_iter_obj.env.addr.start = get_next_env_addr(&_g_env_iter_obj.sector, &_g_env_iter_obj.env)) != FAILED_ADDR) { - read_env(&obj.env); + read_env(&_g_env_iter_obj.env); /* iterator is interrupted when callback return true */ - if (obj.env.status == ENV_WRITE) + if (_g_env_iter_obj.env.status == ENV_WRITE) { - //key = obj.env.name; - memcpy(key, obj.env.name, obj.env.name_len); - key[obj.env.name_len] = 0; - *value_len = obj.env.value_len; - ef_port_read(obj.env.addr.value, (uint32_t *) value_buf, *value_len); - + _g_env_iter_obj.env.name[_g_env_iter_obj.env.name_len] = 0; ef_port_env_unlock(); return 0; } @@ -1226,13 +1259,11 @@ _next: { goto _next; } - } else { goto _reload; } - } else {