|
26 | 26 |
|
27 | 27 | #include "common-hal/nvm/ByteArray.h"
|
28 | 28 |
|
| 29 | +#include <string.h> |
| 30 | + |
29 | 31 | #include "py/runtime.h"
|
30 | 32 | #include "nvs_flash.h"
|
31 | 33 |
|
@@ -53,26 +55,52 @@ static void get_nvs_handle(nvs_handle_t * nvs_handle) {
|
53 | 55 | bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
|
54 | 56 | uint32_t start_index, uint8_t* values, uint32_t len) {
|
55 | 57 | char index[9];
|
56 |
| - sprintf(index, "%i", start_index); |
| 58 | + |
| 59 | + uint8_t buffer[len]; |
| 60 | + memcpy(buffer, values, len); |
| 61 | + |
57 | 62 | // start nvs
|
58 | 63 | nvs_handle_t handle;
|
59 | 64 | get_nvs_handle(&handle);
|
60 |
| - bool status = ((nvs_set_u8(handle, (const char *)index, *values) == ESP_OK) && (nvs_commit(handle) == ESP_OK)); |
| 65 | + |
| 66 | + // stage flash changes |
| 67 | + for (uint32_t i = 0; i < len; i++) { |
| 68 | + sprintf(index, "%i", start_index + i); |
| 69 | + if (nvs_set_u8(handle, (const char *)index, buffer[i]) != ESP_OK) { |
| 70 | + return false; |
| 71 | + } |
| 72 | + } |
| 73 | + |
| 74 | + // commit flash changes |
| 75 | + if (nvs_commit(handle) != ESP_OK) { |
| 76 | + return false; |
| 77 | + } |
| 78 | + |
61 | 79 | // close nvs
|
62 | 80 | nvs_close(handle);
|
63 |
| - return status; |
| 81 | + return true; |
64 | 82 | }
|
65 | 83 |
|
66 | 84 | void common_hal_nvm_bytearray_get_bytes(nvm_bytearray_obj_t *self,
|
67 | 85 | uint32_t start_index, uint32_t len, uint8_t* values) {
|
68 | 86 | char index[9];
|
69 |
| - sprintf(index, "%i", start_index); |
| 87 | + uint8_t buffer[len]; |
| 88 | + |
70 | 89 | // start nvs
|
71 | 90 | nvs_handle_t handle;
|
72 | 91 | get_nvs_handle(&handle);
|
73 |
| - if (nvs_get_u8(handle, (const char *)index, values) != ESP_OK) { |
74 |
| - mp_raise_RuntimeError(translate("NVS Error")); |
| 92 | + |
| 93 | + // get from flash |
| 94 | + for (uint32_t i = 0; i < len; i++) { |
| 95 | + sprintf(index, "%i", start_index + i); |
| 96 | + if (nvs_get_u8(handle, (const char *)index, &buffer[i]) != ESP_OK) { |
| 97 | + mp_raise_RuntimeError(translate("NVS Error")); |
| 98 | + } |
75 | 99 | }
|
| 100 | + |
| 101 | + // set into values |
| 102 | + memcpy(values, buffer, len); |
| 103 | + |
76 | 104 | // close nvs
|
77 | 105 | nvs_close(handle);
|
78 | 106 | }
|
0 commit comments