Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
Can Class Referenceabstract

Base class for a CAN device for the Arduino environment. More...

#include <Can.hxx>

Inheritance diagram for Can:
Atomic NonBlockNode Node Device FileIO BenchmarkCan LpcCan MCP2515Can MbedCanDriver Stm32Can TCAN4550Can TCAN4550Can TivaCan

Public Member Functions

int available ()
 
int availableForWrite ()
 
int read (struct can_frame *frame)
 Read a frame if there is one available.
 
int write (const struct can_frame *frame)
 Send a frame if there is space available.
 
virtual void enable ()=0
 function to enable device
 
virtual void disable ()=0
 function to disable device
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Static Public Attributes

static unsigned numReceivedPackets_ {0}
 
static unsigned numTransmittedPackets_ {0}
 

Protected Member Functions

 Can (const char *ignored)
 Constructor.
 
 ~Can ()
 Destructor.
 
virtual void tx_msg ()=0
 function to try and transmit a message
 
 Can (const char *name, size_t tx_buffer_size=config_can_tx_buffer_size(), size_t rx_buffer_size=config_can_rx_buffer_size())
 Constructor.
 
 ~Can ()
 Destructor.
 
void enable () override=0
 function to enable device
 
void disable () override=0
 function to disable device
 
virtual void tx_msg ()=0
 function to try and transmit a message
 
bool has_tx_buffer_space () OVERRIDE
 
bool has_rx_buffer_data () OVERRIDE
 
void flush_buffers () OVERRIDE
 called after disable
 
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.
 
bool select (File *file, int mode) OVERRIDE
 Device select method.
 
- Protected Member Functions inherited from Atomic
void lock ()
 
void unlock ()
 
- Protected Member Functions inherited from NonBlockNode
 NonBlockNode (const char *name)
 Constructor.
 
int ioctl (File *file, unsigned long int key, unsigned long data) OVERRIDE
 Request an ioctl transaction.
 
- 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.
 
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 
- 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.
 

Protected Attributes

DeviceBuffer< struct can_frame > * txBuf
 transmit buffer
 
DeviceBuffer< struct can_frame > * rxBuf
 receive buffer
 
unsigned int overrunCount
 overrun count
 
unsigned int busOffCount
 bus-off count
 
unsigned int softErrorCount
 soft error count
 
- Protected Attributes inherited from NonBlockNode
NotifiablereadableNotify_
 This will be notified if the device has data avilable for read.
 
NotifiablewritableNotify_
 This will be notified if the device has buffer avilable for write.
 
- 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

 DISALLOW_COPY_AND_ASSIGN (Can)
 
 DISALLOW_COPY_AND_ASSIGN (Can)
 

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

Base class for a CAN device for the Arduino environment.

Private data for a can device.

Definition at line 47 of file arduino/Can.hxx.

Constructor & Destructor Documentation

◆ Can() [1/2]

Can::Can ( const char *  ignored)
inlineprotected

Constructor.

Parameters
nameignored, may be null

Definition at line 97 of file arduino/Can.hxx.

◆ ~Can() [1/2]

Can::~Can ( )
inlineprotected

Destructor.

Definition at line 110 of file arduino/Can.hxx.

◆ Can() [2/2]

Can::Can ( const char *  name,
size_t  tx_buffer_size = config_can_tx_buffer_size(),
size_t  rx_buffer_size = config_can_rx_buffer_size() 
)
inlineprotected

Constructor.

Parameters
namedevice name in file system
tx_buffer_sizetransmit buffer size in can frames
rx_buffer_sizereceive buffer size in can frames

Definition at line 57 of file common/Can.hxx.

◆ ~Can() [2/2]

Can::~Can ( )
inlineprotected

Destructor.

Definition at line 71 of file common/Can.hxx.

Member Function Documentation

◆ available()

int Can::available ( )
inline
Returns
number of CAN frames available for read (input frames).

Definition at line 54 of file arduino/Can.hxx.

◆ availableForWrite()

int Can::availableForWrite ( )
inline
Returns
number of CAN frames available for write (space in output buffer).

Definition at line 61 of file arduino/Can.hxx.

◆ disable() [1/2]

void Can::disable ( )
overrideprotectedpure virtual

function to disable device

Implements Node.

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ disable() [2/2]

virtual void Can::disable ( )
pure virtual

function to disable device

Implements Node.

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ enable() [1/2]

void Can::enable ( )
overrideprotectedpure virtual

function to enable device

Implements Node.

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ enable() [2/2]

virtual void Can::enable ( )
pure virtual

function to enable device

Implements Node.

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ flush_buffers()

void Can::flush_buffers ( )
protectedvirtual

called after disable

Flush the receive and transmit buffers for this device.

Implements Node.

Reimplemented in TCAN4550Can, TCAN4550Can, and MbedCanDriver.

Definition at line 46 of file common/Can.cxx.

◆ has_rx_buffer_data()

bool Can::has_rx_buffer_data ( )
inlineprotectedvirtual
Todo:
(Stuart Baker) remove once we switch over to select().
Returns
true if there is data in the receive buffer, false if all data has been consumed.

Implements NonBlockNode.

Definition at line 93 of file common/Can.hxx.

◆ has_tx_buffer_space()

bool Can::has_tx_buffer_space ( )
inlineprotectedvirtual
Todo:
(Stuart Baker) remove once we switch over to select().
Returns
true if there is space in the transmit buffer, false if transmit buffers are full (i.e. a transmit would block).

Implements NonBlockNode.

Definition at line 85 of file common/Can.hxx.

◆ read() [1/2]

ssize_t Can::read ( File file,
void *  buf,
size_t  count 
)
protectedvirtual

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.

Reimplemented in TCAN4550Can, and TCAN4550Can.

Definition at line 58 of file common/Can.cxx.

◆ read() [2/2]

int Can::read ( struct can_frame *  frame)
inline

Read a frame if there is one available.

Parameters
framewill be filled with the input CAN frame.
Returns
0 or 1 depending on whether a frame was read or not.

Definition at line 69 of file arduino/Can.hxx.

◆ select()

bool Can::select ( File file,
int  mode 
)
protectedvirtual

Device select method.

Default impementation returns true.

Parameters
filereference to the file
modeFREAD for read active, FWRITE for write active, 0 for exceptions
Returns
true if active, false if inactive

Reimplemented from FileIO.

Reimplemented in TCAN4550Can, and TCAN4550Can.

Definition at line 168 of file common/Can.cxx.

◆ tx_msg() [1/2]

virtual void Can::tx_msg ( )
protectedpure virtual

function to try and transmit a message

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ tx_msg() [2/2]

virtual void Can::tx_msg ( )
protectedpure virtual

function to try and transmit a message

Implemented in BenchmarkCan, TCAN4550Can, MCP2515Can, TCAN4550Can, LpcCan, MbedCanDriver, Stm32Can, and TivaCan.

◆ write() [1/2]

int Can::write ( const struct can_frame *  frame)
inline

Send a frame if there is space available.

Parameters
framethe output CAN frame.
Returns
0 or 1 depending on whether the write happened or not.

Definition at line 79 of file arduino/Can.hxx.

◆ write() [2/2]

ssize_t Can::write ( File file,
const void *  buf,
size_t  count 
)
protectedvirtual

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.

Reimplemented in TCAN4550Can, and TCAN4550Can.

Definition at line 110 of file common/Can.cxx.

Member Data Documentation

◆ busOffCount

unsigned int Can::busOffCount
protected

bus-off count

Definition at line 121 of file arduino/Can.hxx.

◆ numReceivedPackets_

static unsigned Can::numReceivedPackets_ {0}
static

Definition at line 39 of file arduino/Can.hxx.

◆ numTransmittedPackets_

static unsigned Can::numTransmittedPackets_ {0}
static

Definition at line 40 of file arduino/Can.hxx.

◆ overrunCount

unsigned int Can::overrunCount
protected

overrun count

Definition at line 120 of file arduino/Can.hxx.

◆ rxBuf

DeviceBuffer< struct can_frame > * Can::rxBuf
protected

receive buffer

Definition at line 119 of file arduino/Can.hxx.

◆ softErrorCount

unsigned int Can::softErrorCount
protected

soft error count

soff error count

Definition at line 122 of file arduino/Can.hxx.

◆ txBuf

DeviceBuffer< struct can_frame > * Can::txBuf
protected

transmit buffer

Definition at line 118 of file arduino/Can.hxx.


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