Go to the documentation of this file.
5 #ifndef UAVCAN_NODE_GENERIC_PUBLISHER_HPP_INCLUDED
6 #define UAVCAN_NODE_GENERIC_PUBLISHER_HPP_INCLUDED
30 :
sender_(
node.getDispatcher(), max_transfer_interval)
84 template <
typename DataSpec,
typename DataStruct>
92 typedef typename Select<DataStruct::MaxBitLen == 0,
100 int genericPublish(
const DataStruct& message,
TransferType transfer_type,
NodeID dst_node_id,
128 setPriority(priority);
135 return genericPublish(message, transfer_type, dst_node_id,
UAVCAN_NULLPTR, blocking_deadline);
141 return genericPublish(message, transfer_type, dst_node_id, &tid, blocking_deadline);
147 template <
typename DataSpec,
typename DataStruct>
158 template <
typename DataSpec,
typename DataStruct>
163 const int encode_res = DataStruct::encode(message, codec);
167 return -ErrInvalidMarshalData;
172 template <
typename DataSpec,
typename DataStruct>
177 const int res = checkInit();
185 const int encode_res = doEncode(message, buffer);
196 #endif // UAVCAN_NODE_GENERIC_PUBLISHER_HPP_INCLUDED
int doInit(DataTypeKind dtkind, const char *dtname)
Select< DataStruct::MaxBitLen==0, ZeroTransferBuffer, StaticTransferBuffer< BitLenToByteLen< DataStruct::MaxBitLen >::Result > >::Result Buffer
void setPriority(TransferPriority prio)
MonotonicTime getTxDeadline() const
int publish(const DataStruct &message, TransferType transfer_type, NodeID dst_node_id, TransferID tid, MonotonicTime blocking_deadline=MonotonicTime())
void setTxTimeout(MonotonicDuration tx_timeout)
static MonotonicDuration fromMSec(int64_t ms)
int init(TransferPriority priority)
const TransferSender & getTransferSender() const
int genericPublish(const StaticTransferBufferImpl &buffer, TransferType transfer_type, NodeID dst_node_id, TransferID *tid, MonotonicTime blocking_deadline)
int publish(const DataStruct &message, TransferType transfer_type, NodeID dst_node_id, MonotonicTime blocking_deadline=MonotonicTime())
void allowAnonymousTransfers()
TransferPriority getPriority() const
struct UAVCAN_EXPORT Select
TransferSender & getTransferSender()
int genericPublish(const DataStruct &message, TransferType transfer_type, NodeID dst_node_id, TransferID *tid, MonotonicTime blocking_deadline)
void allowAnonymousTransfers()
GenericPublisher(INode &node, MonotonicDuration tx_timeout, MonotonicDuration max_transfer_interval=TransferSender::getDefaultMaxTransferInterval())
TransferPriority getPriority() const
int doEncode(const DataStruct &message, ITransferBuffer &buffer) const
GenericPublisherBase(INode &node, MonotonicDuration tx_timeout, MonotonicDuration max_transfer_interval)
static MonotonicDuration getMinTxTimeout()
static MonotonicDuration getMaxTxTimeout()
static MonotonicDuration getDefaultMaxTransferInterval()
MonotonicDuration getTxTimeout() const
void setPriority(const TransferPriority prio)
static MonotonicDuration fromUSec(int64_t us)
MonotonicDuration tx_timeout_