common: Implement Storage::erase() in Mx25l.
authorTilman Sauerbeck <tilman@code-monkey.de>
Tue, 11 Feb 2020 18:54:06 +0000 (19:54 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Tue, 11 Feb 2020 18:54:06 +0000 (19:54 +0100)
src/common/mx25l.rs
src/common/storage.rs
test/logger_test.rs

index 56c2d4489658e3f10b0f1354c0a70e4b435ebd4b..6c28c5ae904b96dc37791d3dd25f1c1ffe06c3c2 100644 (file)
@@ -198,6 +198,10 @@ impl Storage for Mx25l {
         Ok(())
     }
 
+    fn erase(&mut self, address: usize) -> Result<(), Error> {
+        self.erase_sector(address)
+    }
+
     fn clear(&mut self) {
         self.erase_all();
     }
index ebebe798f8bb31eb2378c9e6081066352b4716e3..36d77e3faad15ad8e6b2ef6405e44c8e9e0ba4e9 100644 (file)
@@ -32,5 +32,7 @@ pub trait Storage {
 
     fn write(&mut self, address: usize, buffer: &[u8; 4096]) -> Result<(), Error>;
 
+    fn erase(&mut self, address: usize) -> Result<(), Error>;
+
     fn clear(&mut self);
 }
index a0308218e85d576a96fc665be73a8d48c39a49ab..a254f505db960e7c35959de6a215185503d69aef 100644 (file)
@@ -68,6 +68,19 @@ impl Storage for FakeStorage {
         Ok(())
     }
 
+    fn erase(&mut self, address: usize) -> Result<(), Error> {
+        if (address & 4095) != 0 {
+            return Err(Error::UnalignedAddress);
+        }
+
+        for i in 0..4096 {
+            self.actual[address + i] = 0xff;
+        }
+
+        Ok(())
+
+    }
+
     fn clear(&mut self) {
         self.actual = vec![0xff; MEMORY_SIZE].into_boxed_slice();
     }