summaryrefslogtreecommitdiff
path: root/src/components/fs/FS.h
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2021-07-23 09:59:08 (GMT)
committerGitea <gitea@fake.local>2021-07-23 09:59:08 (GMT)
commitdb6a701644116932f11c54ee0f619464de9faeb7 (patch)
treef2fb7999d6db212e416557ed12831d8ab38cc3c0 /src/components/fs/FS.h
parentd96395c81021778af35b8b4bf965bfe8663eb081 (diff)
parentd6cccc2dcd95a7d332ee657d1357ae060389f6e6 (diff)
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/components/fs/FS.h')
-rw-r--r--src/components/fs/FS.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/components/fs/FS.h b/src/components/fs/FS.h
new file mode 100644
index 0000000..1f2eb7e
--- /dev/null
+++ b/src/components/fs/FS.h
@@ -0,0 +1,71 @@
+#pragma once
+
+#include <cstdint>
+#include "drivers/SpiNorFlash.h"
+#include <littlefs/lfs.h>
+
+namespace Pinetime {
+ namespace Controllers {
+ class FS {
+ public:
+ FS(Pinetime::Drivers::SpiNorFlash&);
+
+ void Init();
+ void LVGLFileSystemInit();
+
+ int FileOpen(lfs_file_t* file_p, const char* fileName, const int flags);
+ int FileClose(lfs_file_t* file_p);
+ int FileRead(lfs_file_t* file_p, uint8_t* buff, uint32_t size);
+ int FileWrite(lfs_file_t* file_p, const uint8_t* buff, uint32_t size);
+ int FileSeek(lfs_file_t* file_p, uint32_t pos);
+
+ int FileDelete(const char* fileName);
+
+ int DirCreate(const char* path);
+ int DirDelete(const char* path);
+
+ void VerifyResource();
+
+ private:
+
+ Pinetime::Drivers::SpiNorFlash& flashDriver;
+
+ /*
+ * External Flash MAP (4 MBytes)
+ *
+ * 0x000000 +---------------------------------------+
+ * | Bootloader Assets |
+ * | 256 KBytes |
+ * | |
+ * 0x040000 +---------------------------------------+
+ * | OTA |
+ * | 464 KBytes |
+ * | |
+ * | |
+ * | |
+ * 0x0B4000 +---------------------------------------+
+ * | File System |
+ * | |
+ * | |
+ * | |
+ * | |
+ * 0x400000 +---------------------------------------+
+ *
+ */
+ static constexpr size_t startAddress = 0x0B4000;
+ static constexpr size_t size = 0x3C0000;
+ static constexpr size_t blockSize = 4096;
+
+ bool resourcesValid = false;
+ const struct lfs_config lfsConfig;
+
+ lfs_t lfs;
+
+ static int SectorSync(const struct lfs_config* c);
+ static int SectorErase(const struct lfs_config* c, lfs_block_t block);
+ static int SectorProg(const struct lfs_config* c, lfs_block_t block, lfs_off_t off, const void* buffer, lfs_size_t size);
+ static int SectorRead(const struct lfs_config* c, lfs_block_t block, lfs_off_t off, void* buffer, lfs_size_t size);
+
+ };
+ }
+}