Focus on getting flash access working properly
This commit is contained in:
		
							parent
							
								
									8f6a390c36
								
							
						
					
					
						commit
						d89e38d3bf
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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[];
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user