void Dispatcher::handleLoopbackFrame(const CanRxFrame& can_frame) { RxFrame frame; if (!frame.parse(can_frame)) { UAVCAN_TRACE("Dispatcher", "Invalid loopback CAN frame: %s", can_frame.toString().c_str()); UAVCAN_ASSERT(0); // No way! return; } UAVCAN_ASSERT(frame.getSrcNodeID() == getNodeID()); loopback_listeners_.invokeListeners(frame); }
/* * Dispatcher */ void Dispatcher::handleFrame(const CanRxFrame& can_frame) { RxFrame frame; if (!frame.parse(can_frame)) { // This is not counted as a transport error UAVCAN_TRACE("Dispatcher", "Invalid CAN frame received: %s", can_frame.toString().c_str()); return; } if ((frame.getDstNodeID() != NodeID::Broadcast) && (frame.getDstNodeID() != getNodeID())) { return; } switch (frame.getTransferType()) { case TransferTypeMessageBroadcast: case TransferTypeMessageUnicast: { lmsg_.handleFrame(frame); break; } case TransferTypeServiceRequest: { lsrv_req_.handleFrame(frame); break; } case TransferTypeServiceResponse: { lsrv_resp_.handleFrame(frame); break; } default: { UAVCAN_ASSERT(0); break; } } }