Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
TivaFlash Class Reference

Flash-backed file. More...

#include <TivaFlash.hxx>

Inheritance diagram for TivaFlash:
Node Device FileIO

Public Member Functions

 TivaFlash (const char *name, const void *ptr, size_t length, uint32_t page_size)
 Constructor.
 
ssize_t read (File *, void *, size_t) OVERRIDE
 Read method.
 
ssize_t write (File *, const void *, size_t) OVERRIDE
 Write method.
 
void enable () OVERRIDE
 This will be called once when reference-count goes from 0 to positive.
 
void disable () OVERRIDE
 This will be called when reference count goes from non-zero to 0.
 
void flush_buffers () OVERRIDE
 Instructs the device driver to drop all TX and RX queues.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Private Member Functions

uint32_t subpage_mask ()
 Returns a bitmask with one bits to get the within-page address.
 
uint32_t page_mask ()
 Returns a bitmask with one bits to get the page address.
 
uint32_t write_page_mask ()
 Returns a bitmask with one bits to get the page address.
 
uint32_t write_page_size ()
 Returns a bitmask with one bits to get the page address.
 
const uint8_t * read_pointer ()
 
uint32_t read_address ()
 

Private Attributes

const uint8_t * base_
 Base pointer.
 
size_t len_
 Number of bytes in the file.
 
size_t pageSize_
 Page size (how often to erase).
 

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 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.
 
virtual int fstat (File *file, struct stat *stat) override
 Get the status information of a file or device.
 
- 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

Flash-backed file.

The memory in flash for this file has to be reserved by the linker script. Any read operations will do just memcpy from the reserved pointer to the application buffer. Doing direct reads from flash using the reserved pointer is also valid.

Only sequential writes are supported. This means that opening the file for write, and writing from the beginning until the end is okay, but any other write access is not guaranteed to work.

Specifically, a flash page will be erased if and only if the first byte of that page is being written.

Definition at line 52 of file TivaFlash.hxx.

Constructor & Destructor Documentation

◆ TivaFlash()

TivaFlash::TivaFlash ( const char *  name,
const void *  ptr,
size_t  length,
uint32_t  page_size 
)
inline

Constructor.

Parameters
namename of th device/file (e.g. "/etc/automata_block"
ptrflash base
lengthhow many bytes of the file to reserve
page_sizehow often we should erase

Definition at line 61 of file TivaFlash.hxx.

Member Function Documentation

◆ disable()

void TivaFlash::disable ( )
inlinevirtual

This will be called when reference count goes from non-zero to 0.

Called with lock_ held.

Implements Node.

Definition at line 77 of file TivaFlash.hxx.

◆ enable()

void TivaFlash::enable ( )
inlinevirtual

This will be called once when reference-count goes from 0 to positive.

Called with lock_ held.

Implements Node.

Definition at line 76 of file TivaFlash.hxx.

◆ flush_buffers()

void TivaFlash::flush_buffers ( )
inlinevirtual

Instructs the device driver to drop all TX and RX queues.

This is called after disable() still under the device lock.

Implements Node.

Definition at line 78 of file TivaFlash.hxx.

◆ page_mask()

uint32_t TivaFlash::page_mask ( )
inlineprivate

Returns a bitmask with one bits to get the page address.

Definition at line 87 of file TivaFlash.hxx.

◆ read()

ssize_t TivaFlash::read ( File f,
void *  buf,
size_t  size 
)
virtual

Read method.

Returns
negative errno on failure.

Implements FileIO.

Definition at line 40 of file TivaFlash.cxx.

◆ read_address()

uint32_t TivaFlash::read_address ( )
inlineprivate
Returns
address (as uint32) of the base pointer.

Definition at line 108 of file TivaFlash.hxx.

◆ read_pointer()

const uint8_t * TivaFlash::read_pointer ( )
inlineprivate
Returns
pointer that can be used for reading data from this file directly.

Definition at line 103 of file TivaFlash.hxx.

◆ subpage_mask()

uint32_t TivaFlash::subpage_mask ( )
inlineprivate

Returns a bitmask with one bits to get the within-page address.

Definition at line 82 of file TivaFlash.hxx.

◆ write()

ssize_t TivaFlash::write ( File f,
const void *  buf,
size_t  size 
)
virtual

Write method.

Returns
negative errno on failure.

Implements FileIO.

Definition at line 57 of file TivaFlash.cxx.

◆ write_page_mask()

uint32_t TivaFlash::write_page_mask ( )
inlineprivate

Returns a bitmask with one bits to get the page address.

Definition at line 92 of file TivaFlash.hxx.

◆ write_page_size()

uint32_t TivaFlash::write_page_size ( )
inlineprivate

Returns a bitmask with one bits to get the page address.

Definition at line 97 of file TivaFlash.hxx.

Member Data Documentation

◆ base_

const uint8_t* TivaFlash::base_
private

Base pointer.

Definition at line 113 of file TivaFlash.hxx.

◆ len_

size_t TivaFlash::len_
private

Number of bytes in the file.

Definition at line 115 of file TivaFlash.hxx.

◆ pageSize_

size_t TivaFlash::pageSize_
private

Page size (how often to erase).

Definition at line 117 of file TivaFlash.hxx.


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