diff options
| author | Dan Halbert <halbert@halwitz.org> | 2020-01-03 10:24:07 -0500 |
|---|---|---|
| committer | Dan Halbert <halbert@halwitz.org> | 2020-01-03 10:24:07 -0500 |
| commit | 242d572470b20a06c5b0be5e07a84aefaa4abbe1 (patch) | |
| tree | 5d1ce41796dcbbe90267b76b602d2a832bdb5709 /ports/nrf/common-hal/nvm/ByteArray.c | |
| parent | 6c3d555b873fb7dddfa09ff24c6630c1aae47d3d (diff) | |
wip
Diffstat (limited to 'ports/nrf/common-hal/nvm/ByteArray.c')
| -rw-r--r-- | ports/nrf/common-hal/nvm/ByteArray.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/ports/nrf/common-hal/nvm/ByteArray.c b/ports/nrf/common-hal/nvm/ByteArray.c index 7d733ce7b..6b2f04a61 100644 --- a/ports/nrf/common-hal/nvm/ByteArray.c +++ b/ports/nrf/common-hal/nvm/ByteArray.c @@ -36,21 +36,17 @@ uint32_t common_hal_nvm_bytearray_get_length(nvm_bytearray_obj_t *self) { return self->len; } -static void write_page(uint32_t page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) { +static bool write_page(uint32_t page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) { // Write a whole page to flash, buffering it first and then erasing and rewriting // it since we can only clear a whole page at a time. - bool status; if (offset == 0 && len == FLASH_PAGE_SIZE) { - status = nrf_nvm_safe_flash_page_write(page_addr, bytes); + return nrf_nvm_safe_flash_page_write(page_addr, bytes); } else { uint8_t buffer[FLASH_PAGE_SIZE]; memcpy(buffer, (uint8_t *)page_addr, FLASH_PAGE_SIZE); memcpy(buffer + offset, bytes, len); - status = nrf_nvm_safe_flash_page_write(page_addr, buffer); - } - if (!status) { - mp_raise_OSError_msg(translate("Flash write failed")); + return nrf_nvm_safe_flash_page_write(page_addr, buffer); } } @@ -63,7 +59,9 @@ bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self, while (len) { uint32_t write_len = MIN(len, FLASH_PAGE_SIZE - offset); - write_page(page_addr, offset, write_len, values); + if (!write_page(page_addr, offset, write_len, values)) { + return false; + } len -= write_len; values += write_len; page_addr += FLASH_PAGE_SIZE; |
