void handleGlobalTimeSync(const ReceivedDataStructure<protocol::GlobalTimeSync>& msg)
 {
     if (msg.getTransferType() == TransferTypeMessageBroadcast)
     {
         processMsg(msg);
     }
     else
     {
         UAVCAN_TRACE("GlobalTimeSyncSlave", "Invalid transfer type %i", int(msg.getTransferType()));
     }
 }
Exemple #2
0
    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)
 { }