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

CAN-based stack with TrainNode. More...

#include <SimpleStack.hxx>

Inheritance diagram for openlcb::SimpleTrainCanStack:
openlcb::SimpleCanStackBase openlcb::SimpleStackBase

Public Member Functions

 SimpleTrainCanStack (openlcb::TrainImpl *train, const char *fdi_xml, NodeID node_id)
 Creates a train node OpenLCB stack.
 
Nodenode () override
 
- Public Member Functions inherited from openlcb::SimpleCanStackBase
 SimpleCanStackBase (const openlcb::NodeID node_id)
 
CanHubFlowcan_hub ()
 
void add_can_port_blocking (const char *device)
 Adds a CAN bus port with synchronous driver API.
 
void add_gridconnect_port (const char *path, Notifiable *on_exit=nullptr)
 Adds a gridconnect port to the CAN bus.
 
void start_tcp_hub_server (int port=12021)
 Starts a TCP server on the specified port in listening mode.
 
GcTcpHubget_tcp_hub_server ()
 Retrieve the instance of the GridConnect Hub server, which was started with start_tcp_hub_server().
 
void shutdown_tcp_hub_server ()
 Shuts down the GridConnect Hub server, if previously started.
 
void connect_tcp_gridconnect_hub (const char *host, int port)
 Connects to a CAN hub using TCP with the gridconnect protocol.
 
void print_all_packets (bool timestamped=false)
 Causes all CAN packets to be printed to stdout.
 
HubFlowgridconnect_hub ()
 Returns the hub to be used for gridconnect-format CANbus.
 
IfCanif_can ()
 
void add_stream_support ()
 Enables stream transport in the interface and in the memory config protocol.
 
- 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

TrainService tractionService_ {iface()}
 
TrainNodeWithId trainNode_
 The actual node.
 
FixedEventProducer< openlcb::TractionDefs::IS_TRAIN_EVENTisTrainEventHandler {&trainNode_}
 
ReadOnlyMemoryBlock fdiBlock_
 
ProtocolIdentificationHandler pipHandler_ {&trainNode_, PIP_RESPONSE}
 Handles PIP requests.
 
SNIPHandler snipHandler_ {iface(), &trainNode_, &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::SimpleCanStackBase
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

CAN-based stack with TrainNode.

Definition at line 687 of file SimpleStack.hxx.

Constructor & Destructor Documentation

◆ SimpleTrainCanStack()

openlcb::SimpleTrainCanStack::SimpleTrainCanStack ( openlcb::TrainImpl train,
const char *  fdi_xml,
NodeID  node_id 
)

Creates a train node OpenLCB stack.

Parameters
trainthe implementation of the train
fdi_xmlXML file to export as the FDI for train functions

Definition at line 193 of file SimpleStack.cxx.

Member Function Documentation

◆ get_pip()

uint64_t openlcb::SimpleTrainCanStack::get_pip ( )
inlineoverrideprivatevirtual

Get the PIP response value.

Returns
PIP value

Reimplemented from openlcb::SimpleStackBase.

Definition at line 715 of file SimpleStack.hxx.

◆ node()

Node * openlcb::SimpleTrainCanStack::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 699 of file SimpleStack.hxx.

◆ start_node()

void openlcb::SimpleTrainCanStack::start_node ( )
overrideprivatevirtual

Hook for clients to initialize the node-specific components.

Implements openlcb::SimpleStackBase.

Definition at line 204 of file SimpleStack.cxx.

Member Data Documentation

◆ fdiBlock_

ReadOnlyMemoryBlock openlcb::SimpleTrainCanStack::fdiBlock_
private

Definition at line 725 of file SimpleStack.hxx.

◆ isTrainEventHandler

FixedEventProducer<openlcb::TractionDefs::IS_TRAIN_EVENT> openlcb::SimpleTrainCanStack::isTrainEventHandler {&trainNode_}
private

Definition at line 724 of file SimpleStack.hxx.

◆ PIP_RESPONSE

const auto openlcb::SimpleTrainCanStack::PIP_RESPONSE
staticprivate
Initial value:
= openlcb::Defs::SIMPLE_PROTOCOL_SUBSET |
openlcb::Defs::DATAGRAM | openlcb::Defs::MEMORY_CONFIGURATION |
openlcb::Defs::EVENT_EXCHANGE | openlcb::Defs::SIMPLE_NODE_INFORMATION |
openlcb::Defs::TRACTION_CONTROL | openlcb::Defs::TRACTION_FDI |
Defs::ABBREVIATED_DEFAULT_CDI | Defs::CDI

Definition at line 705 of file SimpleStack.hxx.

◆ pipHandler_

ProtocolIdentificationHandler openlcb::SimpleTrainCanStack::pipHandler_ {&trainNode_, PIP_RESPONSE}
private

Handles PIP requests.

Definition at line 727 of file SimpleStack.hxx.

◆ snipHandler_

SNIPHandler openlcb::SimpleTrainCanStack::snipHandler_ {iface(), &trainNode_, &infoFlow_}
private

Handles SNIP requests.

Definition at line 729 of file SimpleStack.hxx.

◆ tractionService_

TrainService openlcb::SimpleTrainCanStack::tractionService_ {iface()}
private

Definition at line 720 of file SimpleStack.hxx.

◆ trainNode_

TrainNodeWithId openlcb::SimpleTrainCanStack::trainNode_
private

The actual node.

Definition at line 722 of file SimpleStack.hxx.


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