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

Protocol-independent driver for decoding NRZ codes using a TI Tiva class microcontroller. More...

#include <TivaNRZ.hxx>

Inheritance diagram for TivaNRZ< HW >:
Node Device FileIO

Public Member Functions

 TivaNRZ (const char *name)
 Constructor.
 
void interrupt_handler ()
 Handles a raw interrupt.
 
void os_interrupt_handler ()
 Handles a software interrupt to FreeRTOS.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Private Member Functions

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.
 
int ioctl (File *file, unsigned long int key, unsigned long data) OVERRIDE
 Request an ioctl transaction.
 
void enable ()
 function to enable device
 
void disable ()
 function to disable device
 
void flush_buffers ()
 Discards all pending buffers.
 
 DISALLOW_COPY_AND_ASSIGN (TivaNRZ)
 

Private Attributes

FixedQueue< uint32_t, HW::Q_SIZE > inputData_
 Data to send measurements back to the application level.
 
uint32_t lastTimerValue_
 Free running timer's last value.
 
uint32_t reloadCount_
 How many times the free running timer overflowed.
 
unsigned lastLevel_
 unused.
 
bool overflowed_ = false
 Flags when we lost data due to buffer overrun.
 
NotifiablereadableNotifiable_ = nullptr
 Notifiable for asynchronous support.
 

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 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 HW>
class TivaNRZ< HW >

Protocol-independent driver for decoding NRZ codes using a TI Tiva class microcontroller.

The driver will capture and accurately time each half wave of the incoming signal. The timing information will be available to the user-space by executing read() commands on the fd of the device driver. Then arbitrary user-space code can be run to decode the correct data stream without needing timing-accurate code in user space.

Supports asynchronous reads using the Notifiable method.

Definition at line 72 of file TivaNRZ.hxx.

Constructor & Destructor Documentation

◆ TivaNRZ()

template<class HW >
TivaNRZ< HW >::TivaNRZ ( const char *  name)

Constructor.

Parameters
nameis the device filesystem name (e.g. "/dev/nrz0")

Definition at line 148 of file TivaNRZ.hxx.

◆ ~TivaNRZ()

template<class HW >
TivaNRZ< HW >::~TivaNRZ ( )
inline

Definition at line 79 of file TivaNRZ.hxx.

Member Function Documentation

◆ disable()

template<class HW >
void TivaNRZ< HW >::disable ( )
privatevirtual

function to disable device

Implements Node.

Definition at line 183 of file TivaNRZ.hxx.

◆ enable()

template<class HW >
void TivaNRZ< HW >::enable ( )
privatevirtual

function to enable device

Implements Node.

Definition at line 159 of file TivaNRZ.hxx.

◆ flush_buffers()

template<class HW >
void TivaNRZ< HW >::flush_buffers ( )
inlineprivatevirtual

Discards all pending buffers.

Called after disable().

Implements Node.

Definition at line 123 of file TivaNRZ.hxx.

◆ interrupt_handler()

template<class HW >
void TivaNRZ< HW >::interrupt_handler ( )
inline

Handles a raw interrupt.

Definition at line 191 of file TivaNRZ.hxx.

◆ ioctl()

template<class HW >
int TivaNRZ< HW >::ioctl ( File file,
unsigned long int  key,
unsigned long  data 
)
privatevirtual

Request an ioctl transaction.

Parameters
filefile reference for this device
keyioctl key
datakey data

Reimplemented from FileIO.

Definition at line 247 of file TivaNRZ.hxx.

◆ os_interrupt_handler()

template<class HW >
void TivaNRZ< HW >::os_interrupt_handler ( )
inline

Handles a software interrupt to FreeRTOS.

Definition at line 233 of file TivaNRZ.hxx.

◆ read()

template<class HW >
ssize_t TivaNRZ< HW >::read ( File file,
void *  buf,
size_t  count 
)
privatevirtual

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 288 of file TivaNRZ.hxx.

◆ write()

template<class HW >
ssize_t TivaNRZ< HW >::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 106 of file TivaNRZ.hxx.

Member Data Documentation

◆ inputData_

template<class HW >
FixedQueue<uint32_t, HW::Q_SIZE> TivaNRZ< HW >::inputData_
private

Data to send measurements back to the application level.

Definition at line 132 of file TivaNRZ.hxx.

◆ lastLevel_

template<class HW >
unsigned TivaNRZ< HW >::lastLevel_
private

unused.

Todo:
delete

Definition at line 138 of file TivaNRZ.hxx.

◆ lastTimerValue_

template<class HW >
uint32_t TivaNRZ< HW >::lastTimerValue_
private

Free running timer's last value.

Definition at line 134 of file TivaNRZ.hxx.

◆ overflowed_

template<class HW >
bool TivaNRZ< HW >::overflowed_ = false
private

Flags when we lost data due to buffer overrun.

Definition at line 140 of file TivaNRZ.hxx.

◆ readableNotifiable_

template<class HW >
Notifiable* TivaNRZ< HW >::readableNotifiable_ = nullptr
private

Notifiable for asynchronous support.

Definition at line 142 of file TivaNRZ.hxx.

◆ reloadCount_

template<class HW >
uint32_t TivaNRZ< HW >::reloadCount_
private

How many times the free running timer overflowed.

Definition at line 136 of file TivaNRZ.hxx.


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