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

CAN driver implementation using an mbed-supported CAN device. More...

Inheritance diagram for MbedCanDriver:
Can Atomic NonBlockNode Node Device FileIO

Public Types

enum  Instance { CAN1 , CAN2 }
 Which hardware device to use. More...
 

Public Member Functions

 MbedCanDriver (Instance instance, const char *dev, int frequency)
 Constructor.
 
- Public Member Functions inherited from Can
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.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Private Member Functions

void enable () override
 function to enable device
 
void disable () override
 function to enable device
 
void flush_buffers () override
 function to disable device
 
void interrupt ()
 called after disabling the dev
 
void tx_msg () OVERRIDE
 Try and transmit a message.
 

Private Attributes

mbed::CAN mbedCan_
 mBed CAN implementation object.
 
volatile uint32_t * SR_
 Status register.
 
char txPending_
 Whether we have an output frame pending (1) or the output frame is free (0).
 

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 Public Attributes inherited from Can
static unsigned numReceivedPackets_ {0}
 
static unsigned numTransmittedPackets_ {0}
 
- Protected Member Functions inherited from Can
 Can (const char *ignored)
 Constructor.
 
 ~Can ()
 Destructor.
 
 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.
 
bool has_tx_buffer_space () OVERRIDE
 
bool has_rx_buffer_data () OVERRIDE
 
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.
 
- 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.
 
- Protected Attributes inherited from Can
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
 
- 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

CAN driver implementation using an mbed-supported CAN device.

Currently the pin numbers are hard-coded for the LPC1768 and LPC2387 devices.

This driver does supports select-based asynchronous operation.

Definition at line 59 of file mbed_can.cpp.

Member Enumeration Documentation

◆ Instance

Which hardware device to use.

Definition at line 63 of file mbed_can.cpp.

Constructor & Destructor Documentation

◆ MbedCanDriver()

MbedCanDriver::MbedCanDriver ( Instance  instance,
const char *  dev,
int  frequency 
)
inline

Constructor.

Parameters
instanceWhich hardware device to use.
devfilename of the device to export (e.g. "/dev/can0");
frequencyCAN bus speed (e.g. 125000).

Definition at line 72 of file mbed_can.cpp.

Member Function Documentation

◆ disable()

void MbedCanDriver::disable ( )
inlineoverrideprivatevirtual

function to enable device

Implements Can.

Definition at line 83 of file mbed_can.cpp.

◆ enable()

void MbedCanDriver::enable ( )
inlineoverrideprivatevirtual

function to enable device

Implements Can.

Definition at line 82 of file mbed_can.cpp.

◆ flush_buffers()

void MbedCanDriver::flush_buffers ( )
inlineoverrideprivatevirtual

function to disable device

Reimplemented from Can.

Definition at line 84 of file mbed_can.cpp.

◆ interrupt()

void MbedCanDriver::interrupt ( )
private

called after disabling the dev

Handler for CAN device.

Called from the mbed irq handler.

Todo:
(balazs.racz): need to see what needs to be done for acking the interrupt, depending on what the interrupt fnction attributes say.

Definition at line 141 of file mbed_can.cpp.

◆ tx_msg()

void MbedCanDriver::tx_msg ( )
privatevirtual

Try and transmit a message.

Does nothing if there is no message to transmit or no write buffers to transmit via.

Todo:
(balazs.racz): think about how we could do with a shorter critical section. The problem is that an ISR might decide to send off the next frame ahead of us.

Implements Can.

Definition at line 101 of file mbed_can.cpp.

Member Data Documentation

◆ mbedCan_

mbed::CAN MbedCanDriver::mbedCan_
private

mBed CAN implementation object.

Definition at line 90 of file mbed_can.cpp.

◆ SR_

volatile uint32_t* MbedCanDriver::SR_
private

Status register.

Definition at line 92 of file mbed_can.cpp.

◆ txPending_

char MbedCanDriver::txPending_
private

Whether we have an output frame pending (1) or the output frame is free (0).

Definition at line 95 of file mbed_can.cpp.


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