5 #ifndef UAVCAN_NODE_GENERIC_SUBSCRIBER_HPP_INCLUDED
6 #define UAVCAN_NODE_GENERIC_SUBSCRIBER_HPP_INCLUDED
38 template <
typename DataType_>
43 template <
typename Ret, Ret(IncomingTransfer::*Fun) () const>
50 return (_transfer_->*Fun)();
59 : _transfer_(arg_transfer)
69 return safeget<MonotonicTime, &IncomingTransfer::getMonotonicTimestamp>();
84 template <
typename Stream,
typename DataType>
90 s << static_cast<const DataType&>(rds);
127 template <
typename DataSpec,
typename DataStruct,
typename TransferListenerType>
147 TransferListenerType(obj.node_.getDispatcher().getTransferPerfCounter(),
182 UAVCAN_TRACE(
"GenericSubscriber",
"Start as message listener; dtname=%s", DataSpec::getDataTypeFullName());
188 UAVCAN_TRACE(
"GenericSubscriber",
"Start as service request listener; dtname=%s",
189 DataSpec::getDataTypeFullName());
195 UAVCAN_TRACE(
"GenericSubscriber",
"Start as service response listener; dtname=%s",
196 DataSpec::getDataTypeFullName());
206 forwarder_->allowAnonymousTransfers();
215 UAVCAN_TRACE(
"GenericSubscriber",
"Stop; dtname=%s", DataSpec::getDataTypeFullName());
227 template <
typename DataSpec,
typename DataStruct,
typename TransferListenerType>
240 UAVCAN_TRACE(
"GenericSubscriber",
"Type [%s] is not registered", DataSpec::getDataTypeFullName());
241 return -ErrUnknownDataType;
246 forwarder_.template construct<SelfType&, const DataTypeDescriptor&, uint16_t, IPoolAllocator&>
252 template <
typename DataSpec,
typename DataStruct,
typename TransferListenerType>
255 ReceivedDataStructureSpec rx_struct(&transfer);
263 const int decode_res = DataStruct::decode(rx_struct, codec);
270 UAVCAN_TRACE(
"GenericSubscriber",
"Unable to decode the message [%i] [%s]",
271 decode_res, DataSpec::getDataTypeFullName());
280 handleReceivedDataStruct(rx_struct);
283 template <
typename DataSpec,
typename DataStruct,
typename TransferListenerType>
287 const int res = checkInit();
290 UAVCAN_TRACE(
"GenericSubscriber",
"Initialization failure [%s]", DataSpec::getDataTypeFullName());
299 #endif // UAVCAN_NODE_GENERIC_SUBSCRIBER_HPP_INCLUDED