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

Consumer event handler for a sequence of bytes represented by a dense block of consecutive event IDs. More...

#include <EventHandlerTemplates.hxx>

Inheritance diagram for openlcb::ByteRangeEventC:
openlcb::SimpleEventHandler openlcb::EventHandler openlcb::ByteRangeEventP

Public Member Functions

 ByteRangeEventC (Node *node, uint64_t event_base, uint8_t *backing_store, unsigned size)
 Creates a new byte range listener.
 
void SendIdentified (WriteHelper *writer, BarrierNotifiable *done)
 Sends out a ConsumerRangeIdentified.
 
virtual void notify_changed (unsigned offset)
 This function is called by the handler when a data value overwrite event arrives.
 
void handle_event_report (const EventRegistryEntry &entry, EventReport *event, BarrierNotifiable *done) override
 Called on incoming EventReport messages.
 
void handle_identify_consumer (const EventRegistryEntry &entry, EventReport *event, BarrierNotifiable *done) override
 Called on another node sending IdentifyConsumer.
 
void handle_identify_global (const EventRegistryEntry &entry, EventReport *event, BarrierNotifiable *done) override
 Called on the need of sending out identification messages.
 
- Public Member Functions inherited from openlcb::SimpleEventHandler
 IGNOREFN (handle_event_report)
 
 IGNOREFN (handle_consumer_identified)
 
 IGNOREFN (handle_consumer_range_identified)
 
 IGNOREFN (handle_producer_identified)
 
 IGNOREFN (handle_producer_range_identified)
 
 IGNOREFN (handle_identify_consumer)
 
 IGNOREFN (handle_identify_producer)
 
- Public Member Functions inherited from openlcb::EventHandler
virtual void handle_consumer_identified (const EventRegistryEntry &registry_entry, EventReport *event, BarrierNotifiable *done)
 Called on another node sending ConsumerIdentified for this event.
 
virtual void handle_consumer_range_identified (const EventRegistryEntry &registry_entry, EventReport *event, BarrierNotifiable *done)
 Called on another node sending ConsumerRangeIdentified.
 
virtual void handle_producer_identified (const EventRegistryEntry &registry_entry, EventReport *event, BarrierNotifiable *done)
 Called on another node sending ProducerIdentified for this event.
 
virtual void handle_producer_range_identified (const EventRegistryEntry &registry_entry, EventReport *event, BarrierNotifiable *done)
 Called on another node sending ProducerRangeIdentified for this event.
 
virtual void handle_identify_producer (const EventRegistryEntry &registry_entry, EventReport *event, BarrierNotifiable *done)=0
 Called on another node sending IdentifyProducer.
 

Protected Member Functions

bool DecodeEventId (uint64_t event_id, uint8_t **data, uint8_t *value)
 takes an event ID and checks if we are responsible for it.
 

Protected Attributes

uint64_t event_base_
 
Nodenode_
 
uint8_t * data_
 
unsigned size_
 

Additional Inherited Members

- Public Types inherited from openlcb::EventHandler
using EventReport = openlcb::EventReport
 
using EventRegistryEntry = openlcb::EventRegistryEntry
 
using EventId = openlcb::EventId
 

Detailed Description

Consumer event handler for a sequence of bytes represented by a dense block of consecutive event IDs.

Each byte has a consecutive block of 256 events.

Definition at line 840 of file EventHandlerTemplates.hxx.

Constructor & Destructor Documentation

◆ ByteRangeEventC()

openlcb::ByteRangeEventC::ByteRangeEventC ( Node node,
uint64_t  event_base,
uint8_t *  backing_store,
unsigned  size 
)

Creates a new byte range listener.

backing store points to memory of at least size bytes. This class will advertise consuming size * 256 events contiguous from event_base. event_base will set byte 0 to value 0, event_base + 1 will set byte 0 to value 1, event_base + 256 will set byte 1 to value zero, event_base + 257 will set byte 1 to value 1, etc.

Definition at line 303 of file EventHandlerTemplates.cxx.

◆ ~ByteRangeEventC()

openlcb::ByteRangeEventC::~ByteRangeEventC ( )
virtual

Definition at line 315 of file EventHandlerTemplates.cxx.

Member Function Documentation

◆ DecodeEventId()

bool openlcb::ByteRangeEventC::DecodeEventId ( uint64_t  event_id,
uint8_t **  data,
uint8_t *  value 
)
protected

takes an event ID and checks if we are responsible for it.

Returns false if it is an uninteresting eventid, returns true and fills *data with the byte pointer and *value with the corresponding value.

Definition at line 341 of file EventHandlerTemplates.cxx.

◆ handle_event_report()

void openlcb::ByteRangeEventC::handle_event_report ( const EventRegistryEntry registry_entry,
EventReport event,
BarrierNotifiable done 
)
overridevirtual

Called on incoming EventReport messages.

Parameters
eventstores information about the incoming message. Filled: src_node, event. Mask is always 1 (filled in). state is not filled in.
registry_entrygives the registry entry for which the current handler is being called.
donemust be notified when the processing is done.

Implements openlcb::EventHandler.

Reimplemented in openlcb::ByteRangeEventP.

Definition at line 320 of file EventHandlerTemplates.cxx.

◆ handle_identify_consumer()

void openlcb::ByteRangeEventC::handle_identify_consumer ( const EventRegistryEntry registry_entry,
EventReport event,
BarrierNotifiable done 
)
overridevirtual

Called on another node sending IdentifyConsumer.

Parameters
eventstores information about the incoming message. Filled: src_node, event, mask=1. Not filled: state.
registry_entrygives the registry entry for which the current handler is being called.
donemust be notified when the processing is done.

Implements openlcb::EventHandler.

Reimplemented in openlcb::ByteRangeEventP.

Definition at line 357 of file EventHandlerTemplates.cxx.

◆ handle_identify_global()

void openlcb::ByteRangeEventC::handle_identify_global ( const EventRegistryEntry registry_entry,
EventReport event,
BarrierNotifiable done 
)
overridevirtual

Called on the need of sending out identification messages.

Parameters
eventis NULL. This happens on startup, or when a global or addressed IdentifyGlobal message arrives. Might have destination node id!
registry_entrygives the registry entry for which the current handler is being called.
donemust be notified when the processing is done.

Implements openlcb::EventHandler.

Reimplemented in openlcb::ByteRangeEventP.

Definition at line 375 of file EventHandlerTemplates.cxx.

◆ notify_changed()

virtual void openlcb::ByteRangeEventC::notify_changed ( unsigned  offset)
inlinevirtual

This function is called by the handler when a data value overwrite event arrives.

Definition at line 858 of file EventHandlerTemplates.hxx.

◆ SendIdentified()

void openlcb::ByteRangeEventC::SendIdentified ( WriteHelper writer,
BarrierNotifiable done 
)

Sends out a ConsumerRangeIdentified.

Definition at line 389 of file EventHandlerTemplates.cxx.

Member Data Documentation

◆ data_

uint8_t* openlcb::ByteRangeEventC::data_
protected

Definition at line 879 of file EventHandlerTemplates.hxx.

◆ event_base_

uint64_t openlcb::ByteRangeEventC::event_base_
protected

Definition at line 877 of file EventHandlerTemplates.hxx.

◆ node_

Node* openlcb::ByteRangeEventC::node_
protected

Definition at line 878 of file EventHandlerTemplates.hxx.

◆ size_

unsigned openlcb::ByteRangeEventC::size_
protected

Definition at line 880 of file EventHandlerTemplates.hxx.


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