subscriber.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #ifndef UAVCAN_NODE_SUBSCRIBER_HPP_INCLUDED
6 #define UAVCAN_NODE_SUBSCRIBER_HPP_INCLUDED
7 
8 #include <cassert>
11 
12 #if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11)
13 # error UAVCAN_CPP_VERSION
14 #endif
15 
16 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11
17 # include <functional>
18 #endif
19 
20 namespace uavcan
21 {
38 template <typename DataType_,
39 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11
40  typename Callback_ = std::function<void (const ReceivedDataStructure<DataType_>&)>
41 #else
42  typename Callback_ = void (*)(const ReceivedDataStructure<DataType_>&)
43 #endif
44  >
47 {
48 public:
49  typedef Callback_ Callback;
50 
51 private:
53 
55 
57  {
58  if (coerceOrFallback<bool>(callback_, true))
59  {
60  callback_(msg);
61  }
62  else
63  {
64  handleFatalError("Sub clbk");
65  }
66  }
67 
68 public:
69  typedef DataType_ DataType;
70 
71  explicit Subscriber(INode& node)
72  : BaseType(node)
73  , callback_()
74  {
76  }
77 
83  int start(const Callback& callback)
84  {
85  stop();
86 
87  if (!coerceOrFallback<bool>(callback, true))
88  {
89  UAVCAN_TRACE("Subscriber", "Invalid callback");
90  return -ErrInvalidParam;
91  }
92  callback_ = callback;
93 
94  return BaseType::startAsMessageListener();
95  }
96 
97  using BaseType::allowAnonymousTransfers;
98  using BaseType::stop;
99  using BaseType::getFailureCount;
100 };
101 
102 }
103 
104 #endif // UAVCAN_NODE_SUBSCRIBER_HPP_INCLUDED
uavcan::Subscriber
Definition: subscriber.hpp:45
uavcan::Subscriber::callback_
Callback callback_
Definition: subscriber.hpp:54
uavcan::Subscriber::Callback
Callback_ Callback
Definition: subscriber.hpp:49
generic_subscriber.hpp
uavcan::ReceivedDataStructure
Definition: generic_subscriber.hpp:39
UAVCAN_TRACE
#define UAVCAN_TRACE(...)
Definition: libuavcan/libuavcan/include/uavcan/debug.hpp:31
uavcan::StaticAssert
struct UAVCAN_EXPORT StaticAssert
Definition: templates.hpp:29
uavcan::Subscriber::start
int start(const Callback &callback)
Definition: subscriber.hpp:83
uavcan::Subscriber::BaseType
GenericSubscriber< DataType_, DataType_, TransferListener > BaseType
Definition: subscriber.hpp:52
uavcan::Subscriber::Subscriber
Subscriber(INode &node)
Definition: subscriber.hpp:71
UAVCAN_EXPORT
#define UAVCAN_EXPORT
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:108
uavcan::DataTypeKind
DataTypeKind
Definition: data_type.hpp:19
uavcan::INode
Definition: abstract_node.hpp:19
build_config.hpp
uavcan::MethodBinder
Definition: method_binder.hpp:20
uavcan::Subscriber::handleReceivedDataStruct
virtual void handleReceivedDataStruct(ReceivedDataStructure< DataType_ > &msg)
Definition: subscriber.hpp:56
uavcan::handleFatalError
UAVCAN_EXPORT void handleFatalError(const char *msg)
Definition: uc_error.cpp:20
uavcan::GenericSubscriber< DataType_, DataType_, TransferListener >
uavcan::Subscriber::DataType
DataType_ DataType
Definition: subscriber.hpp:69
pyuavcan_v0.introspect.node
node
Definition: introspect.py:398
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
uavcan::DataTypeKindMessage
@ DataTypeKindMessage
Definition: data_type.hpp:22


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03