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 
54  Callback callback_;
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  {
75  StaticAssert<DataTypeKind(DataType::DataTypeKind) == DataTypeKindMessage>::check();
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
GenericSubscriber< DataType_, DataType_, TransferListener > BaseType
Definition: subscriber.hpp:52
Callback_ Callback
Definition: subscriber.hpp:49
UAVCAN_EXPORT void handleFatalError(const char *msg)
Definition: uc_error.cpp:20
Subscriber(INode &node)
Definition: subscriber.hpp:71
DataType_ DataType
Definition: subscriber.hpp:69
virtual void handleReceivedDataStruct(ReceivedDataStructure< DataType_ > &msg)
Definition: subscriber.hpp:56
int start(const Callback &callback)
Definition: subscriber.hpp:83


uavcan_communicator
Author(s):
autogenerated on Wed Jan 11 2023 03:59:39