int Dispatcher::spinOnce() { int num_frames_processed = 0; while (true) { CanIOFlags flags = 0; CanRxFrame frame; const int res = canio_.receive(frame, MonotonicTime(), flags); if (res < 0) { return res; } else if (res > 0) { if (flags & CanIOFlagLoopback) { handleLoopbackFrame(frame); } else { num_frames_processed++; handleFrame(frame); } notifyRxFrameListener(frame, flags); } else { break; // No frames left } } return num_frames_processed; }
int publish(const DataStruct& message, TransferType transfer_type, NodeID dst_node_id, TransferID tid, MonotonicTime blocking_deadline = MonotonicTime()) { return genericPublish(message, transfer_type, dst_node_id, &tid, blocking_deadline); }