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

A simple device driver that reads/write data from a block of memory in RAM. More...

#include <RamDisk.hxx>

Inheritance diagram for RamDiskBase:
Node Device FileIO RamDisk

Public Member Functions

 RamDiskBase (const char *path, void *data, unsigned size, bool read_only)
 Constructor.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Protected Member Functions

off_t file_size ()
 
- Protected Member Functions inherited from Node
 Node (const char *name)
 Constructor.
 
virtual ~Node ()
 Destructor.
 
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.
 

Protected Attributes

uint8_t * data_
 Pointer to data content.
 
unsigned actualSize_ = 0
 What's the larget file offset that we received an actual write for.
 
unsigned size_: 30
 How many bytes we are exporting.
 
unsigned readOnly_: 1
 1 ifreadonly file.
 
unsigned owned_: 1
 1 if we own the data bytes and need to free()them upon exit.
 
- 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
 

Private Member Functions

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.
 
int open (File *file, const char *name, int flags, int mode) OVERRIDE
 Open method.
 
ssize_t read (File *file, void *buf, size_t count) OVERRIDE
 Read from a file or device.
 
ssize_t write (File *file, const void *buf, size_t count) OVERRIDE
 Write to a file or device.
 

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.
 
- 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.
 
- 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

A simple device driver that reads/write data from a block of memory in RAM.

Example: extern uint8_t __flash_config_block_start[]; extern uint8_t __flash_config_block_end[]; static const size_t flash_config_block_length = __flash_config_block_end

  • __flash_config_block_start; RamDiskBase flashdisk("/dev/rdonly_config, __flash_config_block_start, flash_config_block_length, true);

then add appropriate linker symbols in the memory_map.ld for the project.

Definition at line 51 of file RamDisk.hxx.

Constructor & Destructor Documentation

◆ RamDiskBase()

RamDiskBase::RamDiskBase ( const char *  path,
void *  data,
unsigned  size,
bool  read_only 
)
inline

Constructor.

Parameters
pathdevice node name (e.g. "/etc/ramdisk_nodeid");
dataBlcok of RAM assigned to the file.
sizeHow many bytes should be exported.
read_onlyif true, writes will be ignored.

Definition at line 60 of file RamDisk.hxx.

Member Function Documentation

◆ disable()

void RamDiskBase::disable ( )
inlineprivatevirtual

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

Called with lock_ held.

Implements Node.

Definition at line 71 of file RamDisk.hxx.

◆ enable()

void RamDiskBase::enable ( )
inlineprivatevirtual

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

Called with lock_ held.

Implements Node.

Definition at line 70 of file RamDisk.hxx.

◆ file_size()

off_t RamDiskBase::file_size ( )
inlineprotected
Returns
the file end offset. This is either the size presented at the constructor for read-only files (that are filled with data when this device gets instantiated), or the actual bytes written.

Definition at line 123 of file RamDisk.hxx.

◆ flush_buffers()

void RamDiskBase::flush_buffers ( )
inlineprivatevirtual

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 72 of file RamDisk.hxx.

◆ open()

int RamDiskBase::open ( File file,
const char *  name,
int  flags,
int  mode 
)
inlineprivatevirtual

Open method.

Reimplemented from Node.

Definition at line 75 of file RamDisk.hxx.

◆ read()

ssize_t RamDiskBase::read ( File file,
void *  buf,
size_t  count 
)
inlineprivatevirtual

Read from a file or device.

Parameters
filefile reference for this device
buflocation to place read data
countnumber of bytes to read
Returns
number of bytes read upon success, -1 upon failure with errno containing the cause

Implements FileIO.

Definition at line 85 of file RamDisk.hxx.

◆ write()

ssize_t RamDiskBase::write ( File file,
const void *  buf,
size_t  count 
)
inlineprivatevirtual

Write to a file or device.

Parameters
filefile reference for this device
buflocation to find write data
countnumber of bytes to write
Returns
number of bytes written upon success, -1 upon failure with errno containing the cause

Implements FileIO.

Definition at line 98 of file RamDisk.hxx.

Member Data Documentation

◆ actualSize_

unsigned RamDiskBase::actualSize_ = 0
protected

What's the larget file offset that we received an actual write for.

Definition at line 138 of file RamDisk.hxx.

◆ data_

uint8_t* RamDiskBase::data_
protected

Pointer to data content.

Definition at line 136 of file RamDisk.hxx.

◆ owned_

unsigned RamDiskBase::owned_
protected

1 if we own the data bytes and need to free()them upon exit.

Definition at line 144 of file RamDisk.hxx.

◆ readOnly_

unsigned RamDiskBase::readOnly_
protected

1 ifreadonly file.

Definition at line 142 of file RamDisk.hxx.

◆ size_

unsigned RamDiskBase::size_
protected

How many bytes we are exporting.

Definition at line 140 of file RamDisk.hxx.


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