Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
openlcb::SimpleTcpStack Class Reference
Inheritance diagram for openlcb::SimpleTcpStack:
openlcb::SimpleTcpStackBase openlcb::SimpleStackBase

Public Member Functions

 SimpleTcpStack (const openlcb::NodeID node_id)
 
Nodenode () override
 
- Public Member Functions inherited from openlcb::SimpleTcpStackBase
 SimpleTcpStackBase (const openlcb::NodeID node_id)
 
void add_tcp_port_select (int fd, Notifiable *on_error=nullptr)
 Adds a new link to the TCP interface.
 
- Public Member Functions inherited from openlcb::SimpleStackBase
 SimpleStackBase (std::function< std::unique_ptr< PhysicalIf >()> create_if_helper)
 
Executor< EXECUTOR_PRIORITIES > * executor ()
 
Serviceservice ()
 
Ififace ()
 
DatagramServicedg_service ()
 
SimpleInfoFlowinfo_flow ()
 Accessor for clients that have their custom SNIP-like handler.
 
MemoryConfigHandlermemory_config_handler ()
 
ConfigUpdateServiceconfig_service ()
 
void set_tx_activity_led (const Gpio *led, long long period=MSEC_TO_NSEC(33))
 Adds an activiy LED which will be flashed every time a message is sent from this node to the network.
 
void restart_stack ()
 Reinitializes the node.
 
void loop_executor (bool delay_start=false)
 Donates the current thread to the executor.
 
void start_after_delay ()
 Call this function when you used delay_start upon starting the executor.
 
void start_executor_thread (const char *name, int priority, size_t stack_size, bool delay_start=false)
 Instructs the executor to create a new thread and run in there.
 
int create_config_file_if_needed (const InternalConfigData &ofs, uint16_t expected_version, unsigned file_size)
 Tries to open the config file; if not existant, the size too small, or the version number is mismatched, then creates a new file of the given size with all 0xFF bytes inside.
 
int check_version_and_factory_reset (const InternalConfigData &ofs, uint16_t expected_version, bool force=false)
 Checks the version information in the EEPROM and performs a factory reset if incorrect or if force is set.
 
void send_event (uint64_t event_id)
 Helper function to send an event report to the bus.
 
void send_message_to (Defs::MTI mti, NodeHandle dst, const string &payload=EMPTY_PAYLOAD)
 Sends an addressed message to the bus.
 

Private Member Functions

void start_node () override
 Hook for clients to initialize the node-specific components.
 
uint64_t get_pip () override
 Get the PIP response value.
 

Private Attributes

DefaultNode node_
 The actual node.
 
ProtocolIdentificationHandler pipHandler_ {&node_, PIP_RESPONSE}
 Handles PIP requests.
 
SNIPHandler snipHandler_ {iface(), &node_, &infoFlow_}
 Handles SNIP requests.
 

Static Private Attributes

static const auto PIP_RESPONSE
 

Additional Inherited Members

- Static Public Member Functions inherited from openlcb::SimpleStackBase
static void factory_reset_all_events (const InternalConfigData &ofs, uint64_t node_id, int fd)
 Overwrites all events in the eeprom with a brand new event ID.
 
static void set_event_offsets (const vector< uint16_t > *offsets)
 Call this function at the beginning of appl_main, just before {} or { create_config_file_if_needed} if the list of event offsets are dyamically created instead of statically linked.
 
- Static Public Attributes inherited from openlcb::SimpleStackBase
static const unsigned EXECUTOR_PRIORITIES = 5
 
- Protected Member Functions inherited from openlcb::SimpleTcpStackBase
void start_iface (bool restart) override
 Helper function for start_stack et al.
 
- Protected Member Functions inherited from openlcb::SimpleStackBase
void start_stack (bool delay_start)
 Call this function once after the actual IO ports are set up.
 
void default_start_node ()
 Exports the memory config spaces that are typically used for a complex node.
 
- Protected Attributes inherited from openlcb::SimpleStackBase
Executor< EXECUTOR_PRIORITIES > executor_ {NO_THREAD()}
 This executor's threads will be handled.
 
Service service_ {&executor_}
 Default service on the particular executor.
 
std::unique_ptr< PhysicalIfifaceHolder_
 Pointer to the polymorphic implementation of the OpenLCB If.
 
Ififace_ {ifaceHolder_->iface()}
 The OpenLCB interface object. Owned by ifaceHolder_;.
 
DatagramServicedatagramService_ {ifaceHolder_->datagram_service()}
 The datagram service bound to the interface object.
 
ConfigUpdateFlow configUpdateFlow_ {iface()}
 Calls the config listeners with the configuration FD.
 
InitializeFlow initFlow_ {&service_}
 The initialization flow takes care for node startup duties.
 
EventService eventService_ {iface()}
 Dispatches event protocol requests to the event handlers.
 
SimpleInfoFlow infoFlow_ {iface()}
 General flow for simple info requests.
 
MemoryConfigHandler memoryConfigHandler_
 
std::unique_ptr< HubFlowgcHub_
 All packets are forwarded to this hub in gridconnect format, if needed.
 
std::unique_ptr< GCAdapterBasegcAdapter_
 Bridge between canHub_ and gcHub_. Lazily initialized.
 
std::vector< std::unique_ptr< Destructable > > additionalComponents_
 Stores and keeps ownership of optional components.
 

Detailed Description

Definition at line 649 of file SimpleStack.hxx.

Constructor & Destructor Documentation

◆ SimpleTcpStack()

openlcb::SimpleTcpStack::SimpleTcpStack ( const openlcb::NodeID  node_id)

Definition at line 98 of file SimpleStack.cxx.

Member Function Documentation

◆ get_pip()

uint64_t openlcb::SimpleTcpStack::get_pip ( )
inlineoverrideprivatevirtual

Get the PIP response value.

Returns
PIP value

Reimplemented from openlcb::SimpleStackBase.

Definition at line 673 of file SimpleStack.hxx.

◆ node()

Node * openlcb::SimpleTcpStack::node ( )
inlineoverridevirtual
Returns
the virtual node pointer of the main virtual node of the stack (as defined by the NodeID argument of the constructor).

Implements openlcb::SimpleStackBase.

Definition at line 656 of file SimpleStack.hxx.

◆ start_node()

void openlcb::SimpleTcpStack::start_node ( )
inlineoverrideprivatevirtual

Hook for clients to initialize the node-specific components.

Implements openlcb::SimpleStackBase.

Definition at line 666 of file SimpleStack.hxx.

Member Data Documentation

◆ node_

DefaultNode openlcb::SimpleTcpStack::node_
private

The actual node.

Definition at line 679 of file SimpleStack.hxx.

◆ PIP_RESPONSE

const auto openlcb::SimpleTcpStack::PIP_RESPONSE
staticprivate
Initial value:
= Defs::EVENT_EXCHANGE | Defs::DATAGRAM |
Defs::MEMORY_CONFIGURATION | Defs::ABBREVIATED_DEFAULT_CDI |
Defs::SIMPLE_NODE_INFORMATION | Defs::CDI

Definition at line 662 of file SimpleStack.hxx.

◆ pipHandler_

ProtocolIdentificationHandler openlcb::SimpleTcpStack::pipHandler_ {&node_, PIP_RESPONSE}
private

Handles PIP requests.

Definition at line 681 of file SimpleStack.hxx.

◆ snipHandler_

SNIPHandler openlcb::SimpleTcpStack::snipHandler_ {iface(), &node_, &infoFlow_}
private

Handles SNIP requests.

Definition at line 683 of file SimpleStack.hxx.


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