|
Open Model Railroad Network (OpenMRN)
|
CAN-based stack with TrainNode. More...
#include <SimpleStack.hxx>
Public Member Functions | |
| SimpleTrainCanStack (openlcb::TrainImpl *train, const char *fdi_xml, NodeID node_id) | |
| Creates a train node OpenLCB stack. | |
| Node * | node () override |
Public Member Functions inherited from openlcb::SimpleCanStackBase | |
| SimpleCanStackBase (const openlcb::NodeID node_id) | |
| CanHubFlow * | can_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. | |
| GcTcpHub * | get_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. | |
| HubFlow * | gridconnect_hub () |
| Returns the hub to be used for gridconnect-format CANbus. | |
| IfCan * | if_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 () |
| Service * | service () |
| If * | iface () |
| DatagramService * | dg_service () |
| SimpleInfoFlow * | info_flow () |
| Accessor for clients that have their custom SNIP-like handler. | |
| MemoryConfigHandler * | memory_config_handler () |
| ConfigUpdateService * | config_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_EVENT > | isTrainEventHandler {&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< PhysicalIf > | ifaceHolder_ |
| Pointer to the polymorphic implementation of the OpenLCB If. | |
| If * | iface_ {ifaceHolder_->iface()} |
| The OpenLCB interface object. Owned by ifaceHolder_;. | |
| DatagramService * | datagramService_ {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< HubFlow > | gcHub_ |
| All packets are forwarded to this hub in gridconnect format, if needed. | |
| std::unique_ptr< GCAdapterBase > | gcAdapter_ |
| Bridge between canHub_ and gcHub_. Lazily initialized. | |
| std::vector< std::unique_ptr< Destructable > > | additionalComponents_ |
| Stores and keeps ownership of optional components. | |
CAN-based stack with TrainNode.
Definition at line 687 of file SimpleStack.hxx.
| openlcb::SimpleTrainCanStack::SimpleTrainCanStack | ( | openlcb::TrainImpl * | train, |
| const char * | fdi_xml, | ||
| NodeID | node_id | ||
| ) |
Creates a train node OpenLCB stack.
| train | the implementation of the train |
| fdi_xml | XML file to export as the FDI for train functions |
Definition at line 193 of file SimpleStack.cxx.
|
inlineoverrideprivatevirtual |
Get the PIP response value.
Reimplemented from openlcb::SimpleStackBase.
Definition at line 715 of file SimpleStack.hxx.
|
inlineoverridevirtual |
Implements openlcb::SimpleStackBase.
Definition at line 699 of file SimpleStack.hxx.
|
overrideprivatevirtual |
Hook for clients to initialize the node-specific components.
Implements openlcb::SimpleStackBase.
Definition at line 204 of file SimpleStack.cxx.
|
private |
Definition at line 725 of file SimpleStack.hxx.
|
private |
Definition at line 724 of file SimpleStack.hxx.
|
staticprivate |
Definition at line 705 of file SimpleStack.hxx.
|
private |
Handles PIP requests.
Definition at line 727 of file SimpleStack.hxx.
|
private |
Handles SNIP requests.
Definition at line 729 of file SimpleStack.hxx.
|
private |
Definition at line 720 of file SimpleStack.hxx.
|
private |
The actual node.
Definition at line 722 of file SimpleStack.hxx.