Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
FlashFile< FLASH > Class Template Reference

FlashFile is a driver for a single file that is backed by flash. More...

#include <FlashFile.hxx>

Inheritance diagram for FlashFile< FLASH >:
DeviceFile Node Device FileIO

Public Member Functions

 FlashFile (const char *name, FLASH *flash, size_t address, size_t size)
 Constructor.
 
int open (File *file, const char *path, int flags, int mode) override
 Overrides behavior of open for O_TRUNC.
 
int fstat (File *file, struct stat *stat) override
 Implements querying the file size.
 
ssize_t write (unsigned int index, const void *buf, size_t len) override
 Write to the flash.
 
ssize_t read (unsigned int index, void *buf, size_t len) override
 Read from the flash.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Private Attributes

FLASH * flash_
 Accessor to the flash device.
 
size_t flashStart_
 Offset where our file start on flash.
 
size_t size_
 How many bytes our file is on flash.
 

Additional Inherited Members

- Static Public Member Functions inherited from Device
static int open (struct _reent *reent, const char *path, int flags, int mode)
 Open a file or device.
 
static int close (struct _reent *reent, int fd)
 Close a file or device.
 
static int stat (struct _reent *reent, const char *path, struct stat *stat)
 Get the status information of a file or device.
 
static int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, long long timeout)
 POSIX select().
 
static void select_clear ()
 Clears the current thread's select bits.
 
- Static Public Member Functions inherited from FileIO
static ssize_t read (struct _reent *reent, int fd, void *buf, size_t count)
 Read from a file or device.
 
static ssize_t write (struct _reent *reent, int fd, const void *buf, size_t count)
 Write to a file or device.
 
static _off_t lseek (struct _reent *reent, int fd, _off_t offset, int whence)
 Change the offset index of a file or device.
 
static int fstat (struct _reent *reent, int fd, struct stat *stat)
 Get the status information of a file or device.
 
static int ioctl (int fd, unsigned long int key, unsigned long data)
 Request and ioctl transaction.
 
static int fcntl (int fd, int cmd, unsigned long data)
 Manipulate a file descriptor.
 
static bool is_device (int fd)
 Test if the file descriptor belongs to a device.
 
- Protected Member Functions inherited from DeviceFile
 DeviceFile (const char *name)
 Constructor.
 
 ~DeviceFile ()
 Destructor.
 
- Protected Member Functions inherited from Node
 Node (const char *name)
 Constructor.
 
virtual ~Node ()
 Destructor.
 
int open (File *, const char *, int, int) OVERRIDE
 Open method.
 
int close (File *) OVERRIDE
 Close method.
 
- Protected Member Functions inherited from FileIO
 FileIO (const char *name)
 Constructor.
 
virtual ~FileIO ()
 Destructor.
 
virtual off_t lseek (File *f, off_t offset, int whence)
 Seek method.
 
virtual int ioctl (File *file, unsigned long int key, unsigned long data)
 Request an ioctl transaction.
 
virtual int fcntl (File *file, int cmd, unsigned long data)
 Manipulate a file descriptor.
 
virtual bool select (File *file, int mode)
 Device select method.
 
- Static Protected Member Functions inherited from Device
static void select_insert (SelectInfo *info)
 Add client to list of clients needing woken.
 
static void select_wakeup (SelectInfo *info)
 Wakeup the list of clients needing woken.
 
static void select_wakeup_from_isr (SelectInfo *info, int *woken)
 Wakeup the list of clients needing woken.
 
- Static Protected Member Functions inherited from FileIO
static int fd_alloc (void)
 Allocate a free file descriptor.
 
static void fd_free (int fd)
 Free up a file descriptor.
 
static Filefile_lookup (int fd)
 Looks up a reference to a File corresponding to a given file descriptor.
 
static int fd_lookup (File *file)
 Looks up a file descriptor corresponding to a given File reference.
 
- Protected Attributes inherited from Node
OSMutex lock_
 protects internal structures.
 
mode_t mode_
 File open mode, such as O_NONBLOCK.
 
unsigned int references_
 number of open references
 
- Protected Attributes inherited from FileIO
const char * name
 device name
 
- Static Protected Attributes inherited from FileIO
static const unsigned int numOpenFiles = 20
 
static File files []
 File descriptor pool.
 
static OSMutex mutex
 mutual exclusion for fileio
 

Detailed Description

template<class FLASH>
class FlashFile< FLASH >

FlashFile is a driver for a single file that is backed by flash.

Instantiations may use serial flash (using SPIFlash) or internal flash.

There are limitations on writes.

  • A sequential write of the file with no seeks from the beginning to the end will work. Whenever the first byte of a sector is written, the entire sector will be erased.
  • If the file is opened with O_TRUNC, then all sectors of the file are erased.
  • The file does not remember its size. fstat always returns the maximum size.

Definition at line 59 of file FlashFile.hxx.

Constructor & Destructor Documentation

◆ FlashFile()

template<class FLASH >
FlashFile< FLASH >::FlashFile ( const char *  name,
FLASH *  flash,
size_t  address,
size_t  size 
)
inline

Constructor.

Parameters
namewhat should be the name of this file be (to pass to open).
flashaccessor object to the backing flash. One such object can be used for multiple FlashFiles. The flash object shall do locking internally.
addresswhere does the data of this file start. Must be aligned on a sector boundary on the flash device. The unit is whatever address the flash driver understands.
sizemaximum size of this file on flash.

Definition at line 71 of file FlashFile.hxx.

Member Function Documentation

◆ fstat()

template<class FLASH >
int FlashFile< FLASH >::fstat ( File file,
struct stat stat 
)
inlineoverridevirtual

Implements querying the file size.

Reimplemented from Node.

Definition at line 95 of file FlashFile.hxx.

◆ open()

template<class FLASH >
int FlashFile< FLASH >::open ( File file,
const char *  path,
int  flags,
int  mode 
)
inlineoverridevirtual

Overrides behavior of open for O_TRUNC.

Reimplemented from DeviceFile.

Definition at line 83 of file FlashFile.hxx.

◆ read()

template<class FLASH >
ssize_t FlashFile< FLASH >::read ( unsigned int  index,
void *  buf,
size_t  len 
)
inlineoverridevirtual

Read from the flash.

Parameters
indexindex within DeviceFile address space to start read
buflocation to post read data
lenlength in bytes of data to read
Returns
number of bytes read upon success, -errno upon failure

Implements DeviceFile.

Definition at line 139 of file FlashFile.hxx.

◆ write()

template<class FLASH >
ssize_t FlashFile< FLASH >::write ( unsigned int  index,
const void *  buf,
size_t  len 
)
inlineoverridevirtual

Write to the flash.

Parameters
indexindex within the file address space to start write
bufdata to write
lenlength in bytes of data to write
Returns
number of bytes written upon success, -errno upon failure

Writing at the beginning of a sector. Need an erase.

Implements DeviceFile.

Definition at line 107 of file FlashFile.hxx.

Member Data Documentation

◆ flash_

template<class FLASH >
FLASH* FlashFile< FLASH >::flash_
private

Accessor to the flash device.

Definition at line 156 of file FlashFile.hxx.

◆ flashStart_

template<class FLASH >
size_t FlashFile< FLASH >::flashStart_
private

Offset where our file start on flash.

Definition at line 158 of file FlashFile.hxx.

◆ size_

template<class FLASH >
size_t FlashFile< FLASH >::size_
private

How many bytes our file is on flash.

Definition at line 160 of file FlashFile.hxx.


The documentation for this class was generated from the following file: