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

This class is an empty wrapper around MBed's USB CDC class. More...

Inheritance diagram for MbedAsyncUSBSerial:
NonBlockNode Node Device FileIO

Public Member Functions

 MbedAsyncUSBSerial (const char *name, uint16_t vendor_id=0x1f00, uint16_t product_id=0x2012, uint16_t product_release=0x0001)
 Constructor.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Protected Member Functions

bool EP2_OUT_callback () override
 Callback when EP2_OUT is ready.
 
bool EP2_IN_callback () override
 Callback when EP2_IN is ready.
 
- 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.
 
- 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.
 

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.
 
bool has_rx_buffer_data () OVERRIDE
 Called under a critical section.
 
bool has_tx_buffer_space () OVERRIDE
 Called under a critical section.
 
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.
 
void TxHelper ()
 Transmits txCount_ bytes from the txData_ buffer.
 

Private Attributes

unsigned overrunCount_
 How many times have we had to drop data to the floor due to buffer overrun.
 
uint8_t txData_ [MAX_TX_PACKET_LENGTH]
 packet assemby buffer from app to device
 
uint8_t rxData_ [MAX_RX_PACKET_LENGTH]
 packet assemby buffer from device to app
 
uint8_t txCount_
 number of valid characters in txData
 
uint8_t rxBegin_
 First valid character in rxData.
 
uint8_t rxEnd_
 1 + Last valid character in rxData.
 
uint8_t txPending_: 1
 transmission currently pending
 
uint8_t rxPending_: 1
 there is a packet in the USB block waiting
 
SyncNotifiable readSync_
 Helper object to block reader.
 
SyncNotifiable writeSync_
 Helper object to block writer.
 

Static Private Attributes

static const int MAX_TX_PACKET_LENGTH = 64
 What's the maximum packet length for transmit.
 
static const int MAX_RX_PACKET_LENGTH = 64
 What's the maximum packet length for receive.
 

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

This class is an empty wrapper around MBed's USB CDC class.

The difference between this and mbed::USBSerial is that this class does not have any buffering and no interaction with stdio, whereas mbed::USBSerial has the following buffering: it has a 128-byte receive buffer. it has an fd it has a FILE* with a default-sized send/receive buffer it requires mbed's custom glue code in the open(2) method, without which it crashes.

Definition at line 88 of file mbed_async_usbserial.cxx.

Constructor & Destructor Documentation

◆ MbedAsyncUSBSerial()

MbedAsyncUSBSerial::MbedAsyncUSBSerial ( const char *  name,
uint16_t  vendor_id = 0x1f00,
uint16_t  product_id = 0x2012,
uint16_t  product_release = 0x0001 
)
inline

Constructor.

Parameters
namedevice path to export (e.g. /dev/usbser0).
vendor_idUSB vendor ID to report
product_idUSB device ID to report
product_releaseUSB product version to report.

Definition at line 97 of file mbed_async_usbserial.cxx.

◆ ~MbedAsyncUSBSerial()

MbedAsyncUSBSerial::~MbedAsyncUSBSerial ( )
inline

Definition at line 110 of file mbed_async_usbserial.cxx.

Member Function Documentation

◆ disable()

void MbedAsyncUSBSerial::disable ( )
inlineprivatevirtual

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

Called with lock_ held.

Implements Node.

Definition at line 146 of file mbed_async_usbserial.cxx.

◆ enable()

void MbedAsyncUSBSerial::enable ( )
inlineprivatevirtual

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

Called with lock_ held.

Implements Node.

Definition at line 143 of file mbed_async_usbserial.cxx.

◆ EP2_IN_callback()

bool MbedAsyncUSBSerial::EP2_IN_callback ( )
inlineoverrideprotected

Callback when EP2_IN is ready.

Definition at line 130 of file mbed_async_usbserial.cxx.

◆ EP2_OUT_callback()

bool MbedAsyncUSBSerial::EP2_OUT_callback ( )
inlineoverrideprotected

Callback when EP2_OUT is ready.

Definition at line 116 of file mbed_async_usbserial.cxx.

◆ flush_buffers()

void MbedAsyncUSBSerial::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 149 of file mbed_async_usbserial.cxx.

◆ has_rx_buffer_data()

bool MbedAsyncUSBSerial::has_rx_buffer_data ( )
inlineprivatevirtual

Called under a critical section.

Returns
true if a read would not block right now.

Implements NonBlockNode.

Definition at line 153 of file mbed_async_usbserial.cxx.

◆ has_tx_buffer_space()

bool MbedAsyncUSBSerial::has_tx_buffer_space ( )
inlineprivatevirtual

Called under a critical section.

Returns
true if a write would not block right now.

Implements NonBlockNode.

Definition at line 158 of file mbed_async_usbserial.cxx.

◆ read()

ssize_t MbedAsyncUSBSerial::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

If we got a notification, we automatically notify the others in line. This handles the case if there are multiple threads blocked on the same input.

Implements FileIO.

Definition at line 170 of file mbed_async_usbserial.cxx.

◆ TxHelper()

void MbedAsyncUSBSerial::TxHelper ( )
inlineprivate

Transmits txCount_ bytes from the txData_ buffer.

Sets txPending and bytesLost as needed. Must be called from a critical section or ISR, when the previous pending transmit operation has finished.

Definition at line 318 of file mbed_async_usbserial.cxx.

◆ write()

ssize_t MbedAsyncUSBSerial::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

If we got a notification, we automatically notify the others in line. This handles the case if there are multiple threads blocked on the same input.

Implements FileIO.

Definition at line 250 of file mbed_async_usbserial.cxx.

Member Data Documentation

◆ MAX_RX_PACKET_LENGTH

const int MbedAsyncUSBSerial::MAX_RX_PACKET_LENGTH = 64
staticprivate

What's the maximum packet length for receive.

Definition at line 313 of file mbed_async_usbserial.cxx.

◆ MAX_TX_PACKET_LENGTH

const int MbedAsyncUSBSerial::MAX_TX_PACKET_LENGTH = 64
staticprivate

What's the maximum packet length for transmit.

Definition at line 311 of file mbed_async_usbserial.cxx.

◆ overrunCount_

unsigned MbedAsyncUSBSerial::overrunCount_
private

How many times have we had to drop data to the floor due to buffer overrun.

Definition at line 339 of file mbed_async_usbserial.cxx.

◆ readSync_

SyncNotifiable MbedAsyncUSBSerial::readSync_
private

Helper object to block reader.

Definition at line 353 of file mbed_async_usbserial.cxx.

◆ rxBegin_

uint8_t MbedAsyncUSBSerial::rxBegin_
private

First valid character in rxData.

Definition at line 347 of file mbed_async_usbserial.cxx.

◆ rxData_

uint8_t MbedAsyncUSBSerial::rxData_[MAX_RX_PACKET_LENGTH]
private

packet assemby buffer from device to app

Definition at line 343 of file mbed_async_usbserial.cxx.

◆ rxEnd_

uint8_t MbedAsyncUSBSerial::rxEnd_
private

1 + Last valid character in rxData.

Definition at line 349 of file mbed_async_usbserial.cxx.

◆ rxPending_

uint8_t MbedAsyncUSBSerial::rxPending_
private

there is a packet in the USB block waiting

Definition at line 351 of file mbed_async_usbserial.cxx.

◆ txCount_

uint8_t MbedAsyncUSBSerial::txCount_
private

number of valid characters in txData

Definition at line 345 of file mbed_async_usbserial.cxx.

◆ txData_

uint8_t MbedAsyncUSBSerial::txData_[MAX_TX_PACKET_LENGTH]
private

packet assemby buffer from app to device

Definition at line 341 of file mbed_async_usbserial.cxx.

◆ txPending_

uint8_t MbedAsyncUSBSerial::txPending_
private

transmission currently pending

Definition at line 350 of file mbed_async_usbserial.cxx.

◆ writeSync_

SyncNotifiable MbedAsyncUSBSerial::writeSync_
private

Helper object to block writer.

Definition at line 355 of file mbed_async_usbserial.cxx.


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