|
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