Go to the documentation of this file.
96 list_.remove(listener);
152 if (!
frame.parse(can_frame))
155 UAVCAN_TRACE(
"Dispatcher",
"Invalid CAN frame received: %s", can_frame.toString().c_str());
165 switch (
frame.getTransferType())
202 if (!
frame.parse(can_frame))
204 UAVCAN_TRACE(
"Dispatcher",
"Invalid loopback CAN frame: %s", can_frame.toString().c_str());
223 int num_frames_processed = 0;
241 num_frames_processed++;
249 return num_frames_processed;
254 int num_frames_processed = 0;
273 num_frames_processed++;
284 return num_frames_processed;
297 if (!
frame.compile(can_frame))
299 UAVCAN_TRACE(
"Dispatcher",
"Unable to send: frame is malformed: %s",
frame.toString().c_str());
303 return canio_.
send(can_frame, tx_deadline, blocking_deadline, iface_mask, flags);
bool registerServiceResponseListener(TransferListener *listener)
LinkedListRoot< LoopbackFrameListenerBase > listeners_
const DataTypeDescriptor & getDataTypeDescriptor() const
ListenerRegistry lsrv_resp_
void cleanup(MonotonicTime ts)
void add(LoopbackFrameListenerBase *listener)
bool registerMessageListener(TransferListener *listener)
@ TransferTypeServiceResponse
bool setNodeID(NodeID nid)
void handleFrame(const CanRxFrame &can_frame)
LinkedListRoot< TransferListener > list_
static const CanIOFlags CanIOFlagLoopback
#define UAVCAN_TRACE(...)
@ TransferTypeServiceRequest
void handleFrame(const RxFrame &frame)
void cleanup(MonotonicTime ts)
LoopbackFrameListenerRegistry loopback_listeners_
IRxFrameListener * rx_listener_
void handleLoopbackFrame(const CanRxFrame &can_frame)
int spin(MonotonicTime deadline)
static const uavcan::int16_t ErrLogic
Internal logic error.
bool hasPublisher(DataTypeID dtid) const
@ TransferTypeMessageBroadcast
int send(const CanFrame &frame, MonotonicTime tx_deadline, MonotonicTime blocking_deadline, uint8_t iface_mask, CanIOFlags flags)
void cleanup(MonotonicTime ts)
void remove(TransferListener *listener)
bool self_node_id_is_set_
virtual void handleLoopbackFrame(const RxFrame &frame)=0
bool doesExist(const LoopbackFrameListenerBase *listener) const
bool hasSubscriber(DataTypeID dtid) const
bool exists(DataTypeID dtid, TransferType tt) const
void unregisterServiceRequestListener(TransferListener *listener)
static const NodeID Broadcast
ListenerRegistry lsrv_req_
int receive(CanRxFrame &out_frame, MonotonicTime blocking_deadline, CanIOFlags &out_flags)
bool add(TransferListener *listener, Mode mode)
virtual void handleRxFrame(const CanRxFrame &frame, CanIOFlags flags)=0
void notifyRxFrameListener(const CanRxFrame &can_frame, CanIOFlags flags)
OutgoingTransferRegistry outgoing_transfer_reg_
int send(const Frame &frame, MonotonicTime tx_deadline, MonotonicTime blocking_deadline, CanIOFlags flags, uint8_t iface_mask)
void invokeListeners(RxFrame &frame)
virtual void handleFrame(const RxFrame &frame)
bool registerServiceRequestListener(TransferListener *listener)
LoopbackFrameListenerRegistry & getLoopbackFrameListenerRegistry()
bool exists(DataTypeID dtid) const
T * getNextListNode() const
void remove(LoopbackFrameListenerBase *listener)
bool hasServer(DataTypeID dtid) const
void cleanup(MonotonicTime ts)
virtual MonotonicTime getMonotonic() const =0
void unregisterServiceResponseListener(TransferListener *listener)
void unregisterMessageListener(TransferListener *listener)
DataTypeKind getKind() const