libuavcan/libuavcan/test/protocol/helpers.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #pragma once
6 
8 #include <uavcan/node/timer.hpp>
11 #include "../node/test_node.hpp"
12 
13 
14 template <typename DataType>
16 {
17  void handler(const DataType& msg)
18  {
19  this->msg.reset(new DataType(msg));
20  }
21 
22 public:
23  std::unique_ptr<DataType> msg;
24 
26  void (SubscriptionCollector::*)(const DataType&)> Binder;
27 
29 };
30 
31 
32 template <typename DataType>
34 {
37 
40 
42  : subscriber(node)
43  { }
44 
45  int start() { return subscriber.start(collector.bind()); }
46 };
47 
48 
49 template <typename DataType>
51 {
53 
54 public:
55  class Result
56  {
59  typename DataType::Response response_;
60 
61  public:
62  Result(typename ServiceCallResult::Status arg_status,
63  uavcan::ServiceCallID arg_call_id,
64  const typename DataType::Response& arg_response)
65  : status_(arg_status)
66  , call_id_(arg_call_id)
67  , response_(arg_response)
68  { }
69 
70  bool isSuccessful() const { return status_ == ServiceCallResult::Success; }
71 
72  typename ServiceCallResult::Status getStatus() const { return status_; }
73 
75 
76  const typename DataType::Response& getResponse() const { return response_; }
77  typename DataType::Response& getResponse() { return response_; }
78  };
79 
80 private:
82  {
83  std::cout << tmp_result << std::endl;
84  result.reset(new Result(tmp_result.getStatus(), tmp_result.getCallID(), tmp_result.getResponse()));
85  }
86 
87 public:
88  std::unique_ptr<Result> result;
89 
93 
95 };
96 
97 
98 template <typename DataType>
100 {
103 
106 
108  : client(node)
109  { }
110 
111  int call(uavcan::NodeID node_id, const typename DataType::Request& request)
112  {
114  return client.call(node_id, request);
115  }
116 };
117 
118 
120 {
122 
124  : uavcan::TimerBase(running_node)
126  { }
127 
129  {
131  }
132 };
133 
134 template <typename CanDriver, typename MessageType>
135 static inline void emulateSingleFrameBroadcastTransfer(CanDriver& can, uavcan::NodeID node_id,
136  const MessageType& message, uavcan::TransferID tid)
137 {
139  uavcan::BitStream bitstream(buffer);
140  uavcan::ScalarCodec codec(bitstream);
141 
142  // Manual message publication
143  ASSERT_LT(0, MessageType::encode(message, codec));
144  ASSERT_GE(8, buffer.getMaxWritePos());
145 
146  // DataTypeID data_type_id, TransferType transfer_type, NodeID src_node_id, NodeID dst_node_id,
147  // uint_fast8_t frame_index, TransferID transfer_id, bool last_frame
148  uavcan::Frame frame(MessageType::DefaultDataTypeID, uavcan::TransferTypeMessageBroadcast,
149  node_id, uavcan::NodeID::Broadcast, tid);
150  frame.setStartOfTransfer(true);
151  frame.setEndOfTransfer(true);
152 
153  ASSERT_EQ(buffer.getMaxWritePos(), frame.setPayload(buffer.getRawPtr(), buffer.getMaxWritePos()));
154 
155  uavcan::CanFrame can_frame;
156  ASSERT_TRUE(frame.compile(can_frame));
157 
158  can.pushRxToAllIfaces(can_frame);
159 }
emulateSingleFrameBroadcastTransfer
static void emulateSingleFrameBroadcastTransfer(CanDriver &can, uavcan::NodeID node_id, const MessageType &message, uavcan::TransferID tid)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:135
uavcan::TimerBase
Definition: timer.hpp:46
subscriber.hpp
uavcan::BitStream
Definition: bit_stream.hpp:31
ServiceCallResultCollector::handler
void handler(const uavcan::ServiceCallResult< DataType > &tmp_result)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:81
uavcan::Noncopyable
Definition: templates.hpp:46
ServiceCallResultCollector::Result::call_id_
uavcan::ServiceCallID call_id_
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:58
SubscriptionCollector::handler
void handler(const DataType &msg)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:17
SubscriberWithCollector::Collector
SubscriptionCollector< DataType > Collector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:35
ServiceCallResultCollector::Result::Result
Result(typename ServiceCallResult::Status arg_status, uavcan::ServiceCallID arg_call_id, const typename DataType::Response &arg_response)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:62
uavcan::Subscriber< DataType, typename Collector::Binder >
ServiceClientWithCollector::client
ServiceClient client
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:105
uavcan::ServiceCallResult::getCallID
ServiceCallID getCallID() const
Definition: service_client.hpp:83
SubscriberWithCollector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:33
ServiceCallResultCollector::Result::getResponse
DataType::Response & getResponse()
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:77
BackgroundSpinner::BackgroundSpinner
BackgroundSpinner(uavcan::INode &spinning_node, uavcan::INode &running_node)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:123
uavcan::NodeID
Definition: transfer.hpp:112
uavcan::DurationBase< MonotonicDuration >::fromMSec
static MonotonicDuration fromMSec(int64_t ms)
Definition: time.hpp:41
service_client.hpp
uavcan::CanFrame
Definition: libuavcan/libuavcan/include/uavcan/driver/can.hpp:24
ServiceClientWithCollector::call
int call(uavcan::NodeID node_id, const typename DataType::Request &request)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:111
ServiceCallResultCollector::ServiceCallResult
uavcan::ServiceCallResult< DataType > ServiceCallResult
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:52
SubscriberWithCollector::start
int start()
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:45
uavcan::Subscriber::start
int start(const Callback &callback)
Definition: subscriber.hpp:83
SubscriptionCollector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:15
ServiceClientWithCollector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:99
uavcan::INode::spin
int spin(MonotonicTime deadline)
Definition: abstract_node.hpp:63
ServiceCallResultCollector::result
std::unique_ptr< Result > result
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:88
timer.hpp
uavcan::ServiceCallResult
Definition: service_client.hpp:54
SubscriberWithCollector::Subscriber
uavcan::Subscriber< DataType, typename Collector::Binder > Subscriber
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:36
BackgroundSpinner::spinning_node
uavcan::INode & spinning_node
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:121
uavcan::TransferID
Definition: transfer.hpp:71
uavcan::TransferTypeMessageBroadcast
@ TransferTypeMessageBroadcast
Definition: transfer.hpp:22
uavcan::ServiceCallResult::getStatus
Status getStatus() const
Definition: service_client.hpp:81
SubscriberWithCollector::subscriber
Subscriber subscriber
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:39
uavcan::ServiceCallResult::Success
@ Success
Definition: service_client.hpp:59
ServiceCallResultCollector::Result::status_
const ServiceCallResult::Status status_
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:57
SubscriberWithCollector::SubscriberWithCollector
SubscriberWithCollector(uavcan::INode &node)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:41
uavcan::StaticTransferBufferImpl::getMaxWritePos
uint16_t getMaxWritePos() const
Definition: transfer_buffer.hpp:45
SubscriberWithCollector::collector
Collector collector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:38
uavcan::StaticTransferBuffer
Definition: transfer_buffer.hpp:50
uavcan::NodeID::Broadcast
static const NodeID Broadcast
Definition: transfer.hpp:122
method_binder.hpp
uavcan::INode
Definition: abstract_node.hpp:19
ServiceCallResultCollector::Result::getCallID
uavcan::ServiceCallID getCallID() const
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:74
uavcan::ServiceClient< DataType, typename Collector::Binder >
ServiceCallResultCollector::Result::getResponse
const DataType::Response & getResponse() const
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:76
uavcan::ServiceCallResult::getResponse
const ResponseFieldType & getResponse() const
Definition: service_client.hpp:88
SubscriptionCollector::bind
Binder bind()
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:28
ServiceClientWithCollector::ServiceClient
uavcan::ServiceClient< DataType, typename Collector::Binder > ServiceClient
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:102
frame
uavcan::CanFrame frame
Definition: can.cpp:78
ServiceCallResultCollector::Result
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:55
ServiceCallResultCollector::Result::getStatus
ServiceCallResult::Status getStatus() const
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:72
SubscriptionCollector::Binder
uavcan::MethodBinder< SubscriptionCollector *, void(SubscriptionCollector::*)(const DataType &)> Binder
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:26
uavcan::MethodBinder
Definition: method_binder.hpp:20
ServiceCallResultCollector::Result::isSuccessful
bool isSuccessful() const
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:70
uavcan::Frame
Definition: frame.hpp:17
uavcan::StaticTransferBufferImpl::getRawPtr
uint8_t * getRawPtr()
Definition: transfer_buffer.hpp:42
ServiceCallResultCollector::Result::response_
DataType::Response response_
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:59
SubscriptionCollector::msg
std::unique_ptr< DataType > msg
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:23
ServiceCallResultCollector::Binder
uavcan::MethodBinder< ServiceCallResultCollector *, void(ServiceCallResultCollector::*)(const uavcan::ServiceCallResult< DataType > &)> Binder
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:92
uavcan::ServiceClient::setCallback
void setCallback(const Callback &cb)
Definition: service_client.hpp:358
uavcan::ServiceCallID
Definition: service_client.hpp:27
uavcan::TimerBase::TimerBase
TimerBase(INode &node)
Definition: timer.hpp:58
ServiceCallResultCollector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:50
ServiceClientWithCollector::ServiceClientWithCollector
ServiceClientWithCollector(uavcan::INode &node)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:107
pyuavcan_v0.introspect.node
node
Definition: introspect.py:398
uavcan
Definition: libuavcan/libuavcan/include/uavcan/build_config.hpp:204
uavcan::ServiceClient::call
int call(NodeID server_node_id, const RequestType &request)
Definition: service_client.hpp:488
uavcan::ServiceCallResult::Status
Status
Definition: service_client.hpp:59
BackgroundSpinner
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:119
uavcan::ScalarCodec
Definition: scalar_codec.hpp:20
BackgroundSpinner::handleTimerEvent
virtual void handleTimerEvent(const uavcan::TimerEvent &)
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:128
ServiceClientWithCollector::Collector
ServiceCallResultCollector< DataType > Collector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:101
ServiceCallResultCollector::bind
Binder bind()
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:94
uavcan::TimerEvent
Definition: timer.hpp:32
ServiceClientWithCollector::collector
Collector collector
Definition: libuavcan/libuavcan/test/protocol/helpers.hpp:104


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