Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
dcc::LocalTrackIf Class Reference

StateFlow that accepts dcc::Packet structures and sends them to a local device driver for producing the track signal. More...

#include <LocalTrackIf.hxx>

Inheritance diagram for dcc::LocalTrackIf:
StateFlow< Buffer< dcc::Packet >, QList< 1 > > TypedStateFlow< MessageType, Base > FlowInterface< MessageType > dcc::LocalTrackIfSelect

Public Member Functions

 LocalTrackIf (Service *service, int pool_size)
 Constructs a TrackInterface from an fd to the mainline.
 
FixedPoolpool () OVERRIDE
 
void set_fd (int fd)
 You must call this function before sending any packets.
 
- Public Member Functions inherited from StateFlow< Buffer< dcc::Packet >, QList< 1 > >
 StateFlow (Service *service)
 Constructor.
 
- Public Member Functions inherited from TypedStateFlow< MessageType, Base >
 TypedStateFlow (Service *service)
 Constructor.
 
virtual ~TypedStateFlow ()
 Destructor.
 
void send (MessageType *msg, unsigned priority=UINT_MAX) OVERRIDE
 Sends a message to the state flow for processing.
 
- Public Member Functions inherited from FlowInterface< MessageType >
virtual MessageType * type_helper ()
 This function is never user in the code, but GDB can use it to infer the correct message types.
 
MessageType * alloc ()
 Synchronously allocates a message buffer from the pool of this flow.
 
void alloc_async (Executable *target)
 Asynchronously allocates a message buffer from the pool of this flow.
 

Protected Member Functions

Action entry () OVERRIDE
 Entry into the StateFlow activity.
 
Action finish ()
 
- Protected Member Functions inherited from TypedStateFlow< MessageType, Base >
void release () OVERRIDE
 Unrefs the current buffer.
 
void return_buffer ()
 For state flows that are operated using invoke_subflow_and_wait this is a way to hand back the buffer to the caller.
 
MessageType * message ()
 
MessageType * transfer_message ()
 Releases ownership of the current message.
 

Protected Attributes

int fd_
 Filedes of the device to which we are writing the generated packets.
 
FixedPool pool_
 Packet pool from which to allocate packets.
 

Additional Inherited Members

- Public Types inherited from TypedStateFlow< MessageType, Base >
typedef Base::Action Action
 Allows using Action without having StateFlowBase:: prefix in front of it.
 
- Public Types inherited from FlowInterface< MessageType >
typedef MessageType message_type
 Stores the message template type for external reference.
 
- Static Public Member Functions inherited from FlowInterface< MessageType >
static MessageType * cast_alloc (QMember *entry)
 Down casts and initializes an asynchronous allocation result to the appropriate flow's buffer type.
 

Detailed Description

StateFlow that accepts dcc::Packet structures and sends them to a local device driver for producing the track signal.

The device driver must support the notifiable-based asynchronous write model.

Definition at line 51 of file LocalTrackIf.hxx.

Constructor & Destructor Documentation

◆ LocalTrackIf()

dcc::LocalTrackIf::LocalTrackIf ( Service service,
int  pool_size 
)

Constructs a TrackInterface from an fd to the mainline.

This class currently does synchronous writes to the device. In order not to block the executor, you have to create a new threadexecutor.

Parameters
serviceTHE EXECUTOR OF THIS SERVICE WILL BE BLOCKED.
pool_sizewill determine how many packets the current flow's alloc() will have.

Definition at line 57 of file LocalTrackIf.cxx.

Member Function Documentation

◆ entry()

Action dcc::LocalTrackIf::entry ( )
protectedvirtual

Entry into the StateFlow activity.

Pure virtual which must be defined by derived class.

Returns
function pointer to next state

Implements TypedStateFlow< MessageType, Base >.

Reimplemented in dcc::LocalTrackIfSelect.

◆ finish()

Action dcc::LocalTrackIf::finish ( )
inlineprotected
Returns
next action.

Definition at line 81 of file LocalTrackIf.hxx.

◆ pool()

FixedPool * dcc::LocalTrackIf::pool ( )
inlinevirtual
Returns
the buffer pool to use for sending messages to this flow. This is to be used as a hint, the caller is allowed to send buffers from different source.
Todo:
(stbaker) change this to Pool* once it supports async alloc.

Reimplemented from FlowInterface< MessageType >.

Definition at line 65 of file LocalTrackIf.hxx.

◆ set_fd()

void dcc::LocalTrackIf::set_fd ( int  fd)
inline

You must call this function before sending any packets.

Parameters
fdis the file descriptor to /dev/mainline.

Definition at line 72 of file LocalTrackIf.hxx.

Member Data Documentation

◆ fd_

int dcc::LocalTrackIf::fd_
protected

Filedes of the device to which we are writing the generated packets.

Definition at line 87 of file LocalTrackIf.hxx.

◆ pool_

FixedPool dcc::LocalTrackIf::pool_
protected

Packet pool from which to allocate packets.

Definition at line 89 of file LocalTrackIf.hxx.


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