void handleGlobalTimeSync(const ReceivedDataStructure<protocol::GlobalTimeSync>& msg) { if (msg.getTransferType() == TransferTypeMessageBroadcast) { processMsg(msg); } else { UAVCAN_TRACE("GlobalTimeSyncSlave", "Invalid transfer type %i", int(msg.getTransferType())); } }
virtual void handleReceivedDataStruct(ReceivedDataStructure<RequestType>& request) { UAVCAN_ASSERT(request.getTransferType() == TransferTypeServiceRequest); ServiceResponseDataStructure<ResponseType> response; if (coerceOrFallback<bool>(callback_, true)) { UAVCAN_ASSERT(response.isResponseEnabled()); // Enabled by default callback_(request, response); } else { handleFatalError("Srv serv clbk"); } if (response.isResponseEnabled()) { publisher_.setPriority(request.getPriority()); // Responding at the same priority. const int res = publisher_.publish(response, TransferTypeServiceResponse, request.getSrcNodeID(), request.getTransferID()); if (res < 0) { UAVCAN_TRACE("ServiceServer", "Response publication failure: %i", res); publisher_.getNode().getDispatcher().getTransferPerfCounter().addError(); response_failure_count_++; } } else { UAVCAN_TRACE("ServiceServer", "Response was suppressed by the application"); } }
ReceivedDataStructureCopy(const ReceivedDataStructure& s) : ts_monotonic(s.getMonotonicTimestamp()), ts_utc(s.getUtcTimestamp()), transfer_type(s.getTransferType()), transfer_id(s.getTransferID()), src_node_id(s.getSrcNodeID()), iface_index(s.getIfaceIndex()), msg(s) { }