summaryrefslogtreecommitdiff
path: root/src/storage.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/storage.cc')
-rw-r--r--src/storage.cc23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/storage.cc b/src/storage.cc
index bd35780..e965589 100644
--- a/src/storage.cc
+++ b/src/storage.cc
@@ -260,12 +260,27 @@ bool Storage::hasData()
void Storage::load(uint8_t idx, uint8_t *data)
{
- uint8_t page_offset;
- uint8_t header[2];
i2c_read(0, 1 + idx, 1, &page_offset);
- i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32, 2, header);
- i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32, header[1] + 4, data);
+ // always read headers
+ i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32, 4, data);
+
+ header[0] = data[0];
+ header[1] = data[1];
+
+ if (header[0] & 0x0f) {
+ // read whole byte block
+ i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32 + 4, 128, data + 4);
+ i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32 + 4 + 128, 128, data + 4 + 128);
+ } else {
+ i2c_read(1 + (page_offset / 8), (page_offset % 8) * 32 + 4, header[1], data + 4);
+ }
+}
+
+void Storage::loadChunk(uint8_t chunk, uint8_t *data)
+{
+ uint8_t this_page_offset = page_offset + (4 * chunk);
+ i2c_read(1 + (this_page_offset / 8), (this_page_offset % 8) * 32 + 4, 128, data);
}
void Storage::save(uint8_t *data)