summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorTim Keller <geekboy1011@gmail.com>2021-10-19 19:03:00 +0000
committerTim Keller <geekboy1011@gmail.com>2021-12-10 01:18:57 +0000
commitd89e38d3bf9e84e69635f0cb10cc42f0071fa038 (patch)
tree3745d24d864e586bf24adff99be02f13f23c3b29 /src/components
parent8f6a390c36007eecb875bca6d8be860dbec6bd9c (diff)
Focus on getting flash access working properly
Diffstat (limited to 'src/components')
-rw-r--r--src/components/ble/FSService.cpp10
-rw-r--r--src/components/ble/FSService.h2
-rw-r--r--src/components/fs/FS.cpp12
-rw-r--r--src/components/fs/FS.h47
4 files changed, 41 insertions, 30 deletions
diff --git a/src/components/ble/FSService.cpp b/src/components/ble/FSService.cpp
index 52cfafb8..0a1fabb7 100644
--- a/src/components/ble/FSService.cpp
+++ b/src/components/ble/FSService.cpp
@@ -60,9 +60,10 @@ int FSService::OnFSServiceRequested(uint16_t connectionHandle, uint16_t attribut
int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
auto command = static_cast<commands>(om->om_data[0]);
- NRF_LOG_INFO("[FS_S] -> FSCommandHandler");
-
+ NRF_LOG_INFO("[FS_S] -> FSCommandHandler %d",command);
+ fs.Mount();
switch (command) {
+ /*
case commands::READ: {
NRF_LOG_INFO("[FS_S] -> Read");
if (state != FSState::IDLE) {
@@ -194,7 +195,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(MKDirResponse));
ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om);
break;
- }
+ }*/
case commands::LISTDIR: {
NRF_LOG_INFO("[FS_S] -> ListDir");
ListDirHeader* header = (ListDirHeader*) om->om_data;
@@ -244,7 +245,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
NRF_LOG_INFO("[FS_S] ->Path %s ,", info.name);
auto* om = ble_hs_mbuf_from_flat(&resp, sizeof(ListDirResponse)+resp.path_length);
ble_gattc_notify_custom(connectionHandle, transferCharacteristicHandle, om);
- vTaskDelay(5); // Allow stuff to actually go out over the BLE conn
+ vTaskDelay(10); // Allow stuff to actually go out over the BLE conn
resp.entry++;
}
fs.DirClose(&dir);
@@ -258,6 +259,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) {
break;
}
}
+ fs.UnMount();
return 0;
}
// Loads resp with file data given a valid filepath header and resp
diff --git a/src/components/ble/FSService.h b/src/components/ble/FSService.h
index 93205e54..114c1e0d 100644
--- a/src/components/ble/FSService.h
+++ b/src/components/ble/FSService.h
@@ -109,7 +109,7 @@ namespace Pinetime {
uint32_t entry;
uint32_t totalentries;
uint32_t flags;
- uint32_t modification_time;
+ uint64_t modification_time;
uint32_t file_size;
char path[];
};
diff --git a/src/components/fs/FS.cpp b/src/components/fs/FS.cpp
index d30b7373..c8a5a2eb 100644
--- a/src/components/fs/FS.cpp
+++ b/src/components/fs/FS.cpp
@@ -54,6 +54,14 @@ void FS::VerifyResource() {
resourcesValid = true;
}
+void FS::Mount() {
+ flashDriver.Wakeup();
+}
+
+void FS::UnMount() {
+ flashDriver.Sleep();
+}
+
int FS::FileOpen(lfs_file_t* file_p, const char* fileName, const int flags) {
return lfs_file_open(&lfs, file_p, fileName, flags);
}
@@ -96,8 +104,8 @@ int FS::DirCreate(const char* path) {
return lfs_mkdir(&lfs, path);
}
-int FS::Stat(const char* path, lfs_info* info){
- return lfs_stat(&lfs,path,info);
+int FS::Stat(const char* path, lfs_info* info) {
+ return lfs_stat(&lfs, path, info);
}
// Delete directory and all files inside
diff --git a/src/components/fs/FS.h b/src/components/fs/FS.h
index e50ff10a..1aa8d5f1 100644
--- a/src/components/fs/FS.h
+++ b/src/components/fs/FS.h
@@ -13,6 +13,9 @@ namespace Pinetime {
void Init();
void LVGLFileSystemInit();
+ void Mount();
+ void UnMount();
+
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);
@@ -32,31 +35,30 @@ namespace Pinetime {
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 +---------------------------------------+
- *
- */
+ * 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 = 0x34C000;
static constexpr size_t blockSize = 4096;
@@ -70,7 +72,6 @@ namespace Pinetime {
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);
-
};
}
}