Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
openlcb::CanMessageWriteFlow Class Reference

Implements the write-side conversion logic from generic messages to CAN frames. More...

#include <IfCanImpl.hxx>

Inheritance diagram for openlcb::CanMessageWriteFlow:
openlcb::WriteFlowBase StateFlow< Buffer< GenMessage >, QList< 4 > > TypedStateFlow< MessageType, Base > FlowInterface< MessageType > openlcb::AddressedCanMessageWriteFlow openlcb::GlobalCanMessageWriteFlow openlcb::CanDatagramWriteFlow

Public Member Functions

 CanMessageWriteFlow (IfCan *if_can)
 
IfCanif_can ()
 
- Public Member Functions inherited from openlcb::WriteFlowBase
 WriteFlowBase (If *async_if)
 
- Public Member Functions inherited from StateFlow< Buffer< GenMessage >, QList< 4 > >
 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.
 
virtual Action entry () override=0
 Entry into the StateFlow activity.
 
- Public Member Functions inherited from FlowInterface< MessageType >
virtual Poolpool ()
 
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 send_to_hardware () override
 This function will be called (on the main executor) to initiate sending this message to the hardware.
 
Action find_local_alias ()
 Performs the local alias lookup and branches depending on whether we found a local alias or not.
 
Action get_can_frame_buffer ()
 
- Protected Member Functions inherited from openlcb::WriteFlowBase
virtual Action send_to_local_node ()
 This state is called when an addressed message's destination is a node that is local to this interface.
 
virtual Action send_finished ()
 Virtual method called after the send is completed, i.e., all the frames are generated and sent to the hardware.
 
Ifasync_if ()
 
GenMessagenmsg ()
 Implementations shall call this function when they are done with sending the packet.
 
Action addressed_entry ()
 Addressed write flows should call this state BEFORE sending to the hardware.
 
Action global_entry ()
 Global write flows should return to this state AFTER sending the message to the hardware.
 
- 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

NodeAlias srcAlias_
 Source node alias.
 
NodeAlias dstAlias_
 Destination node alias.
 
uint8_t dataOffset_
 for continuation frames: which offset in the Buffer should we start the payload at.
 

Private Member Functions

Action allocate_new_alias ()
 
Action send_amd_frame ()
 
Action src_alias_lookup_done ()
 
virtual Action fill_can_frame_buffer ()
 

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

Implements the write-side conversion logic from generic messages to CAN frames.

Definition at line 50 of file IfCanImpl.hxx.

Constructor & Destructor Documentation

◆ CanMessageWriteFlow()

openlcb::CanMessageWriteFlow::CanMessageWriteFlow ( IfCan if_can)
inline

Definition at line 53 of file IfCanImpl.hxx.

Member Function Documentation

◆ allocate_new_alias()

Action openlcb::CanMessageWriteFlow::allocate_new_alias ( )
inlineprivate

At this point we assume that there will always be at least one alias that is reserved but not yet used. If we want to break that assumption we need to have a method to kick off an alias allocation right here.

@TODO(balazs.racz): implement proper local alias reclaim/reuse mechanism.

Definition at line 97 of file IfCanImpl.hxx.

◆ fill_can_frame_buffer()

virtual Action openlcb::CanMessageWriteFlow::fill_can_frame_buffer ( )
inlineprivatevirtual

Definition at line 149 of file IfCanImpl.hxx.

◆ find_local_alias()

Action openlcb::CanMessageWriteFlow::find_local_alias ( )
inlineprotected

Performs the local alias lookup and branches depending on whether we found a local alias or not.

Definition at line 85 of file IfCanImpl.hxx.

◆ get_can_frame_buffer()

Action openlcb::CanMessageWriteFlow::get_can_frame_buffer ( )
inlineprotected

Definition at line 142 of file IfCanImpl.hxx.

◆ if_can()

IfCan * openlcb::CanMessageWriteFlow::if_can ( )
inline

Definition at line 57 of file IfCanImpl.hxx.

◆ send_amd_frame()

Action openlcb::CanMessageWriteFlow::send_amd_frame ( )
inlineprivate

Definition at line 123 of file IfCanImpl.hxx.

◆ send_to_hardware()

Action openlcb::CanMessageWriteFlow::send_to_hardware ( )
inlineoverrideprotectedvirtual

This function will be called (on the main executor) to initiate sending this message to the hardware.

The flow will then execute the returned action.

NOTE: it is possible that this functon will never be called for a given flow.

Implements openlcb::WriteFlowBase.

Definition at line 68 of file IfCanImpl.hxx.

◆ src_alias_lookup_done()

Action openlcb::CanMessageWriteFlow::src_alias_lookup_done ( )
inlineprivate

Definition at line 136 of file IfCanImpl.hxx.

Member Data Documentation

◆ dataOffset_

uint8_t openlcb::CanMessageWriteFlow::dataOffset_
protected

for continuation frames: which offset in the Buffer should we start the payload at.

Definition at line 65 of file IfCanImpl.hxx.

◆ dstAlias_

NodeAlias openlcb::CanMessageWriteFlow::dstAlias_
protected

Destination node alias.

Definition at line 64 of file IfCanImpl.hxx.

◆ srcAlias_

NodeAlias openlcb::CanMessageWriteFlow::srcAlias_
protected

Source node alias.

Definition at line 63 of file IfCanImpl.hxx.


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