|
Open Model Railroad Network (OpenMRN)
|
This class is an empty wrapper around MBed's USB CDC class. More...
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 File * | file_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 | |
| Notifiable * | readableNotify_ |
| This will be notified if the device has data avilable for read. | |
| Notifiable * | writableNotify_ |
| 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 | |
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.
|
inline |
Constructor.
| name | device path to export (e.g. /dev/usbser0). |
| vendor_id | USB vendor ID to report |
| product_id | USB device ID to report |
| product_release | USB product version to report. |
Definition at line 97 of file mbed_async_usbserial.cxx.
|
inline |
Definition at line 110 of file mbed_async_usbserial.cxx.
|
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.
|
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.
|
inlineoverrideprotected |
Callback when EP2_IN is ready.
Definition at line 130 of file mbed_async_usbserial.cxx.
|
inlineoverrideprotected |
Callback when EP2_OUT is ready.
Definition at line 116 of file mbed_async_usbserial.cxx.
|
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.
|
inlineprivatevirtual |
Called under a critical section.
Implements NonBlockNode.
Definition at line 153 of file mbed_async_usbserial.cxx.
|
inlineprivatevirtual |
Called under a critical section.
Implements NonBlockNode.
Definition at line 158 of file mbed_async_usbserial.cxx.
|
inlineprivatevirtual |
Read from a file or device.
| file | file reference for this device |
| buf | location to place read data |
| count | number of bytes to read |
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.
|
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.
|
inlineprivatevirtual |
Write to a file or device.
| file | file reference for this device |
| buf | location to find write data |
| count | number of bytes to write |
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.
|
staticprivate |
What's the maximum packet length for receive.
Definition at line 313 of file mbed_async_usbserial.cxx.
|
staticprivate |
What's the maximum packet length for transmit.
Definition at line 311 of file mbed_async_usbserial.cxx.
|
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.
|
private |
Helper object to block reader.
Definition at line 353 of file mbed_async_usbserial.cxx.
|
private |
First valid character in rxData.
Definition at line 347 of file mbed_async_usbserial.cxx.
|
private |
packet assemby buffer from device to app
Definition at line 343 of file mbed_async_usbserial.cxx.
|
private |
1 + Last valid character in rxData.
Definition at line 349 of file mbed_async_usbserial.cxx.
|
private |
there is a packet in the USB block waiting
Definition at line 351 of file mbed_async_usbserial.cxx.
|
private |
number of valid characters in txData
Definition at line 345 of file mbed_async_usbserial.cxx.
|
private |
packet assemby buffer from app to device
Definition at line 341 of file mbed_async_usbserial.cxx.
|
private |
transmission currently pending
Definition at line 350 of file mbed_async_usbserial.cxx.
|
private |
Helper object to block writer.
Definition at line 355 of file mbed_async_usbserial.cxx.