Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
Stm32RailcomSender Class Reference
Inheritance diagram for Stm32RailcomSender:
RailcomDriver Stm32Uart Serial Node Device FileIO

Public Member Functions

 Stm32RailcomSender (const char *name, USART_TypeDef *base, IRQn_Type interrupt)
 
void send_ch1 (const DCCFeedback *ch1_pkt) override
 Specifies what packet should be sent for the channel1 cutout.
 
void send_ch2 (const DCCFeedback *ch2_pkt) override
 Specifies what packet should be sent for the channel2 cutout.
 
ssize_t write (File *file, const void *buf, size_t count) override
 Write to a file or device.
 
ssize_t read (File *file, void *buf, size_t count) override
 Read from a file or device.
 

Private Member Functions

void feedback_sample () override
 No implementation needed.
 
void start_cutout () override
 Called at the beginning of the first window.
 
void middle_cutout () override
 Called at the beginning of the middle window.
 
void end_cutout () override
 Called after the cutout is over.
 
void no_cutout () override
 Called instead of start/mid/end-cutout at the end of the current packet if there was no cutout requested.
 
void set_feedback_key (uint32_t key) override
 Feedback key is set by the DCC decoder driver.
 

Private Attributes

uintptr_t expectedFeedbackKey_ = 0
 What should be the feedback key in the packet.
 
const DCCFeedbackch1Pkt_ = nullptr
 The packet to send in channel 1. Externally owned.
 
const DCCFeedbackch2Pkt_ = nullptr
 The packet to send in channel 2. Externally owned.
 

Additional Inherited Members

- Protected Member Functions inherited from Stm32Uart
void enable () override
 function to enable device
 
void disable () override
 function to disable device
 
void tx_char () override
 Try and transmit a message.
 
 Stm32Uart (const char *name, USART_TypeDef *base, IRQn_Type interrupt)
 Constructor.
 
 ~Stm32Uart ()
 Destructor.
 
void interrupt_handler ()
 handle an interrupt.
 
int ioctl (File *file, unsigned long int key, unsigned long data) override
 Request an ioctl transaction.
 
- Protected Member Functions inherited from Serial
 Serial (const char *name, size_t tx_buffer_size=config_serial_tx_buffer_size(), size_t rx_buffer_size=config_serial_rx_buffer_size())
 Constructor.
 
 ~Serial ()
 Destructor.
 
bool select (File *file, int mode) OVERRIDE
 Device select method.
 
void flush_buffers () OVERRIDE
 Discards all pending buffers.
 
- 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 Stm32Uart
IRQn_Type interrupt
 interrupt of this device
 
UART_HandleTypeDef uartHandle
 Handle to the UART setup.
 
- Protected Attributes inherited from Serial
DeviceBuffer< uint8_t > * txBuf
 transmit buffer
 
DeviceBuffer< uint8_t > * rxBuf
 receive buffer
 
unsigned int overrunCount
 overrun count
 
- 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 Stm32Uart
static uint8_t interrupt3_to_8EnableCnt = 0
 number of times interrupts have been enabled on these UART channels
 
static uint8_t interrupt2_8EnableCnt = 0
 
- 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

Definition at line 41 of file Stm32RailcomSender.hxx.

Constructor & Destructor Documentation

◆ Stm32RailcomSender()

Stm32RailcomSender::Stm32RailcomSender ( const char *  name,
USART_TypeDef *  base,
IRQn_Type  interrupt 
)
inline

Definition at line 44 of file Stm32RailcomSender.hxx.

Member Function Documentation

◆ end_cutout()

void Stm32RailcomSender::end_cutout ( )
inlineoverrideprivatevirtual

Called after the cutout is over.

Implements RailcomDriver.

Definition at line 96 of file Stm32RailcomSender.hxx.

◆ feedback_sample()

void Stm32RailcomSender::feedback_sample ( )
inlineoverrideprivatevirtual

No implementation needed.

Implements RailcomDriver.

Definition at line 88 of file Stm32RailcomSender.hxx.

◆ middle_cutout()

void Stm32RailcomSender::middle_cutout ( )
overrideprivatevirtual

Called at the beginning of the middle window.

Implements RailcomDriver.

Definition at line 66 of file Stm32RailcomSender.cxx.

◆ no_cutout()

void Stm32RailcomSender::no_cutout ( )
inlineoverrideprivatevirtual

Called instead of start/mid/end-cutout at the end of the current packet if there was no cutout requested.

Implements RailcomDriver.

Definition at line 103 of file Stm32RailcomSender.hxx.

◆ read()

ssize_t Stm32RailcomSender::read ( File file,
void *  buf,
size_t  count 
)
inlineoverridevirtual

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

Reimplemented from Serial.

Definition at line 79 of file Stm32RailcomSender.hxx.

◆ send_ch1()

void Stm32RailcomSender::send_ch1 ( const DCCFeedback ch1_pkt)
inlineoverridevirtual

Specifies what packet should be sent for the channel1 cutout.

It is okay to specify the same packet pointer for ch1 and ch2 cutout.

Parameters
ch1_pktthe RailCom packet. Only the ch1 data will be read from this packet. This pointer must stay alive until the next DCC packet comes. The FeedbackKey in this packet must be correct for the current DCC packet or else the data will not be sent.

Reimplemented from RailcomDriver.

Definition at line 57 of file Stm32RailcomSender.hxx.

◆ send_ch2()

void Stm32RailcomSender::send_ch2 ( const DCCFeedback ch2_pkt)
inlineoverridevirtual

Specifies what packet should be sent for the channel2 cutout.

It is okay to specify the same packet pointer for ch1 and ch2 cutout.

Parameters
ch2_pktthe RailCom packet. Only the ch2 data will be read from this packet. This pointer must stay alive until the next DCC packet comes. The FeedbackKey in this packet must be correct for the current DCC packet or else the data will not be sent.

Reimplemented from RailcomDriver.

Definition at line 68 of file Stm32RailcomSender.hxx.

◆ set_feedback_key()

void Stm32RailcomSender::set_feedback_key ( uint32_t  key)
inlineoverrideprivatevirtual

Feedback key is set by the DCC decoder driver.

The feedback packet must carry the same feedback key or else it will not be transmitted.

Implements RailcomDriver.

Definition at line 111 of file Stm32RailcomSender.hxx.

◆ start_cutout()

void Stm32RailcomSender::start_cutout ( )
overrideprivatevirtual

Called at the beginning of the first window.

Implements RailcomDriver.

Definition at line 42 of file Stm32RailcomSender.cxx.

◆ write()

ssize_t Stm32RailcomSender::write ( File file,
const void *  buf,
size_t  count 
)
inlineoverridevirtual

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

Reimplemented from Serial.

Definition at line 73 of file Stm32RailcomSender.hxx.

Member Data Documentation

◆ ch1Pkt_

const DCCFeedback* Stm32RailcomSender::ch1Pkt_ = nullptr
private

The packet to send in channel 1. Externally owned.

Definition at line 123 of file Stm32RailcomSender.hxx.

◆ ch2Pkt_

const DCCFeedback* Stm32RailcomSender::ch2Pkt_ = nullptr
private

The packet to send in channel 2. Externally owned.

Definition at line 125 of file Stm32RailcomSender.hxx.

◆ expectedFeedbackKey_

uintptr_t Stm32RailcomSender::expectedFeedbackKey_ = 0
private

What should be the feedback key in the packet.

This value comes from the DCC driver and is compared to the RailCom packets we should be sending at the beginning of the cutout windows.

Definition at line 120 of file Stm32RailcomSender.hxx.


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