summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormicroDev <70126934+microDev1@users.noreply.github.com>2020-11-20 00:22:00 +0530
committermicroDev <70126934+microDev1@users.noreply.github.com>2020-11-20 00:22:00 +0530
commita25b27520d077424219832d764e9e59da6759562 (patch)
treed50d1b7af3cb3214bf276aa60dba8b15afa86bfe
parentbc9036f35370fcd0e4806c42dd47a8c6bb42a085 (diff)
update nvm implementation
-rw-r--r--ports/esp32s2/common-hal/nvm/ByteArray.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/ports/esp32s2/common-hal/nvm/ByteArray.c b/ports/esp32s2/common-hal/nvm/ByteArray.c
index 9f8ced3ec..e304dd830 100644
--- a/ports/esp32s2/common-hal/nvm/ByteArray.c
+++ b/ports/esp32s2/common-hal/nvm/ByteArray.c
@@ -26,6 +26,8 @@
#include "common-hal/nvm/ByteArray.h"
+#include <string.h>
+
#include "py/runtime.h"
#include "nvs_flash.h"
@@ -53,26 +55,52 @@ static void get_nvs_handle(nvs_handle_t * nvs_handle) {
bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
uint32_t start_index, uint8_t* values, uint32_t len) {
char index[9];
- sprintf(index, "%i", start_index);
+
+ uint8_t buffer[len];
+ memcpy(buffer, values, len);
+
// start nvs
nvs_handle_t handle;
get_nvs_handle(&handle);
- bool status = ((nvs_set_u8(handle, (const char *)index, *values) == ESP_OK) && (nvs_commit(handle) == ESP_OK));
+
+ // stage flash changes
+ for (uint32_t i = 0; i < len; i++) {
+ sprintf(index, "%i", start_index + i);
+ if (nvs_set_u8(handle, (const char *)index, buffer[i]) != ESP_OK) {
+ return false;
+ }
+ }
+
+ // commit flash changes
+ if (nvs_commit(handle) != ESP_OK) {
+ return false;
+ }
+
// close nvs
nvs_close(handle);
- return status;
+ return true;
}
void common_hal_nvm_bytearray_get_bytes(nvm_bytearray_obj_t *self,
uint32_t start_index, uint32_t len, uint8_t* values) {
char index[9];
- sprintf(index, "%i", start_index);
+ uint8_t buffer[len];
+
// start nvs
nvs_handle_t handle;
get_nvs_handle(&handle);
- if (nvs_get_u8(handle, (const char *)index, values) != ESP_OK) {
- mp_raise_RuntimeError(translate("NVS Error"));
+
+ // get from flash
+ for (uint32_t i = 0; i < len; i++) {
+ sprintf(index, "%i", start_index + i);
+ if (nvs_get_u8(handle, (const char *)index, &buffer[i]) != ESP_OK) {
+ mp_raise_RuntimeError(translate("NVS Error"));
+ }
}
+
+ // set into values
+ memcpy(values, buffer, len);
+
// close nvs
nvs_close(handle);
}